Blame view

src/main/java/com/huaheng/api/erp/service/ErpBackServiceImpl.java 39.1 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
package com.huaheng.api.erp.service;

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

import javax.annotation.Resource;

import com.alibaba.fastjson.JSONObject;
import com.huaheng.api.erp.domainBack.*;
import com.huaheng.api.erp.domainBack.finishedR.ParameterFinished;
import com.huaheng.api.erp.domainBack.inventoryScrapC.ParameterInventoryScrap;
import com.huaheng.api.erp.domainBack.issuanceC.ParameterIssuance;
import com.huaheng.api.erp.domainBack.miscellaneousR.ParameterMiscellaneous;
import com.huaheng.api.erp.domainBack.noticeWmsC.ParameterNotice;
import com.huaheng.api.erp.domainBack.purchaseWmsR.ParameterPurchase;
import com.huaheng.api.erp.domainBack.saleR.Parameter;
import com.huaheng.api.erp.domainBack.scrapC.ParameterScrap;
import com.huaheng.api.erp.domainBack.shipmentWmsC.ParameterShipmentWms;
import com.huaheng.api.erp.domainBack.transferD.ParameterTransfer;
import com.huaheng.api.erp.domainBack.warehouseC.ParameterWarehouse;
import com.huaheng.common.utils.DateUtils;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.Wrappers;
import com.huaheng.framework.web.domain.ResultErpBack;
26
import com.huaheng.pc.config.address.domain.Address;
27
28
import com.huaheng.pc.srm.domain.SrmDetail;
import com.huaheng.pc.srm.domain.SrmHeader;
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
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.CallBack;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.huaheng.api.erp.domain.*;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.http.OkHttpUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.ResultErp;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.company.domain.Company;
import com.huaheng.pc.config.company.service.CompanyService;
import com.huaheng.pc.config.customer.domain.Customer;
import com.huaheng.pc.config.customer.service.CustomerServiceImpl;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.supplier.domain.Supplier;
import com.huaheng.pc.config.supplier.service.SupplierService;
import com.huaheng.pc.config.warehouse.service.WarehouseService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
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.receipt.receiptHeaderHistory.service.ReceiptHeaderHistoryService;
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.system.user.service.IUserService;

/**
 * @author 游杰
 */
@Service
public class ErpBackServiceImpl implements IErpBackService {

    @Resource
    private IErpBackTypeService erpBackTypeService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentDetailService shipmentDetailService;
84
85
    @Resource
    private ReceiptDetailService receiptDetailService;
86
87
88
89
90
91
92
93
94

    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private AddressService addressService;
    @Resource
    private ErpBackUpdateStatusServiceImpl erpBackUpdateStatusService;
95
96
    @Resource
    private CompanyService companyService;
97
98
99
100
101
102
103
104
105
106
    /**
     * 任务回传:
     * 单据回传:
     * 销退单(入)、超领单(出)、退料单(入)、完工入库单(入)、杂收单(入)、
     * 下阶料报废(出)、调拨单(出入)、杂发单(出)、库存报废(出)、仓退单(出)、成套发料(出)、
     * @param taskHeader
     * @return
     */
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
    public AjaxResult setErpBackData(TaskHeader taskHeader){
            TaskHeader task = taskHeaderService.getById(taskHeader.getId());
            if(task==null){
//                throw new ServiceException("任务信息为空");
                return AjaxResult.error("任务信息为空");
            }
            switch (task.getTaskType()){
                case QuantityConstant.TASK_TYPE_WHOLERECEIPT:
                case QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT:

                    break;
                case QuantityConstant.TASK_TYPE_WHOLESHIPMENT:
                case QuantityConstant.TASK_TYPE_SORTINGSHIPMENT:
                    break;
                default:
                    TaskHeader taskHeader1=new TaskHeader();
                    taskHeader1.setId(task.getId());
                    taskHeader1.setBackInfo("无需回传");
                    taskHeader1.setIsReturn(2);
                    taskHeaderService.updateById(taskHeader1);
                    return AjaxResult.success("无需回传");
            }
            List<TaskDetail> taskDetails = taskDetailService.findByTaskId(task.getId());
            if(taskDetails==null || taskDetails.size()==0){
                throw new ServiceException("找不到任务id为:"+task.getId()+"的任务,没有任务明细");
            }
133
134
            Address address=addressService.selectAddressByParam("ERP",task.getWarehouseCode());
135
136
137
138
139

            List<String> billCodes = taskDetails.stream().map(TaskDetail::getBillCode).collect(Collectors.toList());
            List<BackTaskStatus> backTaskStatusList=null;
            switch(task.getInternalTaskType()){
                case 100:
140
                    backTaskStatusList=createReceiptBack(task,billCodes,address.getUrl(),address.getUserDef2());
141
142
                    break;
                case 200:
143
                    backTaskStatusList=createShipmentBack(task,billCodes,address.getUrl(),address.getUserDef2());
144
145
146
147
148
149
150
151
                    break;
                default:
                    break;
            }
            //修改入库单、出库单状态,任务头状态
            AjaxResult ajaxResult=erpBackUpdateStatusService.backTaskUpdateStatus(task,backTaskStatusList);
            return ajaxResult;
152
//        return AjaxResult.success("回传成功");
153
154
    }
155
156
    /**
     * 整单回传
157
     * 销退单(入)、调拨单(出入)、退料单(入)、完工入库单(入)、杂收单(入)、多角采购(入)
158
159
160
161
162
163
     * 整单回传的单据:查询该入库单详情是否都已完成,都完成则回传,否则不回传
     * @param task
     * @param billCodes
     * @param url
     * @return
     */
164
165
    //根据任务详情的入库单号,查找单据类型,回传到erp
    @Transactional(rollbackFor = Exception.class)
166
    public List<BackTaskStatus> createReceiptBack( TaskHeader task,List<String> billCodes,String url,String datakeyEntId){
167
168
169
170
171
172
173
174
        LambdaQueryWrapper<ReceiptHeader> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.in(ReceiptHeader::getCode,billCodes)
                .eq(ReceiptHeader::getWarehouseCode,task.getWarehouseCode());
        //获取任务中的入库单
        List<ReceiptHeader> list = receiptHeaderService.list(queryWrapper);
        //Integer 3无需回传,2回传成功,1回传失败
        List<BackTaskStatus> backTaskStatusList=new ArrayList<>();
        for (ReceiptHeader receiptHeader : list) {
175
            Company company=companyService.getCompanyByCode(receiptHeader.getCompanyCode(),receiptHeader.getWarehouseCode());
176
177
            //获取未回传任务集
            List<TaskDetail> unBackTask = getUnBackTask(receiptHeader.getCode(),receiptHeader.getWarehouseCode(),task.getId());
178
            List<TaskDetail> unBackTaskReturn =unBackTask;
179
            if(unBackTask.size()==0){
180
181
182
183
184
185
186
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(receiptHeader.getCode());
                backTaskStatus.setBillId(receiptHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.ISRETURN_SUCC);
                backTaskStatus.setMsg("过账成功");
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
187
188
189
190
191
                if(StringUtils.isNotEmpty(receiptHeader.getBackMsg())){
                    receiptHeader.setBackMsg(receiptHeader.getBackMsg());
                }else{
                    receiptHeader.setBackMsg("过账成功");
                }
192
                receiptHeaderService.updateById(receiptHeader);
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
                continue;
            }
            if(StringUtils.isEmpty(receiptHeader.getReferCode())){
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(receiptHeader.getCode());
                backTaskStatus.setBillId(receiptHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.NOT_RETURN);
                backTaskStatus.setMsg("无需回传");
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
                receiptHeader.setBackMsg("无需回传");
                receiptHeaderService.updateById(receiptHeader);
                continue;
            }
            if(taskAllComplete(receiptHeader.getCode(),receiptHeader.getWarehouseCode(),task.getId())){
                //同一个单据该任务还有未完成的
                continue;
            }
211
212
213
214
215
216
217
218
            Set<Integer> uniqueTaskIds =new LinkedHashSet<>();
            switch (receiptHeader.getReceiptType()){
                case QuantityConstant.SALES_R:
                case QuantityConstant.TRANSFER_R:
                case QuantityConstant.RETURN_R:
                case QuantityConstant.FINISHED_R:
                case QuantityConstant.MISCELLANEOUS_R:
                case QuantityConstant.WAREHOUSE_R:
219
                case QuantityConstant.PUR_R:
220
221
222
223
                    if(receiptAllComplete(receiptHeader.getId(),receiptHeader.getWarehouseCode())){
                        //同一个单据该任务还有未完成的
                        continue;
                    }
224
225
226
227
228
                    //先查taskdetail表还有该单据未完成任务的,再查下该单据完成任务没回传的
                    List<TaskDetail> unCompaleteTask1 = getUnBackTaskBill(receiptHeader.getCode(),receiptHeader.getWarehouseCode());
                    if(unCompaleteTask1.size()>0){
                        continue;
                    }
229
230
231
232
233
                    //获取未回传任务集
                    unBackTask = getUnBackTask(receiptHeader.getCode(),receiptHeader.getWarehouseCode(),null);
                    if(unBackTask.size()==0){
                        continue;
                    }
234
235
                    //将t100相同序号的汇总,整单回传的写到整单里面
                    unBackTaskReturn=erpBackTypeService.allReceiptTask(receiptHeader,unBackTask);
236
237
238
239
240
241
242
243
                    uniqueTaskIds = unBackTask.stream()
                            .map(TaskDetail::getTaskId)
                            .collect(Collectors.toSet());

                    break;
                default:
                    break;
            }
244
245
//            AjaxResult ajaxResult=getBackDataReceipt(receiptHeader,unBackTask,datakeyEntId);
            AjaxResult ajaxResult=getBackDataReceipt(receiptHeader,unBackTaskReturn,datakeyEntId);
246
            if(ajaxResult.hasErr()){
247
248
249
250
251
252
253
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(receiptHeader.getCode());
                backTaskStatus.setBillId(receiptHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.NOT_RETURN);
                backTaskStatus.setMsg("无需回传");
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
254
255
256
                continue;
            }
            //给erp回传数据
257
            AjaxResult ajaxResult1=sendDataToERP(ajaxResult,url,task.getWarehouseCode(),datakeyEntId,company.getErpCompany());
258
//            AjaxResult ajaxResult1=AjaxResult.success("过账成功");
259
            if(!ajaxResult1.hasErr()){
260
                List<TaskDetail> unBackTaskUpdate=new ArrayList<>();
261
                for (TaskDetail taskDetail : unBackTask) {
262
263
264
265
                    TaskDetail taskDetail1=new TaskDetail();
                    taskDetail1.setId(taskDetail.getId());
                    taskDetail1.setBack(1);
                    unBackTaskUpdate.add(taskDetail1);
266
                }
267
                taskDetailService.updateBatchById(unBackTaskUpdate);
268
269
270
271
272
                //更改入库单明细表回传数
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(receiptHeader.getCode());
                backTaskStatus.setBillId(receiptHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.ISRETURN_SUCC);
273
                backTaskStatus.setTaskIds(uniqueTaskIds);
274
275
276
277
278
                backTaskStatus.setMsg(ajaxResult1.getMsg());
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
            }
            if(ajaxResult1.hasErr()){
279
280
//                receiptHeader.setBackMsg(receiptHeader.getBackMsg()+",失败");
//                receiptHeaderService.updateById(receiptHeader);
281
282
283
284
285
286
287
288
289
290
291
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(receiptHeader.getCode());
                backTaskStatus.setBillId(receiptHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.ISRETURN_FAIL);
                backTaskStatus.setIsSuccess(false);
                backTaskStatus.setMsg(ajaxResult1.getMsg());
                backTaskStatusList.add(backTaskStatus);
            }
        }
        return backTaskStatusList;
    }
292
293
294
295
296
297
298
299
300
301

    /**
     * 整单回传:
     * 下阶料报废(出)、杂发单(出)、库存报废(出)、仓退单(出)、成套发料(出)、超领单(出)、
     *  * 整单回传的单据:查询该出库单详情是否都已完成,都完成则回传,否则不回传
     * @param task
     * @param billCodes
     * @param url
     * @return
     */
302
303
    //根据任务详情的出库单号,查找单据类型,回传到erp
    @Transactional(rollbackFor = Exception.class)
304
    public List<BackTaskStatus> createShipmentBack( TaskHeader task,List<String> billCodes,String url,String datakeyEntId){
305
306
307
308
309
310
311
312
        LambdaQueryWrapper<ShipmentHeader> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.in(ShipmentHeader::getCode,billCodes)
                .eq(ShipmentHeader::getWarehouseCode,task.getWarehouseCode());
        //获取任务中的出库单
        List<ShipmentHeader> list = shipmentHeaderService.list(queryWrapper);
        //Integer 3无需回传,2回传成功,1回传失败
        List<BackTaskStatus> backTaskStatusList=new ArrayList<>();
        for (ShipmentHeader shipmentHeader : list) {
313
            Company company=companyService.getCompanyByCode(shipmentHeader.getCompanyCode(),shipmentHeader.getWarehouseCode());
314
            if(StringUtils.isEmpty(shipmentHeader.getReferCode())||shipmentHeader.getShipmentType().equals(QuantityConstant.TRANSFER_C)){
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
                shipmentHeader.setBackMsg("无需回传");
                shipmentHeaderService.updateById(shipmentHeader);
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(shipmentHeader.getCode());
                backTaskStatus.setBillId(shipmentHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.NOT_RETURN);
                backTaskStatus.setMsg("无需回传");
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
                continue;
            }
            if(taskAllComplete(shipmentHeader.getCode(),shipmentHeader.getWarehouseCode(),task.getId())){
                //同一个单据该任务还有未完成的
                continue;
            }
            //获取未回传任务集
            List<TaskDetail> unBackTask = getUnBackTask(shipmentHeader.getCode(),shipmentHeader.getWarehouseCode(),task.getId());
332
            List<TaskDetail> unBackTaskReturn=unBackTask;
333
            if(unBackTask.size()==0){
334
335
336
337
338
339
340
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(shipmentHeader.getCode());
                backTaskStatus.setBillId(shipmentHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.ISRETURN_SUCC);
                backTaskStatus.setMsg("过账成功");
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
341
342
343
344
345
346
                if(StringUtils.isNotEmpty(shipmentHeader.getBackMsg())){
                    shipmentHeader.setBackMsg(shipmentHeader.getBackMsg());
                }else{
                    shipmentHeader.setBackMsg("过账成功");
                }
//                shipmentHeader.setBackMsg(shipmentHeader.getBackMsg()+",过账成功");
347
                shipmentHeaderService.updateById(shipmentHeader);
348
349
                continue;
            }
350
351
352
353
354
355
356
357
358
359
360
361
            Set<Integer> uniqueTaskIds =new LinkedHashSet<>();
            switch (shipmentHeader.getShipmentType()){
                case QuantityConstant.SCRAP_C:
                case QuantityConstant.MISCELLANEOUS_C:
                case QuantityConstant.INVENTORYSCRAP_C:

                case QuantityConstant.ISSUANCE_C:
                case QuantityConstant.OVER_C:
                    if(shipmentAllComplete(shipmentHeader.getId(),shipmentHeader.getWarehouseCode())){
                        //同一个单据该任务还有未完成的
                        continue;
                    }
362
363
364
365
366
                    //先查taskdetail表还有该单据未完成任务的,再查下该单据完成任务没回传的
                    List<TaskDetail> unCompaleteTask = getUnBackTaskBill(shipmentHeader.getCode(),shipmentHeader.getWarehouseCode());
                    if(unCompaleteTask.size()>0){
                        continue;
                    }
367
368
369
370
371
                    //获取未回传任务集
                    unBackTask = getUnBackTask(shipmentHeader.getCode(),shipmentHeader.getWarehouseCode(),null);
                    if(unBackTask.size()==0){
                        continue;
                    }
372
                    unBackTaskReturn=erpBackTypeService.allShipmentTask(shipmentHeader,unBackTask);
373
374
375
376
                    uniqueTaskIds = unBackTask.stream()
                            .map(TaskDetail::getTaskId)
                            .collect(Collectors.toSet());
                    break;
377
378
379
380
381
                case QuantityConstant.NOTICE_C:
                    List<TaskDetail> taskDetails=getUnCompaleteTask(shipmentHeader.getCode(),shipmentHeader.getWarehouseCode(),null);
                    if(taskDetails.size()>0){
                        continue;
                    }
382
383
384
385
386
                    //先查taskdetail表还有该单据未完成任务的,再查下该单据完成任务没回传的
                    List<TaskDetail> unCompaleteTask1 = getUnBackTaskBill(shipmentHeader.getCode(),shipmentHeader.getWarehouseCode());
                    if(unCompaleteTask1.size()>0){
                        continue;
                    }
387
388
389
390
391
                    //获取未回传任务集
                    unBackTask = getUnBackTask(shipmentHeader.getCode(),shipmentHeader.getWarehouseCode(),null);
                    if(unBackTask.size()==0){
                        continue;
                    }
392
                    unBackTaskReturn=unBackTask;
393
394
395
396
                    uniqueTaskIds = unBackTask.stream()
                            .map(TaskDetail::getTaskId)
                            .collect(Collectors.toSet());
                    break;
397
398
399
                default:
                    break;
            }
400
401
//            AjaxResult ajaxResult=getBackDataShipment(shipmentHeader,unBackTask,datakeyEntId);
            AjaxResult ajaxResult=getBackDataShipment(shipmentHeader,unBackTaskReturn,datakeyEntId);
402
            if(ajaxResult.hasErr()){
403
404
405
406
407
408
409
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(shipmentHeader.getCode());
                backTaskStatus.setBillId(shipmentHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.NOT_RETURN);
                backTaskStatus.setMsg("无需回传");
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
410
411
                continue;
            }
412
            AjaxResult ajaxResult1=sendDataToERP(ajaxResult,url,task.getWarehouseCode(),datakeyEntId,company.getErpCompany());
413
//            AjaxResult ajaxResult1=AjaxResult.success("过账成功");
414
            if(!ajaxResult1.hasErr()){
415
                List<TaskDetail> unBackTaskUpdate=new ArrayList<>();
416
                for (TaskDetail taskDetail : unBackTask) {
417
418
419
420
                    TaskDetail taskDetail1=new TaskDetail();
                    taskDetail1.setId(taskDetail.getId());
                    taskDetail1.setBack(1);
                    unBackTaskUpdate.add(taskDetail1);
421
                }
422
                taskDetailService.updateBatchById(unBackTaskUpdate);
423
424
425
426
427
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(shipmentHeader.getCode());
                backTaskStatus.setBillId(shipmentHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.ISRETURN_SUCC);
                backTaskStatus.setMsg(ajaxResult1.getMsg());
428
                backTaskStatus.setTaskIds(uniqueTaskIds);
429
430
431
432
                backTaskStatus.setIsSuccess(true);
                backTaskStatusList.add(backTaskStatus);
            }
            if(ajaxResult1.hasErr()){
433
434
//                shipmentHeader.setBackMsg(shipmentHeader.getBackMsg()+",失败");
//                shipmentHeaderService.updateById(shipmentHeader);
435
436
437
438
439
440
441
442
443
444
445
                BackTaskStatus backTaskStatus=new BackTaskStatus();
                backTaskStatus.setBillCode(shipmentHeader.getCode());
                backTaskStatus.setBillId(shipmentHeader.getId());
                backTaskStatus.setStatus(QuantityConstant.ISRETURN_FAIL);
                backTaskStatus.setMsg(ajaxResult1.getMsg());
                backTaskStatus.setIsSuccess(false);
                backTaskStatusList.add(backTaskStatus);
            }
        }
        return backTaskStatusList;
    }
446
447
448
449
450
451
452
453

    /**
     * 返回true则是还有未完成的,false则是空的
     * @param billCode
     * @param warehouseCode
     * @param taskid
     * @return
     */
454
455
456
457
458
459
460
461
462
    public boolean taskAllComplete(String billCode,String warehouseCode,Integer taskid){
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(TaskDetail::getBillCode,billCode)
                .eq(TaskDetail::getWarehouseCode,warehouseCode)
                .eq(TaskDetail::getTaskId,taskid)
                .lt(TaskDetail::getStatus,QuantityConstant.TASK_STATUS_COMPLETED);
        List<TaskDetail> taskDetails = taskDetailService.list(queryWrapper);
        return !taskDetails.isEmpty();
    }
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
    /**
     * 检查该入库单是否有未完成的任务
     * @param receiptId
     * @param warehouseCode
     * @return
     */
    public boolean receiptAllComplete(Integer receiptId,String warehouseCode){
        LambdaQueryWrapper<ReceiptDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(ReceiptDetail::getReceiptId,receiptId)
                .eq(ReceiptDetail::getWarehouseCode,warehouseCode)
                .lt(ReceiptDetail::getProcessStamp,QuantityConstant.RECEIPT_HEADER_POSTING);
        List<ReceiptDetail> receiptDetailList = receiptDetailService.list(queryWrapper);
        return !receiptDetailList.isEmpty();
    }
    /**
     * 检查该出库单是否有未完成的任务
     * @param shipmentId
     * @param warehouseCode
     * @return
     */
    public boolean shipmentAllComplete(Integer shipmentId,String warehouseCode){
        LambdaQueryWrapper<ShipmentDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(ShipmentDetail::getShipmentId,shipmentId)
                .eq(ShipmentDetail::getWarehouseCode,warehouseCode)
                .lt(ShipmentDetail::getStatus,QuantityConstant.SHIPMENT_HEADER_COMPLETED);
        List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(queryWrapper);
        return !shipmentDetailList.isEmpty();
    }
491
492
493
494
    public List<TaskDetail> getUnBackTask(String billCode,String warehouseCode,Integer taskid){
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(TaskDetail::getBillCode,billCode)
                .eq(TaskDetail::getWarehouseCode,warehouseCode)
495
                .eq(StringUtils.isNotNull(taskid),TaskDetail::getTaskId,taskid)
496
497
498
499
500
501
                .eq(TaskDetail::getStatus,QuantityConstant.TASK_STATUS_COMPLETED)
                .eq(TaskDetail::getBack,0);
        List<TaskDetail> taskDetails = taskDetailService.list(queryWrapper);
        return taskDetails;
    }
502
503
504
505
506
507
508
509
510
    public List<TaskDetail> getUnBackTaskBill(String billCode,String warehouseCode){
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(TaskDetail::getBillCode,billCode)
                .eq(TaskDetail::getWarehouseCode,warehouseCode)
                .lt(TaskDetail::getStatus,QuantityConstant.TASK_STATUS_COMPLETED);
        List<TaskDetail> taskDetails = taskDetailService.list(queryWrapper);
        return taskDetails;
    }
511
512
513
514
515
516
517
518
519
520
    public List<TaskDetail> getUnCompaleteTask(String billCode,String warehouseCode,Integer taskid){
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(TaskDetail::getBillCode,billCode)
                .eq(TaskDetail::getWarehouseCode,warehouseCode)
                .eq(StringUtils.isNotNull(taskid),TaskDetail::getTaskId,taskid)
                .lt(TaskDetail::getStatus,QuantityConstant.TASK_STATUS_COMPLETED);
        List<TaskDetail> taskDetails = taskDetailService.list(queryWrapper);
        return taskDetails;
    }
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
    public Map<Integer, TaskDetail> combineTaskDetailByBill(List<TaskDetail> unBackTask){
        Map<Integer, TaskDetail> detailsQtyMap =new HashMap<>();
        for (TaskDetail taskDetail : unBackTask) {
            TaskDetail taskDetail1=detailsQtyMap.get(taskDetail.getBillDetailId());
            if(taskDetail1!=null){
                BigDecimal bigDecimal =taskDetail1.getQty().add(taskDetail.getQty());
                taskDetail1.setQty(bigDecimal);
                detailsQtyMap.put(taskDetail.getBillDetailId(),taskDetail1);
            }else{
                detailsQtyMap.put(taskDetail.getBillDetailId(),taskDetail1);
            }
        }
        return detailsQtyMap;
    }

    @Transactional(rollbackFor = Exception.class)
周鸿 authored
538
    public AjaxResult getBackDataReceipt(ReceiptHeader receiptHeader,List<TaskDetail> unBackTask,String datakeyEntId){
539
540
541
542
543
544
545
546
547
548
549
        //将相同入库详情id,BillDetailId的任务详情整合到一起;
//        Map<Integer, TaskDetail> detailMap=combineTaskDetailByBill(unBackTask);
        String receipttype=receiptHeader.getReceiptType();
        ParameterApi parameterApi=new ParameterApi();
        switch (receipttype){
            case QuantityConstant.SALES_R:
                Parameter parameter=erpBackTypeService.backSalesR(receiptHeader,unBackTask);
                parameterApi.setApiName("ERP销退入库单回传");
                parameterApi.setParameter(parameter);
                parameterApi.setApiNameEn("SalesPost");
                return AjaxResult.success().setData(parameterApi);
550
            case QuantityConstant.MES_RECEIPT_TYPE_SI:
周鸿 authored
551
                ParameterFinished parameterFinishedSI=erpBackTypeService.backFinishedR(receiptHeader,unBackTask,receipttype,datakeyEntId);
552
                parameterApi.setApiName("ERP产成品入库单回传");
553
554
                parameterApi.setParameter(parameterFinishedSI);
                parameterApi.setApiNameEn("WorkOrderFinishCreate");
555
                return AjaxResult.success().setData(parameterApi);
556
            case QuantityConstant.PURCHASER_R:
周鸿 authored
557
                ParameterPurchase parameterPurchaser=erpBackTypeService.backPurchaseR(receiptHeader,null,unBackTask,receipttype,datakeyEntId);
558
559
560
561
                parameterApi.setApiName("ERP采购收货入库单回传");
                parameterApi.setParameter(parameterPurchaser);
                parameterApi.setApiNameEn("PurchaseDeliveryCreate");
                return AjaxResult.success().setData(parameterApi);
562
            case QuantityConstant.PURCHASE_R:
周鸿 authored
563
                ParameterPurchase parameterPurchase=erpBackTypeService.backPurchaseR(receiptHeader,null,unBackTask,receipttype,datakeyEntId);
564
                parameterApi.setApiName("ERP采购收货单入库单回传");
565
566
567
                parameterApi.setParameter(parameterPurchase);
                parameterApi.setApiNameEn("PurchaseDeliveryCreate");
                return AjaxResult.success().setData(parameterApi);
568
            case QuantityConstant.OUTSOURCED_R:
周鸿 authored
569
                ParameterPurchase parameterPurchased=erpBackTypeService.backPurchaseR(receiptHeader,null,unBackTask,receipttype,datakeyEntId);
570
571
572
573
                parameterApi.setApiName("ERP委外收货单入库单回传");
                parameterApi.setParameter(parameterPurchased);
                parameterApi.setApiNameEn("PurchaseDeliveryCreate");
                return AjaxResult.success().setData(parameterApi);
574
            case QuantityConstant.FINISHED_R:
周鸿 authored
575
                ParameterFinished parameterFinished=erpBackTypeService.backFinishedR(receiptHeader,unBackTask,receipttype,datakeyEntId);
576
577
578
579
580
581
582
583
                parameterApi.setApiName("ERP完工入库单回传");
                parameterApi.setParameter(parameterFinished);
                parameterApi.setApiNameEn("WorkOrderFinishPost");
                return AjaxResult.success().setData(parameterApi);
            case QuantityConstant.MISCELLANEOUS_R:
                ParameterMiscellaneous parameterMiscellaneous=erpBackTypeService.backMisceLLaneousC(receiptHeader,null,unBackTask);
                parameterApi.setApiName("ERP杂收入库单回传");
                parameterApi.setParameter(parameterMiscellaneous);
584
                parameterApi.setApiNameEn("ReceiveDispatchPostS");
585
586
587
588
589
                return AjaxResult.success().setData(parameterApi);
            case QuantityConstant.RETURN_R:
                ParameterIssuance parameterIssuance=erpBackTypeService.backIssuanceC(receiptHeader,null,unBackTask);
                parameterApi.setApiName("ERP退料入库单回传");
                parameterApi.setParameter(parameterIssuance);
590
591
                parameterApi.setApiNameEn("WorkOrderIssuePost");
                return AjaxResult.success().setData(parameterApi);
592
593
594
595
596
597
            case QuantityConstant.OVER_R:
                ParameterIssuance parameterIssuance1=erpBackTypeService.backIssuanceC(receiptHeader,null,unBackTask);
                parameterApi.setApiName("ERP超领退料单回传");
                parameterApi.setParameter(parameterIssuance1);
                parameterApi.setApiNameEn("WorkOrderIssuePost");
                return AjaxResult.success().setData(parameterApi);
598
            case QuantityConstant.WAREHOUSE_R:
周鸿 authored
599
                ParameterPurchase parameterPurchase1=erpBackTypeService.backPurchaseR(receiptHeader,null,unBackTask,receipttype,datakeyEntId);
600
                parameterApi.setApiName("ERP仓退入库回传");
601
602
                parameterApi.setParameter(parameterPurchase1);
                parameterApi.setApiNameEn("PurchaseDeliveryPost");
603
604
605
606
607
                return AjaxResult.success().setData(parameterApi);
            case QuantityConstant.TRANSFER_R:
                ParameterTransfer parameterTransfer=erpBackTypeService.backTransferC(receiptHeader,unBackTask);
                parameterApi.setApiName("ERP调拨单回传");
                parameterApi.setParameter(parameterTransfer);
608
                parameterApi.setApiNameEn("RequisitionNotePost");
609
                return AjaxResult.success().setData(parameterApi);
610
611
612
613
614
615
            case QuantityConstant.PUR_R:
                ParameterPurchase parameterPurchase2=erpBackTypeService.backPurR(receiptHeader,unBackTask);
                parameterApi.setApiName("ERP多角采购回传");
                parameterApi.setParameter(parameterPurchase2);
                parameterApi.setApiNameEn("PurchaseReceiptPost");
                return AjaxResult.success().setData(parameterApi);
616
            default:
617
                return AjaxResult.error("单据类型不用回传");
618
619
620
621
622

        }
    }

    @Transactional(rollbackFor = Exception.class)
周鸿 authored
623
    public AjaxResult getBackDataShipment(ShipmentHeader shipmentHeader,List<TaskDetail> unBackTask,String datakeyEntId){
624
625
626
627
        String shipmenttype=shipmentHeader.getShipmentType();
        ParameterApi parameterApi=new ParameterApi();
        switch (shipmenttype){
            case QuantityConstant.NOTICE_C:
周鸿 authored
628
                ParameterShipmentWms parameter=erpBackTypeService.backShipmentWmsC(null,shipmentHeader,unBackTask,datakeyEntId);
629
630
631
                parameterApi.setApiName("ERP出货通知单回传");
                parameterApi.setParameter(parameter);
                parameterApi.setApiNameEn("DeliveryOrderCreate");
632
                parameterApi.setAcct(parameter.getMaster().get(0).getXmdkcnfid());
633
634
635
636
637
                return AjaxResult.success().setData(parameterApi);
            case QuantityConstant.MISCELLANEOUS_C:
                ParameterMiscellaneous parameterMiscellaneous=erpBackTypeService.backMisceLLaneousC(null,shipmentHeader,unBackTask);
                parameterApi.setApiName("ERP杂发出库回传");
                parameterApi.setParameter(parameterMiscellaneous);
638
                parameterApi.setApiNameEn("ReceiveDispatchPostF");
639
                return AjaxResult.success().setData(parameterApi);
640
641
642
643
644
645
            case QuantityConstant.ISSUANCE_C:
                ParameterIssuance parameterIssuance=erpBackTypeService.backIssuanceC(null,shipmentHeader,unBackTask);
                parameterApi.setApiName("ERP成套发料出库回传");
                parameterApi.setParameter(parameterIssuance);
                parameterApi.setApiNameEn("WorkOrderIssuePost");
                return AjaxResult.success().setData(parameterApi);
646
647
648
649
            case QuantityConstant.OVER_C:
                ParameterIssuance parameterIssuance1=erpBackTypeService.backIssuanceC(null,shipmentHeader,unBackTask);
                parameterApi.setApiName("ERP超领出库回传");
                parameterApi.setParameter(parameterIssuance1);
650
                parameterApi.setApiNameEn("WorkOrderOverPost");
651
652
653
654
655
                return AjaxResult.success().setData(parameterApi);
            case QuantityConstant.SCRAP_C:
                ParameterScrap parameterScrap=erpBackTypeService.backScrapC(shipmentHeader,unBackTask);
                parameterApi.setApiName("ERP下阶料报废出库回传");
                parameterApi.setParameter(parameterScrap);
656
                parameterApi.setApiNameEn("NextLevelMaterialPost");
657
658
659
660
661
                return AjaxResult.success().setData(parameterApi);
            case QuantityConstant.INVENTORYSCRAP_C:
                ParameterInventoryScrap parameterInventoryScrap=erpBackTypeService.backInventoryScrapC(shipmentHeader,unBackTask);
                parameterApi.setApiName("ERP库存报废出库回传");
                parameterApi.setParameter(parameterInventoryScrap);
662
                parameterApi.setApiNameEn("InventoryScrapFormPost");
663
                return AjaxResult.success().setData(parameterApi);
664
665
            case QuantityConstant.TRANSFER_C:
                return AjaxResult.error("单据类型不用回传");
666
            default:
667
                return AjaxResult.error("单据类型不用回传");
668
669
        }
    }
670
    public SendOut createSendOut( Payload payload,String api,String datakeyEntId,String datakeyCompanyId){
671
672
673
674
675
        SendOut sendOut=new SendOut();
        Host host=new Host();
        ErpService service=new ErpService();
        service.setName(api);
        Datakey datakey=new Datakey();
676
677
        datakey.setEntId(datakeyEntId);
        datakey.setCompanyId(datakeyCompanyId);
678
679
680
681
682
683
684
685
686
687

        host.setTimestamp(DateUtils.getNowTime());

        sendOut.setHost(host);
        sendOut.setService(service);
        sendOut.setDatakey(datakey);
        sendOut.setPayload(payload);
        return sendOut;
    }
688
    public AjaxResult sendDataToERP(AjaxResult ajaxResult,String url,String warehouseCode,String datakeyEntId,String datakeyCompanyId){
689
690
691
692
693
694
        Payload payload=new Payload();
        StdData stdData=new StdData();
        ParameterApi parameterApi=(ParameterApi)ajaxResult.getData();
        stdData.setParameter(parameterApi.getParameter());
        payload.setStd_data(stdData);
        //构建回传体
695
        SendOut sendOut=createSendOut(payload,parameterApi.getApiNameEn(),datakeyEntId,datakeyCompanyId);
696
697
698
        if(StringUtils.isNotEmpty(parameterApi.getApiNameEn())&&
                parameterApi.getApiNameEn().equals("DeliveryOrderCreate")){
699
            if(StringUtils.isNotEmpty(parameterApi.getAcct())){
700
                sendOut.getHost().setAcct(parameterApi.getAcct().toLowerCase());
701
702
            }
        }
703
704
        String jsonString = JSONObject.toJSONString(sendOut);
705
        String result=OkHttpUtils.bodypost(url,jsonString,warehouseCode,parameterApi.getApiName());
706
        if (StringUtils.isEmpty(result)) {
707
            return AjaxResult.error("ERP接口地址错误或服务器连接不到或返回为空");
708
709
710
711
712
713
714
715
716
        }
        ResultErpBack ajaxResult1 = JSON.parseObject(result, ResultErpBack.class);
        return ajaxResult1.responseAnalyz();
//        if(ajaxResult1.responseAnalyz().hasErr()){
//            return AjaxResult.error(ajaxResult1.responseAnalyz().getMsg());
//        }
//        return AjaxResult.success(ajaxResult1.responseAnalyz().getMsg());
    }
717
718

    public AjaxResult createErpYanTui(List<SrmDetail> details, SrmHeader srmHeader){
周鸿 authored
719
720
        Address address=addressService.selectAddressByParam("ERP",srmHeader.getWarehouseCode());
        ParameterPurchase parameterPurchase=erpBackTypeService.backYanTuiR(srmHeader,details,address.getUserDef2());
721
722
723
724
725
726
        ParameterApi parameterApi=new ParameterApi();
        parameterApi.setApiName("ERP销退入库单回传");
        parameterApi.setParameter(parameterPurchase);
        parameterApi.setApiNameEn("PurchaseDeliveryCreate");
        AjaxResult ajaxResult=AjaxResult.success().setData(parameterApi);
周鸿 authored
727
728
        String companyCode=details.get(0).getCompanyCode();
729
        Company company=companyService.getCompanyByU8Code(companyCode);
730
        AjaxResult ajaxResult1=sendDataToERP(ajaxResult,address.getUrl(),srmHeader.getWarehouseCode(),address.getUserDef2(),company.getErpCompany());
731
732
733
734
        return ajaxResult1;

    }
735
}