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$()+"SH");
|
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);
|
//记录上报数据
|
OperateLog operateLog1 = new OperateLog();
|
operateLog1.setAction("上报ERP," + ERP_URL + ERP_REPORT);
|
operateLog1.setRequest(param.toString());
|
operateLog1.setResponse(response);
|
operateLog1.setCreateTime(new Date());
|
operateLog1.setSystem("WMS");
|
operateLog1.setUserId(9527L);
|
operateLog1.setIp("127.0.0.1");
|
operateLogService.save(operateLog1);
|
}
|
}
|
}
|
|
// 保存工作主档历史档
|
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;
|
}
|
|
}
|