package com.zy.asrs.task.handler; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; import com.zy.asrs.service.ReportToThirdService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.utils.OrderInAndOutUtil; import com.zy.common.model.DetlDto; 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; /** * Created by vincent on 2020/7/7 */ @Slf4j @Service public class OrderSyncHandler extends AbstractHandler { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private DocTypeService docTypeService; @Autowired private ReportToThirdService reportToThirdService; @Transactional public ReturnT startOrderIssuedOnceMore(Order order) { DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } Order order1 = OrderInAndOutUtil.selectByNo(order.getPakinPakoutStatus$(), order.getOrderNo()); if (!Cools.isEmpty(order1)) { return FAIL.setMsg("请等待...订单执行档案正在转历史档案!!!"); } List orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); if (!Cools.isEmpty(orderDetls) || !orderDetls.isEmpty()) { return FAIL.setMsg("请等待...订单执行明细档案正在转历史档案!!!"); } // 单据明细档 List orderDetlList = orderDetlService.selectByOrderId(order.getId()); for (OrderDetl orderDetl : orderDetlList) { if (orderDetl.getQty().equals(0D)) { continue; } orderDetl.setWorkQty(orderDetl.getQty()); orderDetl.setAnfme(orderDetl.getAnfme() - orderDetl.getQty()); orderDetl.setQty(0D); orderDetlService.updateById(orderDetl); } // 修改订单状态 99.再次作业 ===>> 1.待作业 if (!orderService.updateSettle(order.getId(), 1L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } return SUCCESS; } @Transactional public ReturnT startOrderIssued(Order order) { DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } List orderDetls = orderDetlService.selectByOrderId(order.getId()); OrderInAndOutUtil.insertOrder(order.getPakinPakoutStatus$(), order); // 单据明细档 List list = new ArrayList<>(); List orderDetlList = new ArrayList<>(); 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()); 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; detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme()); 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(orderDetl.getAnfme() + detail.getAnfme()); } else { list.add(dto); orderDetlList.add(detail); } } for (OrderDetl orderDetl : orderDetlList) { orderDetl.setWorkQty(0D); OrderInAndOutUtil.insertOrderDetl(order.getPakinPakoutStatus$(), order, orderDetl); } // 修改订单状态 1.未作业 ===>> 2.作业中 if (!orderService.updateSettle(order.getId(), 2L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } return SUCCESS; } @Transactional public ReturnT startOrderInAndOutUtil(Order order) { DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } Order orderSou = orderService.selectByNo(order.getOrderNo()); if (!orderSou.getSettle().equals(2L)) { return FAIL.setMsg("订单状态不正确,请联系管理员"); } List orderDetlList = orderDetlService.selectByOrderId(orderSou.getId()); List orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); for (OrderDetl orderDetlSou : orderDetlList) { for (OrderDetl orderDetl : orderDetls) { if (orderDetl.getQty().equals(0D)) { continue; } if (orderDetlSou.beSimilar(orderDetl)) { double v = orderDetlSou.getAnfme() - orderDetlSou.getQty(); if (v < orderDetl.getQty() || orderDetl.getQty().equals(v)) { orderDetlSou.setQty(orderDetlSou.getAnfme()); orderDetl.setQty(orderDetl.getQty() - v); break; } else { orderDetlSou.setQty(orderDetlSou.getQty() + orderDetl.getQty()); orderDetl.setQty(0D); } } } } for (OrderDetl orderDetlSou : orderDetlList) { orderDetlService.updateById(orderDetlSou); } // 修改订单状态 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 startOrderReport(Order order) { DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } List orderDetls = orderDetlService.selectByOrderId(order.getId()); try { reportToThirdService.report(order, orderDetls, docType); } catch (Exception e) { return FAIL; } return SUCCESS; } }