diff --git a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java index a7579d2..a950e13 100644 --- a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java +++ b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceService.java @@ -2,8 +2,14 @@ package com.huaheng.pc.config.shipmentPreference.service; import com.baomidou.mybatisplus.extension.service.IService; import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference; +import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; + +import java.util.List; public interface ShipmentPreferenceService extends IService<ShipmentPreference>{ + //查看出库此操作是否符合出库首选项的出库流程 + List<ShipmentHeader> checkShipmentProcess(String ids, Integer code); + } diff --git a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java index 2f61315..e53547a 100644 --- a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java +++ b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java @@ -1,11 +1,87 @@ package com.huaheng.pc.config.shipmentPreference.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.support.Convert; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference; import com.huaheng.pc.config.shipmentPreference.mapper.ShipmentPreferenceMapper; +import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail; +import com.huaheng.pc.config.statusFlow.domain.StatusFlowHeader; +import com.huaheng.pc.config.statusFlow.service.StatusFlowDetailService; +import com.huaheng.pc.config.statusFlow.service.StatusFlowHeaderService; +import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; +import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service("shipmentPreference") public class ShipmentPreferenceServiceImpl extends ServiceImpl<ShipmentPreferenceMapper, ShipmentPreference> implements ShipmentPreferenceService { + @Autowired + private ShipmentPreferenceService shipmentPreferenceService; + @Autowired + private StatusFlowHeaderService statusFlowHeaderService; + @Autowired + private StatusFlowDetailService statusFlowDetailService; + @Autowired + private ShipmentHeaderService shipmentHeaderService; + + + /** + * 1、找出出库首选项 + * 2、查看出库首选项的出库流程 + * 3、找到该状态流的出库流程明细 + * 4、判断单据是否按出库流程操作 + * + * @param ids 出库单id + * @param code 状态流 + * @return + */ + @Override + public List<ShipmentHeader> checkShipmentProcess(String ids, Integer code) { + //查找出库首选项 + ShipmentPreference shipmentPreference = shipmentPreferenceService.list().get(0); + if(shipmentPreference == null){ + throw new ServiceException("系统没有设置出库首选"); + } + if(StringUtils.isEmpty(shipmentPreference.getShippingFlow())){ + throw new ServiceException("出库首选没有绑定出库流程"); + } + + //查看出库流程 + LambdaQueryWrapper<StatusFlowHeader> statusFlowHeaderLam = Wrappers.lambdaQuery(); + statusFlowHeaderLam.eq(StatusFlowHeader::getCode,shipmentPreference.getShippingFlow()) + .eq(StatusFlowHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()); + StatusFlowHeader statusFlowHeader = statusFlowHeaderService.getOne(statusFlowHeaderLam); + if(statusFlowHeader == null){ + throw new ServiceException("出库首选绑定的出库流程不在系统中"); + } + //查看流程明细 + LambdaQueryWrapper<StatusFlowDetail> statusFlowDetailLamb = Wrappers.lambdaQuery(); + statusFlowDetailLamb.eq(StatusFlowDetail::getHeaderId,statusFlowHeader.getId()) + .eq(StatusFlowDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()) + .eq(StatusFlowDetail::getFlowCode,code.toString()); + StatusFlowDetail statusFlowDetail = statusFlowDetailService.getOne(statusFlowDetailLamb); + + List<ShipmentHeader> shipmentHeaderList = new ArrayList<>(); + if(statusFlowDetail != null && statusFlowDetail.getNessary() == 1){ + for (Integer id : Convert.toIntArray(ids)) + { + //判断单据是否按出库流程操作 + ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id); + if(shipmentHeader == null || shipmentHeader.getFirstStatus()<code){ + throw new ServiceException("单据状态不对,此操作不符合出库流程,请按照出库流程出库"); + } + shipmentHeaderList.add(shipmentHeader); + } + } + return shipmentHeaderList; + } } diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java index 6874187..1651e75 100644 --- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java +++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java @@ -16,7 +16,9 @@ import com.huaheng.framework.web.page.TableDataInfo; import com.huaheng.framework.web.page.TableSupport; import com.huaheng.pc.inventory.adjustDetail.domain.AdjustDetail; import com.huaheng.pc.inventory.adjustDetail.service.AdjustDetailService; +import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader; import com.huaheng.pc.inventory.adjustHeader.service.AdjustHeaderService; +import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; @@ -117,11 +119,59 @@ public class adjustDetailController extends BaseController { for (Integer id : integers) { AdjustDetail adjustDetailEdit = adjustDetailService.getById(id); + //单据先审批 + if(StringUtils.isEmpty(adjustDetailEdit.getAgreeBy()) || adjustDetailEdit.getStatus() < 1 ){ + return AjaxResult.error("单据未审批不允许调整"); + } adjustDetailService.updateAdjustDetail(adjustDetailEdit); } return AjaxResult.success("调整下发成功!"); } + /** + * 调整审批 + * @param ids + * @return + */ + @Log(title = "库存-调整单", operating = "调整审批", action = BusinessType.OTHER) + @PostMapping("/adjustAgree") + @ResponseBody + public AjaxResult adjustAgree (String ids){ + + if(ids == null){ + throw new SecurityException("ID不能为空!"); + } + Integer[] integers = Convert.toIntArray(ids); + for (Integer id : integers){ + AdjustDetail adjustDetailEdit = adjustDetailService.getById(id); + adjustDetailService.adjustAgree(adjustDetailEdit); + + } + return AjaxResult.success("审批已下发!"); + } + + /** + * 删除调整单明细 + */ + //@RequiresPermissions("inventory:cyclecountDetail:remove") + @Log(title = "库存-调整", operating = "删除调整单明细", action = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(Integer id){ + if(id == null){ + return AjaxResult.error("ID不能为空!"); + } + AdjustDetail adjustDetail = adjustDetailService.getById(id); + if(adjustDetail.getStatus() > 0 ){ + return AjaxResult.error("单据状态不允许删除"); + } + adjustDetailService.removeById(id); + + return AjaxResult.success("删除成功!"); + } + + + diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailService.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailService.java index c342752..0d78463 100644 --- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailService.java +++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailService.java @@ -10,6 +10,8 @@ public interface AdjustDetailService extends IService<AdjustDetail> { AjaxResult updateAdjustDetail(AdjustDetail adjustDetail); + AjaxResult adjustAgree(AdjustDetail adjustDetail); + } diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java index e99c191..96a387d 100644 --- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java @@ -39,10 +39,6 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj @Resource private AdjustHeaderService adjustHeaderService; @Resource - private CycleCountHeaderService cycleCountHeaderService; - @Resource - private CycleCountDetailService cycleCountDetailService; - @Resource private InventoryHeaderService inventoryHeaderService; @Resource private InventoryDetailService inventoryDetailService; @@ -59,6 +55,30 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj + + /** + * 调整审批 + * @param adjustDetail + * @return + */ + @Transactional + @Override + public AjaxResult adjustAgree(AdjustDetail adjustDetail) { + //修改状态,审批人栏填入名称,修改状态 + if(adjustDetail.getStatus() > 1){ + return AjaxResult.error("单据状态无法审批!"); + } + adjustDetail.setAgreeBy(ShiroUtils.getLoginName()); + adjustDetail.setAgreeTime(new Date()); + adjustDetail.setStatus(1); + adjustDetail.setLastUpdated(new Date()); + adjustDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + this.saveOrUpdate(adjustDetail); + + return AjaxResult.success("审批完成!"); + } + + /** * 调整库存 * 调整数量,调整库存状态 @@ -89,7 +109,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(location); location = locationService.getOne(lambdaQueryWrapper); if (!location.getStatus().equals("empty")) { - throw new SecurityException(inventoryDetail.getId() + "库存非空闲,请等待任务完成再进行调整!"); + throw new SecurityException(inventoryDetail.getId() + "库存非空闲,请等待其他任务完成再进行调整!"); } //判断调整哪一个属性值 @@ -123,6 +143,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj return AjaxResult.success("调整库存成功!"); } + /** * 调整修改库存数量 * @param adjustDetail diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java index 865cf34..cb634bb 100644 --- a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java +++ b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java @@ -174,14 +174,14 @@ public class CycleCountDetailController extends BaseController { if(cyclecountHeader == null){ return AjaxResult.error("主单据不存在"); } - if(cyclecountHeader.getStatusCyc() > 5){ + if(cyclecountHeader.getStatusCyc() > 1){ return AjaxResult.error("主单据状态不允许删除"); } for (Integer id : detailsIds) { //只允许删除新建状态下的盘点明细。 CycleCountDetail cyclecountDetails = cycleCountDetailService.getById(id); - if(cyclecountDetails.getEnableStatus() > 5){ + if(cyclecountDetails.getEnableStatus() > 1){ return AjaxResult.error("盘点已开始执行,不允许删除该盘点明细!"); } cycleCountDetailService.removeById(id); diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java index ebdb1aa..732a40e 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java @@ -10,6 +10,7 @@ import com.huaheng.pc.config.location.domain.Location; import com.huaheng.pc.config.location.service.LocationService; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; +import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail; @@ -67,6 +68,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont private TaskDetailService taskDetailService; @Autowired private WaveService waveService; + @Autowired + private ShipmentPreferenceService shipmentPreferenceService; @Override @@ -392,6 +395,15 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont @Override @Transactional public AjaxResult autoCombination(String shipmentCode) { + LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLam = Wrappers.lambdaQuery(); + shipmentHeaderLam.eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode()) + .eq(ShipmentHeader::getCode,shipmentCode); + ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentHeaderLam); + if(shipmentHeader == null){ + throw new ServiceException("系统没有此单据"); + } + shipmentPreferenceService.checkShipmentProcess(shipmentHeader.getId().toString(),100); + LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentCode) .eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java index ec62ba5..4e6eac6 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java @@ -10,6 +10,12 @@ import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; +import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference; +import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService; +import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail; +import com.huaheng.pc.config.statusFlow.domain.StatusFlowHeader; +import com.huaheng.pc.config.statusFlow.service.StatusFlowDetailService; +import com.huaheng.pc.config.statusFlow.service.StatusFlowHeaderService; import com.huaheng.pc.config.waveMaster.domain.WaveMaster; import com.huaheng.pc.config.waveMaster.service.WaveMasterService; import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; @@ -43,6 +49,12 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper, private WaveMasterService waveMasterService; @Autowired private WaveService waveService; + @Autowired + private ShipmentPreferenceService shipmentPreferenceService; + @Autowired + private StatusFlowHeaderService statusFlowHeaderService; + @Autowired + private StatusFlowDetailService statusFlowDetailService; /** * 新增出库明细 @@ -152,6 +164,7 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper, /** + * 查看选中的单据状态是否符合出库流程 * 选中的单据加入波次 * 根据选中的主单ID和波次主表的code,判断主单之和是否符合波次的限制条件, * 看此code的波次是否建成未开始执行,如果是则只需修改波次属性,否则创建新的波次, @@ -160,6 +173,9 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper, @Override @Transactional public void saveWave(String ids, String code) { + Integer status = 100; + List<ShipmentHeader> shipmentHeaderList =shipmentPreferenceService.checkShipmentProcess(ids,status); + //找到波次主表,看系统是否有此波次 LambdaQueryWrapper<WaveMaster> lam=Wrappers.lambdaQuery(); lam.eq(WaveMaster::getCode,code) @@ -248,12 +264,8 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper, throw new ServiceException("出库子单加入波次失败"); } - List<ShipmentHeader> shipmentHeaderList=new ArrayList<>(); - //修改主单状态 - for (Integer id : Convert.toIntArray(ids)){ - ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id); + for(ShipmentHeader shipmentHeader :shipmentHeaderList){ shipmentHeader.setLastStatus(200); - shipmentHeaderList.add(shipmentHeader); } flag = shipmentHeaderService.updateBatchById(shipmentHeaderList); if(flag == false){ diff --git a/src/main/resources/templates/config/statusFlowDetail/statusFlowDetail.html b/src/main/resources/templates/config/statusFlowDetail/statusFlowDetail.html index 2de92c3..223716b 100644 --- a/src/main/resources/templates/config/statusFlowDetail/statusFlowDetail.html +++ b/src/main/resources/templates/config/statusFlowDetail/statusFlowDetail.html @@ -25,7 +25,6 @@ var datas = [[${@dict.getType('sys_normal_disable')}]]; var moduleType = [[${@dict.getType('moduleType')}]]; var nessaryDatas = [[${@dict.getType('nessary')}]]; - var moduleType = [[${@dict.getType('moduleType')}]]; $(function() { var options = { diff --git a/src/main/resources/templates/inventory/adjustDetail/adjustDetail.html b/src/main/resources/templates/inventory/adjustDetail/adjustDetail.html index b38a854..8d62267 100644 --- a/src/main/resources/templates/inventory/adjustDetail/adjustDetail.html +++ b/src/main/resources/templates/inventory/adjustDetail/adjustDetail.html @@ -94,8 +94,8 @@ <a class="btn btn-outline btn-success btn-rounded" onclick="$.operate.add()"> <i class="fa fa-plus"></i> 新增 </a> - <a class="btn btn-outline btn-primary btn-rounded" onclick=""> - <i class="fa fa-edit"></i> 审核 + <a class="btn btn-outline btn-primary btn-rounded" onclick="agree()"> + <i class="fa fa-edit"></i> 审批 </a> <a class="btn btn-outline btn-danger btn-rounded" onclick="addAdjust()"/> <!--shiro:hasPermission="inventory:cyclecountAdjustDetail:addAdjust"--> @@ -320,7 +320,7 @@ align: 'center', formatter: function (value, row, index) { var actions = []; - actions.push('<a class="btn btn-danger btn-xs" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a> '); + actions.push('<a class="btn btn-danger btn-xs" href="#" onclick="remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a> '); return actions.join(''); } } @@ -353,10 +353,22 @@ }); + /*审批*/ + function agree() { + var rows = $.common.isEmpty($.table._option.id) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.id); + if (rows.length == 0) { + $.modal.alertWarning("请至少选择一条记录"); + return; + } + $.modal.confirm("审批请谨慎核对数据!" + , function() { + var url = prefix + "/adjustAgree"; + var data = { "ids": rows.join() }; + postInner(url, data); + }); + } - /* - *盘点差异调整 - * */ + /*调整*/ function addAdjust() { var rows = $.common.isEmpty($.table._option.id) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.id); if (rows.length == 0) { @@ -365,9 +377,49 @@ } $.modal.confirm("注意:该操作将更改库存,当实盘数量为0且库位上只剩空容器时,请手动执行空托出库任务,容器上有货则无需其他操作!" , function() { - var url = prefix + "/adjustEdit"; - var data = { "ids": rows.join() }; - postInner(url, data); + var url = prefix + "/adjustEdit"; + var data = { "ids": rows.join() }; + postInner(url, data); + }); + } + + function postInner(url,data) { + $.modal.loading("正在处理中,请稍后..."); + $.ajax({ + url:url, + type:"post", + data:data, + success:function (result) { + if (result.code == web_status.SUCCESS) { + $.modal.msgSuccess(result.msg); + $.table.refresh(); + } else { + $.modal.alertError(result.msg); + } + $.modal.closeLoading(); + } + }) + } + + /*单条删除*/ + function remove(id) { + $.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() { + var url = prefix+"/remove"; + var data = { "id": id }; + $.ajax({ + url: url, + type:"post", + data:data, + success:function (result) { + if (result.code == web_status.SUCCESS) { + $.modal.msgSuccess(result.msg); + $.table.refresh(); + } else { + $.modal.alertError(result.msg); + } + $.modal.closeLoading(); + } + }) }); } @@ -402,24 +454,6 @@ // shadeClose: true, //点击遮罩关闭层 }) } - function postInner(url,data) { - $.modal.loading("正在处理中,请稍后..."); - $.ajax({ - url:url, - type:"post", - data:data, - success:function (result) { - if (result.code == web_status.SUCCESS) { - $.modal.msgSuccess(result.msg); - update(); - } else { - $.modal.alertError(result.msg); - } - $.modal.closeLoading(); - } - }) - } - </script> </body>