| package com.zy.asrs.wms.task.handler; | 
|   | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.alibaba.fastjson.JSONArray; | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
| import com.zy.asrs.common.sys.entity.OperateLog; | 
| import com.zy.asrs.common.sys.service.OperateLogService; | 
| import com.zy.asrs.common.utils.HttpHandler; | 
| import com.zy.asrs.common.utils.Utils; | 
| import com.zy.asrs.common.wms.entity.Order; | 
| import com.zy.asrs.common.wms.entity.WaitPakin; | 
| import com.zy.asrs.common.wms.entity.WrkDetl; | 
| import com.zy.asrs.common.wms.entity.WrkMast; | 
| import com.zy.asrs.common.wms.service.*; | 
| import com.zy.asrs.framework.common.Cools; | 
| import com.zy.asrs.wms.task.AbstractHandler; | 
| import com.zy.asrs.wms.task.core.ReturnT; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
| import org.springframework.transaction.interceptor.TransactionAspectSupport; | 
|   | 
| import java.text.SimpleDateFormat; | 
| import java.util.*; | 
|   | 
| /** | 
|  * Created by vincent on 2020/7/6 | 
|  */ | 
| @Slf4j | 
| @Service | 
| public class WorkLogHandler extends AbstractHandler<String> { | 
|   | 
|     @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 OperateLogService operateLogService; | 
|   | 
|     @Value("${erp.url}") | 
|     private String ERP_URL; | 
|   | 
|     @Value("${erp.report}") | 
|     private String ERP_REPORT; | 
|   | 
|     @Value("${erp.login}") | 
|     private String ERP_LOGIN; | 
|   | 
|     // update asr_wrk_mast set inv_wh = 'Y', ove_mk = 'Y' where wrk_no = | 
|     @Transactional | 
|     public ReturnT<String> start(WrkMast wrkMast) { | 
|         Long hostId = wrkMast.getHostId(); | 
|         try { | 
|             List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId)); | 
|             // 区分订单任务 | 
|             List<WrkDetl> wrkDetlsKeyOrder = new ArrayList<>(); | 
|             if (!Cools.isEmpty(wrkDetls)) { | 
|                 Iterator<WrkDetl> iterator = wrkDetls.iterator(); | 
|                 while (iterator.hasNext()) { | 
|                     WrkDetl wrkDetl = iterator.next(); | 
|                     if (!Cools.isEmpty(wrkDetl.getOrderNo())) { | 
|                         wrkDetlsKeyOrder.add(wrkDetl); | 
|                         iterator.remove(); | 
|                     } | 
|                 } | 
|             } | 
|   | 
|             // 入库 -------------------------------------------------------------------------------- | 
|             if (wrkMast.getWrkSts() == 100) { | 
|                 // 全板入库 | 
|                 if (wrkMast.getIoType() == 1) { | 
|                     // 入库通知单 | 
|                     if (!Cools.isEmpty(wrkMast.getBarcode())) { | 
|                         // 保存入库通知档历史档 | 
|                         if (!waitPakinLogService.saveToHistory(wrkMast.getBarcode(), hostId)) { | 
|                             exceptionHandle("保存入库通知档历史档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|                         } | 
|                         // 删除入库通知档 | 
|                         if (!waitPakinService.remove(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getZpallet, wrkMast.getBarcode()).eq(WaitPakin::getHostId, hostId))) { | 
|                             exceptionHandle("删除入库通知档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|                         } | 
|                     } | 
| //                    // 手动入库生成单据 【 上报三方平台 】 | 
| //                    if (!Cools.isEmpty(wrkDetls)) { | 
| //                        if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls, hostId)) { | 
| //                            exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo()); | 
| //                        } | 
| //                    } | 
|                     // 拣料再入库 | 
|                 } else if (wrkMast.getIoType() == 53) { | 
|                     if (!Cools.isEmpty(wrkDetls)) { | 
|                         if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls, hostId)) { | 
|                             exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); | 
|                         } | 
|                     } | 
|                 } | 
|   | 
|                 // 出库 -------------------------------------------------------------------------------- | 
|             } else if (wrkMast.getWrkSts() == 200) { | 
|                 if (!Cools.isEmpty(wrkDetls)) { | 
|                     if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls, hostId)) { | 
|                         exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); | 
|                     } | 
|                 } | 
|             } | 
|   | 
|             if (!wrkDetlsKeyOrder.isEmpty()) { | 
|                 //上报念初ERP   【 上报三方平台 】 | 
|                 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); | 
|                 String nowFormat = dateFormat.format(new Date()); | 
|   | 
|                 ArrayList<LinkedHashMap<String, Object>> mats = new ArrayList<>(); | 
|                 String orderNo = ""; | 
|                 for (WrkDetl wrkDetl : wrkDetlsKeyOrder) { | 
|                     orderNo = wrkDetl.getOrderNo(); | 
|                     LinkedHashMap<String, Object> mat = new LinkedHashMap<>(); | 
|                     mat.put("GoodsCode", wrkDetl.getMatnr()); | 
|                     mat.put("Num", wrkDetl.getAnfme()); | 
|                     if (!Cools.isEmpty(wrkDetl.getBatch())) { | 
|                         mat.put("BatchNo", wrkDetl.getBatch()); | 
|                     } | 
|                     if (!Cools.isEmpty(wrkDetl.getThreeCode())) { | 
|                         mat.put("DepotName", wrkDetl.getThreeCode()); | 
|                     } | 
|                     if (!Cools.isEmpty(wrkDetl.getSupp())) { | 
|                         mat.put("FromDanCode", wrkDetl.getSupp()); | 
|                     } | 
|                     if (!Cools.isEmpty(wrkDetl.getSuppCode())) { | 
|                         mat.put("FromNo", wrkDetl.getSuppCode()); | 
|                     } | 
|                     mats.add(mat); | 
|                 } | 
|                 Order order = orderService.selectByNo(orderNo, hostId); | 
|                 if (order != null) { | 
|                     LinkedHashMap<String, Object> param = new LinkedHashMap<>(); | 
|                     param.put("Login", ERP_LOGIN); | 
|                     param.put("DanType", order.getDocType$()); | 
|                     param.put("Date", nowFormat); | 
|                     param.put("DanCode", orderNo); | 
|                     param.put("Data", mats); | 
|   | 
|                     String response = ""; | 
|                     try { | 
|                         response = new HttpHandler.Builder() | 
|                                 .setUri(ERP_URL) | 
|                                 .setPath(ERP_REPORT + Utils.ncErpDataEncode(param)) | 
|                                 .build() | 
|                                 .doGet(); | 
|                         JSONObject jsonObject = JSON.parseObject(response); | 
|                         JSONArray result = jsonObject.getJSONArray("result"); | 
|                         Object object = result.get(0); | 
|                         JSONObject data = JSON.parseObject(object.toString()); | 
|                         if (data.getBoolean("State")) { | 
|                             //上报成功 | 
|                         } else { | 
|                             //上报失败 | 
|                             exceptionHandle("上报ERP失败[workNo={0}]失败", wrkMast.getWrkNo()); | 
|                         } | 
|                     } catch (Exception e) { | 
|                         e.printStackTrace(); | 
|                         //异常上报失败 | 
| //                        exceptionHandle("上报ERP异常失败[workNo={0}]失败", wrkMast.getWrkNo()); | 
|                     } finally { | 
|                         //记录上报数据 | 
|                         OperateLog operateLog = new OperateLog(); | 
|                         operateLog.setAction("上报ERP," + ERP_URL + ERP_REPORT); | 
|                         operateLog.setRequest(Utils.ncErpDataEncode(param)); | 
|                         operateLog.setResponse(response); | 
|                         operateLog.setCreateTime(new Date()); | 
|                         operateLog.setSystem("WMS"); | 
|                         operateLog.setUserId(9527L); | 
|                         operateLog.setIp("127.0.0.1"); | 
|                         operateLogService.save(operateLog); | 
|                     } | 
|                 } | 
|             } | 
|   | 
|             // 保存工作主档历史档 | 
|             if (!wrkMastLogService.saveToHistory(wrkMast.getId())) { | 
|                 exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|             } | 
|             // 删除工作主档 | 
|             if (!wrkMastService.removeById(wrkMast)) { | 
|                 exceptionHandle("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|             } | 
|             // 保存工作明细档历史档 | 
|             if (!wrkDetlLogService.saveToHistory(wrkMast.getWrkNo(), hostId)) { | 
| //                exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|             } | 
|             // 删除工作明细档 | 
|             if (!wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId))) { | 
| //                exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo()); | 
|             } | 
|             // 修改订单状态 作业中 ===>> 已完成 | 
|             for (WrkDetl wrkDetl : wrkDetlsKeyOrder) { | 
|                 orderService.checkComplete(wrkDetl.getOrderNo(), hostId); | 
|             } | 
|         } catch (Exception e) { | 
|             log.error("fail", e); | 
|             e.printStackTrace(); | 
|             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|             return FAIL.setMsg(e.getMessage()); | 
|         } | 
|         return SUCCESS; | 
|     } | 
|   | 
| } |