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<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 ConfigService configService;
|
@Autowired
|
private ApiLogService apiLogService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
|
@Transactional
|
public ReturnT<String> start(WrkMast wrkMast) {
|
try {
|
List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
|
// 修改订单状态 作业中 ===>> 已完成
|
if (!Cools.isEmpty(wrkDetls)) {
|
Iterator<WrkDetl> 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<WaitPakin>().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<WrkMast>().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<WrkDetl> wrkDetls1 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().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<WrkDetl>().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<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
|
if (Cools.isEmpty(wrkDetls)) {
|
return false;
|
}
|
List<ErpReportParam> reportParams = new ArrayList<>();
|
wrkDetls.forEach(wrkDetl -> {
|
WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
|
.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<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq(
|
"wrk_no", wrkMast.getWrkNo()));
|
if (Cools.isEmpty(wrkDetls)) {
|
return false;
|
}
|
List<ErpReportParam> 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<ErpReportParam> reportParams) {
|
Config url = configService.selectOne(new EntityWrapper<Config>()
|
.eq("code", "erpurl"));
|
if (Cools.isEmpty(url)) {
|
throw new CoolException("配置参数异常,ERP地址异常");
|
}
|
Config path = configService.selectOne(new EntityWrapper<Config>()
|
.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
|
);
|
}
|
}
|
}
|