whycxzp
2023-09-22 90b526ef4e3fd4f20546128bf058fbfb5f1051e4
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
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.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);
        }
        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);
    }
    //历史版本可用性设定
    @Transactional
    public Response setpHistoryEnable(String parentCode, String customCode, int version, int enabled, String reason, String versionTime) {
        UpdateWrapper wrapper=new UpdateWrapper();
        wrapper.eq("parent_code",parentCode);
        wrapper.eq("custom_code",customCode);
        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){
            //先将所有的锁定
            wrapper.set("enabled",0);
            flag=mapper.update(null,wrapper);
            //再将选中的设为可用
            wrapper.eq("id",product.getId());
            wrapper.set("enabled",1);
            flag=mapper.update(null,wrapper);
            if(flag>0){
                //2.将选中的版本的历史信息查询出来
                qWrapper.eq("id",product.getId());
                ProductHistory pHistory=mapper.selectOne(qWrapper);
                //3:prodcut中删除旧的产品信息
                UpdateWrapper deleteWrapper=new UpdateWrapper();
                deleteWrapper.eq("parent_code",parentCode);
                deleteWrapper.eq("custom_code",customCode);
                productMapper.delete(deleteWrapper);
                //4.productBom中删除旧的信息
                if(product!=null){
                    UpdateWrapper bomWrapper=new UpdateWrapper();
                    bomWrapper.eq("product_id",product.getId());
                    productBomMapper.delete(bomWrapper);
                }
                if(pHistory!=null){
                    // 5.在product中插入设定可用的pHistory
                    productMapper.insertPselectPH(pHistory.getId());
                    //6.在productBom中插入pHsitoryBom查询出的数据
                    productBomMapper.insertBomSelectBomH(pHistory.getId(),pHistory.getSubVersionMax());
                }
            }
        }else{
            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.查询产品是否存在物料时钣金件的产品
            Material material_0120=productMapper.selectMaterial_0120(parentCode,customCode);
            //如果存在则锁定
            if(material_0120!=null){
                //先锁定历史
                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){
                //
                QueryWrapper qWrapper=new QueryWrapper();
                qWrapper.eq("parent_code",parentCode);
                qWrapper.eq("custom_code",customCode);
 
                //1.查询当前product中的信息
                Product product=productMapper.selectOne(qWrapper);
 
                //2.prodcut中删除旧的产品信息
                UpdateWrapper deleteWrapper=new UpdateWrapper();
                deleteWrapper.eq("parent_code",parentCode);
                deleteWrapper.eq("custom_code",customCode);
                productMapper.delete(deleteWrapper);
 
                //3.删除productBom
                if(product!=null){
                    UpdateWrapper bomWrapper=new UpdateWrapper();
                    bomWrapper.eq("product_id",product.getId());
                    productBomMapper.delete(bomWrapper);
                }
 
            }*/
 
        }
        //锁定和解锁记录添加
        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;
    }
}