package com.zy.asrs.task.handler; import ch.qos.logback.core.pattern.color.MagentaCompositeConverter; import cn.hutool.json.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.ErpReportParam; import com.zy.asrs.service.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.utils.HttpHandler; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; /** * Created by vincent on 2020/7/6 */ @Slf4j @Service public class WorkLogHandler extends AbstractHandler { @Autowired private WrkMastService wrkMastService; @Autowired private WrkMastLogService wrkMastLogService; @Autowired private WrkDetlService wrkDetlService; @Autowired private WrkDetlLogService wrkDetlLogService; @Autowired private WaitPakinService waitPakinService; @Autowired private WaitPakinLogService waitPakinLogService; @Autowired private OrderService orderService; @Autowired private ConfigService configService; @Autowired private ApiLogService apiLogService; @Autowired private OrderDetlService orderDetlService; @Transactional public ReturnT start(WrkMast wrkMast) { try { List wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); // 修改订单状态 作业中 ===>> 已完成 if (!Cools.isEmpty(wrkDetls)) { Iterator iterator = wrkDetls.iterator(); while (iterator.hasNext()) { WrkDetl wrkDetl = iterator.next(); if (!Cools.isEmpty(wrkDetl.getOrderNo())) { orderService.checkComplete(wrkDetl.getOrderNo()); iterator.remove(); } } } // 入库 -------------------------------------------------------------------------------- if (wrkMast.getWrkSts() == 5) { // 全板入库 if (wrkMast.getIoType() == 1) { // 入库完成上报ERP 按托盘上报 if (!reportInToErp(wrkMast)){ exceptionHandle("入库上报ERP失败", wrkMast.getWrkNo()); return FAIL; } // 入库通知单 if (!Cools.isEmpty(wrkMast.getBarcode())) { // 保存入库通知档历史档 if (!waitPakinLogService.save(wrkMast.getBarcode())) { // exceptionHandle("保存入库通知档历史档[workNo={0}]失败", wrkMast.getWrkNo()); } // 删除入库通知档 if (!waitPakinService.delete(new EntityWrapper().eq("zpallet", wrkMast.getBarcode()))) { // exceptionHandle("删除入库通知档[workNo={0}]失败", wrkMast.getWrkNo()); } } // // 手动入库生成单据 【 上报三方平台 】 // if (!Cools.isEmpty(wrkDetls)) { // if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls)) { // exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo()); // } // } // 拣料再入库 } else if (wrkMast.getIoType() == 53) { // if (!Cools.isEmpty(wrkDetls)) { // if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) { // exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); // } // } } // 出库 -------------------------------------------------------------------------------- } else if (wrkMast.getWrkSts() == 15) { // if (!Cools.isEmpty(wrkDetls)) { // if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) { // exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); // } // } if (!reportOutToErp(wrkMast)){ exceptionHandle("出库上报ERP失败", wrkMast.getWrkNo()); return FAIL; } } // 保存工作主档历史档 // if (!wrkMastLogService.save(wrkMast.getWrkNo())) { // exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); // } Date now = new Date(); WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); WrkMastLog wrkMastLog = new WrkMastLog(); wrkMastLog.sync(wrkMast1); wrkMastLog.setModiTime(now); wrkMastLog.setWrkSts(wrkMast1.getWrkSts().intValue()); if (!wrkMastLogService.insert(wrkMastLog)){ exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); } // 删除工作主档 if (!wrkMastService.deleteById(wrkMast)) { exceptionHandle("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo()); } // 保存工作明细档历史档 List wrkDetls1 = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); wrkDetls1.forEach( wrkDetl -> { WrkDetlLog wrkDetlLog = new WrkDetlLog(); wrkDetlLog.sync(wrkDetl); wrkDetlLog.setModiTime(now); if (!wrkDetlLogService.insert(wrkDetlLog)){ exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo()); } }); // if (!wrkDetlLogService.save(wrkMast.getWrkNo())) { //// exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo()); // } // 删除工作明细档 if (!wrkDetlService.delete(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo()))) { exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo()); } } catch (Exception e) { log.error("fail", e); e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } return SUCCESS; } // 按托盘上报ERP @Transactional public boolean reportInToErp(WrkMast wrkMast) { if (Cools.isEmpty(wrkMast)){ return false; } List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq("wrk_no", wrkMast.getWrkNo())); if (Cools.isEmpty(wrkDetls)) { return false; } List reportParams = new ArrayList<>(); wrkDetls.forEach(wrkDetl -> { WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper() .eq("zpallet", wrkMast.getBarcode()) .eq("matnr", wrkDetl.getMatnr())); if (Cools.isEmpty(waitPakin)) { throw new CoolException("托盘码" + wrkMast.getBarcode() + "的组托数据" + wrkDetl.getMatnr() + "已不存在"); } ErpReportParam erpReportParam = new ErpReportParam(); erpReportParam.setBatch(waitPakin.getBatch()); // 批次 erpReportParam.setQty(waitPakin.getAnfme().toString()); // 本次入/出数量 erpReportParam.setLineId(""); // 行内码 erpReportParam.setPlanNo(""); // 计划跟踪号 erpReportParam.setOrderNo(waitPakin.getOrderNo()); // 订单编码 erpReportParam.setWareHouseId(""); // 仓库编码 erpReportParam.setLocId(wrkMast.getLocNo()); // 库位编码 erpReportParam.setMatNr(waitPakin.getMatnr()); // 物料编码 erpReportParam.setPalletId(waitPakin.getZpallet()); // 托盘号 reportParams.add(erpReportParam); }); R result = report(reportParams); if (result.get("code").equals("200")){ return true; } return false; } // 按托盘上报ERP public boolean reportOutToErp(WrkMast wrkMast) { if (Cools.isEmpty(wrkMast)){ return false; } List wrkDetls = wrkDetlService.selectList(new EntityWrapper().eq( "wrk_no", wrkMast.getWrkNo())); if (Cools.isEmpty(wrkDetls)) { return false; } List reportParams = new ArrayList<>(); for (WrkDetl wrkDetl : wrkDetls) { // 工作档明细没有订单号 手动出库 不上报 if (Cools.isEmpty(wrkDetl.getOrderNo())){ return true; } ErpReportParam erpReportParam = new ErpReportParam(); erpReportParam.setOrderNo(wrkDetl.getOrderNo()); erpReportParam.setPlanNo(""); erpReportParam.setLineId(""); erpReportParam.setWareHouseId(""); erpReportParam.setLocId(wrkMast.getSourceLocNo()); erpReportParam.setMatNr(wrkDetl.getMatnr()); erpReportParam.setQty(wrkDetl.getAnfme().toString()); erpReportParam.setPalletId(wrkDetl.getZpallet()); erpReportParam.setBatch(wrkDetl.getBatch()); reportParams.add(erpReportParam); } R report = report(reportParams); if (report.get("code").equals("200")){ return true; } return false; } // 调用ERP接口上报 @Transactional public R report(List reportParams) { Config url = configService.selectOne(new EntityWrapper() .eq("code", "erpurl")); if (Cools.isEmpty(url)) { throw new CoolException("配置参数异常,ERP地址异常"); } Config path = configService.selectOne(new EntityWrapper() .eq("code", "erpreport")); if (Cools.isEmpty(path)) { throw new CoolException("配置参数异常,ERP上报路径异常"); } log.info("WMS--->ERP上报参数:" + JSONObject.toJSONString(reportParams)); if (Cools.isEmpty(reportParams)) { return R.error("参数为空"); } String response = null; boolean flag = false; try { response = new HttpHandler.Builder() .setUri(url.getValue()) .setPath(path.getValue()) .setJson(JSONObject.toJSONString(reportParams)) .build() .doPost(); if (Cools.isEmpty(response)){ return R.error("ERP接口无响应"); } JSONObject jsonObject = JSONObject.parseObject(response); Integer code = jsonObject.getInteger("code"); if (!Cools.isEmpty(jsonObject) && code == 200) { flag = true; return R.ok("WMS--->ERP上报成功"); }else { String msg = jsonObject.getString("msg"); return R.error(Cools.isEmpty(msg) ? "WMS--->ERP上报失败!!!" : msg); } }catch (Exception e) { log.error(e.getMessage(), e); return R.error(e.getMessage()); }finally { // 保存日志 apiLogService.save( "WMS--->ERP入/出库结果上报", url.getValue() + path.getValue(), null, url.getValue(), JSONObject.toJSONString(reportParams), response, flag ); } } }