ShipmentItemReceiveImpl.java
7.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.huaheng.api.erp.server;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.erp.domain.ErpMaterial;
import com.huaheng.api.erp.domain.Shipment;
import com.huaheng.api.erp.domain.ShipmentItem;
import com.huaheng.api.erp.domain.WebserviceResult;
import com.huaheng.api.wcs.service.erpService.ErpService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.JaxbXmlUtil;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import com.huaheng.pc.task.taskHeader.service.WorkTaskService;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
public class ShipmentItemReceiveImpl implements ShipmentItemReceive {
@Resource
private MaterialService materialService;
@Resource
private ShipmentHeaderService shipmentHeaderService;
@Resource
private ShipmentDetailService shipmentDetailService;
@Resource
private ErpService erpService;
/**
* 先检验是否有该物料,如有,执行下一步,如没有,调接口查物料
* 查完物料后,如有,继续下一步,如没有,返回没有物料
* 后检验是否有该库存,如有,检验库存里批次,库存地点是否一致,如果一致,执行,如果不一致,返回信息
*
* @param shipmentItem
* @return
*/
@Override
public String addShipment(String shipmentItem) {
System.out.println(shipmentItem);
if (StringUtils.isEmpty(shipmentItem)) {
return WebserviceResult.error("XML异常");
}
Shipment shipmentBean = null;
try {
shipmentBean = JSON.parseObject(shipmentItem, Shipment.class);
} catch (Exception e) {
return WebserviceResult.error("接收处理XML失败,请检查数据!");
}
if (shipmentBean == null) {
return WebserviceResult.error("xml数据格式有误,请校验");
}
//校验
if (shipmentBean.getSAPNO() == null) {
return WebserviceResult.error("出库单号不能为空");
}
if (shipmentBean.getItem() == null) {
return WebserviceResult.error("item参数不能为空");
}
List<ShipmentItem> items = shipmentBean.getItem();
for (ShipmentItem item : items) {
if (item.getSAPLINE() == null){
return WebserviceResult.error("出库行号不能为空");
}
if (item.getMATNR() == null) {
return WebserviceResult.error("物料号不能为空");
}
if (item.getMENGE() == null) {
return WebserviceResult.error("数量不能为空");
}
//检验是否有该物料
LambdaQueryWrapper<Material> materialWrapper = Wrappers.lambdaQuery();
materialWrapper.eq(Material::getCode, item.getMATNR());
Material material = materialService.getOne(materialWrapper);
if (material == null) {
//调接口查物料
ErpMaterial erpMaterial = erpService.materialSearch(item.getMATNR());
if(StringUtils.isEmpty(erpMaterial.getName())) {
return WebserviceResult.error("物料接口调用失败或返回为空");
}
}
}
LambdaQueryWrapper<ShipmentHeader> headerWrapper = Wrappers.lambdaQuery();
headerWrapper.eq(ShipmentHeader::getReferCode, shipmentBean.getSAPNO());
ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(headerWrapper);
if (shipmentHeader == null) {
ShipmentHeader emptyShipmentHeader = new ShipmentHeader();
emptyShipmentHeader.setShipmentType("ELO");
emptyShipmentHeader.setReferPlatform("SAP");
emptyShipmentHeader.setReferCode(shipmentBean.getSAPNO());
String code = shipmentHeaderService.createCode(emptyShipmentHeader.getShipmentType());
emptyShipmentHeader.setId(null);
emptyShipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
emptyShipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
emptyShipmentHeader.setLastUpdated(null);
emptyShipmentHeader.setLastUpdatedBy("erp");
emptyShipmentHeader.setCreated(null);
emptyShipmentHeader.setCreatedBy("erp");
emptyShipmentHeader.setWarehouseCode("HF0001");
emptyShipmentHeader.setCompanyCode("BHF");
emptyShipmentHeader.setCode(code);
if (!shipmentHeaderService.save(emptyShipmentHeader)) {
throw new ServiceException("出库头表创建失败");
}
shipmentHeader = shipmentHeaderService.getOne(headerWrapper);
}
for (ShipmentItem item : items) {
LambdaQueryWrapper<Material> materialWrapper = Wrappers.lambdaQuery();
materialWrapper.eq(Material::getCode, item.getMATNR());
Material material = materialService.getOne(materialWrapper);
ShipmentDetail shipmentDetail = new ShipmentDetail();
shipmentDetail.setShipmentCode(shipmentHeader.getCode());
shipmentDetail.setShipmentId(shipmentHeader.getId());
shipmentDetail.setReferCode(shipmentBean.getSAPNO());
shipmentDetail.setReferLineNum(item.getSAPLINE());
shipmentDetail.setMaterialCode(item.getMATNR());
shipmentDetail.setMaterialName(material.getName());
shipmentDetail.setMaterialSpec(material.getSpec());
shipmentDetail.setMaterialUnit(material.getUnit());
shipmentDetail.setAttribute1(material.getUserDef2());
shipmentDetail.setCreated(null);
shipmentDetail.setCreatedBy("erp");
shipmentDetail.setLastUpdated(null);
shipmentDetail.setLastUpdatedBy("erp");
shipmentDetail.setWarehouseCode("HF0001");
shipmentDetail.setInventorySts("good");
shipmentDetail.setCompanyCode("BHF");
shipmentDetail.setBatch(item.getCHARG());
shipmentDetail.setShipQty(new BigDecimal(item.getMENGE()));
if (!shipmentDetailService.save(shipmentDetail)) {
throw new ServiceException("出库明细创建失败");
}
shipmentDetailService.updateShipmentHeader(shipmentHeader);
}
return WebserviceResult.success("出库单下发成功");
}
}