whyclxw
2025-03-21 645b2750804aa46a98951f70fc104f7e34b1d906
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
26
27
28
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
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
package com.whyc.service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.whyc.dto.Response;
import com.whyc.mapper.ProductBomHistoryMapper;
import com.whyc.mapper.ProductBomMapper;
import com.whyc.mapper.ProductHistoryMapper;
import com.whyc.mapper.ProductMapper;
import com.whyc.pojo.Material;
import com.whyc.pojo.Product;
import com.whyc.pojo.ProductHistory;
import com.whyc.pojo.ProductLockLog;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
 
@Service
public class ProductHistoryService {
    @Autowired(required = false)
    private ProductHistoryMapper mapper;
 
    @Autowired(required = false)
    private ProductMapper productMapper;
 
    @Autowired(required = false)
    private ProductBomMapper productBomMapper;
 
    @Autowired(required = false)
    private ProductBomHistoryMapper productBomHistoryMapper;
 
    @Autowired
    private ProductLockLogService lockLogService;
 
    //产品详情查看版本信息
    public Response getProductVersion(String parentCode,String customCode) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("parent_code",parentCode);
        wrapper.eq("custom_code",customCode);
        wrapper.orderByDesc("version_time");
        List<ProductHistory> list=mapper.selectList(wrapper);
        return new Response().setII(1,list.size()>0,list,"返回产品版信息");
    }
 
    /**新增追加的版本并将原先的版本的启用设置为未启用*/
    @Transactional
    public void insertAndUpdateEnabled(ProductHistory productHistory) {
        QueryWrapper<ProductHistory> query = Wrappers.query();
        query.eq("parent_code",productHistory.getParentCode())
                .eq("custom_code",productHistory.getCustomCode()).ne("enabled",0);
        List<ProductHistory> productNoZeroList = mapper.selectList(query);
        //添加新增日志到tb_product_lock_log表
        List<ProductLockLog> lockLogs = new LinkedList<>();
        for (ProductHistory historyNoZero : productNoZeroList) {
            ProductLockLog lockLog = new ProductLockLog();
            lockLog.setParentCode(historyNoZero.getParentCode());
            lockLog.setCustomCode(historyNoZero.getCustomCode());
            lockLog.setVersion(historyNoZero.getVersion());
            lockLog.setVersionTime(DateUtil.YYYY_MM_DD_HH_MM_SS.format(historyNoZero.getVersionTime()));
            if(historyNoZero.getEnabled() == 1) {
                lockLog.setReason("产品bom上传,原生效版本锁定");
            }else{
                lockLog.setReason("产品bom上传,原待审核版本锁定");
            }
            lockLog.setOwner(ActionUtil.getUser().getName());
            lockLog.setCreateTime(new Date());
            //1代表日志类型为:锁定
            lockLog.setLockFlag(1);
 
            lockLogs.add(lockLog);
        }
        if(lockLogs.size()>0) {
            lockLogService.insertBatch(lockLogs);
        }
        UpdateWrapper<ProductHistory> update = Wrappers.update();
        update.set("enabled",0).eq("parent_code",productHistory.getParentCode())
                .eq("custom_code",productHistory.getCustomCode()).ne("enabled",0);
        mapper.update(null,update);
 
        mapper.insert(productHistory);
    }
 
    public void updateEnabledStatus(String parentCode, String customCode, int status) {
        int anotherStatus = 0;
        if(status==0){
            anotherStatus=1;
        }else{
            anotherStatus=0;
        }
        UpdateWrapper<ProductHistory> update = Wrappers.update();
        update.set("enabled",status).eq("parent_code",parentCode)
                .eq("custom_code",customCode).eq("enabled",anotherStatus);
        mapper.update(null,update);
    }
 
    public ProductHistory getEnabledByParentCodeAndCustomCode(String parentCode, String customCode) {
        QueryWrapper<ProductHistory> query = Wrappers.query();
        query.eq("parent_code",parentCode).eq("custom_code",customCode).eq("enabled",1)
                .last(" limit 1");
        return mapper.selectOne(query);
    }
 
    public ProductHistory getLatestVersion(String parentCode, String customCode) {
        QueryWrapper<ProductHistory> query = Wrappers.query();
        query.eq("parent_code",parentCode).eq("custom_code",customCode).orderByDesc("version").last(" limit 1");
        return mapper.selectOne(query);
    }
    //历史版本可用性设定<产品中包含钣金件(0120)如果包含需要把当成产品的钣金件锁掉
    @Transactional
    public Response setpHistoryEnable(String parentCode, String customCode, int version, int enabled, String reason, String versionTime) {
        int flag=0;
        QueryWrapper qWrapper=new QueryWrapper();
        qWrapper.eq("parent_code",parentCode);
        qWrapper.eq("custom_code",customCode);
        //1.查询当前product中的信息
        Product product=productMapper.selectOne(qWrapper);
        if(enabled==1){//解锁
            //先将所有的锁定
            UpdateWrapper wrapper=new UpdateWrapper();
            wrapper.eq("parent_code",parentCode);
            wrapper.eq("custom_code",customCode);
            wrapper.set("enabled",0);
            mapper.update(null,wrapper);
            //再将选中的设为可用(查出要使用版本)
            QueryWrapper hisWrapper=new QueryWrapper();
            hisWrapper.eq("parent_code",parentCode);
            hisWrapper.eq("custom_code",customCode);
            hisWrapper.eq("version",version);
            ProductHistory his=mapper.selectOne(hisWrapper);
            UpdateWrapper wrapper1=new UpdateWrapper();
            wrapper1.eq("parent_code",parentCode);
            wrapper1.eq("custom_code",customCode);
            wrapper1.eq("id",his.getId());
            wrapper1.set("enabled",1);
            flag=mapper.update(null,wrapper1);
            if(flag>0){
                //2.将选中的版本的历史信息查询出来
                /*qWrapper.eq("id",his.getId());
                ProductHistory pHistory=mapper.selectOne(qWrapper);*/
                //3:prodcut中删除旧的产品信息
                UpdateWrapper deleteWrapper=new UpdateWrapper();
                deleteWrapper.eq("id",product.getId());
                productMapper.delete(deleteWrapper);
                //4.productBom中删除旧的信息
                if(product!=null){
                    UpdateWrapper bomWrapper=new UpdateWrapper();
                    bomWrapper.eq("product_id",product.getId());
                    productBomMapper.delete(bomWrapper);
                }
                if(his!=null){
                    // 5.在product中插入设定可用的pHistory
                    productMapper.insertPselectPH(his.getId());
                    //6.在productBom中插入pHsitoryBom查询出的数据
                    productBomMapper.insertBomSelectBomH(his.getId(),his.getSubVersionMax());
                }
            }
        }else{
            UpdateWrapper wrapper=new UpdateWrapper();
            wrapper.eq("parent_code",parentCode);
            wrapper.eq("custom_code",customCode);
            wrapper.eq("version",version);
            wrapper.set("enabled",0);
            flag=mapper.update(null,wrapper);
 
            //3:prodcut中产品版本设置为-1
            UpdateWrapper uWrapper=new UpdateWrapper();
            uWrapper.eq("parent_code",parentCode);
            uWrapper.eq("custom_code",customCode);
            //设为不可用版本为-1
            uWrapper.set("version",-1);
            productMapper.update(null,uWrapper);
 
            //4.查询产品是否存在物料时钣金件的产品
            List<Material> list=productMapper.selectMaterial_0120(parentCode,customCode);
            //如果存在则锁定
            if(list!=null&&list.size()>0){
                for (Material material_0120:list) {
                    //先锁定历史
                    UpdateWrapper wrapperHistory_0120=new UpdateWrapper();
                    wrapperHistory_0120.eq("parent_code",material_0120.getSubCode());
                    wrapperHistory_0120.set("enabled",0);
                    mapper.update(null,wrapperHistory_0120);
                    //再设置实时为-1
                    UpdateWrapper wrapper_0120=new UpdateWrapper();
                    wrapper_0120.eq("parent_code",material_0120.getSubCode());
                    //设为不可用版本为-1
                    wrapper_0120.set("version",-1);
                    productMapper.update(null,wrapper_0120);
                }
            }
 
        }
        //锁定和解锁记录添加
        if(flag>0){ //操作成功
            ProductLockLog lockLog = new ProductLockLog();
            lockLog.setParentCode(parentCode);
            lockLog.setCustomCode(customCode);
            lockLog.setVersion(version);
            lockLog.setVersionTime(versionTime);
            lockLog.setReason(reason);
            lockLog.setOwner(ActionUtil.getUser().getName());
            lockLog.setCreateTime(new Date());
            if(enabled==0){ //锁定
                lockLog.setLockFlag(1);
            }else{ //解锁
                lockLog.setLockFlag(0);
            }
            lockLogService.insert(lockLog);
        }
        return new Response().set(1,flag>0,"历史版本可用性设定");
    }
 
    public void insert(ProductHistory his) {
        mapper.insert(his);
    }
 
    /**
     *  获取标准产品
     * @param parentCode
     * @return
     */
    public ProductHistory getStandard(String parentCode) {
        QueryWrapper<ProductHistory> query = Wrappers.query();
        query.eq("parent_code",parentCode);
        List<ProductHistory> historyList = mapper.selectList(query);
        for (ProductHistory history : historyList) {
            String customCode = history.getCustomCode();
            if(customCode == null || customCode.trim().equals("")){ //不存在定制表单号,是标准产品
                return history;
            }
        }
        return null;
    }
 
    public boolean checkExists(String parentCode, String customCode) {
        QueryWrapper<ProductHistory> query = Wrappers.query();
        query.eq("parent_code",parentCode);
        if(!StringUtils.isBlank(customCode)){ //标准产品
            query.eq("custom_code",customCode);
        }
        query.last(" limit 1");
        ProductHistory productHistory = mapper.selectOne(query);
        return productHistory!=null;
    }
 
    public ProductHistory getById(Integer id) {
        return mapper.selectById(id);
    }
}