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 defaultDateProduct(Integer pageNum, Integer pageSize, List glassType, Product product) { Integer offset = (pageNum-1)*pageSize; String glassTypeId = null; if(glassType.size()>1){ glassTypeId = glassType.get(1); } Map 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 productObject) { //把传入主附表的object类型转换成实体类类型 JSONObject productJson = new JSONObject(productObject); Product product = JSONObject.parseObject(JSONObject.toJSONString(productJson.get("title")), Product.class); List productDetails = JSONArray.parseArray(JSONObject.toJSONString(productJson.get("detail")), ProductDetail.class); //完善主附表信息并返回 Map getProductJson = updateProduct(productDetails,product); Product getProduct = JSONObject.parseObject(JSONObject.toJSONString(getProductJson.get("title")), Product.class); List getProductDetails = JSONArray.parseArray(JSONObject.toJSONString(getProductJson.get("detail")), ProductDetail.class); if(getProduct.getId()==null ){ insertProduct(getProduct,getProductDetails); }else{ updateProductData(getProductDetails,getProduct); } return true; } public Map selectProduct(String productName,Map productObject) { Map map = new HashMap<>(); //把传入主附表的object类型转换成实体类类型 JSONObject productJson = new JSONObject(productObject); Product product = JSONObject.parseObject(JSONObject.toJSONString(productJson.get("title")), Product.class); List productDetails = JSONArray.parseArray(JSONObject.toJSONString(productJson.get("detail")), ProductDetail.class); //完善主附表信息并返回 Map getProductJson = updateProduct(productDetails,product); Product getProduct = JSONObject.parseObject(JSONObject.toJSONString(getProductJson.get("title")), Product.class); List getProductDetails = JSONArray.parseArray(JSONObject.toJSONString(getProductJson.get("detail")), ProductDetail.class); if(getProduct.getId()!=null){ map.put("data",productMapper.selectProductId(productName,getProduct.getProductAbbreviation(), getProduct.getId())); }else{ map.put("data",productMapper.selectProduct(productName,getProduct.getProductAbbreviation())); } return map; } private void updateProductData(List getProductDetails, Product getProduct) { productMapper.update(getProduct,new UpdateWrapper().eq("id",getProduct.getId())); productDetailMapper.delete(new QueryWrapper().eq("prod_id",getProduct.getId())); for (ProductDetail getProductDetail : getProductDetails) { getProductDetail.setProdId(getProduct.getId()); } productDetailMapper.insertList(getProductDetails); } private void insertProduct(Product getProduct, List getProductDetails) { //插入主表数据 productMapper.insert(getProduct); //给副表添加产品id for (ProductDetail getProductDetail : getProductDetails) { getProductDetail.setProdId(getProduct.getId()); } //插入副表 productDetailMapper.insertList(getProductDetails); } private Map updateProduct(List productDetailList,Product product) { Map 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 selectProductById(Integer id) { Product product = productMapper.selectById(id); List productDetailList = productDetailMapper.selectList( new QueryWrapper().eq("prod_id", id)); Map map = new HashMap<>(); map.put("title",product); map.put("detail",productDetailList); return map; } public List otherSysGetProduct() { return productMapper.selectList(new QueryWrapper().eq("state",1) .orderByDesc("id")); } }