Blame view

src/main/java/com/huaheng/api/general/service/BarCodeApiService.java 10.2 KB
lihailong authored
1
2
3
4
5
6
7
8
package com.huaheng.api.general.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.BarCodeDomain;
import com.huaheng.api.wcs.service.taskInfo.TaskInfoService;
import com.huaheng.common.constant.QuantityConstant;
9
import com.huaheng.common.constant.Res;
10
import com.huaheng.common.exception.BusinessException;
lihailong authored
11
import com.huaheng.common.exception.service.ServiceException;
12
import com.huaheng.common.utils.DateUtils;
13
import com.huaheng.common.utils.spring.SpringUtils;
lihailong authored
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.barcode.barcodeDetail.domain.BarCodeDetail;
import com.huaheng.pc.barcode.barcodeDetail.service.BarCodeDetailService;
import com.huaheng.pc.barcode.barcodeHeader.domain.BarCodeHeader;
import com.huaheng.pc.barcode.barcodeHeader.service.BarCodeHeaderService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.station.domain.Station;
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.ReceiptTaskService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
lihailong authored
31
import java.math.BigDecimal;
32
import java.util.Date;
lihailong authored
33
import java.util.List;
34
import java.util.ResourceBundle;
lihailong authored
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

@Component
@Transactional
public class BarCodeApiService {
    @Resource
    private BarCodeHeaderService barCodeHeaderService;
    @Resource
    private MaterialService materialService;
    @Resource
    private BarCodeDetailService barCodeDetailService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private TaskInfoService taskInfoService;
    @Resource
    private ReceiptTaskService receiptTaskService;
54
55
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult checkBarCode(BarCodeDomain barCodeDomain) {
lihailong authored
56
57
58
        BarCodeHeader barCodeHeader = barCodeDomain.getBarCodeHeader();
        String barCodeHeaderCode = barCodeHeader.getCode();
        if(barCodeHeaderCode == null){
59
            return AjaxResult.error("主码不存在");
lihailong authored
60
61
62
        }

        barCodeHeader.setBarCodeHeaderCode(barCodeHeaderCode);
63
64
65
        if (barCodeHeader.getFbillno()==null && barCodeHeader.getFbillno()=="") {
            return AjaxResult.error("生产订单号为空");
        }
lihailong authored
66
67
68
69
70

        LambdaQueryWrapper<BarCodeHeader> barCodeHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
        barCodeHeaderLambdaQueryWrapper.eq(BarCodeHeader::getBarCodeHeaderCode,barCodeHeader.getBarCodeHeaderCode());
        List<BarCodeHeader> barCodeHeaderList = barCodeHeaderService.list(barCodeHeaderLambdaQueryWrapper);
        if(barCodeHeaderList.size()>0){
71
            return AjaxResult.error("主码重复"+barCodeHeader.getBarCodeHeaderCode());
lihailong authored
72
73
74
75
76
77
78
        }

        List<BarCodeDetail> barCodeDetailList = barCodeDomain.getBarCodeDetails();
        for (BarCodeDetail barCodeDetail : barCodeDetailList) {

            String barCodeDetailReceiptCode = barCodeDetail.getCode();
            if(barCodeDetailReceiptCode == null){
79
                return AjaxResult.error("子条码不存在 "+barCodeDetailReceiptCode);
lihailong authored
80
81
82
83
            }
            barCodeDetail.setReceiptCode(barCodeDetailReceiptCode);
            String materialCode = barCodeDetail.getMaterialCode();
            if(materialCode == null){
84
                return AjaxResult.error("物料编码不存在 "+materialCode);
lihailong authored
85
86
            }
lihailong authored
87
            BigDecimal qty = barCodeDetail.getQty();
lihailong authored
88
89
90
91
92
93
94
95
96
97
            if(qty == null){
                return AjaxResult.error("数量不存在 qty");
            }
            String sn = barCodeDetail.getSn();
        }
        return AjaxResult.success();
    }
98
    @Transactional(rollbackFor = Exception.class)
lihailong authored
99
    public AjaxResult addBarCodeApi(BarCodeDomain barCodeDomain){
100
101
        boolean result = false;
        BarCodeHeader header = barCodeDomain.getBarCodeHeader();
102
        String materialBatch = header.getMaterialBatch();
103
104
105
        String barCodeHeaderCode = header.getCode();
        String fbillno = header.getFbillno();
        if(barCodeHeaderCode == null || "".equals(barCodeHeaderCode)){
106
            return AjaxResult.error("没有主条码");
lihailong authored
107
        }
108
109
110
        if(header.getFbillno() == null || "".equals(header.getFbillno())){
            return AjaxResult.error("没有生产订单编号");
        }
lihailong authored
111
        String code = barCodeHeaderService.createCode("BZXXRK");
112
113
114
115
116
117
118
119
//        BarCodeHeader barCodeHeader = barCodeHeaderService.getOne(new LambdaQueryWrapper<BarCodeHeader>()
//                .eq(BarCodeHeader::getBarCodeHeaderCode,barCodeHeaderCode)
//                .eq(BarCodeHeader::getFbillno,fbillno));
//        if(barCodeHeader != null){
//            return AjaxResult.error("包装信息头错误:主条码重复【"+barCodeHeaderCode+"】。");
//        }
        BarCodeHeader barCodeHeader = new BarCodeHeader();
120
        barCodeHeader.setLocked(QuantityConstant.BARCODEHEADER_LOCKED_DEFAULT);
121
        barCodeHeader.setCode(code);
122
        barCodeHeader.setMaterialBatch(materialBatch);
123
124
125
126
127
128
129
130
131
132
133
134
        barCodeHeader.setReceiptType("BZXXRK");
        barCodeHeader.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
        barCodeHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANYCODE);
        barCodeHeader.setFbillno(fbillno);
        barCodeHeader.setCreatedBy(QuantityConstant.PLATFORM_MES);
        barCodeHeader.setBarCodeHeaderCode(barCodeHeaderCode);
        barCodeHeader.setReceiptNote(header.getReceiptNote());
        barCodeHeader.setTotalQty(BigDecimal.ZERO);
        barCodeHeader.setTotalLines(0);
        barCodeHeader.setTotalWeight(BigDecimal.ZERO);
        result = barCodeHeaderService.save(barCodeHeader);
        if(!result){
135
            throw new ServiceException("包装头信息创建失败");
lihailong authored
136
        }
137
138
139
140
141
142
143
        List<BarCodeDetail> barCodeDetails = barCodeDomain.getBarCodeDetails();
        BigDecimal totalQty = BigDecimal.ZERO;
        BigDecimal totalWeight = BigDecimal.ZERO;
        int totalLines = barCodeDetails.size();

        for (BarCodeDetail detail : barCodeDetails) {
            BarCodeDetail barCodeDetail = new BarCodeDetail();
144
            detail = addAttr(detail.getCode(),detail);
145
146
            barCodeDetail.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
            barCodeDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANYCODE);
lihailong authored
147
            barCodeDetail.setReceiptId(barCodeHeader.getId());
148
            barCodeDetail.setCode(detail.getCode());
lihailong authored
149
            barCodeDetail.setReceiptCode(barCodeHeader.getCode());
150
151
152
            String materialCode = detail.getMaterialCode();
            String materialUnit = detail.getMaterialUnit();
            BigDecimal qty = detail.getQty();
tongzhonghao authored
153
            BigDecimal weight = detail.getWeight();
154
            BarCodeHeader oneBarCodeHeader = barCodeHeaderService.getOne(new LambdaQueryWrapper<BarCodeHeader>().eq(BarCodeHeader::getId, barCodeHeader.getId()));
155
            if(weight.compareTo(BigDecimal.ZERO) == 0){
156
                oneBarCodeHeader.setProType("1");//重量为0,就是装配
157
            }else {
158
                oneBarCodeHeader.setProType("2");//有重量就是拆解
159
            }
160
            barCodeHeaderService.updateById(oneBarCodeHeader);
161
162

            if (detail.getCode()==null&&"".equals(detail.getCode())) { //没有字条码,属于拆解中的散装,只有重量没有数量,重量赋值给数量
163
                qty=weight;
lihailong authored
164
            }
tongzhonghao authored
165
166
            totalQty.add(qty);
            totalWeight.add(weight);
167
            Material material = materialService.getOne(new LambdaQueryWrapper<Material>().eq(Material::getCode,materialCode));
168
            if(material == null){
169
170
                result=false;
                throw new ServiceException("没有该物料编码:"+barCodeDetail.getMaterialCode());
171
172
173
174
175
            }
            barCodeDetail.setMaterialCode(material.getCode());
            barCodeDetail.setMaterialName(material.getName());
            barCodeDetail.setMaterialSpec(material.getSpec());
            barCodeDetail.setMaterialUnit(material.getUnit());
176
            barCodeDetail.setTotalQty(qty);
177
            barCodeDetail.setSn(detail.getSn());
tongzhonghao authored
178
            barCodeDetail.setWeight(weight);
179
180
181
182
            barCodeDetail.setConstitute(detail.getConstitute());
            barCodeDetail.setProductType(detail.getProductType());
            barCodeDetail.setBatteryModel(detail.getBatteryModel());
            barCodeDetail.setWarehouseInTime(detail.getWarehouseInTime());
183
184
            result = barCodeDetailService.save(barCodeDetail);
            if(!result){
185
                result=false;
186
                throw new ServiceException("包装子信息创建失败");
lihailong authored
187
188
            }
        }
189
190
191
192
193
194
195
        barCodeHeader.setTotalQty(barCodeHeader.getTotalQty().add(totalQty));
        barCodeHeader.setTotalWeight(barCodeHeader.getTotalWeight().add(totalWeight));
        barCodeHeader.setTotalLines(totalLines);
        result = barCodeHeaderService.updateById(barCodeHeader);
        if(!result){
            throw new ServiceException("更新包装入库头信息失败。");
        }
196
        return AjaxResult.toAjax(result);
lihailong authored
197
198
    }
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
    private BarCodeDetail addAttr(String barCode,BarCodeDetail detail){
            String productType = barCode.substring(3,4);
        String batteryType = barCode.substring(4,5);
        String productDate = barCode.substring(7,10);
        String year = productDate.substring(0, 1);
        String month = productDate.substring(1, 2);
        String day = productDate.substring(2, 3);
        String type = barCode.substring(17,19);
        String days = Res.string().dateKey(day);
        String years = Res.string().yearKey(year);
        Date inTime = DateUtils.dateTime("yyyy-MM-dd", years + "-" + month + "-" + days);

        detail.setConstitute(Res.string().batteryKey(type));
        detail.setProductType(productType);
        detail.setBatteryModel(Res.string().batteryKey(batteryType));
        detail.setWarehouseInTime(inTime);
        return detail;
    }
lihailong authored
218
}