Blame view

src/main/java/com/huaheng/api/general/service/ShipmentApiService.java 18 KB
pengcheng authored
1
2
package com.huaheng.api.general.service;
pengcheng authored
3
4
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
pengcheng authored
5
import com.huaheng.api.general.domain.ShipmentDomain;
lector authored
6
import com.huaheng.common.constant.QuantityConstant;
pengcheng authored
7
8
9
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
10
import com.huaheng.common.utils.spring.SpringUtils;
pengcheng authored
11
import com.huaheng.framework.web.domain.AjaxResult;
pengcheng authored
12
13
14
15
16
17
18
19
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.shipmentType.domain.ShipmentType;
import com.huaheng.pc.config.shipmentType.service.ShipmentTypeService;
20
import com.huaheng.pc.config.supplier.domain.Supplier;
pengcheng authored
21
22
import com.huaheng.pc.config.warehouse.domain.Warehouse;
import com.huaheng.pc.config.warehouse.service.WarehouseService;
lihailong authored
23
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
pengcheng authored
24
25
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
lector authored
26
27
import com.huaheng.pc.shipment.shipmentDetailHistory.domain.ShipmentDetailHistory;
import com.huaheng.pc.shipment.shipmentDetailHistory.service.ShipmentDetailHistoryService;
pengcheng authored
28
29
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
lector authored
30
31
import com.huaheng.pc.shipment.shipmentHeaderHistory.domain.ShipmentHeaderHistory;
import com.huaheng.pc.shipment.shipmentHeaderHistory.service.ShipmentHeaderHistoryService;
32
import org.krysalis.barcode4j.output.bitmap.BitmapEncoder;
pengcheng authored
33
import org.springframework.beans.factory.annotation.Autowired;
pengcheng authored
34
35
36
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
lector authored
37
import javax.annotation.Resource;
pengcheng authored
38
39
40
41
42
43
44
45
46
47
48
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * @author ricard
 * @time   19/11/11
 *
 */
pengcheng authored
49
50
51
52
@Component
@Transactional
public class ShipmentApiService {
pengcheng authored
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
    @Autowired
    private ShipmentHeaderService shipmentHeaderService;

    @Autowired
    private ShipmentDetailService shipmentDetailService;

    @Autowired
    private WarehouseService warehouseService;

    @Autowired
    private CompanyService companyService;

    @Autowired
    private CustomerServiceImpl customerService;

    @Autowired
    private ShipmentTypeService shipmentTypeService;

    @Autowired
    private MaterialService materialService;
lector authored
74
75
76
77
78
79
    @Resource
    private ShipmentHeaderHistoryService shipmentHeaderHistoryService;

    @Resource
    private ShipmentDetailHistoryService shipmentDetailHistoryService;
pengcheng authored
80
81
82
83
84
85
86
    /**
     *  出库单下发
     *
     * @param shipmentDomain
     * @return
     */
    @Transactional
pengcheng authored
87
88
    public AjaxResult shipment(ShipmentDomain shipmentDomain){
pengcheng authored
89
90
91
92
93
94
95
96
97
98
        //1、判断出库主单和子单列是否为空
        ShipmentHeader shipmentHeader = shipmentDomain.getShipmentHeader();
        List<ShipmentDetail> shipmentDetails = shipmentDomain.getShipmentDetails();
        if(shipmentHeader == null){
            return AjaxResult.error("出库主单为空");
        }
        if(shipmentDetails.size() < 1 || shipmentDetails == null ){
            return AjaxResult.error("出库子单为空");
        }
99
        List<ShipmentHeader> shipmentHeaders = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>().eq(ShipmentHeader::getReferCode,shipmentHeader.getReferCode()));
lihailong authored
100
101
102
103
104
        if(shipmentHeaders.size()>0){
            for (ShipmentHeader header : shipmentHeaders) {
                shipmentHeader.setId(header.getId());
                shipmentHeader.setCode(header.getCode());
                shipmentHeaderService.updateById(shipmentHeader);
105
                List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(new LambdaQueryWrapper<ShipmentDetail>().eq(ShipmentDetail::getShipmentId,header.getId()));
lihailong authored
106
107
108
109
110
111
112
113
114
115
116
                for (ShipmentDetail shipmentDetail1 : shipmentDetailList) {
                    for (ShipmentDetail shipmentDetail : shipmentDetails) {
                        shipmentDetail.setId(shipmentDetail1.getId());
                        shipmentDetailService.updateById(shipmentDetail);
                    }
                }
                shipmentDetailService.updateBatchById(shipmentDetails);
                return AjaxResult.success("出库单更新成功");
            }
        }else{
            //2、检查出库主单的合法性
117
            this.checkShipmentHeader(shipmentHeader);
pengcheng authored
118
lihailong authored
119
            //3、检查出库子单的合法性
120
121
//            shipmentDetails =this.checkShipmentDetail(shipmentDetails,shipmentHeader);
            AjaxResult<List<ShipmentDetail>> listAjaxResult = this.checkShipmentDetail(shipmentDetails, shipmentHeader);
122
123
124
            if (listAjaxResult.getCode()==400){
                return AjaxResult.error(listAjaxResult.getMsg());
            }
125
126
            shipmentDetails = listAjaxResult.getData();
lihailong authored
127
128
            //4、保存出库主表
            BigDecimal totalQty = new BigDecimal(0);
129
130
131
            for (ShipmentDetail item: shipmentDetails) {
                totalQty =  totalQty.add(item.getUnitId1Qty());
            }
lihailong authored
132
133
134
135
136
137
138
139
            shipmentHeader.setCreatedBy(QuantityConstant.PLATFORM_ERP);
            shipmentHeader.setTotalLines(shipmentDetails.size());
            shipmentHeader.setTotalQty(totalQty);
            String shipmentCode = shipmentHeaderService.createCode(shipmentHeader.getShipmentType());
            shipmentHeader.setCode(shipmentCode);
            shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_BUILD);
            shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_BUILD);
            shipmentHeader.setCompanyCode("BHF");
140
141
142
143
144
145
146
147
148
            String saleArea="";
            Customer customer=null;
            if (shipmentHeader.getShipmentType()=="XSCKD" &&shipmentHeader.getShipmentType()=="FBSTCK") {
                customer = customerService.getOne(new LambdaQueryWrapper<Customer>().eq(Customer::getCode,shipmentHeader.getCustomerCode()));
                if(StringUtils.isNull(customer)){
                    return AjaxResult.error("wms此客户不存在"+shipmentHeader.getCustomerCode());
                }
                saleArea= customer.getProvince() + "-" + customer.getCity() + "-" + customer.getAddress1()  + "-" +  customer.getAddress2();
            }
lihailong authored
149
150
151
152

            if(!shipmentHeaderService.save(shipmentHeader)){
                throw new ServiceException("保存出库主表失败");
            }
153
lihailong authored
154
155
            //5、保存出库子表
            for(ShipmentDetail shipmentDetail : shipmentDetails){
tongzhonghao authored
156
157
//                shipmentDetail.setCompanyCode(customer.getAllCreditCode());
//                shipmentDetail.setCompanyName(customer.getName());
158
159
160
                if(customer!=null){
                    shipmentDetail.setAllCreditCode(customer.getAllCreditCode());
                }
161
                shipmentDetail.setSaleArea(saleArea);
易文鹏 authored
162
                shipmentDetail.setFentity(shipmentDetail.getReferId()+"");//体制码
lihailong authored
163
164
                shipmentDetail.setInventorySts(QuantityConstant.GOOD);
                shipmentDetail.setShipmentId(shipmentHeader.getId());
165
                shipmentDetail.setShipQty(shipmentDetail.getUnitId1Qty());
lihailong authored
166
167
168
169
170
171
                shipmentDetail.setShipmentCode(shipmentHeader.getCode());
                shipmentDetail.setUnitId1Qty(shipmentDetail.getUnitId1Qty());
                shipmentDetail.setUnitId2Qty(shipmentDetail.getUnitId2Qty());
                shipmentDetail.setUnitId1(shipmentDetail.getUnitId1());
                shipmentDetail.setUnitId2(shipmentDetail.getUnitId2());
                shipmentDetail.setCompanyCode("BHF");
lihailong authored
172
                shipmentDetail.setShipmentType(shipmentHeader.getShipmentType());
lihailong authored
173
                shipmentDetail.setWarehouseCode("CS0001");
174
//                shipmentDetail.setUserDef3("0");
lihailong authored
175
176
177
178
179
180
181
182
            }
            int num = 0;
            List<ShipmentDetail> shipmentDetailList = new ArrayList<>();
            if(shipmentDetails.size() >500 ){
                for(ShipmentDetail item : shipmentDetails){
                    num++;
                    shipmentDetailList.add(item);
                    if(num % 500 ==0 || num == shipmentDetails.size()){
183
                        if(!shipmentDetailService.saveBatch(shipmentDetailList)){
lihailong authored
184
185
186
                            throw new ServiceException("保存出库子表失败");
                        }
                        shipmentDetailList=new ArrayList<>();
pengcheng authored
187
188
                    }
                }
lihailong authored
189
            }else {
190
191
//                if(!shipmentDetailService.insertDetails(shipmentDetails)){
                if(!shipmentDetailService.saveBatch(shipmentDetails)){
lihailong authored
192
193
                    throw new ServiceException("保存出库子表失败");
                }
pengcheng authored
194
195
            }
        }
mahuandong authored
196
        return AjaxResult.success("出库单下发成功");
pengcheng authored
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
    }


    /**
     * 检查出库主单的合法性
     * @param shipmentHeader
     * @return
     */
    public  AjaxResult checkShipmentHeader(ShipmentHeader shipmentHeader){
        //1、判断仓库和货主
        if(StringUtils.isEmpty(shipmentHeader.getWarehouseCode())){
            return AjaxResult.error("仓库为空");
        }
        if(StringUtils.isEmpty(shipmentHeader.getCompanyCode())){
            return AjaxResult.error("货主为空");
        }


        LambdaQueryWrapper<Warehouse> warehouseLamb = Wrappers.lambdaQuery();
        warehouseLamb.eq(Warehouse::getCode,shipmentHeader.getWarehouseCode());
        Warehouse warehouse =warehouseService.getOne(warehouseLamb);
        if(warehouse == null){
            return AjaxResult.error("wms没有此仓库");
        }

        LambdaQueryWrapper<Company> companyLamb = Wrappers.lambdaQuery();
        companyLamb.eq(Company::getCode,shipmentHeader.getCompanyCode());
        Company company =companyService.getOne(companyLamb);
        if(company == null){
            return AjaxResult.error("wms没有此货主");
        }

        //2、判断出库类型
        LambdaQueryWrapper<ShipmentType> shipmentTypeLamb = Wrappers.lambdaQuery();
        shipmentTypeLamb.eq(ShipmentType::getCode,shipmentHeader.getShipmentType())
                    .eq(ShipmentType::getWarehouseCode,shipmentHeader.getWarehouseCode());
        ShipmentType shipmentType =shipmentTypeService.getOne(shipmentTypeLamb);
        if(shipmentType == null){
            return AjaxResult.error("wms没有此出库类型");
        }

        //3、检查上游单号是否存在
        LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLamb = Wrappers.lambdaQuery();
        shipmentHeaderLamb.eq(ShipmentHeader::getWarehouseCode,shipmentHeader.getWarehouseCode())
                .eq(ShipmentHeader::getReferCode,shipmentHeader.getReferCode());
        List<ShipmentHeader> shipmentHeaders = shipmentHeaderService.list(shipmentHeaderLamb);
        if(shipmentHeaders.size() > 0 || shipmentHeaders != null){
            return AjaxResult.success("出库单已经下发");
        }

        //4、检查客户
        if(StringUtils.isNotEmpty(shipmentHeader.getCustomerCode())){
            LambdaQueryWrapper<Customer> customerLamb = Wrappers.lambdaQuery();
            customerLamb.eq(Customer::getWarehouseCode,shipmentHeader.getWarehouseCode())
                    .eq(Customer::getCode,shipmentHeader.getCustomerCode());
            Customer customer = customerService.getOne(customerLamb);
            if(customer == null){
                return AjaxResult.error("wms没有此客户");
            }
        }
        return AjaxResult.success(shipmentHeader);
    }


    /**
     * 检查出库子单的合法性
     * @param shipmentDetails
     * @return
     */
266
    public  AjaxResult<List<ShipmentDetail>> checkShipmentDetail(List<ShipmentDetail> shipmentDetails,ShipmentHeader shipmentHeader){
pengcheng authored
267
268
269
270

        for(ShipmentDetail shipmentDetail : shipmentDetails) {
            //1、检查物料
            if(StringUtils.isEmpty(shipmentDetail.getMaterialCode())){
271
                return AjaxResult.error("物料编码为空");
pengcheng authored
272
            }
273
            List<ShipmentDetail> a = null;
pengcheng authored
274
275
276
277
278
            LambdaQueryWrapper<Material> materialLamb = Wrappers.lambdaQuery();
            materialLamb.eq(Material::getCode,shipmentDetail.getMaterialCode())
                .eq(Material::getWarehouseCode,shipmentHeader.getWarehouseCode());
            Material material = materialService.getOne(materialLamb);
            if(material == null){
279
                return AjaxResult.error("wms没有此物料,"+shipmentDetail.getMaterialCode());
280
            }
281
282
283
284
//            if (new BigDecimal(0).compareTo(shipmentDetail.getUnitId2Qty() != null ?
//                    shipmentDetail.getUnitId2Qty() : new BigDecimal(0)) == 0) {
//                return AjaxResult.error("数量为空");
//            }
pengcheng authored
285
286
287
288
289

            //2、赋值物料属性
            shipmentDetail.setMaterialName(material.getName());
            shipmentDetail.setMaterialSpec(material.getSpec());
            shipmentDetail.setMaterialUnit(material.getUnit());
pengcheng authored
290
            shipmentDetail.setMaterialIsBattery(material.getIsBattery());
pengcheng authored
291
        }
292
        return AjaxResult.success(shipmentDetails);
pengcheng authored
293
    }
lector authored
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324

    @Transactional
    public AjaxResult remove(List<String> shipmentCodeList) {
        LambdaQueryWrapper<ShipmentHeader> headerQueryWrapper;
        for (String shipmentCode : shipmentCodeList) {
            headerQueryWrapper = Wrappers.lambdaQuery();
            headerQueryWrapper.eq(ShipmentHeader::getCode,shipmentCode);
            ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(headerQueryWrapper);
            if (shipmentHeader == null) {
                return AjaxResult.success("");
            }
            if ((shipmentHeader.getFirstStatus() >= QuantityConstant.SHIPMENT_HEADER_RETURN && shipmentHeader.getLastStatus() >= QuantityConstant.SHIPMENT_HEADER_RETURN) ||
                    (shipmentHeader.getFirstStatus() < QuantityConstant.SHIPMENT_HEADER_POOL & shipmentHeader.getLastStatus() < QuantityConstant.SHIPMENT_HEADER_POOL)) {
                ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory();
                List<ShipmentDetailHistory> shipmentDetailHistoryList = new ArrayList<>();
                //查询入库单明细
                LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
                lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentCode);
                List<ShipmentDetail> list = shipmentDetailService.list(lambdaQueryWrapper);

                //复制到入库历史实体
                com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(shipmentHeaderHistory, shipmentHeader);
                for (ShipmentDetail shipmentDetail : list) {
                    ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory();
                    com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(shipmentDetailHistory, shipmentDetail);
                    shipmentDetailHistoryList.add(shipmentDetailHistory);
                }


                shipmentHeaderHistory.setLastUpdatedBy(ShiroUtils.getLoginName());
                if (!shipmentHeaderService.removeById(shipmentHeader.getId())) {
325
                    return AjaxResult.error("删除头表失败");
lector authored
326
327
                }
                if (!shipmentHeaderHistoryService.save(shipmentHeaderHistory)) {
328
                    return AjaxResult.error("新增历史出库单失败");
lector authored
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
                }
                // 当存在明细时删除
                if (list.size() != 0) {
                    //删除入库明细
                    List<Integer> shipmentDetailIds = new ArrayList<>();
                    for (int i = 0; i < shipmentDetailHistoryList.size(); i++) {
                        shipmentDetailHistoryList.get(i).setLastUpdatedBy(ShiroUtils.getLoginName());
                        shipmentDetailHistoryList.get(i).setShipmentId(shipmentHeaderHistory.getId());
                        shipmentDetailIds.add(shipmentDetailHistoryList.get(i).getId());
                    }
                    if (!shipmentDetailService.removeByIds(shipmentDetailIds)) {
                        throw new ServiceException("删除明细表失败");
                    }
                    if (!shipmentDetailHistoryService.saveBatch(shipmentDetailHistoryList)) {
                        throw new ServiceException("新增明细失败");
                    }
                }
            } else {
                return AjaxResult.success("出库单没有完成,无法删除");
            }
        }
        return AjaxResult.success("删除成功");
    }

    public AjaxResult search(String shipmentCode,String companyCode,String warehouseCode){
        if (companyCode==null){
            return AjaxResult.error("货主编码不能为空");
        }
        if (warehouseCode==null){
            return AjaxResult.error("仓库编码不能为空");
        }
        ShipmentDomain shipmentDomain = new ShipmentDomain();
        LambdaQueryWrapper<ShipmentHeader> headerLambdaQuery = Wrappers.lambdaQuery();
        LambdaQueryWrapper<ShipmentDetail> detailLambdaQuery = Wrappers.lambdaQuery();
        headerLambdaQuery.eq(ShipmentHeader::getWarehouseCode,warehouseCode)
                .eq(ShipmentHeader::getCompanyCode,companyCode)
                .eq(ShipmentHeader::getCode,shipmentCode);
        detailLambdaQuery.eq(ShipmentDetail::getWarehouseCode,warehouseCode)
                .eq(ShipmentDetail::getCompanyCode,companyCode)
                .eq(ShipmentDetail::getShipmentCode,shipmentCode);
        ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(headerLambdaQuery);
        List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(detailLambdaQuery);
        shipmentDomain.setShipmentHeader(shipmentHeader);
        shipmentDomain.setShipmentDetails(shipmentDetailList);
        return AjaxResult.success("查询成功",shipmentDomain);
    }
pengcheng authored
375
}