| | |
| | | mast.getBarcode(), mast.getWrkCode(), mast.getOveMk(), mast.getIsSuplus(), mast.getExitMk()); |
| | | |
| | | |
| | | if (params.getNotifyType().equals("task")) { |
| | | if ("task".equals(params.getNotifyType())) { |
| | | //任务 |
| | | if (params.getMsgType().equals("task_complete")) { |
| | | if (Objects.isNull(params.getMsgType())) { |
| | | throw new CoolException("消息类型不能为空!!"); |
| | | } |
| | | if ("task_complete".equals(params.getMsgType())) { |
| | | //称重 |
| | | if ((mast.getIoType()==1||mast.getIoType()==10) && mast.getWrkSts() == 2 && Cools.isEmpty(mast.getStaNo())) { |
| | | if ((mast.getIoType()==1||mast.getIoType()==10||mast.getIoType()==2) && mast.getWrkSts() == 2 && Cools.isEmpty(mast.getStaNo())) { |
| | | Double weight = 0.0; |
| | | if (!Cools.isEmpty(params.getData())){ |
| | | JSONObject jsonObject = JSONObject.parseObject(params.getData()); |
| | |
| | | } |
| | | } else { //入库/回库有料任务完成 |
| | | if(mast.getIoType() !=2){ |
| | | WrkDetl wrkDetl = selectWrkDetlByWrkNo(String.valueOf(mast.getWrkNo()), "数据错误,任务明细不存在!!"); |
| | | Mat matnr = selectMatByMatnr(wrkDetl.getMatnr()); |
| | | applyWeightAndUpdateDetl("子任务", String.valueOf(mast.getWrkNo()), wrkDetl, matnr, weight, "任务档明细修改失败!!"); |
| | | |
| | | } |
| | | WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo())); |
| | | if (Objects.isNull(wrkDetl)) { |
| | | throw new CoolException("数据错误,任务明细不存在!!"); |
| | | } |
| | | Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", wrkDetl.getMatnr())); |
| | | if (Objects.isNull(matnr)) { |
| | | throw new CoolException("物料基础信息不存在!!"); |
| | | } |
| | | Double realQty = Math.round((wrkDetl.getStockQty() - wrkDetl.getAnfme()) * 10000) / 10000.0; |
| | | log.info("有料任务称重计算初值: wrkNo={}, matnr={}, stockQty={}, anfme={}, realQty(init)={}, safeQty={}, volume={}, weight={}", |
| | | mast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getStockQty(), wrkDetl.getAnfme(), realQty, |
| | | matnr.getSafeQty(), matnr.getVolume(), weight); |
| | | if (!Cools.isEmpty(weight)) { |
| | | Double val = Math.round((weight - matnr.getSafeQty()) * 10000) / 10000.0; |
| | | //称重后,计算出真实长度 |
| | | realQty = val * matnr.getVolume(); |
| | | log.info("有料任务称重计算过程: wrkNo={}, val=(weight-safeQty)={}, realQty=val*volume={}", |
| | | mast.getWrkNo(), val, realQty); |
| | | if (realQty<matnr.getSafeQty()){//不改为空板,仍作为设为matnr.getSafeQty() |
| | | wrkDetl.setAnfme(matnr.getSafeQty()*matnr.getVolume()); |
| | | log.info("有料任务称重修正: wrkNo={}, realQty<safeQty, setAnfme={}", mast.getWrkNo(), wrkDetl.getAnfme()); |
| | | }else{ |
| | | wrkDetl.setAnfme(realQty); |
| | | log.info("有料任务称重修正: wrkNo={}, realQty>=safeQty, setAnfme={}", mast.getWrkNo(), wrkDetl.getAnfme()); |
| | | |
| | | mast.setOveMk("Y"); |
| | | log.info("子任务更新: wrkNo={}, setOveMk=Y", mast.getWrkNo()); |
| | | if (!wrkMastService.updateById(mast)) { |
| | | throw new CoolException("任务档修改失败!!"); |
| | | } |
| | | wrkDetl.setWeight(weight); |
| | | if (!wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()).eq("matnr", wrkDetl.getMatnr()).eq("barcode", wrkDetl.getBarcode()))) { |
| | | throw new CoolException("任务档明细修改失败!!"); |
| | | } |
| | | } |
| | | |
| | | |
| | | mast.setOveMk("Y"); |
| | | log.info("子任务更新: wrkNo={}, setOveMk=Y", mast.getWrkNo()); |
| | | if (!wrkMastService.updateById(mast)) { |
| | | throw new CoolException("任务档修改失败!!"); |
| | | } |
| | | |
| | | if (!Cools.isEmpty(mast.getWrkCode())) { |
| | | String wrkNo = mast.getWrkCode(); |
| | | WrkMast orgWrk = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo)); |
| | | |
| | | if (Objects.isNull(orgWrk)) { |
| | | throw new CoolException("数据错误,主任务档不存在或已删除!!"); |
| | | } |
| | |
| | | if (Objects.isNull(detl)) { |
| | | throw new CoolException("子任务档明细不存在!!"); |
| | | } |
| | | //库存减去称重长度 |
| | | Double v = Math.round((detl.getStockQty() - realQty) * 10000) / 10000.0; |
| | | log.info("主任务明细回写计算: mainWrkNo={}, v=(stockQty-realQty)={}, stockQty={}, realQty={}", |
| | | wrkNo, v, detl.getStockQty(), realQty); |
| | | //原出为数量与真实数量互换,保持一致性 |
| | | if(v<= 0){ |
| | | detl.setAnfme(matnr.getSafeQty());//设定为默认值 |
| | | log.info("主任务明细回写修正: mainWrkNo={}, v<=0, setAnfme(safeQty)={}", wrkNo, detl.getAnfme()); |
| | | }else{ |
| | | detl.setAnfme(v); |
| | | log.info("主任务明细回写修正: mainWrkNo={}, v>0, setAnfme={}", wrkNo, detl.getAnfme()); |
| | | |
| | | } |
| | | detl.setWeight(weight); |
| | | if (!wrkDetlService.update(detl, new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo).eq("matnr", detl.getMatnr()).eq("barcode", detl.getBarcode()))) { |
| | | throw new CoolException("原任务档明细修改失败!!"); |
| | | } |
| | | Mat matnr = selectMatByMatnr(detl.getMatnr()); |
| | | Double realQty = applyWeightAndUpdateDetl("主任务", wrkNo, detl, matnr, weight, "任务档明细修改失败!!"); |
| | | updateDetlRemainAfterWeight("主任务明细回写", wrkNo, detl, matnr, weight, realQty, "原任务档明细修改失败!!"); |
| | | } else if(!Cools.isEmpty(mast.getPacked())){ |
| | | String wrkNo = mast.getPacked(); |
| | | WrkMast orgWrk = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo)); |
| | |
| | | if (Objects.isNull(detl)) { |
| | | throw new CoolException("主任务档明细不存在!!"); |
| | | } |
| | | //库存减去称重长度 |
| | | Double v = Math.round((detl.getStockQty() - realQty) * 10000) / 10000.0; |
| | | log.info("回库主任务明细回写计算: mainWrkNo={}, v=(stockQty-realQty)={}, stockQty={}, realQty={}", |
| | | wrkNo, v, detl.getStockQty(), realQty); |
| | | //原出为数量与真实数量互换,保持一致性 |
| | | if(v<= 0){ |
| | | detl.setAnfme(matnr.getSafeQty());//设定为默认值 |
| | | log.info("回库主任务明细回写修正: mainWrkNo={}, v<=0, setAnfme(safeQty)={}", wrkNo, detl.getAnfme()); |
| | | }else{ |
| | | detl.setAnfme(v); |
| | | log.info("回库主任务明细回写修正: mainWrkNo={}, v>0, setAnfme={}", wrkNo, detl.getAnfme()); |
| | | |
| | | } |
| | | detl.setWeight(weight); |
| | | if (!wrkDetlService.update(detl, new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo).eq("matnr", detl.getMatnr()).eq("barcode", detl.getBarcode()))) { |
| | | throw new CoolException("原任务档明细修改失败!!"); |
| | | } |
| | | Mat matnr = selectMatByMatnr(detl.getMatnr()); |
| | | Double realQty = applyWeightAndUpdateDetl("回库主任务", wrkNo, detl, matnr, weight, "任务档明细修改失败!!"); |
| | | updateDetlRemainAfterWeight("回库主任务明细回写", wrkNo, detl, matnr, weight, realQty, "原任务档明细修改失败!!"); |
| | | }else{ |
| | | throw new CoolException("任务号截取失败,请检查主任务档任档wrkCode字段"); |
| | | } |
| | |
| | | if (!wrkMastService.updateById(mast)) { |
| | | throw new CoolException("任务状态修改失败!!"); |
| | | } |
| | | } else if (params.getMsgType().equals("task_cancel")) { |
| | | } else if ("task_cancel".equals(params.getMsgType())) { |
| | | //todo 取消任务 |
| | | }else if (params.getMsgType().equals("task_arrive")) { |
| | | }else if ("task_arrive".equals(params.getMsgType())) { |
| | | //到达目的地 |
| | | //如果出库任务是跨区则需要生成新的入库任务入库 |
| | | if(!Cools.isEmpty(mast.getLocNo()) ){ |
| | |
| | | throw new CoolException("任务状态修改失败!!"); |
| | | } |
| | | } |
| | | } else if (params.getNotifyType().equals("weight")) { |
| | | } else if ("weight".equals(params.getNotifyType())) { |
| | | |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | private WrkDetl selectWrkDetlByWrkNo(String wrkNo, String errMsg) { |
| | | WrkDetl detl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); |
| | | if (Objects.isNull(detl)) { |
| | | throw new CoolException(errMsg); |
| | | } |
| | | return detl; |
| | | } |
| | | |
| | | private Mat selectMatByMatnr(String matnrNo) { |
| | | Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", matnrNo)); |
| | | if (Objects.isNull(matnr)) { |
| | | throw new CoolException("物料基础信息不存在!!"); |
| | | } |
| | | return matnr; |
| | | } |
| | | |
| | | private Double applyWeightAndUpdateDetl(String scene, String wrkNo, WrkDetl detl, Mat matnr, Double weight, String errMsg) { |
| | | Double realQty = round4(detl.getStockQty() - detl.getAnfme()); |
| | | log.info("有料任务称重计算初值: scene={}, wrkNo={}, matnr={}, stockQty={}, anfme={}, realQty(init)={}, safeQty={}, volume={}, weight={}", |
| | | scene, wrkNo, detl.getMatnr(), detl.getStockQty(), detl.getAnfme(), realQty, matnr.getSafeQty(), matnr.getVolume(), weight); |
| | | if (!Cools.isEmpty(weight)) { |
| | | Double val = round4(weight - matnr.getSafeQty()); |
| | | realQty = val * matnr.getVolume(); |
| | | log.info("有料任务称重计算过程: scene={}, wrkNo={}, val=(weight-safeQty)={}, realQty=val*volume={}", scene, wrkNo, val, realQty); |
| | | if (realQty < matnr.getSafeQty()) { |
| | | detl.setAnfme(matnr.getSafeQty() * matnr.getVolume()); |
| | | log.info("有料任务称重修正: scene={}, wrkNo={}, realQty<safeQty, setAnfme={}", scene, wrkNo, detl.getAnfme()); |
| | | } else { |
| | | detl.setAnfme(realQty); |
| | | log.info("有料任务称重修正: scene={}, wrkNo={}, realQty>=safeQty, setAnfme={}", scene, wrkNo, detl.getAnfme()); |
| | | } |
| | | detl.setWeight(weight); |
| | | if (!wrkDetlService.update(detl, new EntityWrapper<WrkDetl>() |
| | | .eq("wrk_no", wrkNo) |
| | | .eq("matnr", detl.getMatnr()) |
| | | .eq("barcode", detl.getBarcode()))) { |
| | | throw new CoolException(errMsg); |
| | | } |
| | | } |
| | | return realQty; |
| | | } |
| | | |
| | | private void updateDetlRemainAfterWeight(String scene, String wrkNo, WrkDetl detl, Mat matnr, Double weight, Double realQty, String errMsg) { |
| | | Double v = round4(detl.getStockQty() - realQty); |
| | | log.info("主任务明细回写计算: scene={}, wrkNo={}, v=(stockQty-realQty)={}, stockQty={}, realQty={}", |
| | | scene, wrkNo, v, detl.getStockQty(), realQty); |
| | | if (v <= 0) { |
| | | detl.setAnfme(matnr.getSafeQty()); |
| | | log.info("主任务明细回写修正: scene={}, wrkNo={}, v<=0, setAnfme(safeQty)={}", scene, wrkNo, detl.getAnfme()); |
| | | } else { |
| | | detl.setAnfme(v); |
| | | log.info("主任务明细回写修正: scene={}, wrkNo={}, v>0, setAnfme={}", scene, wrkNo, detl.getAnfme()); |
| | | } |
| | | detl.setWeight(weight); |
| | | if (!wrkDetlService.update(detl, new EntityWrapper<WrkDetl>() |
| | | .eq("wrk_no", wrkNo) |
| | | .eq("matnr", detl.getMatnr()) |
| | | .eq("barcode", detl.getBarcode()))) { |
| | | throw new CoolException(errMsg); |
| | | } |
| | | } |
| | | |
| | | private Double round4(Double value) { |
| | | if (value == null) { |
| | | return null; |
| | | } |
| | | return Math.round(value * 10000) / 10000.0; |
| | | } |
| | | //输入库位自动冻结算出相邻库位序号 |
| | | @Override |
| | | public Integer[] freezeLocAround(Integer locId) { |