whyclxw
2025-03-13 ff98efbc32a3c28ea204e4de8c1bef23c089384e
src/main/java/com/whyc/service/ProductHistoryService.java
@@ -4,11 +4,23 @@
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
@@ -16,21 +28,61 @@
    @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 parentModel,String customCode) {
    public Response getProductVersion(String parentCode,String customCode) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("parent_model",parentModel);
        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?true:false,list,"返回产品版信息");
        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()).eq("enabled",1);
                .eq("custom_code",productHistory.getCustomCode()).ne("enabled",0);
        mapper.update(null,update);
        mapper.insert(productHistory);
@@ -61,4 +113,141 @@
        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;
    }
}