| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.utils.MatUtils; |
| | | import com.zy.asrs.utils.MathUtils; |
| | | import com.zy.asrs.utils.OrderInAndOutUtil; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.nc.entity.NccSaleDbddWms; |
| | | import com.zy.nc.entity.NccSaleXsfhmxWms; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.jdbc.core.JdbcTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * Created by vincent on 2020/7/7 |
| | |
| | | private OrderDetlPakoutService orderDetlPakoutService; |
| | | @Autowired |
| | | private WrkDetlService wrkDetlService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private InventoryCheckOrderDetlService inventoryCheckOrderDetlService; |
| | | |
| | |
| | | |
| | | for (OrderDetl detail : orderDetls) { |
| | | DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getBrand(), detail.getStandby1(), detail.getStandby2(), detail.getStandby3(), detail.getBoxType1(), detail.getBoxType2(), detail.getBoxType3(), detail.getAnfme()); |
| | | dto.setOrderNo(detail.getOrderNo()); |
| | | if (DetlDto.has(list, dto)) { |
| | | DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(), dto.getBrand(), dto.getStandby1(), dto.getStandby2(), dto.getStandby3(), dto.getBoxType1(), dto.getBoxType2(), dto.getBoxType3()); |
| | | assert detlDto != null; |
| | |
| | | OrderDetl orderDetl = OrderDetl.find(orderDetlList, dto.getMatnr(), dto.getBatch(), dto.getBrand(), dto.getStandby1(), dto.getStandby2(), dto.getStandby3(), dto.getBoxType1(), dto.getBoxType2(), dto.getBoxType3()); |
| | | assert orderDetl != null; |
| | | orderDetl.setAnfme(MathUtils.add(orderDetl.getAnfme(), detail.getAnfme())); |
| | | Double weight = MatUtils.calcWeight(orderDetl.getMatnr(), orderDetl.getAnfme()); |
| | | orderDetl.setWeight(weight); |
| | | } else { |
| | | list.add(dto); |
| | | orderDetlList.add(detail); |
| | |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | if (docType.getDocName().equals("销售发货")) { |
| | | if (docType.getDocName().equals("销售发货") || docType.getDocName().equals("集团内部调拨")) { |
| | | return SUCCESS; |
| | | } |
| | | Order orderSou = orderService.selectByNo(order.getOrderNo()); |
| | | if (orderSou == null) { |
| | | return FAIL.setMsg(order.getOrderNo() + "订单不存在,请联系管理员"); |
| | | } |
| | | if (!orderSou.getSettle().equals(2L)) { |
| | | return FAIL.setMsg("订单状态不正确,请联系管理员"); |
| | | } |
| | |
| | | return SUCCESS; |
| | | } |
| | | Order orderSou = orderService.selectByNo(order.getOrderNo()); |
| | | if (orderSou == null) { |
| | | return FAIL.setMsg("订单不存在,请联系管理员"); |
| | | } |
| | | if (!orderSou.getSettle().equals(2L)) { |
| | | return FAIL.setMsg("订单状态不正确,请联系管理员"); |
| | | } |
| | | |
| | | List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); |
| | | boolean complete = true; |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | if (orderDetl.getAnfme() > orderDetl.getQty()) { |
| | | complete = false; |
| | | break; |
| | | // for (OrderDetl orderDetl : orderDetls) { |
| | | // if (orderDetl.getAnfme() > orderDetl.getQty()) { |
| | | // complete = false; |
| | | // break; |
| | | // } |
| | | // } |
| | | if (complete) { |
| | | List<OrderDetl> old = orderDetlService.selectByOrderId(orderSou.getId()); |
| | | if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()))) { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | } |
| | | |
| | | HashMap<String, List<NccSaleXsfhmxWms>> matnrMap = new HashMap<>(); |
| | | for (OrderDetl orderDetl : old) { |
| | | String remark = orderDetl.getRemark(); |
| | | if(Cools.isEmpty(remark)) { |
| | | continue; |
| | | } |
| | | |
| | | NccSaleXsfhmxWms currentData = JSONObject.parseObject(orderDetl.getRemark(), NccSaleXsfhmxWms.class); |
| | | if (currentData == null) { |
| | | continue; |
| | | } |
| | | |
| | | List<NccSaleXsfhmxWms> list = new ArrayList<>(); |
| | | if (matnrMap.containsKey(orderDetl.getMatnr())) { |
| | | list = matnrMap.get(orderDetl.getMatnr()); |
| | | list.add(currentData); |
| | | }else { |
| | | list.add(currentData); |
| | | } |
| | | matnrMap.put(orderDetl.getMatnr(), list); |
| | | } |
| | | |
| | | for (Map.Entry<String, List<NccSaleXsfhmxWms>> entry : matnrMap.entrySet()) { |
| | | String matnr = entry.getKey(); |
| | | List<NccSaleXsfhmxWms> list = entry.getValue(); |
| | | list.sort(Comparator.comparing(NccSaleXsfhmxWms::getNastnum).reversed()); |
| | | matnrMap.put(matnr, list); |
| | | } |
| | | |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(order.getOrderNo()); |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | List<OrderDetl> insertList = new ArrayList<>(); |
| | | |
| | | Double isused = wrkDetl.getWeight(); |
| | | while (isused > 0D) { |
| | | List<NccSaleXsfhmxWms> list = matnrMap.get(wrkDetl.getMatnr()); |
| | | if (!list.isEmpty()) { |
| | | NccSaleXsfhmxWms nccSaleXsfhmxWms = list.get(0); |
| | | BigDecimal orderStock = nccSaleXsfhmxWms.getNastnum(); |
| | | |
| | | //实际出库数量 |
| | | double realWeight = 0D; |
| | | BigDecimal diff = orderStock.subtract(BigDecimal.valueOf(isused)); |
| | | if (diff.doubleValue() >= 0) { |
| | | nccSaleXsfhmxWms.setNastnum(diff); |
| | | list.set(0, nccSaleXsfhmxWms); |
| | | matnrMap.put(wrkDetl.getMatnr(), list); |
| | | realWeight = isused; |
| | | }else { |
| | | list.remove(0); |
| | | matnrMap.put(wrkDetl.getMatnr(), list); |
| | | realWeight = orderStock.doubleValue(); |
| | | } |
| | | |
| | | //计算主数量 |
| | | Double anfme = MatUtils.calcAnfmeFromWeight(wrkDetl.getMatnr(), realWeight); |
| | | |
| | | OrderDetl orderDetl = new OrderDetl(); |
| | | orderDetl.sync(wrkDetl); |
| | | orderDetl.setQty(anfme); |
| | | orderDetl.setWeight(realWeight); |
| | | orderDetl.setOrderId(orderSou.getId()); |
| | | orderDetl.setOrderNo(orderSou.getOrderNo()); |
| | | orderDetl.setStatus(1); |
| | | orderDetl.setCreateTime(orderSou.getCreateTime()); |
| | | orderDetl.setCreateBy(orderSou.getCreateBy()); |
| | | orderDetl.setUpdateTime(orderSou.getUpdateTime()); |
| | | orderDetl.setUpdateBy(orderSou.getUpdateBy()); |
| | | orderDetl.setId(null); |
| | | orderDetl.setRemark(JSON.toJSONString(nccSaleXsfhmxWms)); |
| | | insertList.add(orderDetl); |
| | | |
| | | isused -= orderStock.doubleValue(); |
| | | }else { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败,ERP原始数据为空"); |
| | | } |
| | | } |
| | | |
| | | for (OrderDetl orderDetl : insertList) { |
| | | if (!orderDetlService.insert(orderDetl)) { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // for (WrkDetl wrkDetl : wrkDetls) { |
| | | // OrderDetl orderDetl = new OrderDetl(); |
| | | // orderDetl.sync(wrkDetl); |
| | | // orderDetl.setQty(wrkDetl.getAnfme()); |
| | | // orderDetl.setOrderId(orderSou.getId()); |
| | | // orderDetl.setOrderNo(orderSou.getOrderNo()); |
| | | // orderDetl.setStatus(1); |
| | | // orderDetl.setCreateTime(orderSou.getCreateTime()); |
| | | // orderDetl.setCreateBy(orderSou.getCreateBy()); |
| | | // orderDetl.setUpdateTime(orderSou.getUpdateTime()); |
| | | // orderDetl.setUpdateBy(orderSou.getUpdateBy()); |
| | | // orderDetl.setId(null); |
| | | // //先按照批次匹配,再按照无批次号批次,因为销售发货,批次号可能带,有可能不携带,所以就会有问题;而且考虑到一条订单里如果相同物料,一条带批次,一条不带批次,情况 |
| | | // for (OrderDetl xxx : old) { |
| | | // if (xxx.beSimilar(wrkDetl)) { |
| | | // if(Cools.isEmpty(orderDetl.getRemark())) { |
| | | // orderDetl.setRemark(xxx.getRemark()); |
| | | // }else { |
| | | // NccSaleXsfhmxWms currentData = JSONObject.parseObject(orderDetl.getRemark(), NccSaleXsfhmxWms.class); |
| | | // if (currentData == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // NccSaleXsfhmxWms nextData = JSONObject.parseObject(xxx.getRemark(), NccSaleXsfhmxWms.class); |
| | | // if (nextData == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // BigDecimal currentFslDecimal = currentData.getNastnum(); |
| | | // BigDecimal nextFslDecimal = nextData.getNastnum(); |
| | | // if(currentFslDecimal.doubleValue() < nextFslDecimal.doubleValue()) { |
| | | // orderDetl.setRemark(xxx.getRemark()); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // if (Cools.isEmpty(orderDetl.getRemark())) { |
| | | // for (OrderDetl xxx : old) { |
| | | // if (xxx.beSimilarByWrkDetl(wrkDetl)) { |
| | | // if(Cools.isEmpty(orderDetl.getRemark())) { |
| | | // orderDetl.setRemark(xxx.getRemark()); |
| | | // }else { |
| | | // NccSaleXsfhmxWms currentData = JSONObject.parseObject(orderDetl.getRemark(), NccSaleXsfhmxWms.class); |
| | | // if (currentData == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // NccSaleXsfhmxWms nextData = JSONObject.parseObject(xxx.getRemark(), NccSaleXsfhmxWms.class); |
| | | // if (nextData == null) { |
| | | // continue; |
| | | // } |
| | | // |
| | | // BigDecimal currentFslDecimal = currentData.getNastnum(); |
| | | // BigDecimal nextFslDecimal = nextData.getNastnum(); |
| | | // if(currentFslDecimal.doubleValue() < nextFslDecimal.doubleValue()) { |
| | | // orderDetl.setRemark(xxx.getRemark()); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // if (Cools.isEmpty(orderDetl.getRemark())) { |
| | | // throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败,ERP原始数据为空"); |
| | | // } |
| | | // } |
| | | // if (!orderDetlService.insert(orderDetl)) { |
| | | // throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | // } |
| | | // } |
| | | |
| | | // 修改订单状态 2.作业中 ===>> 4.待上报 |
| | | if (!orderService.updateSettle(orderSou.getId(), 4L, null)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | // 修改订单状态 4.完成 ===>> 6.结束 |
| | | OrderInAndOutUtil.updateOrder(order.getPakinPakoutStatus$(), order.getId(), 6L, null); |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> checkDBDD(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | if (!docType.getDocName().equals("集团内部调拨")) { |
| | | return SUCCESS; |
| | | } |
| | | Order orderSou = orderService.selectByNo(order.getOrderNo()); |
| | | if (orderSou == null) { |
| | | return FAIL.setMsg("订单不存在,请联系管理员"); |
| | | } |
| | | if (!orderSou.getSettle().equals(2L)) { |
| | | return FAIL.setMsg("订单状态不正确,请联系管理员"); |
| | | } |
| | | |
| | | List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); |
| | | boolean complete = true; |
| | | // for (OrderDetl orderDetl : orderDetls) { |
| | | // if (orderDetl.getAnfme() > orderDetl.getQty()) { |
| | | // complete = false; |
| | | // break; |
| | | // } |
| | | // } |
| | | if (complete) { |
| | | List<OrderDetl> old = orderDetlService.selectByOrderId(orderSou.getId()); |
| | | if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()))) { |
| | |
| | | //先按照批次匹配,再按照无批次号批次,因为销售发货,批次号可能带,有可能不携带,所以就会有问题;而且考虑到一条订单里如果相同物料,一条带批次,一条不带批次,情况 |
| | | for (OrderDetl xxx : old) { |
| | | if (xxx.beSimilar(wrkDetl)) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | if(Cools.isEmpty(orderDetl.getRemark())) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | }else { |
| | | NccSaleDbddWms currentData = JSONObject.parseObject(orderDetl.getRemark(), NccSaleDbddWms.class); |
| | | if (currentData == null) { |
| | | continue; |
| | | } |
| | | |
| | | NccSaleDbddWms nextData = JSONObject.parseObject(xxx.getRemark(), NccSaleDbddWms.class); |
| | | if (nextData == null) { |
| | | continue; |
| | | } |
| | | |
| | | BigDecimal currentFslDecimal = currentData.getFsl(); |
| | | BigDecimal nextFslDecimal = nextData.getFsl(); |
| | | if(currentFslDecimal.doubleValue() < nextFslDecimal.doubleValue()) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (Cools.isEmpty(orderDetl.getRemark())) { |
| | | for (OrderDetl xxx : old) { |
| | | if (xxx.beSimilarByWrkDetl(wrkDetl)) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | if(Cools.isEmpty(orderDetl.getRemark())) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | }else { |
| | | NccSaleDbddWms currentData = JSONObject.parseObject(orderDetl.getRemark(), NccSaleDbddWms.class); |
| | | if (currentData == null) { |
| | | continue; |
| | | } |
| | | |
| | | NccSaleDbddWms nextData = JSONObject.parseObject(xxx.getRemark(), NccSaleDbddWms.class); |
| | | if (nextData == null) { |
| | | continue; |
| | | } |
| | | |
| | | BigDecimal currentFslDecimal = currentData.getFsl(); |
| | | BigDecimal nextFslDecimal = nextData.getFsl(); |
| | | if(currentFslDecimal.doubleValue() < nextFslDecimal.doubleValue()) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (Cools.isEmpty(orderDetl.getRemark())) { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败,ERP原始数据为空"); |
| | | } |
| | | } |
| | | if (!orderDetlService.insert(orderDetl)) { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |