package com.chinaztt.mes.warehouse.state.escort;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.chinaztt.mes.common.gsm.escort.EscortServiceGsm;
|
import com.chinaztt.mes.common.gsm.escort.EscortSingleAddModel;
|
import com.chinaztt.mes.common.gsm.escort.EscortSingleDeleteModel;
|
import com.chinaztt.mes.common.gsm.in.InStorageService;
|
import com.chinaztt.mes.common.gsm.in.InStorageSingleAddModel;
|
import com.chinaztt.mes.common.gsm.in.InStorageSingleDeleteModel;
|
import com.chinaztt.mes.common.gsm.out.OutStorageService;
|
import com.chinaztt.mes.common.gsm.out.OutStorageSingleAddModel;
|
import com.chinaztt.mes.common.gsm.out.OutStorageSingleDeleteModel;
|
import com.chinaztt.mes.common.handler.StateMachineHandler;
|
import com.chinaztt.mes.common.wrapper.QueryWrapperUtil;
|
import com.chinaztt.mes.warehouse.dto.EscortDetailDTO;
|
import com.chinaztt.mes.warehouse.entity.Escort;
|
import com.chinaztt.mes.warehouse.entity.EscortDetail;
|
import com.chinaztt.mes.warehouse.mapper.EscortDetailMapper;
|
import com.chinaztt.mes.warehouse.mapper.EscortMapper;
|
import com.chinaztt.mes.warehouse.mapper.JoinStockOrderMapper;
|
import com.chinaztt.mes.warehouse.state.escort.constant.EscortEvents;
|
import com.chinaztt.mes.warehouse.state.escort.constant.EscortStateStringValues;
|
import com.chinaztt.mes.warehouse.util.StockUtils;
|
import com.chinaztt.mes.warehouse.util.TransactionType;
|
import lombok.AllArgsConstructor;
|
import org.dom4j.Document;
|
import org.dom4j.DocumentHelper;
|
import org.dom4j.Element;
|
import org.springframework.messaging.Message;
|
import org.springframework.statemachine.StateMachine;
|
import org.springframework.statemachine.annotation.OnTransition;
|
import org.springframework.statemachine.annotation.WithStateMachine;
|
import org.springframework.stereotype.Component;
|
|
import java.math.BigDecimal;
|
import java.time.format.DateTimeFormatter;
|
import java.util.List;
|
|
|
/**
|
* @Author: cxf
|
* @Date: 2020-07-24 9:51
|
*/
|
@AllArgsConstructor
|
@Component
|
@WithStateMachine(id = "escortStateMachine")
|
public class EscortStateListener {
|
private StockUtils stockUtils;
|
private EscortMapper escortMapper;
|
private EscortDetailMapper escortDetailMapper;
|
private JoinStockOrderMapper joinStockOrderMapper;
|
|
|
/**
|
* 完成
|
*/
|
@OnTransition(source = EscortStateStringValues.DRAFT, target = EscortStateStringValues.COMPLETED)
|
public boolean complete(StateMachine stateMachine, Message<EscortEvents> msg) {
|
Escort escort = (Escort) msg.getHeaders().get("escort");
|
// 1.更新状态
|
escort.setStatus(EscortStateStringValues.COMPLETED);
|
escortMapper.updateById(escort);
|
// 2.更新实时库存和预留数量
|
EscortDetailDTO escortDetail = new EscortDetailDTO();
|
escortDetail.setEscortId(escort.getId());
|
List<EscortDetailDTO> detailList = escortDetailMapper.getEscortDetailList(QueryWrapperUtil.gen(escortDetail));
|
// boolean isFirstCompleted = (null == escort.getEscortAutoId()) ; //区分是否首次点击完成 同步gsm 是的话 同步即可 如果是非首次 需要先删除 后新增
|
// StringBuffer escortOutAutoId = new StringBuffer();
|
// String outAutoIdStr = null;
|
if (CollectionUtil.isNotEmpty(detailList)) {
|
for (EscortDetailDTO detail : detailList) {
|
try {
|
stockUtils.updateById(detail.getStockId(), detail.getDeliveryQty().negate(), detail.getDeliveryQty()
|
.negate(), BigDecimal.ZERO, BigDecimal.ZERO, escort.getEscortNo(), TransactionType.SALES_ORDER_DELIVERY.getValue());
|
//同步gsm
|
//调用GSM入库并把入库的id同步到mes系统中
|
// long inAutoId =syncGsmIn(escort,detail);
|
// detail.setEscortInAutoId(inAutoId);
|
// escortDetailMapper.updateById(detail);
|
// //调用GSM的发货新增并把发货的id同步到mes系统中
|
// long outAutoId = syncGsmOut(escort,detail);
|
// detail.setEscortOutAutoId(outAutoId);
|
// escortDetailMapper.updateById(detail);
|
// //拼接GSM发货id
|
// escortOutAutoId.append(outAutoId).append(",");
|
} catch (RuntimeException e) {
|
stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, escort.getEscortNo()
|
+ "#" + detail.getPartBatchNo() + ":" + e.getMessage());
|
return false;
|
}
|
}
|
// outAutoIdStr = escortOutAutoId.deleteCharAt(escortOutAutoId.length() - 1).toString();
|
}
|
//调用押运单的同步
|
// long escortAutoId = syncGsmEscort(escort,outAutoIdStr);
|
//将返回的GSM押运单的id存到mes的押运单中
|
// escort.setEscortAutoId(escortAutoId);
|
escortMapper.updateById(escort);
|
// 3.更新发货数量
|
updateDeliveryQuantity(escort.getId(), "+");
|
//同步gsm
|
// 2.保存发货明细
|
// StringBuffer escortOutAutoId = new StringBuffer();
|
|
// try {
|
//// if(!isFirstCompleted){
|
//// deleteEscortStorage(escort);
|
//// }
|
// if (CollectionUtil.isNotEmpty(detailList)) {
|
// for (EscortDetailDTO escortDetailEn: detailList) {
|
//// if(!isFirstCompleted){ //非首次确定同步 需要先删除 后新增
|
//// deleteOutStorage(escort,escortDetailEn);
|
//// deleteInStorage(escort,escortDetailEn);
|
//// }
|
// //调用GSM入库并把入库的id同步到mes系统中
|
// long inAutoId =syncGsmIn(escort,escortDetailEn);
|
// escortDetailEn.setEscortInAutoId(inAutoId);
|
// escortDetailMapper.updateById(escortDetailEn);
|
// //调用GSM的发货新增并把发货的id同步到mes系统中
|
// long outAutoId = syncGsmOut(escort,escortDetailEn);
|
// escortDetailEn.setEscortOutAutoId(outAutoId);
|
// escortDetailMapper.updateById(escortDetailEn);
|
// //拼接GSM发货id
|
// escortOutAutoId.append(outAutoId).append(",");
|
// }
|
// }
|
// String outAutoIdStr = escortOutAutoId.deleteCharAt(escortOutAutoId.length() - 1).toString();
|
// //调用押运单的同步
|
// long escortAutoId = syncGsmEscort(escort,outAutoIdStr);
|
//// //将返回的GSM押运单的id存到mes的押运单中
|
// escort.setEscortAutoId(escortAutoId);
|
// escortMapper.updateById(escort);
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, escort.getEscortNo()
|
// + "#" + ":" + e.getMessage());
|
// return false;
|
// }
|
return true;
|
}
|
|
/**
|
* 取消
|
* 同步gsm删除
|
*
|
* @param stateMachine
|
* @param msg
|
* @return
|
*/
|
@OnTransition(source = EscortStateStringValues.COMPLETED, target = EscortStateStringValues.DRAFT)
|
public boolean cancel(StateMachine stateMachine, Message<EscortEvents> msg) {
|
Escort escort = (Escort) msg.getHeaders().get("escort");
|
// 1.更新状态
|
escort.setStatus(EscortStateStringValues.DRAFT);
|
escortMapper.updateById(escort);
|
// 2.更新实时库存和预留数量
|
EscortDetailDTO escortDetail = new EscortDetailDTO();
|
escortDetail.setEscortId(escort.getId());
|
List<EscortDetailDTO> detailList = escortDetailMapper.getEscortDetailList(QueryWrapperUtil.gen(escortDetail));
|
try {
|
// deleteEscortStorage(escort);
|
if (CollectionUtil.isNotEmpty(detailList)) {
|
for (EscortDetailDTO detail : detailList) {
|
stockUtils.updateById(detail.getStockId(), detail.getDeliveryQty(), detail.getDeliveryQty(), BigDecimal.ZERO, BigDecimal.ZERO, escort.getEscortNo(), TransactionType.CANCEL_SALES_ORDER_DELIVERY.getValue());
|
|
//同步gsm
|
// deleteOutStorage(escort, detail);
|
// deleteInStorage(escort, detail);
|
}
|
}
|
} catch (Exception e) {
|
stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY
|
, escort.getEscortNo() + "#" + ":" + e.getMessage());
|
return false;
|
}
|
// 3.更新发货数量
|
updateDeliveryQuantity(escort.getId(), "-");
|
return true;
|
}
|
|
public synchronized void updateDeliveryQuantity(Long escortId, String plusOrMinus) {
|
escortMapper.updateStockOrderById(escortId, plusOrMinus);
|
escortMapper.updateCustomerOrderById(escortId);
|
}
|
|
|
/**
|
* 删除GSM的押运单
|
*
|
* @param escort
|
*/
|
public void deleteEscortStorage(Escort escort) throws Exception {
|
String inAutoId = String.valueOf(escort.getEscortAutoId());
|
if (!StringUtils.isEmpty(inAutoId)) {
|
EscortServiceGsm escortServiceGsm = new EscortServiceGsm();
|
EscortSingleDeleteModel escortSingleDeleteModel = new EscortSingleDeleteModel();
|
escortSingleDeleteModel.setSalesServiceKey("5CEa1840tB4D8e83E1BA886FE42a60C7");
|
escortSingleDeleteModel.setID(inAutoId);
|
escortSingleDeleteModel.setEscortNo(escort.getEscortNo());
|
escortSingleDeleteModel.setEntryPeople(StringUtils.isBlank(escort.getSalesman()) ? "1" : escort.getSalesman());
|
escortSingleDeleteModel.setEntryPeopleWorkCode(escort.getSalesmanWorkCode() == null ? "1" : escort.getSalesmanWorkCode());
|
escortSingleDeleteModel.setIsJosn("0");
|
|
Document deleteDocument = DocumentHelper.parseText(escortServiceGsm.getEscortServiceSoap().singleDelete(escortSingleDeleteModel));
|
Element deleteRootElement = deleteDocument.getRootElement();
|
//错误代码
|
String inErrorCode = deleteRootElement.element("miap_header").element("errorcode").getText();
|
if (!inErrorCode.equals("0")) {
|
//获取错误信息
|
String deleteErrorMessage = deleteRootElement.element("miap_header").element("errormsg").getText();
|
//抛出错误
|
if (!inErrorCode.equals("90") && !inErrorCode.equals("88") && !inErrorCode.equals("89") && !inErrorCode.equals("87")) {
|
throw new RuntimeException("GSM入库记录删除失败,原因:" + deleteErrorMessage + "请手动删除");
|
}
|
}
|
}
|
}
|
|
/**
|
* 删除GSM的出库记录
|
*
|
* @param escort
|
* @param escortDetail
|
*/
|
public void deleteOutStorage(Escort escort, EscortDetail escortDetail) throws Exception {
|
//查找发货绑定的客户订单的GSM的合同产品id
|
Long id = escortMapper.selectCustomerOrder(escort.getCustomerOrderId());
|
//发货明细的出库id
|
String outAutoId = escortDetail.getEscortOutAutoId().toString();
|
if (!StringUtils.isEmpty(outAutoId)) {
|
OutStorageService outStorageService = new OutStorageService();
|
OutStorageSingleDeleteModel singleDeleteModel = new OutStorageSingleDeleteModel();
|
singleDeleteModel.setSalesServiceKey("5CEa1840tB4D8e83E1BA886FE42a60C7");
|
singleDeleteModel.setAutoID(outAutoId);
|
singleDeleteModel.setContractid(escort.getCustomerOrderNo());
|
singleDeleteModel.setContractInfoProductAutoID(String.valueOf(id));
|
singleDeleteModel.setEntryPeople(StringUtils.isBlank(escort.getSalesman()) ? "1" : escort.getSalesman());
|
singleDeleteModel.setEntryPeopleWorkCode(escort.getSalesmanWorkCode() == null ? "1" : escort.getSalesmanWorkCode());
|
singleDeleteModel.setIsJosn("0");
|
Document deleteDocument = DocumentHelper.parseText(outStorageService.getOutStorageServiceSoap().singleDelete(singleDeleteModel));
|
Element deleteRootElement = deleteDocument.getRootElement();
|
//错误代码
|
String outErrorCode = deleteRootElement.element("miap_header").element("errorcode").getText();
|
if (!outErrorCode.equals("0")) {
|
//获取错误信息
|
String deleteErrorMessage = deleteRootElement.element("miap_header").element("errormsg").getText();
|
//抛出错误
|
if (!outErrorCode.equals("90") && !outErrorCode.equals("88") && !outErrorCode.equals("89") && !outErrorCode.equals("87")) {
|
throw new RuntimeException("GSM出库记录删除失败,原因:" + deleteErrorMessage + "请手动删除");
|
}
|
}
|
}
|
}
|
|
/**
|
* 删除GSM的入库记录
|
*
|
* @param escort
|
* @param escortDetail
|
*/
|
public void deleteInStorage(Escort escort, EscortDetail escortDetail) throws Exception {
|
//查找发货绑定的客户订单的GSM的合同产品id
|
Long id = escortMapper.selectCustomerOrder(escort.getCustomerOrderId());
|
String inAutoId = String.valueOf(escortDetail.getEscortInAutoId());
|
if (!StringUtils.isEmpty(inAutoId)) {
|
InStorageService inStorageService = new InStorageService();
|
InStorageSingleDeleteModel singleDeleteModel = new InStorageSingleDeleteModel();
|
singleDeleteModel.setSalesServiceKey("5CEa1840tB4D8e83E1BA886FE42a60C7");
|
singleDeleteModel.setAutoID(inAutoId);
|
singleDeleteModel.setContractid(escort.getCustomerOrderNo());
|
singleDeleteModel.setContractInfoProductAutoID(String.valueOf(id));
|
singleDeleteModel.setEntryPeople(StringUtils.isBlank(escort.getSalesman()) ? "1" : escort.getSalesman());
|
singleDeleteModel.setEntryPeopleWorkCode(escort.getSalesmanWorkCode() == null ? "1" : escort.getSalesmanWorkCode());
|
singleDeleteModel.setIsJosn("0");
|
Document deleteDocument = DocumentHelper.parseText(inStorageService.getInStorageServiceSoap().singleDelete(singleDeleteModel));
|
Element deleteRootElement = deleteDocument.getRootElement();
|
//错误代码
|
String inErrorCode = deleteRootElement.element("miap_header").element("errorcode").getText();
|
if (!inErrorCode.equals("0")) {
|
//获取错误信息
|
String deleteErrorMessage = deleteRootElement.element("miap_header").element("errormsg").getText();
|
//抛出错误
|
if (!inErrorCode.equals("90") && !inErrorCode.equals("88") && !inErrorCode.equals("89") && !inErrorCode.equals("87")) {
|
throw new RuntimeException("GSM入库记录删除失败,原因:" + deleteErrorMessage + "请手动删除");
|
}
|
}
|
}
|
}
|
|
/**
|
* 同步GSM出库单
|
*
|
* @param escort
|
* @param escortDetail
|
* @return
|
*/
|
public long syncGsmOut(Escort escort, EscortDetail escortDetail) {
|
//查找发货绑定的客户订单的GSM的合同产品id
|
Long id = escortMapper.selectCustomerOrder(escort.getCustomerOrderId());
|
OutStorageService outStorageService = new OutStorageService();
|
OutStorageSingleAddModel outSingleAddModel = new OutStorageSingleAddModel();
|
outSingleAddModel.setSalesServiceKey("5CEa1840tB4D8e83E1BA886FE42a60C7");
|
outSingleAddModel.setContractid(escort.getCustomerOrderNo());
|
outSingleAddModel.setContractInfoProductAutoID(String.valueOf(id));
|
outSingleAddModel.setQualityQueryID(null);
|
outSingleAddModel.setInstorageAutoID(String.valueOf(escortDetail.getEscortInAutoId()));
|
if (escort.getEscortAutoId() != null) {
|
outSingleAddModel.setEscortID(String.valueOf(escort.getEscortAutoId()));
|
} else {
|
outSingleAddModel.setEscortID(null);
|
}
|
outSingleAddModel.setEntryPeople("1");
|
outSingleAddModel.setEntryPeopleWorkCode("1");
|
outSingleAddModel.setQuantity(escortDetail.getDeliveryQty().toString());
|
outSingleAddModel.setIsJosn("1");
|
|
String res = outStorageService.getOutStorageServiceSoap().singleAdd(outSingleAddModel);
|
JSONObject obj = JSONObject.parseObject(res);
|
int errorcode = obj.getJSONObject("miap_header").getIntValue("errorcode");
|
if (errorcode == 0) {
|
return obj.getJSONObject("miap_Body").getLong("AutoID");
|
} else {
|
String msg = obj.getJSONObject("miap_header").getString("errormsg");
|
throw new RuntimeException("GSM出库记录创建失败,原因:" + msg);
|
}
|
}
|
|
/**
|
* 同步GSM入库单
|
*
|
* @param escort
|
* @return
|
*/
|
public long syncGsmIn(Escort escort, EscortDetail escortDetail) {
|
//查找发货绑定的客户订单的GSM的合同产品id
|
Long id = escortMapper.selectCustomerOrder(escort.getCustomerOrderId());
|
//补充入库记录
|
InStorageService inStorageService = new InStorageService();
|
InStorageSingleAddModel singleAddModel = new InStorageSingleAddModel();
|
singleAddModel.setSalesServiceKey("5CEa1840tB4D8e83E1BA886FE42a60C7");
|
singleAddModel.setContractid(escort.getCustomerOrderNo());
|
singleAddModel.setContractInfoProductAutoID(String.valueOf(id));
|
singleAddModel.setEntryPeople("1");
|
singleAddModel.setEntryPeopleWorkCode("1");
|
singleAddModel.setQuantity(String.valueOf(escortDetail.getDeliveryQty()));
|
singleAddModel.setIsJosn("1");
|
|
String res = inStorageService.getInStorageServiceSoap().singleAdd(singleAddModel);
|
JSONObject obj = JSONObject.parseObject(res);
|
int errorcode = obj.getJSONObject("miap_header").getIntValue("errorcode");
|
if (errorcode == 0) {
|
return obj.getJSONObject("miap_Body").getLong("AutoID");
|
} else {
|
String msg = obj.getJSONObject("miap_header").getString("errormsg");
|
throw new RuntimeException("GSM入库记录创建失败,原因:" + msg);
|
}
|
}
|
|
|
/**
|
* 同步GSM押运单
|
*
|
* @param escort
|
* @param outAutoIdStr
|
* @return
|
*/
|
public long syncGsmEscort(Escort escort, String outAutoIdStr) {
|
EscortServiceGsm escortService = new EscortServiceGsm();
|
EscortSingleAddModel escortAddModel = new EscortSingleAddModel();
|
//秘钥
|
escortAddModel.setSalesServiceKey("5CEa1840tB4D8e83E1BA886FE42a60C7");
|
//押运单号
|
escortAddModel.setEscortNo(escort.getEscortNo());
|
//承运商
|
escortAddModel.setCarrier("111");
|
//收货人
|
escortAddModel.setReceiver(escort.getCustomerName());
|
//收货地址
|
escortAddModel.setAddress(escort.getAddress());
|
//收货人联系电话
|
escortAddModel.setPhone(escort.getPhone());
|
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
//要求到货时间
|
escortAddModel.setRequestDate(dateFormat.format(escort.getRequestDate()));
|
//发货日期
|
escortAddModel.setDeliveryDate("2021-10-16");
|
//车牌号
|
escortAddModel.setVehicleNo("1");
|
//司机
|
escortAddModel.setDriver("1");
|
//司机电话
|
escortAddModel.setDriverPhone("1");
|
//检测报告份数
|
escortAddModel.setTestCount("1");
|
//合格证份数
|
escortAddModel.setCertificateCount("1");
|
//出厂报告份数
|
escortAddModel.setOuterReportCount("1");
|
//质保书份数
|
escortAddModel.setQtyCount("1");
|
//货物清单份数
|
escortAddModel.setGoodsCount("1");
|
//备注
|
escortAddModel.setMarktext(escort.getRemark() == null ? "备注为空" : escort.getRemark());
|
//录入人
|
escortAddModel.setEntryPeople("1");
|
//录入人编号
|
escortAddModel.setEntryPeopleWorkCode("1");
|
//发货的autoid
|
escortAddModel.setOutStorageAuotoIDs(outAutoIdStr);
|
//返回文件格式
|
escortAddModel.setIsJosn("1");
|
//合同号
|
escortAddModel.setContractid(escort.getCustomerOrderNo());
|
String res = escortService.getEscortServiceSoap().singleAdd(escortAddModel);
|
JSONObject obj = JSONObject.parseObject(res);
|
int errorcode = obj.getJSONObject("miap_header").getIntValue("errorcode");
|
if (errorcode == 0) {
|
return obj.getJSONObject("miap_Body").getLong("AutoID");
|
} else {
|
String msg = obj.getJSONObject("miap_header").getString("errormsg");
|
throw new RuntimeException("GSM押运单创建失败,原因:" + msg);
|
}
|
}
|
}
|