| | |
| | | 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.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 |
| | |
| | | |
| | | 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) { |
| | | 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)) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | } |
| | | } |
| | | if (Cools.isEmpty(orderDetl.getRemark())) { |
| | | for (OrderDetl xxx : old) { |
| | | if (xxx.beSimilarByWrkDetl(wrkDetl)) { |
| | | orderDetl.setRemark(xxx.getRemark()); |
| | | 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原始数据为空"); |
| | | } |
| | | } |
| | | if (!orderDetlService.insert(orderDetl)) { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | |
| | | 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)) { |
| | |
| | | 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()))) { |
| | |
| | | //先按照批次匹配,再按照无批次号批次,因为销售发货,批次号可能带,有可能不携带,所以就会有问题;而且考虑到一条订单里如果相同物料,一条带批次,一条不带批次,情况 |
| | | 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() + "】明细失败"); |