Blame view

src/main/java/com/huaheng/api/mes/controller/MesReceiptController.java 36 KB
hh authored
1
2
package com.huaheng.api.mes.controller;
hh authored
3
4
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
hh authored
5
6
7
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.mes.dto.Detail;
hh authored
8
import com.huaheng.api.mes.dto.GetOrderHistoryDTO;
hh authored
9
import com.huaheng.api.mes.dto.Header;
hh authored
10
11
12
import com.huaheng.api.mes.dto.ReceiptDTO;
import com.huaheng.api.mes.utils.CallaMOM;
import com.huaheng.api.mes.utils.SqlServer;
hh authored
13
import com.huaheng.api.mes.vo.InventoryVO;
hh authored
14
import com.huaheng.api.mes.vo.InventoryTransactionVO;
hh authored
15
16
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
hh authored
17
import com.huaheng.common.utils.reflect.ReflectUtils;
hh authored
18
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
hh authored
19
20
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
hh authored
21
22
23
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.RetCode;
hh authored
24
import com.huaheng.pc.config.material.domain.Material;
hh authored
25
import com.huaheng.pc.config.material.service.MaterialService;
hh authored
26
27
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
hh authored
28
29
import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction;
import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
hh authored
30
31
32
import com.huaheng.pc.momLog.domain.MomLog;
import com.huaheng.pc.momLog.mapper.MomLogMapper;
import com.huaheng.pc.momLog.service.IMomLogService;
hh authored
33
34
35
36
37
38
39
40
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
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;
hh authored
41
42
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
hh authored
43
44
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.formula.functions.T;
hh authored
45
46
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
hh authored
47
import org.springframework.beans.BeanUtils;
hh authored
48
49
50
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
hh authored
51
import java.io.UnsupportedEncodingException;
hh authored
52
53
54
55
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
hh authored
56
import java.util.*;
hh authored
57
hh authored
58
hh authored
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
@RestController
@RequestMapping("/API/WMS/v2")
public class MesReceiptController extends BaseController {

    @Resource
    private ReceiptHeaderService receiptHeaderService;

    @Resource
    private ReceiptDetailService receiptDetailService;

    @Resource
    private ShipmentHeaderService shipmentHeaderService;

    @Resource
    private ShipmentDetailService shipmentDetailService;

    @Resource
    private InventoryDetailService inventoryDetailService;
hh authored
78
79
80
    @Resource
    private TaskDetailService taskDetailService;
hh authored
81
82
83
84
85
86
    @Resource
    private InventoryTransactionService inventoryTransactionService;

    @Resource
    private MaterialService materialService;
hh authored
87
88
89
    @Resource
    private IMomLogService momLogService;
hh authored
90
    private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class);
hh authored
91
hh authored
92
93
94
95
96
97
98
99
100
101
102
103
104
105
    @PostMapping("/receipt")
    @ApiLogger(apiName = "添加入库单及其明细", from="ROBOT")
    @ApiOperation("添加入库单及其明细")
    public AjaxResult receipt(@RequestBody ReceiptDTO receiptDTO) {
        Header header = receiptDTO.getShipmentHeader();
        List<Detail> details = receiptDTO.getShipemtnDetails();

        AjaxResult ajaxResult = new AjaxResult();
        boolean isNull = enterIsNull(ajaxResult, header, details);
        if (isNull){
            return ajaxResult;
        }

        ReceiptHeader receiptHeader = new ReceiptHeader();
hh authored
106
107
        if(StringUtils.isNotEmpty(header.getMOMID()))
            receiptHeader.setMOMID(header.getMOMID());
hh authored
108
        receiptHeader.setCode(header.getReferCode());
hh authored
109
        // 入库类型--需要保持一致
110
        receiptHeader.setReceiptType(header.getRefeCodeType());
hh authored
111
        // receiptHeader.setReceiptType("CS");
hh authored
112
113
        receiptHeader.setTotalQty(header.getTotalQty());
        receiptHeader.setTotalLines(details.size());
hh authored
114
115
116
        // TAID MOM目标类型 // FAID MOM来源类型
        receiptHeader.setTAID(header.getTAID());
        receiptHeader.setFAID(header.getFAID());
hh authored
117
        receiptHeader.setProductionWorker(header.getProductionWorker());
hh authored
118
        receiptHeader.setWarehouse(header.getWarehouse());
hh authored
119
120
        receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
hh authored
121
        receiptHeader.setWarehouseCode("CS0001");
hh authored
122
        receiptHeader.setCompanyCode("BHF");
hh authored
123
124
        receiptHeader.setCreatedBy("MOM");
hh authored
125
126
127
        receiptHeaderService.save(receiptHeader);

        List<ReceiptDetail> shipemtnDetailList = new ArrayList<>();
hh authored
128
        for(Detail detail : details) {
hh authored
129
            ReceiptDetail receiptDetail = new ReceiptDetail();
hh authored
130
131
132
133
            // 查询入库单据表头
            LambdaQueryWrapper<Material> materialQueryWrapper = Wrappers.lambdaQuery();
            materialQueryWrapper.eq(Material::getCode, detail.getMaterialCode());
            Material material = materialService.getOne(materialQueryWrapper);
hh authored
134
135
            if(StringUtils.isNotEmpty(detail.getDetailID()))
                receiptDetail.setMOMID(detail.getDetailID());
hh authored
136
            receiptDetail.setIsVirtualBom(detail.getIsVirtual());
hh authored
137
138
            receiptDetail.setMaterialCode(detail.getMaterialCode());
            receiptDetail.setMaterialName(detail.getMaterialName());
hh authored
139
            receiptDetail.setMaterialSpec(material.getSpec());
hh authored
140
            receiptDetail.setQty(detail.getQty());
hh authored
141
142
143
            receiptDetail.setIsUrgent(detail.getIsUrgent());
            receiptDetail.setNoticeNo(detail.getNoticeNo());
            receiptDetail.setSNNO(detail.getSNNO());
hh authored
144
            receiptDetail.setReceiptBarcode(detail.getReceiptBarcode());
hh authored
145
146
            receiptDetail.setReceiptId(receiptHeader.getId());
            receiptDetail.setReceiptCode(receiptHeader.getCode());
hh authored
147
            receiptDetail.setStatusFlowCode("2");
hh authored
148
            receiptDetail.setWarehouseCode("CS0001");
hh authored
149
            receiptDetail.setCompanyCode("BHF");
hh authored
150
            receiptDetail.setInventorySts("good");
hh authored
151
            receiptDetail.setCreatedBy("MOM");
hh authored
152
            shipemtnDetailList.add(receiptDetail);
hh authored
153
        }
hh authored
154
        receiptDetailService.saveBatch(shipemtnDetailList);
hh authored
155
hh authored
156
        return AjaxResult.success(receiptDTO);
hh authored
157
158
    }
hh authored
159
hh authored
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
    /**
     * 添加出库单及其明细
     * @param receiptDTO
     * @return
     */
    @PostMapping("/shipment")
    @ApiLogger(apiName = "添加出库单及其明细", from="ROBOT")
    @ApiOperation("添加出库单及其明细")
    public AjaxResult shipment(@RequestBody ReceiptDTO receiptDTO) {
        Header header = receiptDTO.getShipmentHeader();
        List<Detail> details = receiptDTO.getShipemtnDetails();

        AjaxResult ajaxResult = new AjaxResult();
        boolean inNull = enterIsNull(ajaxResult, header, details);
        if (inNull)  return ajaxResult;

        ShipmentHeader shipmentHeader = new ShipmentHeader();
hh authored
177
        // shipmentHeader.setId(header.getId());
hh authored
178
179
        if(StringUtils.isNotEmpty(header.getMOMID()))
            shipmentHeader.setMOMID(header.getMOMID());
hh authored
180
        shipmentHeader.setCode(header.getReferCode());
hh authored
181
        // 出库类型--需要保持一致
182
        shipmentHeader.setShipmentType(header.getRefeCodeType());
hh authored
183
        shipmentHeader.setTotalQty(header.getTotalQty());
hh authored
184
185
186
        // TAID MOM目标类型 // FAID MOM来源类型
        shipmentHeader.setTAID(header.getTAID());
        shipmentHeader.setFAID(header.getFAID());
187
        shipmentHeader.setNoticeNo(details.get(0).getNoticeNo());
hh authored
188
189
190
191
        shipmentHeader.setWorkshop(header.getWorkshop());
        shipmentHeader.setWarehouse(header.getWarehouse());
        shipmentHeader.setSuperiorCode(header.getSuperiorCode());
        shipmentHeader.setSuperiorName(header.getSuperiorName());
hh authored
192
        shipmentHeader.setRequestedDeliveryDate(header.getRequestedDeliveryDate());
hh authored
193
194
        shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_CONTAINER_BUILD);
        shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_CONTAINER_BUILD);
hh authored
195
        shipmentHeader.setTotalLines(details.size());
hh authored
196
        shipmentHeader.setWarehouseCode("CS0001");
hh authored
197
        shipmentHeader.setCompanyCode("BHF");
hh authored
198
        shipmentHeader.setCreatedBy("MOM");
hh authored
199
200
201
202
203
        shipmentHeaderService.save(shipmentHeader);

        List<ShipmentDetail> shipmentDetailList = new ArrayList<>();
        details.forEach(detail->{
            ShipmentDetail shipmentDetail = new ShipmentDetail();
hh authored
204
205
            if(StringUtils.isNotEmpty(detail.getDetailID()))
                shipmentDetail.setMOMID(detail.getDetailID());
hh authored
206
207
208
            shipmentDetail.setMaterialCode(detail.getMaterialCode());
            shipmentDetail.setMaterialName(detail.getMaterialName());
            shipmentDetail.setPort(detail.getEndSation());
hh authored
209
            shipmentDetail.setQty(detail.getQty());
hh authored
210
211
212
213
            shipmentDetail.setIsUrgent(detail.getIsUrgent());
            shipmentDetail.setNoticeNo(detail.getNoticeNo());
            shipmentDetail.setSNNO(detail.getSNNO());
hh authored
214
215
            shipmentDetail.setShipmentId(shipmentHeader.getId());
            shipmentDetail.setShipmentCode(shipmentHeader.getCode());
hh authored
216
            shipmentDetail.setCompanyCode("BHF");
hh authored
217
218
            shipmentDetail.setWarehouseCode("CS0001");
            shipmentDetail.setInventorySts("good");
hh authored
219
            shipmentDetail.setStatus(QuantityConstant.TASK_STATUS_BUILD);
hh authored
220
            shipmentDetail.setCreatedBy("MOM");
hh authored
221
222
223
            shipmentDetailList.add(shipmentDetail);
        });
        shipmentDetailService.saveBatch(shipmentDetailList);
hh authored
224
225

        return AjaxResult.success(receiptDTO);
hh authored
226
227
    }
hh authored
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
    private JSONObject getJsonObject(Header header, List<Detail> details) {
        JSONObject data = new JSONObject();
        JSONObject Rd_In_M = new JSONObject();
        Rd_In_M.put("MGPK", header.getId());
        Rd_In_M.put("cCode", header.getReferCode());
        JSONArray Rd_In_S = new JSONArray();
        details.forEach(detail -> {
            JSONObject json = new JSONObject();
            json.put("MGPK", header.getId());
            json.put("SGPK", detail.getId());
            json.put("cInvCode", detail.getMaterialCode());
            Rd_In_S.add(json);
        });
        data.put("Requester", "WMS");
        data.put("Rd_In_M", Rd_In_M);
        data.put("Rd_In_S", Rd_In_S);
        return data;
    }
hh authored
247
hh authored
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
    /**
     * 入库单参数_判空处理
     * @param ajaxResult
     * @param shipmentHeader
     * @param shipemtnDetails
     */
    private boolean enterIsNull(AjaxResult ajaxResult, Header shipmentHeader, List<Detail> shipemtnDetails){

        if (isNullData(ajaxResult, shipmentHeader, shipemtnDetails)) return true;

        if (StringUtils.isEmpty(shipmentHeader.getRefeCodeType())) {
            ajaxResult.setCode(RetCode.FAIL).setMsg("单据类型不能为空!!!");
            return true;
        } else if (StringUtils.isEmpty(shipmentHeader.getReferCode())) {
            ajaxResult.setCode(RetCode.FAIL).setMsg("单据单号不能为空!!!");
            return true;
hh authored
264
265
        }else if (shipmentHeader.getTotalQty() == null || shipmentHeader.getTotalQty().intValue() <= 0) {
            ajaxResult.setCode(RetCode.FAIL).setMsg("数量不能为空!!!");
hh authored
266
267
268
269
270
        }

        shipemtnDetails.forEach(shipemtnDetail->{
            if (StringUtils.isEmpty(shipemtnDetail.getMaterialCode())) {
                ajaxResult.setCode(RetCode.FAIL).setMsg("物料编码不能为空!!!");
hh authored
271
272
            } else if (shipemtnDetail.getTotalQty() == null || shipemtnDetail.getQty().intValue() <= 0) {
                ajaxResult.setCode(RetCode.FAIL).setMsg("数量不能为空!!!");
hh authored
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
            }
        });
        return StringUtils.isNotEmpty(ajaxResult.getMsg());
    }

    /**
     * 出库单参数_判空处理
     * @param ajaxResult
     * @param shipmentHeader
     * @param shipemtnDetails
     */
    private boolean outIsNull (AjaxResult ajaxResult, Header shipmentHeader, List<Detail> shipemtnDetails){
        if (isNullData(ajaxResult, shipmentHeader, shipemtnDetails)) return true;

        if (StringUtils.isEmpty(shipmentHeader.getReferCode())) {
            ajaxResult.setCode(RetCode.FAIL).setMsg("单据单号不能为空!!!");
            return true;
        }

        shipemtnDetails.forEach(shipemtnDetail->{
            if (StringUtils.isEmpty(shipemtnDetail.getMaterialCode())) {
                ajaxResult.setCode(RetCode.FAIL).setMsg("物料编码不能为空!!!");
            }
        });
        return StringUtils.isNotEmpty(ajaxResult.getMsg());
    }

    /**
     * 判空处理
     */
    private boolean isNullData(AjaxResult ajaxResult, Header shipmentHeader, List<Detail> shipemtnDetails) {
        if (shipmentHeader == null) {
            ajaxResult.setCode(RetCode.FAIL).setMsg("出库单头表不能为空!!!");
            return true;
        } else if (shipemtnDetails == null || shipemtnDetails.size() < 1) {
            ajaxResult.setCode(RetCode.FAIL).setMsg("出库单明细表集不能为空!!!");
            return true;
        }
        return false;
    }

    /**
hh authored
315
     * 入库单单据取消
hh authored
316
     */
hh authored
317
318
319
    @PostMapping("/cancelEnterWarehouse")
    @ApiOperation("入库单单据取消")
    public AjaxResult cancelEnterWarehouse(@RequestBody ReceiptDTO receiptDTO) {
hh authored
320
321
322
        Header header = receiptDTO.getShipmentHeader();
        List<Detail> details = receiptDTO.getShipemtnDetails();
hh authored
323
324
325
326
327
328
        if (StringUtils.isEmpty(header.getReferCode())) return AjaxResult.error().setMsg("单据单号不能为空!!!");
        for (Detail detailIsNull:details){
            if(StringUtils.isEmpty(detailIsNull.getDetailID())){
                return AjaxResult.error().setMsg("单据明细ID不能为空!!!");
            }
        }
hh authored
329
hh authored
330
        // 查询入库单据表头
hh authored
331
332
333
334
        LambdaQueryWrapper<ReceiptHeader> receiptHeaderWrapper = Wrappers.lambdaQuery();
        receiptHeaderWrapper.eq(ReceiptHeader::getId, header.getId());
        ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptHeaderWrapper);
        if (receiptHeader == null)
hh authored
335
            return AjaxResult.error().setMsg("没有找到对应单据!!!");
hh authored
336
        // 查询入库单据明细
hh authored
337
338
        LambdaQueryWrapper<ReceiptDetail> receiptDetailWrapper = Wrappers.lambdaQuery();
        receiptDetailWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
hh authored
339
hh authored
340
341
        List<ReceiptDetail> receiptDetailList = receiptDetailService.list(receiptDetailWrapper);
        if (receiptDetailList == null)
hh authored
342
            return AjaxResult.error().setMsg("没有找到对应单据明细!!!");
hh authored
343
344
345
        // 获取删除明细
        List<ReceiptDetail> removeReceiptDetails = new ArrayList<>();
        receiptDetailList.forEach(receiptDetail-> details.forEach(detail->{
hh authored
346
            if (detail.getDetailID().equals(receiptDetail.getMOMID())){
hh authored
347
                removeReceiptDetails.add(receiptDetail);
hh authored
348
            }
hh authored
349
        }));
hh authored
350
        ArrayList<Integer> ids = new ArrayList<>();
hh authored
351
352
353
354
        if (removeReceiptDetails.size() > 0){
            removeReceiptDetails.forEach(receiptDetail->{
                ids.add(receiptDetail.getId());
            });
hh authored
355
356
        }
        if (ids.size() < 1 || removeReceiptDetails.size() < 1){
hh authored
357
            return AjaxResult.error().setMsg("没有匹配到对应要取消的入库单单据明细!!!");
hh authored
358
        }
hh authored
359
360
        receiptDetailService.removeByIds(ids);
hh authored
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
        // 出库单明细数量和要删除的明细数量一致,则删除主表
        boolean isRemove = removeReceiptDetails.size() == receiptDetailList.size();
        if (isRemove){
            shipmentHeaderService.removeById(receiptHeader);
        }
        return new AjaxResult<T>().setCode(RetCode.SUCCESS).setMsg("取消成功");
    }


    /**
     * 出库单单据取消
     */
    @PostMapping("/cancelOutWarehouse")
    @ApiOperation("出库单单据取消")
    public AjaxResult cancelOutWarehouse(@RequestBody ReceiptDTO receiptDTO) {
        Header header = receiptDTO.getShipmentHeader();
        List<Detail> details = receiptDTO.getShipemtnDetails();

        AjaxResult ajaxResult = isNull(header, details);
        if (StringUtils.isNotEmpty(ajaxResult.getMsg())) return ajaxResult;
hh authored
381
382
383

        // 查询出库单据表头
        LambdaQueryWrapper<ShipmentHeader> shipmentHeaderWrapper = Wrappers.lambdaQuery();
hh authored
384
        shipmentHeaderWrapper.eq(ShipmentHeader::getCode, header.getSuperiorCode());
hh authored
385
        ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentHeaderWrapper);
hh authored
386
387
        if (shipmentHeader == null)
            return ajaxResult.setCode(RetCode.FAIL).setMsg("没有找到对应单据!!!");
hh authored
388
389
        // 查询出库单据明细
        LambdaQueryWrapper<ShipmentDetail> shipmentDetailWrapper = Wrappers.lambdaQuery();
hh authored
390
        shipmentDetailWrapper.eq(ShipmentDetail::getShipmentId, header.getId());
hh authored
391
        List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(shipmentDetailWrapper);
hh authored
392
393
        if (shipmentDetailList == null)
            return ajaxResult.setCode(RetCode.FAIL).setMsg("没有找到对应单据明细!!!");
hh authored
394
395
        // 获取删除明细
        List<ShipmentDetail> removeShipmentDetails = new ArrayList<>();
hh authored
396
397
398
399
400
        shipmentDetailList.forEach(shipmentDetai-> details.forEach(detail->{
            if (detail.getMaterialCode().equals(shipmentDetai.getMaterialCode()) && detail.getTotalQty().intValue() == (shipmentDetai.getTaskQty().intValue())){
                removeShipmentDetails.add(shipmentDetai);
            }
        }));
hh authored
401
402
        if (removeShipmentDetails.size() > 0){
            ArrayList<Integer> ids = new ArrayList<>();
hh authored
403
            removeShipmentDetails.forEach(shipmentDetail-> ids.add(shipmentDetail.getId()));
hh authored
404
            shipmentDetailService.removeByIds(ids);
hh authored
405
406
        }else {
            return ajaxResult.setCode(RetCode.FAIL).setMsg("没有匹配到对应要取消的出库单单据明细!!!");
hh authored
407
408
409
410
411
412
        }
        // 出库单明细数量和要删除的明细数量一致,则删除主表
        boolean isRemove = removeShipmentDetails.size() == shipmentDetailList.size();
        if (isRemove){
            shipmentHeaderService.removeById(shipmentHeader);
        }
hh authored
413
414
415
416
417
418
419
420
421
422
423
424
425
426
        return new AjaxResult<T>().setCode(RetCode.SUCCESS).setMsg("取消成功");

    }

    private AjaxResult isNull(Header header, List<Detail> details) {
        AjaxResult ajaxResult = new AjaxResult();
        boolean isNull = outIsNull(ajaxResult, header, details);
        details.forEach(detail -> {
            if (detail.getTotalQty() == null || detail.getTotalQty().intValue() <= 0) {
                ajaxResult.setCode(RetCode.FAIL).setMsg("总数量不能为空!!!");
            }
        });
        if (isNull || StringUtils.isNotEmpty(ajaxResult.getMsg())) return ajaxResult;
        return ajaxResult;
hh authored
427
428
429
430
431
432
433
434
435
436
437
438
    }

    /**
     * 查询库存
     */
    @PostMapping("/searchInventory")
    @ApiLogger(apiName = "查询库存", from="ROBOT")
    @ApiOperation("查询库存")
    public AjaxResult searchInventory(@RequestBody Detail detailed) {

        String materialName =  detailed.getMaterialName();
        String materialCode = detailed.getMaterialCode();
hh authored
439
        String containerCode = detailed.getContainerCode();
440
hh authored
441
442
443
444
445
        LambdaQueryWrapper<InventoryDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
        // 物料编码
        if (StringUtils.isNotEmpty(materialName)){
            lambdaQueryWrapper.eq(InventoryDetail::getMaterialName, materialName);
        }
hh authored
446
        // 物料名称
hh authored
447
448
449
        if (StringUtils.isNotEmpty(materialCode)){
            lambdaQueryWrapper.eq(InventoryDetail::getMaterialCode, materialCode);
        }
hh authored
450
451
452
453
        // 托盘号
        if (StringUtils.isNotEmpty(containerCode)){
            lambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode);
        }
hh authored
454
hh authored
455
456
457
        if (StringUtils.isEmpty(materialName) && StringUtils.isEmpty(containerCode) && StringUtils.isEmpty(containerCode)){
            lambdaQueryWrapper.gt(InventoryDetail::getQty, 0);
        }
hh authored
458
        List<InventoryDetail> detailList = inventoryDetailService.list(lambdaQueryWrapper);
hh authored
459
hh authored
460
461
462
463
464
        List<InventoryVO> inventoryVOList = new ArrayList<>();
        detailList.forEach(detail->{
            InventoryVO inventoryVO = new InventoryVO();
            BeanUtils.copyProperties(detail,inventoryVO);
            inventoryVO.setWarehouse("035");
hh authored
465
            inventoryVOList.add(inventoryVO);
hh authored
466
467
        });
hh authored
468
        return AjaxResult.success(inventoryVOList);
hh authored
469
470
471
472

    }

    /**
hh authored
473
     * 获取出入库单明细记录
hh authored
474
475
476
     * @return AjaxResult
     */
    @PostMapping("/getShipmentDetail")
hh authored
477
478
    @ApiLogger(apiName = "获取出入库单明细记录", from="ROBOT")
    @ApiOperation("获取出入库单明细记录")
hh authored
479
480
481
482
483
    public AjaxResult getShipmentDetail(@RequestBody GetOrderHistoryDTO getOrderHistoryDTO) {

        if(StringUtils.isEmpty(getOrderHistoryDTO.getEndTime()) || StringUtils.isEmpty(getOrderHistoryDTO.getStartTime())){
            return AjaxResult.error("开始时间和结束时间不能为空!!!");
        }
hh authored
484
        LambdaQueryWrapper<InventoryTransaction> lambdaQueryWrapper = Wrappers.lambdaQuery();
hh authored
485
        lambdaQueryWrapper
hh authored
486
487
488
489
490
491
492
493
494
495
                .ge(InventoryTransaction::getCreated, getOrderHistoryDTO.getStartTime())
                .le(InventoryTransaction::getCreated, getOrderHistoryDTO.getEndTime());
        List<InventoryTransaction> list = inventoryTransactionService.list(lambdaQueryWrapper);
        List<InventoryTransactionVO> inventoryTransactionVOList = new ArrayList<>();
        list.forEach(inventoryTransaction -> {
            InventoryTransactionVO inventoryTransactionVO = new InventoryTransactionVO();
            BeanUtils.copyProperties(inventoryTransaction, inventoryTransactionVO);
            inventoryTransactionVOList.add(inventoryTransactionVO);
        });
        return AjaxResult.success(inventoryTransactionVOList);
hh authored
496
497
498
499
500
501
502
503
504
505
    }

    /**
     * 获取sqlServer数据库中物料信息, 同步到本地数据库中
     */
    @PostMapping("/getMaterial")
    @ApiOperation("获取外部物料信息")
    public List<Material> getMaterial(){
        List<Material> materialList = new ArrayList<>();
        try {
hh authored
506
hh authored
507
            // String sql = "SELECT * FROM [dbo].[sys_user] WHERE createTime > (select DATEADD(HOUR,-3,getdate())) AND createTime <= (select GETDATE())";
hh authored
508
509
            // String sql = "SELECT * FROM [dbo].[base_material]  WHERE MaterialName = 'SMLS Pipe'";
            // 获取新增一天以内和修改两个小时以内的物料数据
hh authored
510
            String sql = "select a.cInvCode, a.cInvName, b.cidefine6, b.cidefine7, c.cComUnitName from [dbo].[Inventory] a left join [dbo].[Inventory_extradefine] b on a.cInvCode = b.cInvCode LEFT JOIN [dbo].[ComputationUnit] c ON a.cComUnitCode = c.cComunitCode WHERE (datediff(day,a.dSDate,getdate())=0 OR a.dModifyDate >=  DATEADD(HOUR, -4, GETDATE()))  and  a.cDefWareHouse in ('035','003')";
hh authored
511
            ResultSet resultSet = SqlServer.find(sql);
hh authored
512
513
514
515
            if (resultSet == null){
                return materialList;
            }
            while(resultSet.next()){
hh authored
516
517
518
                // 字段要与海王表一致
                String code = resultSet.getString("cInvCode");
                String name = resultSet.getString("cInvName");
hh authored
519
                String unit = resultSet.getString("cComUnitName");
hh authored
520
521
522
                String spec = resultSet.getString("cidefine6");
                String high = resultSet.getString("cidefine7");
                int isHigh = "高托".equals(high) ? 1 : 0;
hh authored
523
524

                Material material = new Material();
hh authored
525
                material.setCode(code);
hh authored
526
527
                material.setName(name);
                material.setUnit(unit);
hh authored
528
529
                material.setSpec(spec);
                material.setIsHigh(isHigh);
hh authored
530
531
532
533
534
535
536
537
538
                material.setWarehouseCode("CS0001");
                material.setCompanyCode("BHF");

                materialList.add(material);
            }
            // materialService.saveBatch(materialList);
        } catch (SQLException throwable) {
            throwable.printStackTrace();
        }
hh authored
539
        logger.debug("******************************同步海王物料档案" + materialList.size() + "条数据!!!");
hh authored
540
        return materialList;
hh authored
541
    }
hh authored
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558

    /** 当前时间向推几小时 */
    public String dateRoll(int ihour) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 获取当前时间
        LocalDateTime date = LocalDateTime.now();
        // 获取当前时间的前几小时时间
        LocalDateTime localDateTime = date.minusHours(ihour);

        return dateTimeFormatter.format(localDateTime);
    }

    /**
     * 查询站台任务明细列表
     */
    @ApiLogger(apiName = "查询站台任务明细列表", from="ROBOT")
    @PostMapping("/kanbanInfo")
hh authored
559
    @CrossOrigin
hh authored
560
561
562
563
564
565
566
567
568
569
570
    public AjaxResult kanbanInfo(@RequestBody TaskDetail taskDetail){
        String fromLocation = taskDetail.getFromLocation();
        if (StringUtils.isEmpty(fromLocation))
            return AjaxResult.error("站台不能为空!!!");
        LambdaQueryWrapper<TaskDetail> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(TaskDetail::getFromLocation, fromLocation)
                .lt(TaskDetail::getStatus,"100");
        List<TaskDetail> taskDetailList = taskDetailService.list(wrapper);
        return AjaxResult.success(taskDetailList);
    }
hh authored
571
    /**
572
     * post调用E_Rd_InMOM)入库成功接口
hh authored
573
574
575
     */
    @ApiLogger(apiName = "post调用E_Rd_In(MOM)入库接口", from="ROBOT")
    @PostMapping("/postE_Rd_In")
576
577
    public Boolean postE_Rd_In(@RequestBody ReceiptDetail receiptDetail){
        // ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getId()); //59
hh authored
578
        // 查询入库单据表头
579
        ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId()); //59
hh authored
580
        JSONObject Rd_In_M = new JSONObject();
hh authored
581
582
        Rd_In_M.put("mno", receiptHeader.getCode());
        Rd_In_M.put("MGPK", receiptHeader.getMOMID());
hh authored
583
584
585
        Rd_In_M.put("cBusType", receiptHeader.getReceiptType());
        Rd_In_M.put("TAID", receiptHeader.getTAID());
        Rd_In_M.put("FAID", receiptHeader.getFAID());
hh authored
586
        Rd_In_M.put("UserNo",  receiptHeader.getLastUpdatedBy());
hh authored
587
        Rd_In_M.put("warehouse",  receiptHeader.getWarehouse());
hh authored
588
hh authored
589
        // 查询入库单据明细
hh authored
590
591
592
//        LambdaQueryWrapper<ReceiptDetail> receiptDetailWrapper = Wrappers.lambdaQuery();
//        receiptDetailWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
//        List<ReceiptDetail> receiptDetailList = receiptDetailService.list(receiptDetailWrapper);
hh authored
593
594
        JSONArray jsonArray = new JSONArray();
            JSONObject Rd_In_S = new JSONObject();
hh authored
595
596
            Rd_In_S.put("MGPK", receiptHeader.getMOMID());
            Rd_In_S.put("SGPK", receiptDetail.getMOMID());
hh authored
597
            Rd_In_S.put("SNNO", receiptDetail.getSNNO());
598
            Rd_In_S.put("cInvCode", receiptDetail.getMaterialCode() == null ? null : getGB(receiptDetail.getMaterialCode()));
hh authored
599
600
            Rd_In_S.put("Iquantity", receiptDetail.getTaskQty());
            Rd_In_S.put("iFQuantity", receiptDetail.getQty());
hh authored
601
            Rd_In_S.put("cwhcode", receiptDetail.getWarehouseCode());
hh authored
602
            Rd_In_S.put("MOCode", receiptDetail.getNoticeNo() == null ? null : getGB(receiptDetail.getNoticeNo()));
hh authored
603
            Rd_In_S.put("ISUrgent", receiptDetail.getIsUrgent());
hh authored
604
            Rd_In_S.put("receiptBarcode", receiptDetail.getReceiptBarcode());
hh authored
605
606
607
608
609
610
            jsonArray.add(Rd_In_S);
        JSONObject data = new JSONObject();
        data.put("Rd_In_M", Rd_In_M);
        data.put("Rd_In_S", jsonArray);

        String action = "E_Rd_In";
hh authored
611
        JSONObject json = new JSONObject();
hh authored
612
        json.put("data", data);
hh authored
613
614
615
616
        // 保存日志
        MomLog momLog = new MomLog();
        momLog.setType("1"); // (入:1  出:2)
        momLog.setMomData(json.toJSONString());
617
        momLog.setCreated(new Date());
618
619
620
621
622
623
624
        StringBuilder keyField = new StringBuilder();
        keyField.append("--单据号:").append(receiptHeader.getCode()).append( ", ")
                .append("物料编码:").append(receiptDetail.getMaterialCode()).append(", ")
                .append("单据数量:").append(receiptDetail.getQty()).append(", ")
                .append("入库数量:").append(receiptDetail.getTaskQty()).append(". ");
        momLog.setKeyField(keyField.toString());
        // System.out.println(momLog.getKeyField());
hh authored
625
        momLogService.save(momLog);
hh authored
626
627
628
629
        return postMOM(action, json);
    }

    /**
630
     * post调用E_Rd_InMOM)出库成功接口
hh authored
631
632
633
     */
    @ApiLogger(apiName = "post调用E_Rd_Out(MOM)出库接口", from="ROBOT")
    @PostMapping("/postE_Rd_Out")
634
    public Boolean postE_Rd_Out(@RequestBody ShipmentHeader shipmentHeader){
hh authored
635
        // ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentHeaderID.getId());
hh authored
636
637
638
        // 返回MOM,并记录在数据库
        MomLog momLog = new MomLog();
        StringBuffer keyField = new StringBuffer();
hh authored
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
        JSONArray dataArray = new JSONArray();
        // 如果订单为合并类型
        if ("merge".equals(shipmentHeader.getShipmentType())){
            // 查询所有子表
            LambdaQueryWrapper<ShipmentDetail> shipmentDetailWrapper = Wrappers.lambdaQuery();
            shipmentDetailWrapper.eq(ShipmentDetail::getShipmentId, shipmentHeader.getId());
            List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(shipmentDetailWrapper);
            // 查询所有合并前的头表
            String ids = shipmentHeader.getRecordID();
            String [] headerIdArr = ids.split(",");
            LambdaQueryWrapper<ShipmentHeader> headerWrapper = Wrappers.lambdaQuery();
            headerWrapper.in(ShipmentHeader::getId, headerIdArr);
            List<ShipmentHeader> shipmentHeaderList = shipmentHeaderService.list(headerWrapper);
            // 根据合并前的头表id分组
            Map<Integer,List<ShipmentDetail>> map = new HashMap<>();
            for (ShipmentDetail detail : shipmentDetailList){
                    Integer key = detail.getRecordID();
                    if(map.containsKey(key)) {
                        map.get(key).add(detail);
                    }else {
                        List<ShipmentDetail> list = new ArrayList<>();
                        list.add(detail);
                        map.put(key, list);
                    }
            }
hh authored
664
hh authored
665
666
667
668
669
670
671
672
673
674
            for (Integer key : map.keySet()) {
                JSONObject data = new JSONObject();
                // 合并前的头表
                ShipmentHeader header = new ShipmentHeader();
                // 合并前头表对应的子表
                List<ShipmentDetail> detailList = new ArrayList<>();
                for(ShipmentHeader SH : shipmentHeaderList){
                    if (key.equals(SH.getId())){
                        header = SH;
                        detailList = map.get(key);
hh authored
675
                        break;
hh authored
676
677
678
679
680
681
682
683
                    }
                }
                // 查询出库单据表头
                JSONObject Rd_Out_M = getRd_Out_M(header);
                JSONArray jsonArray = getRd_Out_S(header, detailList);
                data.put("Rd_Out_M", Rd_Out_M);
                data.put("Rd_Out_S", jsonArray);
                dataArray.add(data);
hh authored
684
685
686
687
688

                for (ShipmentDetail detail: detailList){
                    keyField.append("--单据号:").append(header.getCode()).append( ", ")
                            .append("物料编码:").append(detail.getMaterialCode()).append(", ")
                            .append("单据数量:").append(detail.getQty()).append(", ")
689
                            .append("出库数量:").append(detail.getTaskQty()).append(". ");
hh authored
690
                }
hh authored
691
692
693
694
695
            }
        }else {
            // 查询出库单据表头
            JSONObject Rd_Out_M = getRd_Out_M(shipmentHeader);
            // 查询出库单据明细
hh authored
696
697
698
699
            LambdaQueryWrapper<ShipmentDetail> shipmentDetailWrapper = Wrappers.lambdaQuery();
            shipmentDetailWrapper.eq(ShipmentDetail::getShipmentId, shipmentHeader.getId());
            List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(shipmentDetailWrapper);
            JSONArray jsonArray = getRd_Out_S(shipmentHeader,shipmentDetailList);
hh authored
700
701
702
703
            JSONObject data = new JSONObject();
            data.put("Rd_Out_M", Rd_Out_M);
            data.put("Rd_Out_S", jsonArray);
            dataArray.add(data);
hh authored
704
705
706
707
708

            for (ShipmentDetail detail: shipmentDetailList){
                keyField.append("--单据号:").append(shipmentHeader.getCode()).append( ", ")
                        .append("物料编码:").append(detail.getMaterialCode()).append(", ")
                        .append("单据数量:").append(detail.getQty()).append(", ")
709
                        .append("出库数量:").append(detail.getTaskQty()).append(". ");
hh authored
710
            }
hh authored
711
712
713
714
715
716
        }

        String action = "E_Rd_Out";
        JSONObject json = new JSONObject();
        json.put("data", dataArray);
hh authored
717
718
        momLog.setType("2"); // (入:1  出:2)
        momLog.setMomData(json.toJSONString());
719
        momLog.setCreated(new Date());
hh authored
720
        momLog.setKeyField(keyField.toString());
hh authored
721
722
        momLogService.save(momLog);
hh authored
723
724
725
726
        return postMOM(action, json);
    }
hh authored
727
    public JSONArray getRd_Out_S(ShipmentHeader shipmentHeader, List<ShipmentDetail> shipmentDetailList) {
hh authored
728
        JSONArray jsonArray = new JSONArray();
hh authored
729
        shipmentDetailList.forEach(shipmentDetail->{
hh authored
730
            JSONObject Rd_Out_S = new JSONObject();
hh authored
731
732
            Rd_Out_S.put("MGPK", shipmentHeader.getMOMID());
            Rd_Out_S.put("SGPK",  shipmentDetail.getMOMID());
hh authored
733
            Rd_Out_S.put("SNNO",  shipmentDetail.getSNNO());
734
            Rd_Out_S.put("cInvCode",  shipmentDetail.getMaterialCode() == null ? null : getGB(shipmentDetail.getMaterialCode()));
hh authored
735
736
737
738
            // 实际入库数量
            Rd_Out_S.put("Iquantity",  shipmentDetail.getTaskQty());
            // MOM传入的入库数量
            Rd_Out_S.put("iFQuantity",  shipmentDetail.getQty());
hh authored
739
            Rd_Out_S.put("cwhcode",  shipmentDetail.getWarehouseCode());
hh authored
740
            Rd_Out_S.put("MOCode",  shipmentDetail.getNoticeNo() == null ? null : getGB(shipmentDetail.getNoticeNo()));
hh authored
741
            Rd_Out_S.put("ISUrgent",  shipmentDetail.getIsUrgent());
hh authored
742
            Rd_Out_S.put("updatedBy",  shipmentDetail.getLastUpdatedBy());
hh authored
743
744
            jsonArray.add(Rd_Out_S);
        });
hh authored
745
746
        return jsonArray;
    }
hh authored
747
hh authored
748
    public JSONObject getRd_Out_M(@RequestBody ShipmentHeader shipmentHeader) {
hh authored
749
750
751
752
753
754
755
        JSONObject Rd_Out_M = new JSONObject();
        Rd_Out_M.put("mno", shipmentHeader.getCode());
        Rd_Out_M.put("MGPK", shipmentHeader.getMOMID());
        Rd_Out_M.put("cBusType", shipmentHeader.getShipmentType());
        Rd_Out_M.put("TAID", shipmentHeader.getTAID());
        Rd_Out_M.put("FAID", shipmentHeader.getFAID());
        Rd_Out_M.put("UserNo",  shipmentHeader.getLastUpdatedBy());
hh authored
756
        Rd_Out_M.put("warehouse",  shipmentHeader.getWarehouse());
hh authored
757
        return Rd_Out_M;
hh authored
758
759
    }
hh authored
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
    /**  utf-8 转 GB2312 */
    public String getGB(String action){
        byte [] Rd_Out; //中间用ISO-8859-1过渡
        String data = null;
        try {
            Rd_Out = action.getBytes("8859_1");
            data = new String(Rd_Out, "GB2312"); //转换成GB2312字符
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return data;
    }


        /**
         * @param action MOM行为
         * @param JObject 行为参数
         * @return
         */
779
    public Boolean postMOM(String action, JSONObject JObject){
hh authored
780
781
782
783
784
785
786

        return CallaMOM.getMsg(action, JObject);
//        String url = "http://192.168.101.127:31055//Handler/H_DJ2J_10.ashx";
//        String param = "sptype=JSP_W2M&action=" + action + "&onlydata=1&params=" + JObject;;
//        CallaMOM callMOM = new CallaMOM();
//        String data = callMOM.sendPost(url, param);
//        return JSONObject.parseObject(data);
hh authored
787
    }
hh authored
788
hh authored
789
hh authored
790
}