chenlu
2024-06-07 2f640b1038fa331954f78ed1f4317212cf5bb34d
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
package com.example.erp.service.sd;
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.example.erp.common.Constants;
import com.example.erp.entity.sd.Product;
import com.example.erp.entity.sd.ProductDetail;
import com.example.erp.exception.ServiceException;
import com.example.erp.mapper.sd.ProductDetailMapper;
import com.example.erp.mapper.sd.ProductMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.text.DecimalFormat;
import java.util.*;
 
@Service
@DS("sd")
@Transactional
public class ProductService {
    private final
    ProductMapper productMapper;
    private final
    ProductDetailMapper productDetailMapper;
 
    public ProductService(ProductMapper productMapper, ProductDetailMapper productDetailMapper) {
        this.productMapper = productMapper;
        this.productDetailMapper = productDetailMapper;
    }
    //产品查询方法
    public Map<String,Object> defaultDateProduct(Integer pageNum, Integer pageSize, List<String> glassType, Product product) {
        Integer offset = (pageNum-1)*pageSize;
        String glassTypeId = null;
        if(glassType.size()>1){
            glassTypeId = glassType.get(1);
        }
        Map<String,Object> map = new HashMap<>();
        map.put("data",productMapper.defaultProduct(offset,pageSize,glassTypeId,product));
        map.put("total",productMapper.getPageTotal(offset,pageSize,glassTypeId,product));
        return map;
    }
 
    //产品保存方法
    public boolean saveProduct(Map<String,Object>  productObject) {
        //把传入主附表的object类型转换成实体类类型
        JSONObject productJson = new JSONObject(productObject);
        Product product = JSONObject.parseObject(JSONObject.toJSONString(productJson.get("title")), Product.class);
        List<ProductDetail> productDetails = JSONArray.parseArray(JSONObject.toJSONString(productJson.get("detail")), ProductDetail.class);
        //完善主附表信息并返回
        Map<String,Object> getProductJson = updateProduct(productDetails,product);
        Product getProduct = JSONObject.parseObject(JSONObject.toJSONString(getProductJson.get("title")), Product.class);
        List<ProductDetail> getProductDetails = JSONArray.parseArray(JSONObject.toJSONString(getProductJson.get("detail")), ProductDetail.class);
 
        if(getProduct.getId()==null ){
            insertProduct(getProduct,getProductDetails);
        }else{
            updateProductData(getProductDetails,getProduct);
        }
        return true;
 
    }
 
    private void updateProductData(List<ProductDetail> getProductDetails, Product getProduct) {
        productMapper.update(getProduct,new UpdateWrapper<Product>().eq("id",getProduct.getId()));
        productDetailMapper.delete(new QueryWrapper<ProductDetail>().eq("prod_id",getProduct.getId()));
        for (ProductDetail getProductDetail : getProductDetails) {
            getProductDetail.setProdId(getProduct.getId());
        }
        productDetailMapper.insertList(getProductDetails);
    }
 
    private void insertProduct(Product getProduct, List<ProductDetail> getProductDetails) {
        //插入主表数据
        productMapper.insert(getProduct);
        //给副表添加产品id
        for (ProductDetail getProductDetail : getProductDetails) {
            getProductDetail.setProdId(getProduct.getId());
        }
        //插入副表
        productDetailMapper.insertList(getProductDetails);
    }
 
    private Map<String,Object> updateProduct(List<ProductDetail> productDetailList,Product product) {
        Map<String,Object> map = new HashMap<>();
        //定义产品玻璃厚度累加
        double thickness1 = 0;
        //定义产品总厚度累加
        double totalThickness = 0;
        //定义快速查询
        StringBuilder query = new StringBuilder();
 
        //定义副表玻璃与间隔物排序
        int sortNum = 0;
        //定义副表玻璃排序
        int glassSort = 0;
        //定义副表中空分组
        int glassGroup = 1;
 
        for (ProductDetail productDetail : productDetailList) {
            sortNum+=1;
            productDetail.setSortNum(sortNum);
            JSONObject separation = JSONObject.parseObject(productDetail.getSeparation(), Feature.OrderedField);
            String  getThickness = (String) separation.get("thickness");
            double thicknessDetail = Double.parseDouble(getThickness.replace("mm",""));
            totalThickness += thicknessDetail;
 
            if(Objects.equals(productDetail.getDetailType(), "glass")){
                glassSort+=1;
                productDetail.setGlassSort(glassSort);
                productDetail.setGlassGroup(glassGroup);
                thickness1 += thicknessDetail;
                DecimalFormat decimalFormat = new DecimalFormat("###");
                query.append(decimalFormat.format(thicknessDetail));
            }
            else if (Objects.equals(productDetail.getDetailType(), "Interlayer")) {
                query.append("+");
            }else if(Objects.equals(productDetail.getDetailType(), "hollow")){
                glassGroup+=1;
                query.append("*");
            }
        }
        product.setThickness(thickness1);
        product.setTotalThickness(totalThickness);
        product.setQuery(String.valueOf(query));
        map.put("title",product);
        map.put("detail",productDetailList);
        return map;
    }
 
    public boolean deleteProductById(Integer id) {
        Product product = productMapper.selectById(id);
        if(product.getState()==1){
            throw new ServiceException(Constants.Code_600,"产品已审核,无法删除");
        }
        productMapper.deleteById(id);
        return true;
    }
 
    public boolean updateProductStateById(Integer id,Integer state) {
       return productMapper.updateProductStateById(id,state);
    }
 
    public Map<String,Object> selectProductById(Integer id) {
        Product product = productMapper.selectById(id);
        List<ProductDetail> productDetailList = productDetailMapper.selectList(
                new QueryWrapper<ProductDetail>().eq("prod_id", id));
        Map<String,Object> map = new HashMap<>();
        map.put("title",product);
        map.put("detail",productDetailList);
        return map;
    }
}