|
1
2
3
|
package com.huaheng.api.SSP.service;
import com.alibaba.fastjson.JSON;
|
|
4
|
import com.alibaba.fastjson.JSONObject;
|
|
5
6
7
|
import com.huaheng.api.SSP.domain.ConfirmHeaderModel;
import com.huaheng.api.SSP.domain.ConfirmModel;
import com.huaheng.api.SSP.domain.ConfirmTypeModel;
|
|
8
|
import com.huaheng.api.U8.domain.ICSReceiptHeader;
|
|
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.http.HttpUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.general.material.domain.Material;
import com.huaheng.pc.general.material.service.IMaterialService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.IReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.IReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.IShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.IShipmentHeaderService;
import net.bytebuddy.implementation.bytecode.Throw;
|
|
24
|
import org.aspectj.weaver.loadtime.Aj;
|
|
25
26
27
28
29
30
31
32
|
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
|
|
33
34
35
36
37
38
39
40
41
42
|
/** 出入库单下发Service
*
* 1. 此Service的作用是将系统中未被钱柜扫描过的出入库单据发送给钱柜,目前考虑到系统资源,一次只能查询或发送一条单据,发送规则是根据子单内的
* 属于钱柜的物料进行发送,发送成功后会将子单的状态改为100,若主单内的所有子单都没有发现钱柜物料,则将不进行发送,但是无论发送与否,都会对主单的扫描标识进行修改,目前钱柜
* 的标识是1,若主单据的扫描标识的第一位为1则代表此单据被钱柜扫描过。
*
* 2. 目前此Service出入库单的下发逻辑是先扫描入库单据,若入库单据已全部下发成功,将自动扫描出库单据。
*
* 3. 目前钱柜编码写死为QG,默认为库区编码为QG的物料为钱柜的物料。
*/
|
|
43
44
|
@Transactional
@Service
|
|
45
|
public class OrderAssignApiService {
|
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
@Autowired
IReceiptHeaderService iReceiptHeaderService;
@Autowired
IReceiptDetailService iReceiptDetailService;
@Autowired
IShipmentHeaderService iShipmentHeaderService;
@Autowired
IShipmentDetailService iShipmentDetailService;
@Autowired
IMaterialService iMaterialService;
public AjaxResult receiptAssign(String url){
|
|
63
64
|
//查询出一条未被钱柜扫描过的入库单
ReceiptHeader item = iReceiptHeaderService.selectNosScanSSP();
|
|
65
66
67
|
if (item==null){
return shipmentAssign(url);
}
|
|
68
69
70
71
72
73
74
75
|
ConfirmHeaderModel cfh = new ConfirmHeaderModel();
cfh.setOrderHeaderId(item.getId());
cfh.setOrderCode(item.getCode());
cfh.setOrderType("receipt");
cfh.setWarehouseCode(item.getWarehouseCode());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cfh.setcDatetime(df.format(new Date()));
ConfirmModel confirmModel = new ConfirmModel();
|
|
76
77
78
|
// confirmModel.setConfirmHeaderModel(cfh);
|
|
79
80
81
82
83
|
ReceiptDetail receiptDetail = new ReceiptDetail();
receiptDetail.setReceiptId(item.getId());
List<ReceiptDetail> details = iReceiptDetailService.selectListEntityByEqual(receiptDetail);
List<ConfirmTypeModel> typeModels = new ArrayList<>();
//遍历入库子单
|
|
84
|
int i = 0;
|
|
85
|
List<Integer> list = new ArrayList();
|
|
86
|
for (ReceiptDetail ds:details){
|
|
87
|
//查找子单中钱柜的物料
|
|
88
89
|
Material material = iMaterialService.selectEntityById(ds.getMaterialId());
if (material != null && material.getZoneCode().equals("QG")) {
|
|
90
91
92
93
94
95
96
97
98
99
100
101
|
ConfirmTypeModel cft = new ConfirmTypeModel();
cft.setOrderDetailId(ds.getId());
cft.setCompanyCode(ds.getCompanyCode());
cft.setContainerCode("0");
cft.setItemCode(ds.getMaterialCode());
cft.setItemName(material.getName());
cft.setItemBarcode(material.getBarcode());
cft.setItemState(ds.getInventoryStatus());
float a = Convert.toFloat(ds.getQty());
cft.setQty(a);
cft.setItemUnit(material.getMasterUnit());
typeModels.add(cft);
|
|
102
|
list.add(ds.getId());
|
|
103
104
|
i++;
}
|
|
105
|
}
|
|
106
|
//若此单据无钱柜物料 则修改状态
|
|
107
108
|
ReceiptHeader receiptHeaderOver = new ReceiptHeader();
receiptHeaderOver.setId(item.getId());
|
|
109
|
if (i < 1){
|
|
110
111
112
113
|
StringBuffer str = new StringBuffer();
str.append(item.getScanid());
str.replace(0, 1, "1");
receiptHeaderOver.setScanid(String.valueOf(str));
|
|
114
115
116
|
iReceiptHeaderService.updateByModel(receiptHeaderOver);
return AjaxResult.success("已扫描一条入单据,没有发现钱柜物料");
}else {
|
|
117
118
119
|
//此处将入库主单,入库子单整合成发送给钱柜的的实体
cfh.setCubeCode("QG");
confirmModel.setConfirmHeaderModel(cfh);
|
|
120
121
|
confirmModel.setOrderItems(typeModels);
try {
|
|
122
|
// 发送单据给钱柜IP
|
|
123
124
125
126
|
String JsonParam = JSON.toJSONString(confirmModel);
String result = HttpUtils.bodypost(url, JsonParam);
AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
|
|
127
|
//修改已经下发的子单状态
|
|
128
|
short statusover = 100;
|
|
129
130
131
132
133
134
135
136
137
138
|
ReceiptDetail detail = new ReceiptDetail();
for (int j = 0; j < list.size(); j++) {
detail.setId(list.get(j));
detail.setStatus(statusover);
iReceiptDetailService.updateByModel(detail);
}
StringBuffer str = new StringBuffer();
str.append(item.getScanid());
str.replace(0, 1, "1");
receiptHeaderOver.setScanid(String.valueOf(str));
|
|
139
140
141
142
143
144
145
|
if (iReceiptHeaderService.updateByModel(receiptHeaderOver) < 1) {
throw new ServiceException("入库订单状态更新失败!");
}
return ajaxResult;
} catch (Exception e) {
throw new ServiceException("入库订单下发发送失败!");
}
|
|
146
147
148
149
150
151
|
}
}
public AjaxResult shipmentAssign(String url) {
|
|
152
153
154
|
//查询出一条未被钱柜扫描过的出库单
ShipmentHeader item = iShipmentHeaderService.selectNosScanSSP();
if (item==null){
|
|
155
|
return AjaxResult.success("所有出入库单都已下发成功!");
|
|
156
157
158
159
160
161
162
163
164
|
}
ConfirmHeaderModel cfh = new ConfirmHeaderModel();
cfh.setOrderHeaderId(item.getId());
cfh.setOrderCode(item.getCode());
cfh.setOrderType("shipment");
cfh.setWarehouseCode(item.getWarehouseCode());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cfh.setcDatetime(df.format(new Date()));
ConfirmModel confirmModel = new ConfirmModel();
|
|
165
166
|
// confirmModel.setConfirmHeaderModel(cfh);
|
|
167
168
169
170
|
ShipmentDetail shipmentDetail = new ShipmentDetail();
shipmentDetail.setShipmentId(item.getId());
List<ShipmentDetail> details = iShipmentDetailService.selectListEntityByEqual(shipmentDetail);
List<ConfirmTypeModel> typeModels = new ArrayList<>();
|
|
171
|
//遍历出库子单
|
|
172
|
int i = 0;
|
|
173
|
List<Integer> list = new ArrayList();
|
|
174
|
for (ShipmentDetail ds:details){
|
|
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
//查找子单中钱柜的物料
Material material = iMaterialService.selectEntityById(ds.getId());
if (material != null || material.getZoneCode().equals("QG")) {
ConfirmTypeModel cft = new ConfirmTypeModel();
cft.setOrderDetailId(ds.getId());
cft.setCompanyCode(ds.getCompanyCode());
cft.setContainerCode("0");
cft.setItemCode(ds.getMaterialCode());
cft.setItemName(material.getName());
cft.setItemBarcode(material.getBarcode());
cft.setItemState(ds.getInventoryStatus());
float a = Convert.toFloat(ds.getQty());
cft.setQty(a);
cft.setItemUnit(material.getMasterUnit());
typeModels.add(cft);
|
|
190
|
list.add(ds.getId());
|
|
191
192
|
i++;
}
|
|
193
|
}
|
|
194
|
//若此单据无钱柜物料 则修改状态
|
|
195
196
|
ShipmentHeader shipmentHeaderOver = new ShipmentHeader();
shipmentHeaderOver.setId(item.getId());
|
|
197
|
if (i<1){
|
|
198
199
200
201
|
StringBuffer str = new StringBuffer();
str.append(item.getScanid());
str.replace(0, 1, "1");
shipmentHeaderOver.setScanid(String.valueOf(str));
|
|
202
203
204
|
iShipmentHeaderService.updateByModel(shipmentHeaderOver);
return AjaxResult.success("已扫描一条出库单据,没有发现钱柜物料");
}else {
|
|
205
206
207
|
//此处将出库主单,出库子单整合成发送给钱柜的的实体
cfh.setCubeCode("QG");
confirmModel.setConfirmHeaderModel(cfh);
|
|
208
209
210
211
212
213
214
|
confirmModel.setOrderItems(typeModels);
try {
String JsonParam = JSON.toJSONString(confirmModel);
String result = HttpUtils.bodypost(url, JsonParam);
AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
|
|
215
216
217
218
219
220
221
222
223
224
225
226
|
//修改已经下发的子单状态
short statusover = 100;
ShipmentDetail detail = new ShipmentDetail();
for (int j = 0; j < list.size(); j++) {
detail.setId(list.get(j));
detail.setStatus(statusover);
iShipmentDetailService.updateByModel(detail);
}
StringBuffer str = new StringBuffer();
str.append(item.getScanid());
str.replace(0, 1, "1");
shipmentHeaderOver.setScanid(String.valueOf(str));
|
|
227
228
229
230
231
232
233
234
|
if (iShipmentHeaderService.updateByModel(shipmentHeaderOver)<1){
throw new ServiceException("出库单据状态更新失败");
}
return ajaxResult;
} catch (Exception e) {
throw new ServiceException("出库订单发送失败!");
}
}
|
|
235
236
|
}
}
|