src/main/java/com/zy/asrs/controller/MobileController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/PickConfirmParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/PickMatParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/OrderDetlService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/OrderDetlMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -9,15 +9,13 @@ import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.entity.param.MobileAdjustParam; import com.zy.asrs.entity.param.OffSaleParam; import com.zy.asrs.entity.param.*; import com.zy.asrs.entity.result.MobileAdjustResult; import com.zy.asrs.mapper.ManLocDetlMapper; import com.zy.asrs.service.*; import com.zy.common.model.LocDto; import com.zy.common.model.TaskDto; import com.zy.common.model.WrkDto; import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -55,7 +53,12 @@ private PackService packService; @Autowired private ManLocDetlMapper manLocDetlMapper; @Autowired private StaDescService staDescService; @Autowired private CommonService commonService; @Autowired private MatService matService; // 商品上架 @RequestMapping("/mat/onSale/auth") @@ -358,4 +361,182 @@ return mobileService.manDetlOut(json); } @RequestMapping("/loc/f/list") @ManagerAuth(memo = "获取在库库位") public R locNoF(@RequestParam(required = false) String locNo){ Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>().eq("loc_sts", "F"); if (!Cools.isEmpty(locNo)) { wrapper.like("loc_no", locNo); } List<LocMast> list = locMastService.selectList(wrapper); return R.ok().add(list); } @RequestMapping("/pick/sta/list") @ManagerAuth(memo = "获取并板站") public R pickSta(){ List<StaDesc> list = staDescService.selectList(new EntityWrapper<StaDesc>().eq("type_no",104)); return R.ok().add(list); } @RequestMapping("/pick/mat/list") @ManagerAuth(memo = "获取并板物料") public R pickMats(@RequestParam(required = false) String matnr){ List<DocType> docTypes = docTypeService.selectList(new EntityWrapper<DocType>().like("doc_name", "入库")); ArrayList<Long> typeList = new ArrayList<>(); for (DocType docType : docTypes) { typeList.add(docType.getDocId()); } EntityWrapper<Order> wrapper = new EntityWrapper<>(); wrapper.eq("status", 1); wrapper.in("doc_type", typeList); List<Order> orders = orderService.selectList(wrapper); ArrayList<Long> orderIds = new ArrayList<>(); for (Order order : orders) { orderIds.add(order.getId()); } //搜索明细 Wrapper<OrderDetl> wrapper1 = new EntityWrapper<OrderDetl>(); wrapper1.eq("status", 1); wrapper1.in("order_id", orderIds); if (!Cools.isEmpty(matnr)) { wrapper1.like("matnr", matnr); } List<OrderDetl> list = orderDetlService.selectList(wrapper1); ArrayList<PickMatParam> maps = new ArrayList<>(); for (OrderDetl orderDetl : list) { //剩余可用数量 double count = orderDetl.getAnfme() - orderDetl.getWorkQty(); if (count <= 0) { continue; } PickMatParam matParam = new PickMatParam(); matParam.setMatnr(orderDetl.getMatnr()); matParam.setBatch(orderDetl.getBatch()); matParam.setOrderNo(orderDetl.getOrderNo()); matParam.setOrderId(orderDetl.getOrderId()); matParam.setCount(count); matParam.setUseCount(0D); maps.add(matParam); } return R.ok().add(maps); } @RequestMapping("/pick/in") @ManagerAuth(memo = "并板入库") @Transactional public R pickConfirm(@RequestBody PickConfirmParam param){ LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getLocNo())); if (!locMast.getLocSts().equals("F")) { return R.error("库位状态不是在库"); } StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("type_no", 104) .eq("stn_no", param.getStaNo())); if (staDesc == null) { return R.error("站点不存在"); } //检验传参是否和订单明细匹配 for (PickMatParam matParam : param.getList()) { Wrapper<OrderDetl> wrapper = new EntityWrapper<OrderDetl>() .eq("order_no", matParam.getOrderNo()) .eq("status", 1) .eq("matnr", matParam.getMatnr()); if (!Cools.isEmpty(matParam.getBatch())) { wrapper.eq("batch", matParam.getBatch()); } OrderDetl orderDetl = orderDetlService.selectOne(wrapper); if (orderDetl == null) { return R.error("物料数据不存在"); } //剩余可用数量 double count = orderDetl.getAnfme() - orderDetl.getWorkQty(); if (matParam.getCount() != count) { return R.error("物料数据已过期"); } if (matParam.getUseCount() > count) { return R.error("可用数量不足"); } } Date now = new Date(); // 生成工作号 int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(104)); // 生成工作档 WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(now); wrkMast.setWrkSts(101L); // 工作状态:101.生成出库 wrkMast.setIoType(104); // 入出库状态 wrkMast.setIoPri(13D); // 优先级:13 wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站 wrkMast.setStaNo(staDesc.getStnNo()); // 目标站 wrkMast.setSourceLocNo(param.getLocNo()); // 源库位 wrkMast.setFullPlt("Y"); // 满板:Y wrkMast.setPicking("Y"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setBarcode(locMast.getBarcode()); wrkMast.setAppeUser(getUserId()); // 操作人员数据 wrkMast.setAppeTime(now); wrkMast.setModiUser(getUserId()); wrkMast.setModiTime(now); wrkMast.setCrnNo(staDesc.getCrnNo()); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("保存工作档失败,出库库位号:" + param.getLocNo()); } // 生成工作档明细 for (PickMatParam matParam : param.getList()) { EntityWrapper<Mat> wrapper = new EntityWrapper<>(); wrapper.eq("status", 1); wrapper.eq("matnr", matParam.getMatnr()); Mat mat = matService.selectOne(wrapper); if (mat == null) { throw new CoolException("保存工作档失败,物料信息不存在:" + matParam.getMatnr()); } WrkDetl wrkDetl = new WrkDetl(); wrkDetl.sync(mat); wrkDetl.setOrderNo(matParam.getOrderNo()); wrkDetl.setWrkNo(workNo); wrkDetl.setZpallet(wrkMast.getBarcode()); wrkDetl.setIoTime(now); wrkDetl.setAnfme(matParam.getUseCount()); // 数量 wrkDetl.setAppeTime(now); wrkDetl.setAppeUser(getUserId()); wrkDetl.setModiTime(now); wrkDetl.setModiUser(getUserId()); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } //更新订单工作数量 orderDetlService.increaseWorkQtyByOrderNo(matParam.getOrderNo(), matParam.getMatnr(), matParam.getBatch(), matParam.getUseCount()); } // 修改库位状态: F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中 locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getLocNo())); if (locMast.getLocSts().equals("F")) { locMast.setLocSts("P"); locMast.setModiUser(getUserId()); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { throw new CoolException("预约库位状态失败,库位号:" + param.getLocNo()); } } else { throw new CoolException(param.getLocNo() + "库位不是在库状态"); } return R.ok(); } } src/main/java/com/zy/asrs/entity/param/PickConfirmParam.java
New file @@ -0,0 +1,16 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; @Data public class PickConfirmParam { private String locNo; private Integer staNo; private List<PickMatParam> list; } src/main/java/com/zy/asrs/entity/param/PickMatParam.java
New file @@ -0,0 +1,20 @@ package com.zy.asrs.entity.param; import lombok.Data; @Data public class PickMatParam { private String matnr; private String batch; private String orderNo; private Long orderId; private Double count; private Double useCount; } src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -56,4 +56,7 @@ * @return 库存数量 */ Long selectCountToManByMatnr(@Param("matnr") String matnr,@Param("batch") String batch); int increaseWorkQtyByOrderNo(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("qty") Double qty); } src/main/java/com/zy/asrs/service/OrderDetlService.java
@@ -52,4 +52,6 @@ * @return 返回两个键值对,asrCount在立库库存,manCount在平库库存 */ Map<String,Long> selectCountByMatnr(String matnr, String batch); boolean increaseWorkQtyByOrderNo(String orderNo, String matnr, String batch, Double qty); } src/main/java/com/zy/asrs/service/impl/OrderDetlServiceImpl.java
@@ -127,4 +127,9 @@ map.put("manCount",orderDetlMapper.selectCountToManByMatnr(matnr, batch)); return map; } @Override public boolean increaseWorkQtyByOrderNo(String orderNo, String matnr, String batch, Double qty) { return this.baseMapper.increaseWorkQtyByOrderNo(orderNo, matnr, batch, qty) > 0; } } src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -73,7 +73,7 @@ if (complete) { for (OrderDetl orderDetl : orderDetls) { //生成单据和入库通知档时,给batch为空的明细赋了一个 ="", 现在改为null,回传用 if (orderDetl.getBatch().equals("")){ if (!Cools.isEmpty(orderDetl.getBatch()) && orderDetl.getBatch().equals("")){ orderDetl.setBatch(null); orderDetlService.updateById(orderDetl); } src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -204,19 +204,15 @@ // 根据工作号,查询工作明细档 List<WrkDetl> wrkDetls54 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); if (wrkDetls54.isEmpty()) { // exceptionHandle("并板入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 工作明细档为空; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); exceptionHandle("并板入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo()); } // 修改库存明细数量,如无库存,曾新增 for (WrkDetl wrkDetl:wrkDetls54) { LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); if (null != locDetl) { if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) { // exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 修改库存明细数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); if (!locDetlService.updateAnfme(locDetl.getAnfme() + wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch())) { exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); } } else { locDetl = new LocDetl(); @@ -227,11 +223,25 @@ locDetl.setModiTime(now); locDetl.setAppeTime(now); if (!locDetlService.insert(locDetl)) { // exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 新增库存明细失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr()); } } // 更新订单完成数量 OrderDetl orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); if (orderDetl == null) { orderDetl = orderDetlService.selectItem(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); } try { if(!Cools.isEmpty(orderDetl)){ if (!orderDetlService.increaseQtyByOrderNo(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), orderDetl.getBatch(), wrkDetl.getAnfme())) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } } catch (Exception ignore){} } // 修改库位状态 Q ====>> F if (locMast.getLocSts().equals("Q")) { @@ -240,9 +250,7 @@ locMast.setIoTime(now); locMast.setModiTime(now); if (!locMastService.updateById(locMast)) { // exceptionHandle("并板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 修改库位状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); exceptionHandle("并板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); } } break; src/main/resources/mapper/OrderDetlMapper.xml
@@ -246,4 +246,20 @@ </choose> </update> <update id="increaseWorkQtyByOrderNo"> update man_order_detl set work_qty = work_qty + #{qty} where 1=1 and order_no = #{orderNo} and matnr = #{matnr} <choose> <when test="batch != null and batch != ''"> and batch = #{batch} </when> <otherwise> and (batch IS NULL OR batch = '') </otherwise> </choose> </update> </mapper>