Blame view

src/main/java/com/huaheng/pc/u8/service/ICSReceiptAPIService.java 48.2 KB
1
2
3
package com.huaheng.pc.u8.service;
4
5
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
6
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
xumiao authored
7
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
8
9
10
11
12
13
14
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.ReceiptDomain;
import com.huaheng.api.general.service.ReceiptApiService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.DateUtils;
import com.huaheng.common.utils.StringUtils;
15
import com.huaheng.common.utils.http.HttpUtils;
16
import com.huaheng.framework.web.domain.AjaxResult;
17
18
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.company.domain.CompanyU8;
19
import com.huaheng.pc.config.company.service.CompanyService;
20
import com.huaheng.pc.config.company.service.CompanyU8Service;
21
22
23
import com.huaheng.pc.config.documentWarning.service.IDocumentWarningService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
24
import com.huaheng.pc.config.warehouse.domain.Warehouse;
25
26
27
28
29
30
31
32
33
34
import com.huaheng.pc.config.warehouse.domain.WarehouseU8;
import com.huaheng.pc.config.warehouse.service.WarehouseService;
import com.huaheng.pc.config.warehouse.service.WarehouseU8Service;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
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;
35
36
import com.huaheng.pc.referenceCode.domain.U8Reference;
import com.huaheng.pc.referenceCode.service.U8ReferenceService;
37
38
39
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
40
41
42
import com.huaheng.pc.u8.domain.ICSReceiptDetail;
import com.huaheng.pc.u8.domain.ICSReceiptHeader;
import com.huaheng.pc.u8.domain.ICSReceiptModel;
43
44
45
46
47
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;

import javax.annotation.Resource;
48
import java.math.BigDecimal;
49
import java.text.ParseException;
周鸿 authored
50
import java.util.*;
51
import java.util.stream.Collectors;
52
53
54
55

/**
 * u8-wms入库下发或回传接口服务层
 *
56
57
 * @author huaheng
 * @date 2019-1-4
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
 */

@Service
public class ICSReceiptAPIService {

    @Resource
    private WarehouseU8Service warehouseU8Service;
    @Resource
    private WarehouseService warehouseService;
    @Resource
    private CompanyService companyService;
    @Resource
    private IDocumentWarningService documentWarningService;
    @Resource
    private ICSReceiptHeaderService icsReceiptHeaderService;
    @Resource
    private ICSReceiptDetailService icsReceiptDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptContainerDetailService receiptContainerDetailService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private MaterialService materialService;
    @Resource
    private ReceiptApiService receiptApiService;
91
92
93
94
    @Resource
    private CompanyU8Service companyU8Service;
    @Resource
    private AddressService addressService;
95
96
    @Resource
    private U8ReferenceService u8ReferenceService;
97
98
99
100
101
102


    //入库单下发
    //采购入库
    @Transactional
    public AjaxResult procureReceipt(@RequestBody ICSReceiptModel icsReceiptModel) {
103
        icsReceiptModel = assign(icsReceiptModel);
104
105
        ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader();
        List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails();
106
107
        //是否更新
108
        if (StringUtils.isEmpty(icsReceiptHeader.getIsNew())) {
109
110
            return AjaxResult.error("isNew为空");
        }
tongzhonghao authored
111
112
113
        boolean isFlag = "0".equals(icsReceiptHeader.getIsNew()) ? true : false;
        //仓库编码
        String currentWarehouseCode = icsReceiptHeader.getWarehouseCode();
114
        if (StringUtils.isEmpty(currentWarehouseCode)) {
tongzhonghao authored
115
116
117
            return AjaxResult.error("仓库编码warehouseCode:不能为空");
        }
        //入库类型
118
        String type = icsReceiptHeader.getType();
119
120
        if (receiptTypeCheck(type)) {
            return AjaxResult.error("入库类型不匹配");
121
        }
tongzhonghao authored
122
        String typeName = getReceiptTypeName(type);
123
        String stock = icsReceiptHeader.getStock();
tongzhonghao authored
124
125
        //U8companyCode
        String U8CompanyCode = icsReceiptHeader.getCompanyCode();
126
        //判断U8货主
tongzhonghao authored
127
        CompanyU8 companyU8 = companyU8Service.getCompanyByU8CodeWarehouseCode(U8CompanyCode, currentWarehouseCode);
128
129
        if (companyU8 == null) {
            return AjaxResult.error("系统没有此货主:【" + U8CompanyCode + "】");
130
        }
131
132
        companyService.checkwarehouseCompany(companyU8.getCompanyCode());
        //判断U8仓库
133
        if (!StringUtils.isEmpty(stock)) {
134
            LambdaQueryWrapper<WarehouseU8> queryWrapper = Wrappers.lambdaQuery();
135
136
            queryWrapper.eq(WarehouseU8::getUCompanyCode, icsReceiptHeader.getCompanyCode())
                    .eq(WarehouseU8::getUWarehouseCode, stock);
137
            WarehouseU8 one = warehouseU8Service.getOne(queryWrapper);
138
139
            if (one == null) {
                return AjaxResult.error("系统没有此仓库:【" + stock + "】");
140
141
            }
        }
142
143
144
145
146
147
148
        //u8关联表 检查上游单号是否重复
        U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>()
                .eq(U8Reference::getReferCode, icsReceiptHeader.getReferCode())
                .eq(U8Reference::getReferType, icsReceiptHeader.getType())
                .eq(U8Reference::getWarehouseCode, currentWarehouseCode));
        //入库单表 检查上游单号是否重复
        ReceiptHeader receiptHeader1 = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>()
tongzhonghao authored
149
150
                .eq(ReceiptHeader::getReferCode, icsReceiptHeader.getReferCode())
                .eq(ReceiptHeader::getWarehouseCode, icsReceiptHeader.getWarehouseCode()));
151
152
        if (one != null && !isFlag && receiptHeader1 != null) {
            return AjaxResult.error(typeName + ":请不要重复下发 " + icsReceiptHeader.getReferCode());
153
154
        }
        //判断是否更新
155
        checkReceiptBill(isFlag, icsReceiptHeader.getReferCode(), icsReceiptHeader.getType(), currentWarehouseCode);
tongzhonghao authored
156
157

        boolean save = icsReceiptHeaderService.save(icsReceiptHeader);
158
        if (!save) {
tongzhonghao authored
159
160
161
162
163
164
            throw new ServiceException("下发失败");
        }
        for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) {
            icsReceiptDetail.setHeaderId(icsReceiptHeader.getRid());
        }
        save = icsReceiptDetailService.saveBatch(icsReceiptDetails);
165
        if (!save) {
tongzhonghao authored
166
167
168
169
            throw new ServiceException("下发失败");
        }
170
        //根据icsReceiptHeader生成receiptHeader
171
        ReceiptHeader receiptHeader = new ReceiptHeader();
172
173
        String maker = icsReceiptHeader.getCMaker();
        receiptHeader.setReceiptType(type);
tongzhonghao authored
174
        receiptHeader.setReferId(icsReceiptHeader.getReferId());
175
        receiptHeader.setCreatedBy(maker);
176
        receiptHeader.setUWarehouseCode(icsReceiptHeader.getStock());
177
        receiptHeader.setCreated(icsReceiptHeader.getCreated());
178
        receiptHeader.setTypeName(icsReceiptHeader.getCBusType());
179
        receiptHeader.setDeptCode(icsReceiptHeader.getCDepCode());
周鸿 authored
180
        receiptHeader.setCDeptName(icsReceiptHeader.getCDepName());
181
182
        receiptHeader.setReceiptNote(icsReceiptHeader.getCMemo());
        receiptHeader.setSupplierCode(icsReceiptHeader.getCVenCode());
183
184
185
        receiptHeader.setWarehouseCode(currentWarehouseCode);
        receiptHeader.setReferCode(icsReceiptHeader.getReferCode());
        receiptHeader.setCompanyCode(companyU8.getCompanyCode());
186
187
188
189
190
        //根据icsShipmentDetail生成shipmentAetail
        List<ReceiptDetail> receiptDetails = new ArrayList<ReceiptDetail>();
        for (ICSReceiptDetail item : icsReceiptDetails) {
            //查找物料
            LambdaQueryWrapper<Material> queryWrapper1 = Wrappers.lambdaQuery();
191
192
            queryWrapper1.eq(Material::getCode, item.getCInvCode())
                    .eq(Material::getWarehouseCode, currentWarehouseCode);
193
194
            Material material = materialService.getOne(queryWrapper1);
            if (material == null) {
tongzhonghao authored
195
//                documentWarningService.ErpSendWarning(receiptHeader.getReferCode(), "该物料不存在:" + item.getCInvCode());
196
197
198
199
                throw new ServiceException("该物料不存在:" + item.getCInvCode());
            }

            ReceiptDetail receiptDetail = new ReceiptDetail();
200
            receiptDetail.setAutoId(item.getAutoID());
201
            receiptDetail.setReferId(item.getReferId());
202
203
204
205
            if (icsReceiptHeader.getType().equals("TI")) {
                receiptDetail.setAutoId(item.getITrIds());
            }
            receiptDetail.setReferCode(receiptHeader.getReferCode());
206
            receiptDetail.setMoCode(item.getMoCode());
207
            if (StringUtils.isNotEmpty(item.getCDefine22())) {
208
209
210
211
212
213
                Boolean flag = StringUtils.isChineseChar(item.getCDefine22());
                if ((item.getCDefine22().length() == 19 || item.getCDefine22().length() == 22) && flag == false) {
                    receiptDetail.setMoCode(item.getCDefine22());
                } else {
                    receiptDetail.setBatch(item.getCDefine22());
                }
tongzhonghao authored
214
            }
215
216
//            receiptDetail.setLot(item.getCDefine23());
//            receiptDetail.setProjectNo(item.getCDefine23());
217
            receiptDetail.setUWarehouseCode(receiptHeader.getUWarehouseCode());
218
            receiptDetail.setWarehouseCode(currentWarehouseCode);
219
220
            receiptDetail.setMaterialCode(item.getCInvCode());
            receiptDetail.setZoneCode(material.getZoneCode());
221
            receiptDetail.setCreated(icsReceiptHeader.getCreated());
222
223
            receiptDetail.setMaterialUnit(item.getCComUnitName());
            receiptDetail.setCreatedBy(maker);
224
            receiptDetail.setCompanyCode(companyU8.getCompanyCode());
225
226
227
228
229
230
231
232
233
234
235
236
237
238
            receiptDetail.setProjectNo(item.getCItemName());
            receiptDetail.setQty(item.getIQuantity().abs());
            receiptDetail.setInventorySts(QuantityConstant.GOOD);
            if (item.getIrowno() != null && StringUtils.isNotEmpty(item.getIrowno().toString())) {
                receiptDetail.setReferLineNum(item.getIrowno().toString());
            }
            receiptDetails.add(receiptDetail);
        }

        //调用公共API
        ReceiptDomain receiptDomain = new ReceiptDomain();
        receiptDomain.setReceiptHeader(receiptHeader);
        receiptDomain.setReceiptDetails(receiptDetails);
        AjaxResult ajaxResult = receiptApiService.receipt(receiptDomain);
239
        if (!ajaxResult.hasErr() && !isFlag) {
240
241
242
243
            U8Reference reference = new U8Reference();
            reference.setReferType(icsReceiptHeader.getType());
            reference.setReferCode(icsReceiptHeader.getReferCode());
            reference.setStock(stock);
244
            reference.setCompanyCode(companyU8.getCompanyCode());
245
246
247
248
249
            reference.setWarehouseCode(currentWarehouseCode);
            reference.setTypeName(typeName);
            reference.setCreated(DateUtils.getNowDate());
            u8ReferenceService.save(reference);
        }
250
        if (ajaxResult.getCode() == 200 && !isFlag) {
251
            return AjaxResult.success("入库单下发成功");
252
        } else if (ajaxResult.getCode() == 200 && isFlag) {
253
            return AjaxResult.success("入库单更新成功");
254
        } else {
255
256
257
258
259
260
261
            return ajaxResult;
        }
    }

    /**
     * 采购到货 or 退货入库
     * 采购到货单 | 销售退货入库单
262
     *
263
264
265
266
267
     * @param icsReceiptModel
     * @return
     * @throws ParseException
     */
    @Transactional
268
    public AjaxResult procureArrive(ICSReceiptModel icsReceiptModel) {
269
        icsReceiptModel = assign(icsReceiptModel);
270
271
        ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader();
        List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails();
272
        //是否更新
273
        if (StringUtils.isEmpty(icsReceiptHeader.getIsNew())) {
tongzhonghao authored
274
275
            return AjaxResult.error("isNew为空");
        }
276
        boolean isUpdate = "0".equals(icsReceiptHeader.getIsNew()) ? true : false;
277
        String currentWarehouseCode = icsReceiptHeader.getWarehouseCode();
tongzhonghao authored
278
279
280
        if (StringUtils.isEmpty(currentWarehouseCode)) {
            return AjaxResult.error("仓库编码warehouseCode:不能为空");
        }
281
282
        Warehouse warehouse = warehouseService.getOne(new LambdaQueryWrapper<Warehouse>()
                .eq(Warehouse::getCode, currentWarehouseCode));
283
284
        if (warehouse == null) {
            return AjaxResult.error("本系统中没有编号:【" + currentWarehouseCode + "】的仓库。");
285
        }
tongzhonghao authored
286
        //入库类型
287
288
        String type = icsReceiptHeader.getType();
        if (receiptTypeCheck(type)) {
289
290
            return AjaxResult.error("入库类型不匹配");
        }
tongzhonghao authored
291
        String typeName = getReceiptTypeName(type);
292
293
294
295
296
297
298
        //u8关联表 检查上游单号是否重复
        U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>()
                .eq(U8Reference::getReferCode, icsReceiptHeader.getReferCode())
                .eq(U8Reference::getReferType, icsReceiptHeader.getType())
                .eq(U8Reference::getWarehouseCode, currentWarehouseCode));
        //入库单表 检查上游单号是否重复
        ReceiptHeader receiptHeader1 = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>()
tongzhonghao authored
299
                .eq(ReceiptHeader::getReferCode, icsReceiptHeader.getReferCode())
tongzhonghao authored
300
301
                .eq(ReceiptHeader::getWarehouseCode, icsReceiptHeader.getWarehouseCode())
                .last("LIMIT 1"));
302
303
        if (one != null && !isUpdate && receiptHeader1 != null) {
            return AjaxResult.error(typeName + ":请不要重复下发 " + icsReceiptHeader.getReferCode());
304
        }
tongzhonghao authored
305
//        checkReceiptBill(isUpdate, icsReceiptHeader.getReferCode(),icsReceiptHeader.getType(),currentWarehouseCode);
tongzhonghao authored
306
tongzhonghao authored
307
308
309
310
311
312
313
314
315
316
317
//        boolean save = icsReceiptHeaderService.save(icsReceiptHeader);
//        if(!save){
//            throw new ServiceException("下发失败");
//        }
//        for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) {
//            icsReceiptDetail.setHeaderId(icsReceiptHeader.getRid());
//        }
//        save = icsReceiptDetailService.saveBatch(icsReceiptDetails);
//        if(!save){
//            throw new ServiceException("下发失败");
//        }
tongzhonghao authored
318
319
320
        String maker = icsReceiptHeader.getCMaker();
周鸿 authored
321
322
323
        CompanyU8 companyU81 = companyU8Service.getCompanyByU8CodeWarehouseCode(icsReceiptHeader.getCompanyCode(), currentWarehouseCode);
324
325
tongzhonghao authored
326
        Set<String> cwhcodes = icsReceiptDetails.stream().map(ICSReceiptDetail::getCWHCode).collect(Collectors.toSet());
tongzhonghao authored
327
tongzhonghao authored
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
        List<ReceiptDomain> domains = new ArrayList<>();
        for (String cwhcode : cwhcodes) {
            ReceiptHeader receiptHeader = new ReceiptHeader();
            receiptHeader.setReferId(icsReceiptHeader.getReferId());
            receiptHeader.setReceiptType(icsReceiptHeader.getType());
            receiptHeader.setCreatedBy(maker);
            receiptHeader.setUWarehouseCode(cwhcode);
            receiptHeader.setCreated(icsReceiptHeader.getCreated());
            receiptHeader.setReferCode(icsReceiptHeader.getReferCode());
            receiptHeader.setSupplierCode(icsReceiptHeader.getCVenCode());
            receiptHeader.setSupplierName(icsReceiptHeader.getCVenName());
            receiptHeader.setWarehouseCode(companyU81.getWarehouseCode());
            receiptHeader.setCompanyCode(companyU81.getCompanyCode());
            receiptHeader.setCustomerCode(icsReceiptHeader.getCCusCode());
            receiptHeader.setDeptCode(icsReceiptHeader.getCDepCode());
            receiptHeader.setCDeptName(icsReceiptHeader.getCDepName());
            receiptHeader.setPersonCode(icsReceiptHeader.getCPersonCode());
            List<ReceiptDetail> receiptDetails = new ArrayList<>();
346
tongzhonghao authored
347
            for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) {
348
                if (!cwhcode.equals(icsReceiptDetail.getCWHCode())) {
tongzhonghao authored
349
350
351
                    continue;
                }
                ReceiptDetail receiptDetail = new ReceiptDetail();
352
                if (!StringUtils.isEmpty(icsReceiptDetail.getCWHCode())) {
tongzhonghao authored
353
354
                    WarehouseU8 warehouseU8 = warehouseU8Service.getOne(new LambdaQueryWrapper<WarehouseU8>()
                            .eq(WarehouseU8::getWarehouseCode, currentWarehouseCode)
355
                            .eq(WarehouseU8::getUWarehouseCode, icsReceiptDetail.getCWHCode())
tongzhonghao authored
356
                            .eq(WarehouseU8::getUCompanyCode, icsReceiptDetail.getCompanyCode()));
357
358
359
                    if (warehouseU8 == null) {
                        return AjaxResult.error(icsReceiptDetail.getCompanyCode() + "::" + icsReceiptDetail.getCWHCode() + ",找不到对应的u8仓库");
                    }
tongzhonghao authored
360
361
362
363
364
365
366
367
368
369
370
                    receiptDetail.setUWarehouseCode(warehouseU8.getUWarehouseCode());
                }
                receiptDetail.setLot(icsReceiptDetail.getCDefine23());
                receiptDetail.setReferCode(icsReceiptDetail.getReferCode());
                receiptDetail.setSoCode(icsReceiptDetail.getCSOCode());
                receiptDetail.setSoId(icsReceiptDetail.getCSOID());
                receiptDetail.setSoAutoId(icsReceiptDetail.getCSOAutoID());
                receiptDetail.setReferId(icsReceiptDetail.getReferId());
                receiptDetail.setAutoId(icsReceiptDetail.getAutoID());
                if (icsReceiptDetail.getIrowno() != null && StringUtils.isNotEmpty(icsReceiptDetail.getIrowno().toString())) {
                    receiptDetail.setReferLineNum(icsReceiptDetail.getIrowno().toString());
371
372
                }
373
                if (StringUtils.isNotEmpty(icsReceiptDetail.getCDefine22())) {
tongzhonghao authored
374
                    Boolean flag = StringUtils.isChineseChar(icsReceiptDetail.getCDefine22());
周鸿 authored
375
                    if ((icsReceiptDetail.getCDefine22().length() == 19 || icsReceiptDetail.getCDefine22().length() == 22) && flag == false) {
tongzhonghao authored
376
377
378
                        receiptDetail.setMoCode(icsReceiptDetail.getCDefine22());
                    } else {
                        receiptDetail.setBatch(icsReceiptDetail.getCDefine22());
周鸿 authored
379
                    }
tongzhonghao authored
380
381
382
383
384
385
                }
                receiptDetail.setWarehouseCode(currentWarehouseCode);
                receiptDetail.setMaterialCode(icsReceiptDetail.getCInvCode());
                receiptDetail.setCreated(icsReceiptHeader.getCreated());
                receiptDetail.setMaterialUnit(icsReceiptDetail.getCComUnitName());
                receiptDetail.setCreatedBy(maker);
386
                if (icsReceiptHeader.getType().equals("SRI")) {
tongzhonghao authored
387
                    receiptDetail.setCPoCode(icsReceiptDetail.getCSOCode());
388
                } else {
tongzhonghao authored
389
390
391
392
393
394
395
                    receiptDetail.setCPoCode(icsReceiptDetail.getPOCode());
                }
                receiptDetail.setCompanyCode(companyU81.getCompanyCode());
                receiptDetail.setProjectNo(icsReceiptDetail.getCItemName());
                receiptDetail.setQty(icsReceiptDetail.getIQuantity().abs());
                receiptDetail.setInventorySts(QuantityConstant.GOOD);
                receiptDetails.add(receiptDetail);
周鸿 authored
396
397
398
399
400
401
402
403
                if (icsReceiptDetail.getMoCode() != null) {
                    try {
                        JSONObject json = new JSONObject();
                        json.put("code", icsReceiptHeader);
                        json.put("materialCode", icsReceiptDetail.getCInvCode().trim());
                        json.put("workNo", icsReceiptDetail.getMoCode().trim());
                        json.put("status", "1");
tongzhonghao authored
404
405
406
                        String JsonParam = JSON.toJSONString(json);
                        System.out.println(JsonParam);
                        //调用mms更改采购状态
407
                        if (currentWarehouseCode.equals("CS0001")) {
tongzhonghao authored
408
409
                            String url = addressService.selectAddress("mms", currentWarehouseCode);
                            String result2 = HttpUtils.bodypost(url, JsonParam, currentWarehouseCode);
tongzhonghao authored
410
411
                        }
412
                    } catch (Exception e) {
tongzhonghao authored
413
414
                        e.printStackTrace();
                    }
415
                }
416
            }
tongzhonghao authored
417
418
419
420
421
            //调用公共API
            ReceiptDomain receiptModel = new ReceiptDomain();
            receiptModel.setReceiptHeader(receiptHeader);
            receiptModel.setReceiptDetails(receiptDetails);
            domains.add(receiptModel);
422
        }
tongzhonghao authored
423
        AjaxResult ajaxResult = receiptApiService.receipt(domains);
424
        if (!ajaxResult.hasErr() && !isUpdate) {
425
426
427
428
429
            U8Reference u8Reference = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>()
                    .eq(U8Reference::getReferType, icsReceiptHeader.getType())
                    .eq(U8Reference::getReferCode, icsReceiptHeader.getReferCode())
                    .eq(U8Reference::getWarehouseCode, currentWarehouseCode)
                    .last(" LIMIT 1"));
周鸿 authored
430
            if (u8Reference == null) {
431
432
433
434
435
436
437
438
439
                U8Reference reference = new U8Reference();
                reference.setReferType(icsReceiptHeader.getType());
                reference.setReferCode(icsReceiptHeader.getReferCode());
                reference.setCompanyCode(companyU81.getCompanyCode());
                reference.setWarehouseCode(currentWarehouseCode);
                reference.setTypeName(typeName);
                reference.setCreated(DateUtils.getNowDate());
                u8ReferenceService.save(reference);
            }
440
        }
441
        if (ajaxResult.getCode() == 200 && !isUpdate) {
442
            return AjaxResult.success("入库单下发成功");
443
        } else if (ajaxResult.getCode() == 200 && isUpdate) {
444
            return AjaxResult.success("入库单更新成功");
445
        } else {
446
447
            return ajaxResult;
        }
448
449
    }
450
451
452
453
454
455
456
457
458

    /**
     * 其他入库单/调拨入库单
     *
     * @param icsReceiptModel
     * @return
     * @throws ParseException
     */
    @Transactional(rollbackFor = Exception.class)
周鸿 authored
459
    public AjaxResult otherReceipt(ICSReceiptModel icsReceiptModel) {
460
461
462
463
464
465
466
467
468
469
470
471

        //校验null
        checkOtherReceiptNull(icsReceiptModel);

        ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader();
        List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails();
        String receiptHeaderType = icsReceiptHeader.getType();
        String warehouseCode = icsReceiptHeader.getWarehouseCode();
        String whCode = null;
        String referCode = null;
        String companyCode = null;
        String u8CompanyCode = icsReceiptHeader.getCompanyCode();
周鸿 authored
472
        Date created = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, icsReceiptHeader.getDDate());
473
474
475
476
477
478
        String createdBy = icsReceiptHeader.getCMaker();
        String receiptNote = icsReceiptHeader.getCMemo();
        Integer referHeaderId = icsReceiptHeader.getID();

        BigDecimal totalQty = BigDecimal.ZERO;
        int totalLines = BigDecimal.ZERO.intValue();
周鸿 authored
479
        switch (icsReceiptHeader.getType()) {
480
481
482
483
484
485
486
487
488
489
490
491
492
            case "TI": // 调拨其他入库单
                whCode = icsReceiptHeader.getIWHCode();
                referCode = icsReceiptHeader.getCTVCode();
                break;
            case "QI": //其他入库单
                whCode = icsReceiptHeader.getCWHCode();
                referCode = icsReceiptHeader.getCCode();
                break;
            default:
        }
        ReceiptHeader receiptHeader = new ReceiptHeader();
        List<ReceiptDetail> receiptDetails = new ArrayList<>();
周鸿 authored
493
494
495
        WarehouseU8 warehouseU8 = warehouseU8Service.getWarehouseU8ByUCompanyUWarehouseCode(u8CompanyCode, whCode, warehouseCode);
        if (warehouseU8 == null) {
            throw new ServiceException("未找到库房代码:" + whCode);
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
        }
        companyCode = warehouseU8.getCompanyCode();

        receiptHeader.setReferCode(referCode);
        receiptHeader.setReferId(referHeaderId);
        receiptHeader.setReceiptType(receiptHeaderType);
        receiptHeader.setWarehouseCode(icsReceiptHeader.getWarehouseCode());
        receiptHeader.setUWarehouseCode(warehouseU8.getUWarehouseCode());
        receiptHeader.setCompanyCode(companyCode);
        receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
        receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
        receiptHeader.setCreated(created);
        receiptHeader.setCreatedBy(createdBy);
        receiptHeader.setReceiptNote(receiptNote);

        for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) {
            ReceiptDetail receiptDetail = new ReceiptDetail();
            receiptDetail.setReferId(icsReceiptDetail.getAutoID()); //其他入库单/调拨单 子表id
            receiptDetail.setAutoId(icsReceiptDetail.getAutoID());
tongzhonghao authored
515
516
517
            if("TI".equals(icsReceiptHeader.getType())){
                receiptDetail.setAutoId(icsReceiptDetail.getITrIds());
            }
518
519
520
521
522
523
524
525
526
            receiptDetail.setProjectNo(icsReceiptDetail.getCItemName());
            receiptDetail.setProcessStamp(QuantityConstant.RECEIPT_HEADER_BUILD.toString());
            receiptDetail.setWarehouseCode(warehouseCode);
            receiptDetail.setUWarehouseCode(whCode);
            receiptDetail.setCompanyCode(companyCode);
            receiptDetail.setInventorySts(QuantityConstant.GOOD);
            receiptDetail.setCreatedBy(createdBy);
            receiptDetail.setCreated(created);
            Material material = materialService.getMaterialByCode(icsReceiptDetail.getCInvCode(), warehouseCode);
周鸿 authored
527
528
            if (material == null) {
                throw new ServiceException("物料编码未找到" + icsReceiptDetail.getCInvCode());
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
            }
            receiptDetail.setMaterialCode(material.getCode());
            receiptDetail.setMaterialName(material.getName());
            receiptDetail.setMaterialSpec(material.getSpec());
            receiptDetail.setMaterialUnit(material.getUnit());
            BigDecimal qty = icsReceiptDetail.getIQuantity();
            totalQty = totalQty.add(qty);
            receiptDetail.setQty(qty);
            totalLines += 1;
            receiptDetails.add(receiptDetail);
        }
        receiptHeader.setTotalQty(totalQty);
        receiptHeader.setTotalLines(totalLines);

        ReceiptDomain receiptModel = new ReceiptDomain();
        receiptModel.setReceiptHeader(receiptHeader);
        receiptModel.setReceiptDetails(receiptDetails);

        AjaxResult result = receiptApiService.receipt(receiptModel);
周鸿 authored
548
549
        if (result.hasErr()) {
            throw new ServiceException(result.getMsg());
550
        }
周鸿 authored
551
        if ("0".equals(icsReceiptHeader.getIsNew())) {
552
553
554
555
556
557
            return AjaxResult.success("入库单更新成功");
        }
        return AjaxResult.success("入库单下发成功");
    }
周鸿 authored
558
    public void checkOtherReceiptNull(ICSReceiptModel icsReceiptModel) {
559
560
561
562
563
564
565
566
        ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader();
        List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails();

        String type = icsReceiptHeader.getType();
        String currentWarehouseCode = icsReceiptHeader.getWarehouseCode();
        if (StringUtils.isEmpty(currentWarehouseCode)) {
            throw new ServiceException("仓库编码warehouseCode:不能为空");
        }
周鸿 authored
567
        if (StringUtils.isEmpty(icsReceiptHeader.getCompanyCode())) {
568
569
            throw new ServiceException("公司账套CompanyCode 不能为空");
        }
周鸿 authored
570
        if (StringUtils.isEmpty(type) || receiptTypeCheck(type)) {
571
572
573
574
575
576
577
578
579
580
581
            throw new ServiceException("入库类型不存在");
        }
        if (StringUtils.isEmpty(icsReceiptHeader.getIsNew())) {
            throw new ServiceException("isNew为空");
        }

        String referCode = null;
        Integer referId = icsReceiptHeader.getID();
        String dDateStr = icsReceiptHeader.getDDate();
        String whCode = null;
        String busTypeName = getReceiptTypeName(type);
周鸿 authored
582
        switch (type) {
583
584
585
586
587
588
589
590
591
592
            case "TI": //
                whCode = icsReceiptHeader.getIWHCode();
                referCode = icsReceiptHeader.getCTVCode();
                break;
            case "QI": //其他入库单
                whCode = icsReceiptHeader.getCWHCode();
                referCode = icsReceiptHeader.getCCode();
                break;
            default:
        }
周鸿 authored
593
594
        if (StringUtils.isEmpty(referCode)) {
            throw new ServiceException(busTypeName + "业务Code 不能为空:" + referCode);
595
        }
周鸿 authored
596
597
        if (StringUtils.isNull(referId)) {
            throw new ServiceException(busTypeName + "业务ID 不能为空:" + referId);
598
        }
周鸿 authored
599
600
        if (StringUtils.isEmpty(dDateStr)) {
            throw new ServiceException(busTypeName + "业务入库日期 不能为空:" + dDateStr);
601
        }
周鸿 authored
602
603
        if (StringUtils.isEmpty(whCode)) {
            throw new ServiceException(busTypeName + "业务入库库房代码 不能为空:" + whCode);
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
        }

        boolean isUpdate = "0".equals(icsReceiptHeader.getIsNew()) ? true : false;

        Warehouse warehouse = warehouseService.getOne(new LambdaQueryWrapper<Warehouse>()
                .eq(Warehouse::getCode, currentWarehouseCode));
        if (warehouse == null) {
            throw new ServiceException("WMS系统中没有仓库编号:【" + currentWarehouseCode + "】的仓库。");
        }
        //u8关联表 检查上游单号是否重复
        U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>()
                .eq(U8Reference::getReferCode, referCode)
                .eq(U8Reference::getReferType, type)
                .eq(U8Reference::getWarehouseCode, currentWarehouseCode));
        //入库单表 检查上游单号是否重复
        ReceiptHeader receiptHeader1 = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>()
                .eq(ReceiptHeader::getReferCode, referCode)
                .eq(ReceiptHeader::getWarehouseCode, currentWarehouseCode)
                .last("LIMIT 1"));
        if (one != null && !isUpdate && receiptHeader1 != null) {
            throw new ServiceException(busTypeName + ":请不要重复下发 " + referCode);
        }

        U8Reference u8Reference = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>()
                .eq(U8Reference::getReferType, icsReceiptHeader.getType())
                .eq(U8Reference::getReferCode, referCode)
                .eq(U8Reference::getWarehouseCode, currentWarehouseCode)
                .last(" LIMIT 1"));
周鸿 authored
632
        if (u8Reference == null) {
633
634
635
636
637
638
639
640
641
642
643
644
            U8Reference reference = new U8Reference();
            reference.setReferType(icsReceiptHeader.getType());
            reference.setReferCode(referCode);
            reference.setWarehouseCode(currentWarehouseCode);
            reference.setTypeName(busTypeName);
            reference.setCreated(DateUtils.getNowDate());
            u8ReferenceService.save(reference);
        }

    }
645
    private ICSReceiptModel assign(ICSReceiptModel icsReceiptModel) {
646
647
648
649
        ICSReceiptHeader header = icsReceiptModel.getIcsReceiptHeader();
        List<ICSReceiptDetail> details = icsReceiptModel.getIcsReceiptDetails();
        String type = header.getType();
        Date created = null;
650
        if (header.getDDate() != null) {
651
            try {
652
                created = DateUtils.parseDate(header.getDDate(), DateUtils.YYYY_MM_DD_HH_MM_SS_S);
653
654
655
656
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
657
658
        switch (type) {
            case "PI":
659
660
                header.setReferCode(header.getCCode());
                try {
661
                    header.setCreated(DateUtils.parseDate(header.getDPODate(), DateUtils.YYYY_MM_DD_HH_MM_SS));
662
663
664
665
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                for (ICSReceiptDetail detail : details) {
666
667
                    detail.setReferId(detail.getPODID());
                    detail.setReferCode(detail.getPOCode());
668
669
                }
                break;
670
            case "SRI":
671
                header.setReferId(header.getDLID());
672
673
                header.setReferCode(header.getCDLCode());
                header.setCreated(created);
674
                String uwarehouseCode1 = "";
675
                for (ICSReceiptDetail detail : details) {
676
677
                    detail.setReferId(detail.getCSOAutoID());
                    detail.setReferCode(detail.getCSOCode());
678
679
                }
                break;
680
            case "PCI":
681
682
683
                header.setReferCode(header.getCPOID());
                header.setReferId(header.getPOID());
                try {
684
                    header.setCreated(DateUtils.parseDate(header.getDPODate(), DateUtils.YYYY_MM_DD_HH_MM_SS_S));
685
686
687
                } catch (ParseException e) {
                    e.printStackTrace();
                }
688
                String uwarehouseCode2 = "";
689
690
                for (ICSReceiptDetail detail : details) {
                    detail.setReferCode(header.getReferCode());
691
                    detail.setReferId(detail.getPODID());
692
                    if (StringUtils.isEmpty(detail.getCWHCode())) {
693
694
695
                        detail.setCWHCode(header.getIWHCode());
                    }
                }
696
                if (StringUtils.isEmpty(header.getIWHCode())) {
697
698
                    header.setIWHCode(uwarehouseCode2);
                    header.setCWHCode(uwarehouseCode2);
699
700
                }
                break;
701
            case "CI":
702
            default:
703
                header.setReferId(header.getID());
704
705
706
707
708
709
710
711
712
713
714
715
716
                header.setReferCode(header.getCCode());
                header.setStock(header.getCWHCode());
                header.setCreated(created);
                for (ICSReceiptDetail detail : details) {
                    detail.setReferCode(header.getReferCode());
                }
                break;
        }
        icsReceiptModel.setIcsReceiptHeader(header);
        icsReceiptModel.setIcsReceiptDetails(details);
        return icsReceiptModel;
    }
717
718
    /**
     * 判断入库单是否可以更新
719
720
     *
     * @param code U8单号
721
     */
722
    private void checkReceiptBill(boolean isFlag, String code, String type, String warehouseCode) {
723
        LambdaQueryWrapper<ReceiptHeader> queryWrapper = Wrappers.lambdaQuery();
724
725
726
        queryWrapper.eq(ReceiptHeader::getReferCode, code)
                .eq(ReceiptHeader::getWarehouseCode, warehouseCode)
                .eq(ReceiptHeader::getReceiptType, type)
tongzhonghao authored
727
                .last("LIMIT 1");
728
729
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(queryWrapper);
730
        if (isFlag) {
731
            if (receiptHeader != null) {
732
                LambdaQueryWrapper<TaskDetail> queryWrapper3 = Wrappers.lambdaQuery();
733
734
735
                queryWrapper3.eq(TaskDetail::getBillCode, receiptHeader.getCode())
                        .eq(TaskDetail::getBillCode, receiptHeader.getWarehouseCode())
                        .le(TaskDetail::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
736
                List<TaskDetail> taskDetailList = taskDetailService.list(queryWrapper3);
737
738
                if (taskDetailList == null || taskDetailList.size() > 0) {
                    throw new ServiceException("更新失敗,此入库单存在任务");
739
740
                }
                LambdaQueryWrapper<ReceiptContainerDetail> queryWrapper1 = Wrappers.lambdaQuery();
741
742
743
                queryWrapper1.eq(ReceiptContainerDetail::getReceiptCode, receiptHeader.getCode())
                        .eq(ReceiptContainerDetail::getWarehouseCode, receiptHeader.getWarehouseCode())
                        .le(ReceiptContainerDetail::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED);
744
                List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(queryWrapper1);
745
746
                if (receiptContainerDetails == null || receiptContainerDetails.size() > 0) {
                    throw new ServiceException("更新失敗,此入库单已组盘");
747
                }
748
749
750
751
                receiptHeaderService.removeById(receiptHeader.getId());
                List<ReceiptDetail> receiptDetails = receiptDetailService.findByReceiptId(receiptHeader.getId());
                List<Integer> ids = receiptDetails.stream().map(ReceiptDetail::getId).collect(Collectors.toList());
                receiptDetailService.removeByIds(ids);
752
            }
tongzhonghao authored
753
754
755
            ICSReceiptHeader icsReceiptHeader = icsReceiptHeaderService.getOne(new LambdaQueryWrapper<ICSReceiptHeader>()
                    .eq(ICSReceiptHeader::getReferCode, code)
                    .eq(ICSReceiptHeader::getType, type));
756
            if (icsReceiptHeader != null) {
tongzhonghao authored
757
758
                icsReceiptHeaderService.removeById(icsReceiptHeader.getRid());
                icsReceiptDetailService.remove(new LambdaQueryWrapper<ICSReceiptDetail>()
759
                        .eq(ICSReceiptDetail::getHeaderId, icsReceiptHeader.getRid()));
tongzhonghao authored
760
            }
761
762
763
        }
    }
764
    private String getReceiptTypeName(String code) {
765
        String typeName = "";
766
767
        switch (code) {
            case "PCI":
768
769
                typeName = "采购订单";
                break;
770
            case "CI":
771
772
                typeName = "生产退料单";
                break;
773
            case "QI":
774
775
                typeName = "其他入库单";
                break;
776
            case "PPI":
777
778
                typeName = "手持入库单";
                break;
779
            case "TI":
780
781
                typeName = "调拨入库单";
                break;
782
            case "SRI":
783
784
                typeName = "销售退货单";
                break;
785
            case "SI":
786
787
                typeName = "产成品入库单";
                break;
788
            case "PI":
789
790
                typeName = "采购到货单";
                break;
791
            case "AI":
792
793
794
795
796
797
                typeName = "调整单";
                break;
        }
        return typeName;
    }
798
799
800
801
802
803
    private boolean receiptTypeCheck(String code) {
        switch (code) {
            case "PI":
            case "SRI":
            case "PCI":
            case "CI":
804
805
            case "TI":
            case "QI":
806
807
808
809
810
811
                return false;
            default:
                return true;
        }
    }
812
    public Boolean isSameMonth(Date date) {
tongzhonghao authored
813
814
815
816
817
818
819
820
821
822
823
824
825
826
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date);
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(new Date());
        boolean isSameYear = cal1.get(Calendar.YEAR) == cal2
                .get(Calendar.YEAR);
        boolean isSameMonth = isSameYear
                && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
        boolean isSameDate = isSameMonth
                && cal1.get(Calendar.DAY_OF_MONTH) == cal2
                .get(Calendar.DAY_OF_MONTH);
        return isSameDate;
    }
周鸿 authored
827
    //采购到货单和销售退货入库单
828
    public synchronized AjaxResult insertICSReceipts(ICSReceiptModel icsReceiptModel) {
周鸿 authored
829
830
831
832

        ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader();
        List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails();
tongzhonghao authored
833
        if (!QuantityConstant.U8_RECEIPT_TYPE_SRI.equals(icsReceiptHeader.getType()) && !QuantityConstant.U8_RECEIPT_TYPE_PI.equals(icsReceiptHeader.getType())) {
周鸿 authored
834
835
            return AjaxResult.error("入库类型不匹配");
        }
836
837
838
839
840
        String code = null;
        if (icsReceiptHeader.getType().equals("SRI")) {
            code = icsReceiptHeader.getCDLCode();
        } else {
            code = icsReceiptHeader.getCCode();
周鸿 authored
841
        }
842
843
        if (StringUtils.isEmpty(code)) {
            if (icsReceiptHeader.getType().equals("SRI")) {
tongzhonghao authored
844
//                documentWarningService.ErpSendWarning("", "销售退货入库单没有单号");
845
            } else {
tongzhonghao authored
846
//                documentWarningService.ErpSendWarning("", "采购到货单下发没有单号");
周鸿 authored
847
848
849
850
            }
            throw new ServiceException("没有单号");
        }
851
852
853
        CompanyU8 companyWu = companyU8Service.getCompanyByU8CodeWarehouseCode(icsReceiptHeader.getCompanyCode(), icsReceiptHeader.getWarehouseCode());
        if (companyWu == null) {
            return AjaxResult.error("单据货主不存在" + icsReceiptHeader.getCompanyCode());
周鸿 authored
854
        }
855
        ReceiptHeader receiptHeaderB = new ReceiptHeader();
周鸿 authored
856
857
        receiptHeaderB.setReferCode(code);
        receiptHeaderB.setCompanyCode(companyWu.getCompanyCode());
xumiao authored
858
        List<ReceiptHeader> receiptHeaders = receiptHeaderService.getByDomain(receiptHeaderB);
859
        if (CollectionUtils.isNotEmpty(receiptHeaders)) {
周鸿 authored
860
861
862
863
864
865
866
            return AjaxResult.success("单号重复,已跳过");
        }
        //判断仓库是否存在单据的物料编码
        ReceiptHeader receiptHeader;
        List<ReceiptDetail> receiptDetails;
        Set<String> warehouseCodes = new HashSet<>();
        Set<String> uwarehouseCodes = new HashSet<>();
867
        String companyCode = null;
周鸿 authored
868
869
870
        Map<String, String> companyCodeMap = new HashMap<>();
        for (ICSReceiptDetail item : icsReceiptDetails) {
            //通过u8的货主和仓库匹配wms的仓库
871
            WarehouseU8 warehouseWu = new WarehouseU8();
周鸿 authored
872
873
            warehouseWu.setUCompanyCode(icsReceiptHeader.getCompanyCode());
            warehouseWu.setUWarehouseCode(item.getCWHCode());
xumiao authored
874
            warehouseWu.setWarehouseCode(item.getWarehouseCode());
875
876
877
            List<WarehouseU8> list = warehouseU8Service.getByDomain(warehouseWu);
            if (list != null && list.size() > 0) {
                warehouseWu = list.get(0);
周鸿 authored
878
                companyCodeMap.put(item.getCWHCode() + icsReceiptHeader.getCompanyCode(), warehouseWu.getCompanyCode());
879
                companyCode = warehouseWu.getCompanyCode();
周鸿 authored
880
881
882
883
                uwarehouseCodes.add(item.getCWHCode());
                warehouseCodes.add(warehouseWu.getWarehouseCode());
            }
        }
884
885
        if (companyCode != null && !companyCode.equals(companyWu.getCompanyCode())) {
            ReceiptHeader receiptHeader1 = new ReceiptHeader();
周鸿 authored
886
887
            receiptHeader1.setReferCode(code);
            receiptHeader1.setCompanyCode(companyCode);
xumiao authored
888
            receiptHeader1.setWarehouseCode(icsReceiptHeader.getWarehouseCode());
周鸿 authored
889
            receiptHeader1 = receiptHeaderService.selectFirstEntity(receiptHeader1);
890
            if (receiptHeader1 != null) {
周鸿 authored
891
892
893
                return AjaxResult.success("单号重复,已跳过");
            }
        }
894
        if (warehouseCodes == null || uwarehouseCodes.size() < 1) {
周鸿 authored
895
896
897
            return AjaxResult.success("没有此仓库");
        }
898
        String maker = icsReceiptHeader.getCMaker();
周鸿 authored
899
900
901
902
903
        for (String warehouseCode : warehouseCodes) {
            for (String uwarehouseCode : uwarehouseCodes) {
                receiptDetails = new ArrayList<>();
                //出库主单
                receiptHeader = new ReceiptHeader();
904
                if (!StringUtils.isEmpty(icsReceiptHeader.getCTVCode())) {
周鸿 authored
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
                    receiptHeader.setUserDef3(icsReceiptHeader.getCTVCode());
                }
                receiptHeader.setReceiptType(icsReceiptHeader.getType());
                receiptHeader.setId(null);
                receiptHeader.setLastUpdatedBy(maker);
                receiptHeader.setCreatedBy(maker);
                receiptHeader.setLastUpdated(new Date());
                receiptHeader.setCreated(new Date());
                receiptHeader.setReferCode(code);
                receiptHeader.setSupplierCode(icsReceiptHeader.getCVenCode());
                receiptHeader.setSupplierName(icsReceiptHeader.getCVenName());
                receiptHeader.setWarehouseCode(warehouseCode);
                receiptHeader.setUWarehouseCode(uwarehouseCode);
                receiptHeader.setCompanyCode(companyCodeMap.get(uwarehouseCode + icsReceiptHeader.getCompanyCode()));
//                receiptHeader.setSourcePlatform(icsReceiptHeader.getSourcePlatform());
                receiptHeader.setCDeptName(icsReceiptHeader.getCDepName());


                //细单
                for (ICSReceiptDetail item : icsReceiptDetails) {
                    //匹配仓库
                    if (uwarehouseCode.equals(item.getCWHCode())) {
                        //查找物料
                        Material material = new Material();
                        material.setCode(item.getCInvCode());
                        material.setWarehouseCode(warehouseCode);
931
932
                        material = materialService.getMaterialByDomain(material);
                        if (material == null) {
tongzhonghao authored
933
//                            documentWarningService.ErpSendWarning(code, "该物料不存在:"+item.getCInvCode());
934
                            throw new ServiceException("该物料不存在:" + item.getCInvCode());
周鸿 authored
935
936
937
938
939
940
                        }
                        ReceiptDetail receiptDetail = new ReceiptDetail();
                        receiptDetail.setId(null);
                        receiptDetail.setLot(item.getCDefine23());
                        receiptDetail.setReferCode(code);
                        receiptDetail.setAutoId(item.getAutoID());
941
                        if (StringUtils.isNotEmpty(item.getCDefine22())) {
周鸿 authored
942
943
944
                            Boolean
                                    flag
                                    = StringUtils.isChineseChar(item.getCDefine22());
周鸿 authored
945
                            if ((item.getCDefine22().length() == 19 || item.getCDefine22().length() == 22) && flag == false) {
周鸿 authored
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
                                receiptDetail.setMoCode(item.getCDefine22());
                            } else {
                                receiptDetail.setBatch(item.getCDefine22());
                            }
                        }
                        receiptDetail.setWarehouseCode(warehouseCode);
                        receiptDetail.setMaterialCode(item.getCInvCode());
                        receiptDetail.setZoneCode(material.getZoneCode());
                        receiptDetail.setCreated(new Date());
                        receiptDetail.setUWarehouseCode(uwarehouseCode);
                        receiptDetail.setMaterialUnit(item.getCComUnitName());
                        receiptDetail.setCreatedBy(maker);
                        receiptDetail.setLastUpdated(new Date());
                        receiptDetail.setLastUpdatedBy(maker);
                        if (!item.getCompanyCode().equals(icsReceiptHeader.getCompanyCode())) {
tongzhonghao authored
961
//                            documentWarningService.ErpSendWarning(code, "子单货主与主单不对应");
周鸿 authored
962
963
                            throw new ServiceException("子单货主与主单不对应");
                        }
964
                        if (icsReceiptHeader.getType().equals("SRI")) {
周鸿 authored
965
                            receiptDetail.setCPoCode(item.getCSOCode());
966
                        } else {
周鸿 authored
967
968
969
970
971
972
973
                            receiptDetail.setCPoCode(item.getPOCode());
                        }
                        receiptDetail.setCompanyCode(companyCodeMap.get(item.getCWHCode() + icsReceiptHeader.getCompanyCode()));
                        receiptDetail.setProjectNo(item.getCItemName());
                        receiptDetail.setQty(item.getIQuantity().abs());
//                    receiptDetail.setQtyCompleted(item.getiQuantity());
                        receiptDetail.setInventorySts("good");
974
                        if (StringUtils.isNotEmpty(item.getLotno())) {
周鸿 authored
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
                            receiptDetail.setUserDef2(item.getLotno());
                        }
                        receiptDetails.add(receiptDetail);
                    }
                }
                //调用公共API
                ReceiptDomain receiptModel = new ReceiptDomain();
                receiptModel.setReceiptHeader(receiptHeader);
                receiptModel.setReceiptDetails(receiptDetails);
                receiptApiService.receipt(receiptModel);
            }
        }
        return AjaxResult.success("入货单下发成功");
    }
991
}