package com.zy.asrs.task.handler; import com.alibaba.fastjson.JSON; import com.core.common.Cools; import com.core.common.DateUtils; 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.ApiLogService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.service.erp.ErpService; import com.zy.common.service.erp.entity.VoucherDetail; 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 org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.Date; 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 ApiLogService apiLogService; @Autowired private DocTypeService docTypeService; @Autowired private ErpService erpService; @Transactional public ReturnT start(Order order) { DocType docType = docTypeService.selectById(order.getDocType()); if (null == docType) { return SUCCESS; } if (!Cools.isEmpty(docType.getMemo())) { if (docType.getMemo().equals("hand")) { // 修改订单状态 4.完成 ===>> 6.已上报 if (!orderService.updateSettle(order.getId(), 6L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } return SUCCESS; } } List orderDetls = orderDetlService.selectByOrderId(order.getId()); // 入库完成上报 if (docType.getPakin() == 1) { try { // erp 同步 int state = 2; if (!erpService.updateStateForVoucher(order.getOrderNo(), state)) { throw new CoolException(order.getOrderNo() + "订单修改State为"+state+"失败"); } else { erpService.updateTimeForVoucherDetail(order.getOrderNo()); } // 修改订单状态 4.完成 ===>> 6.已上报 if (!orderService.updateSettle(order.getId(), 6L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } } catch (Exception e) { log.error("fail", e); return FAIL.setMsg(e.getMessage()); } } // 出库完成上报 if (docType.getPakout() == 1) { try { double TotalNum = 0.0; Integer TotalCount = orderDetls.size(); // erp 同步 int state = 2; if (!erpService.updateStateForVoucher(order.getOrderNo(), state)) { throw new CoolException(order.getOrderNo() + "订单修改State为"+state+"失败"); } else { Date now = new Date(); for (OrderDetl orderDetl : orderDetls) { TotalNum = TotalNum + orderDetl.getAnfme(); if (null == erpService.selectVoucherDetail(order.getOrderNo(), orderDetl.getBatch())) { VoucherDetail voucherDetail = new VoucherDetail(); voucherDetail.setVoucherID(order.getOrderNo()); voucherDetail.setPickID("fepvnn0496"); voucherDetail.setBarcode(orderDetl.getBatch()); voucherDetail.setLastUpdatedDate(DateUtils.convert(now)); if (!erpService.insertVoucherDetail(voucherDetail)) { throw new CoolException(order.getOrderNo() + "订单添加VoucherDetail"+ JSON.toJSONString(voucherDetail)+"失败"); } } } } // 更新重量和数量 if (!erpService.updateStateForVoucher(order.getOrderNo(), TotalNum, TotalCount)) { throw new CoolException(order.getOrderNo() + "订单修改重量和数量失败"); } // 修改订单状态 4.完成 ===>> 6.已上报 if (!orderService.updateSettle(order.getId(), 6L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } } catch (Exception e) { log.error("fail", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } } return SUCCESS; } }