jiangping
2024-01-17 7fb02aa6f894905c5c98ac622c774f806e9c9f88
调整
已删除9个文件
已修改11个文件
474 ■■■■ 文件已修改
server/company/src/main/java/com/doumee/api/business/InsuranceController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/SolutionsController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/WorktypeController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.brand.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.cate_attr.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.cate_budget.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.cate_param.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.category.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.goods.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.goods_param.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.multifile.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/cate_param_select.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/SolutionsController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Insurance.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Solutions.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/InsuranceService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/SolutionsService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/business/InsuranceController.java
@@ -67,6 +67,14 @@
        return ApiResponse.success(null);
    }
    @ApiOperation("启用禁用")
    @PostMapping("/updateStatus")
    @RequiresPermissions("business:insurance:update")
    public ApiResponse updateStatus(@RequestBody Insurance insurance) {
        insuranceService.updateStatus(insurance);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:insurance:query")
@@ -74,6 +82,13 @@
        return ApiResponse.success(insuranceService.findPage(pageWrap));
    }
    @ApiOperation("查询列表")
    @PostMapping("/list")
    @RequiresPermissions("business:insurance:query")
    public ApiResponse<List<Insurance>> findList (@RequestBody  Insurance pageWrap) {
        return ApiResponse.success(insuranceService.findList(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:insurance:exportExcel")
server/company/src/main/java/com/doumee/api/business/SolutionsController.java
@@ -73,6 +73,12 @@
    public ApiResponse<PageData<Solutions>> findPage (@RequestBody PageWrap<Solutions> pageWrap) {
        return ApiResponse.success(solutionsService.findPage(pageWrap));
    }
    @ApiOperation("列表查询")
    @PostMapping("/list")
    @RequiresPermissions("business:solutions:query")
    public ApiResponse<List<Solutions>> findList (@RequestBody Solutions pageWrap) {
        return ApiResponse.success(solutionsService.findList(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
server/company/src/main/java/com/doumee/api/business/WorktypeController.java
@@ -6,6 +6,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Worktype;
import com.doumee.service.business.WorktypeService;
import io.swagger.annotations.Api;
@@ -73,6 +74,12 @@
    public ApiResponse<PageData<Worktype>> findPage (@RequestBody PageWrap<Worktype> pageWrap) {
        return ApiResponse.success(worktypeService.findPage(pageWrap));
    }
    @ApiOperation("根据保险方案编码查询")
    @PostMapping("/list")
    @RequiresPermissions("business:worktype:query")
    public ApiResponse<List<Worktype>> findList ( Worktype model) {
        return ApiResponse.success(worktypeService.findList(model));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
server/db/business.brand.permissions.sql
ÎļþÒÑɾ³ý
server/db/business.cate_attr.permissions.sql
ÎļþÒÑɾ³ý
server/db/business.cate_budget.permissions.sql
ÎļþÒÑɾ³ý
server/db/business.cate_param.permissions.sql
ÎļþÒÑɾ³ý
server/db/business.category.permissions.sql
ÎļþÒÑɾ³ý
server/db/business.goods.permissions.sql
ÎļþÒÑɾ³ý
server/db/business.goods_param.permissions.sql
ÎļþÒÑɾ³ý
server/db/business.multifile.permissions.sql
ÎļþÒÑɾ³ý
server/db/cate_param_select.permissions.sql
ÎļþÒÑɾ³ý
server/platform/src/main/java/com/doumee/api/business/SolutionsController.java
@@ -67,6 +67,14 @@
        return ApiResponse.success(null);
    }
    @ApiOperation("禁用启用")
    @PostMapping("/updateStatus")
    @RequiresPermissions("business:solutions:update")
    public ApiResponse updateStatus(@RequestBody Solutions solutions) {
        solutionsService.updateStatus(solutions);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:solutions:query")
server/service/src/main/java/com/doumee/dao/business/model/Insurance.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +10,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * ä¿é™©å…¬å¸ä¿¡æ¯è¡¨
@@ -67,12 +69,15 @@
    @ExcelColumn(name="版本号")
    private String version;
    @ApiModelProperty(value = "记录类型 0基表数据 1历史版本数据", example = "1")
    @ExcelColumn(name="记录类型 0基表数据 1历史版本数据")
    @ApiModelProperty(value = "记录类型 0基表数据 1历史版本数据 2最新历史版本", example = "1")
    @ExcelColumn(name="记录类型 0基表数据 1历史版本数据 2最新历史版本")
    private Integer dataType;
    @ApiModelProperty(value = "基表编码(自关联)", example = "1")
    @ExcelColumn(name="基表编码(自关联)")
    private Integer baseId;
    @ApiModelProperty(value = "工种集合", example = "1")
    @TableField(exist = false)
    private List<Worktype> worktypeList;
}
server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -10,6 +11,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.math.BigDecimal;
import java.util.List;
/**
 * ä¿é™©æ–¹æ¡ˆä¿¡æ¯è¡¨
@@ -92,9 +94,9 @@
    @ExcelColumn(name="保险时间单位0天 1半月 2月 3å¹´")
    private Integer timeUnit;
    @ApiModelProperty(value = "开户行")
    @ExcelColumn(name="开户行")
    private String insureCycle;
    @ApiModelProperty(value = "投保周期")
    @ExcelColumn(name="投保周期")
    private Integer insureCycle;
    @ApiModelProperty(value = "最小投保周期时间单位0天 1半月 2月 3å¹´", example = "1")
    @ExcelColumn(name="最小投保周期时间单位0天 1半月 2月 3å¹´")
@@ -111,6 +113,9 @@
    @ApiModelProperty(value = "接收文件邮箱")
    @ExcelColumn(name="接收文件邮箱")
    private String email;
    @ApiModelProperty(value = "承包公司")
    @ExcelColumn(name="承包公司")
    private String companyName;
    @ApiModelProperty(value = "特别约定")
    @ExcelColumn(name="特别约定")
@@ -143,4 +148,10 @@
    @ExcelColumn(name="基表编码(自关联)")
    private Integer baseId;
    @ApiModelProperty(value = "工种编码集合", example = "1")
    @TableField(exist = false)
    private List<Integer> worktypeIdList;
}
server/service/src/main/java/com/doumee/service/business/InsuranceService.java
@@ -94,4 +94,6 @@
     * @return long
     */
    long count(Insurance insurance);
    void updateStatus(Insurance insurance);
}
server/service/src/main/java/com/doumee/service/business/SolutionsService.java
@@ -47,6 +47,7 @@
     * @param solutions å®žä½“对象
     */
    void updateById(Solutions solutions);
    void updateStatus(Solutions solutions);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java
@@ -1,20 +1,34 @@
package com.doumee.service.business.impl;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.InsuranceMapper;
import com.doumee.dao.business.WorktypeMapper;
import com.doumee.dao.business.model.Insurance;
import com.doumee.dao.business.model.Worktype;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.InsuranceService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
 * ä¿é™©å…¬å¸ä¿¡æ¯è¡¨Service实现
@@ -26,22 +40,113 @@
    @Autowired
    private InsuranceMapper insuranceMapper;
    @Autowired
    private WorktypeMapper worktypeMapper;
    @Override
    @Transactional
    public Integer create(Insurance insurance) {
        insuranceMapper.insert(insurance);
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        initCreateParam(insurance);//工种数据有效性检验,去除空白行数据
        insurance.setIsdeleted(Constants.ZERO);
        insurance.setCreator(user.getId());
        insurance.setCreateDate(new Date());
        insurance.setVersion(UUID.randomUUID().toString());//版本号
        insurance.setDataType(Constants.ZERO);
        insurance.setStatus(Constants.ZERO);
        insuranceMapper.insert(insurance);//基础版本
        //如果有工种,则产生一个新的有效历史版本 ~
        Insurance newModel = new Insurance();
        BeanUtils.copyProperties(insurance,newModel);
        newModel.setId(null);
        newModel.setBaseId(insurance.getId());
        newModel.setDataType(Constants.TWO);
        insuranceMapper.insert(newModel);
        dealWorkTypeData(insurance,newModel,insurance.getWorktypeList(),true);
        return insurance.getId();
    }
    private void dealWorkTypeData(Insurance insurance, Insurance newModel, List<Worktype> worktypeList,boolean isNew) {
        for(Worktype w : worktypeList) {
            //基础版本
            w.setInsuranceId(insurance.getId());
            w.setIsdeleted(Constants.ZERO);
            w.setCreator(newModel.getCreator());
            w.setCreateDate(insurance.getCreateDate());
            w.setDataType(insurance.getDataType());
            w.setStatus(Constants.ZERO);
            w.setVersion(insurance.getVersion());
            worktypeMapper.insert(w);
            //历史版本的工种信息
            Worktype newType = new Worktype();
            BeanUtils.copyProperties(w, newType);
            newType.setInsuranceId(newModel.getId());
            newType.setBaseId(w.getId());
            newType.setDataType(Constants.ONE);
            newType.setVersion(newModel.getVersion());
            worktypeMapper.insert(newType);
        }
    }
    private void initCreateParam(Insurance insurance) {
        if(StringUtils.isBlank(insurance.getName())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请输入保险公司名称!");
        }
        List<Worktype> worktypeList = new ArrayList<>();
        if(insurance.getWorktypeList()!=null && insurance.getWorktypeList().size()>0){
            for(Worktype w : insurance.getWorktypeList()){
                if(StringUtils.isNotBlank(w.getName())){
                    worktypeList.add(w);
                }
            }
        }
        if(worktypeList.size()==0){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,工种不能为空!");
        }
        insurance.setWorktypeList(worktypeList);
    }
    @Override
    public void deleteById(Integer id) {
        insuranceMapper.deleteById(id);
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        Insurance model = findById(id);
        if(model == null || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        Insurance update = new Insurance();
        update.setIsdeleted(Constants.ZERO);
        update.setEditDate(new Date());
        update.setEditor(user.getId());
        update.setId(id);
        insuranceMapper.updateById(update);
        //逻辑删除所有工种数据
        worktypeMapper.update(null,new UpdateWrapper<Worktype>()
                .lambda()
                .eq(Worktype::getInsuranceId,id)
                .eq(Worktype::getIsdeleted,Constants.ZERO)
                .set(Worktype::getIsdeleted,Constants.ONE)
         );
    }
    @Override
    public void delete(Insurance insurance) {
        UpdateWrapper<Insurance> deleteWrapper = new UpdateWrapper<>(insurance);
        insuranceMapper.delete(deleteWrapper);
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        Insurance model = findById(insurance.getId());
        if(model == null || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        Insurance update = new Insurance();
        update.setIsdeleted(Constants.ZERO);
        update.setEditDate(new Date());
        update.setId(insurance.getId());
        update.setEditor(user.getId());
        insuranceMapper.updateById(update);
    }
    @Override
@@ -54,7 +159,74 @@
    @Override
    public void updateById(Insurance insurance) {
        insuranceMapper.updateById(insurance);
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        Insurance model = findById(insurance.getId());
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
                || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        //数据有效性校验
        initCreateParam(insurance);
        Insurance updateModel = new Insurance();
        updateModel.setEditor(user.getId());
        updateModel.setName(insurance.getName());
        updateModel.setId(model.getId());
        updateModel.setVersion(UUID.randomUUID().toString());
        updateModel.setEditDate(new Date());
        updateModel.setRemark(insurance.getRemark());
        updateModel.setSortnum(insurance.getSortnum());
        insuranceMapper.updateById(updateModel);
        //如果修改,则产生一个新的历史版本 ~
        Insurance newModel = new Insurance();
        BeanUtils.copyProperties(model,newModel);
        newModel.setId(null);
        newModel.setVersion(updateModel.getVersion());
        newModel.setCreateDate(new Date());
        newModel.setBaseId(insurance.getId());
        newModel.setDataType(Constants.TWO);
        insuranceMapper.insert(newModel);
        //删除所有工种数据
        worktypeMapper.delete(new UpdateWrapper<Worktype>()
                .lambda()
                .eq(Worktype::getInsuranceId,insurance.getId())
        );
        insuranceMapper.update(null,new UpdateWrapper<Insurance>()
                .lambda()
                .eq(Insurance::getBaseId,insurance.getId())
                .eq(Insurance::getDataType,Constants.TWO)
                .set(Insurance::getDataType,Constants.ONE)
        );
        //处理工作信息,新增最新的,同时产生历史版本
        dealWorkTypeData(updateModel,newModel,insurance.getWorktypeList(),false);
    }
    @Override
    public void updateStatus(Insurance insurance){
        if(insurance.getId() == null || insurance.getStatus()==null || insurance.getStatus()<0||insurance.getStatus()>1){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST );
        }
        Insurance model = findById(insurance.getId());
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
                || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        if(Constants.equalsInteger(model.getStatus(),insurance.getStatus())){
            //如果状态不发生改变,直接返回
            return;
        }
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        //同时更新基表和历史版本所有数据状态
        insuranceMapper.update(null,new UpdateWrapper<Insurance>()
                .lambda()
                 .and(m -> m.eq(Insurance::getId,model.getId()).or().eq(Insurance::getBaseId,model.getId()))
                .eq(Insurance::getIsdeleted,Constants.ZERO)
                .set(Insurance::getEditDate,new Date())
                .set(Insurance::getEditor,user.getId())
                .set(Insurance::getStatus,insurance.getStatus())
        );
    }
    @Override
@@ -80,6 +252,7 @@
    @Override
    public List<Insurance> findList(Insurance insurance) {
        insurance.setIsdeleted(Constants.ZERO);
        QueryWrapper<Insurance> wrapper = new QueryWrapper<>(insurance);
        return insuranceMapper.selectList(wrapper);
    }
@@ -89,6 +262,8 @@
        IPage<Insurance> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Insurance> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setDataType(Constants.ZERO);//只选择基表数据
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Insurance::getId, pageWrap.getModel().getId());
        }
@@ -130,13 +305,15 @@
        if (pageWrap.getModel().getBaseId() != null) {
            queryWrapper.lambda().eq(Insurance::getBaseId, pageWrap.getModel().getBaseId());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
 /*       for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        }*/
        queryWrapper.lambda().orderByAsc(Insurance::getSortnum);
        return PageData.from(insuranceMapper.selectPage(page, queryWrapper));
    }
server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
@@ -1,20 +1,33 @@
package com.doumee.service.business.impl;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.InsuranceMapper;
import com.doumee.dao.business.SolutionWorktypeMapper;
import com.doumee.dao.business.SolutionsMapper;
import com.doumee.dao.business.model.Solutions;
import com.doumee.dao.business.WorktypeMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.SolutionsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
 * ä¿é™©æ–¹æ¡ˆä¿¡æ¯è¡¨Service实现
@@ -26,11 +39,91 @@
    @Autowired
    private SolutionsMapper solutionsMapper;
    @Autowired
    private WorktypeMapper worktypeMapper;
    @Autowired
    private SolutionWorktypeMapper solutionWorktypeMapper;
    @Autowired
    private InsuranceMapper insuranceMapper;
    @Override
    public Integer create(Solutions solutions) {
        solutionsMapper.insert(solutions);
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        initCreateParam(solutions);//工种数据有效性检验,去除空白行数据
        solutions.setIsdeleted(Constants.ZERO);
        solutions.setCreator(user.getId());
        solutions.setCreateDate(new Date());
        solutions.setVersion(UUID.randomUUID().toString());//版本号
        solutions.setDataType(Constants.ZERO);
        solutions.setStatus(Constants.ZERO);
        solutionsMapper.insert(solutions);//基础版本
        //如果有工种,则产生一个新的有效历史版本 ~
        Solutions newModel = new Solutions();
        BeanUtils.copyProperties(solutions,newModel);
        newModel.setId(null);
        newModel.setBaseId(solutions.getId());
        newModel.setDataType(Constants.TWO);
        solutionsMapper.insert(newModel);
        dealWorkType(solutions,newModel,solutions.getWorktypeIdList(),true);
        return solutions.getId();
    }
    private void dealWorkType(Solutions solutions, Solutions newModel, List<Integer> worktypeIdList, boolean b) {
        Insurance  model = insuranceMapper.selectById(solutions.getInsuranceId());
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
                || !Constants.equalsInteger(model.getDataType(),Constants.TWO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该保险公司信息不存在,请尝试刷新页面重试~" );
        }
        if( !Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该保险公司已被,请尝试刷新页面重试~" );
        }
        List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
                .eq(Worktype::getInsuranceId,solutions.getInsuranceId())
                .eq(Worktype::getIsdeleted,Constants.ZERO)
                .in(Worktype::getId,worktypeIdList));
        if(worktypeList==null ||worktypeIdList.size()==0){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,工种信息选择有误,请尝试刷新页面重试~" );
        }
        for(Worktype type : worktypeList) {
            //基础版本
            SolutionWorktype w = new SolutionWorktype();
            w.setSolutionId(solutions.getId());
            w.setIsdeleted(Constants.ZERO);
            w.setCreator(newModel.getCreator());
            w.setCreateDate(solutions.getCreateDate());
            w.setWorktypeId(type.getId());
            w.setStatus(Constants.ZERO);
            solutionWorktypeMapper.insert(w);
            //历史版本的工种信息
            SolutionWorktype newType = new SolutionWorktype();
            BeanUtils.copyProperties(w, newType);
            newType.setSolutionId(newModel.getId());
            solutionWorktypeMapper.insert(newType);
        }
    }
    private void initCreateParam(Solutions solutions) {
        if(StringUtils.isBlank(solutions.getName())
                ||solutions.getInsuranceId()==null
                ||solutions.getWorktypeIdList()==null
                ||solutions.getWorktypeIdList().size()==0
                ||Constants.formatIntegerNum(solutions.getMaxAge()) < 0
                ||Constants.formatIntegerNum(solutions.getMinAge()) < 0
                ||Constants.formatIntegerNum(solutions.getPriceCycleUnit()) < 0
                ||Constants.formatIntegerNum(solutions.getInsureCycle()) < 0
                ||Constants.formatIntegerNum(solutions.getInsureCycleUnit()) < 0
                || solutions.getMinAge() >solutions.getMaxAge()
                || Constants.formatBigdecimal(solutions.getPrice()).compareTo(new BigDecimal(0)) !=1
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
    }
    @Override
@@ -54,7 +147,43 @@
    @Override
    public void updateById(Solutions solutions) {
        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        Solutions model = findById(solutions.getId());
        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
                || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        //数据有效性校验
        initCreateParam(solutions);
        solutions.setEditor(user.getId());
        solutions.setVersion(UUID.randomUUID().toString());
        solutions.setEditDate(new Date());
        solutionsMapper.updateById(solutions);
        //如果修改,则产生一个新的历史版本 ~
        Solutions newModel = new Solutions();
        BeanUtils.copyProperties(model,newModel);
        newModel.setId(null);
        newModel.setVersion(solutions.getVersion());
        newModel.setCreateDate(new Date());
        newModel.setBaseId(solutions.getId());
        newModel.setDataType(Constants.TWO);
        solutionsMapper.insert(newModel);
        //删除所有工种数据
        solutionWorktypeMapper.delete(new UpdateWrapper<SolutionWorktype>()
                .lambda()
                .eq(SolutionWorktype::getSolutionId,solutions.getId())
        );
        solutionsMapper.update(null,new UpdateWrapper<Solutions>()
                .lambda()
                .eq(Solutions::getBaseId,solutions.getId())
                .eq(Solutions::getDataType,Constants.TWO)
                .set(Solutions::getDataType,Constants.ONE)
        );
        //处理工作信息,新增最新的,同时产生历史版本
        dealWorkType(solutions,newModel,solutions.getWorktypeIdList(),false);
    }
    @Override
@@ -66,7 +195,31 @@
            this.updateById(solutions);
        }
    }
    @Override
    public void updateStatus(Solutions solutions){
        if(solutions.getId() == null || solutions.getStatus()==null || solutions.getStatus()<0||solutions.getStatus()>1){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST );
        }
        Solutions model = findById(solutions.getId());
        if(model == null || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
            || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
        }
        if(Constants.equalsInteger(model.getStatus(),solutions.getStatus())){
            //如果状态不发生改变,直接返回
            return;
        }
        LoginUserInfo user= (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        //同时更新基表和历史版本所有数据状态
        solutionsMapper.update(null,new UpdateWrapper<Solutions>()
                .lambda()
                .and(m -> m.eq(Solutions::getId,model.getId()).or().eq(Solutions::getBaseId,model.getId()))
                .eq(Solutions::getIsdeleted,Constants.ZERO)
                .set(Solutions::getEditDate,new Date())
                .set(Solutions::getEditor,user.getId())
                .set(Solutions::getStatus,solutions.getStatus())
        );
    }
    @Override
    public Solutions findById(Integer id) {
        return solutionsMapper.selectById(id);
@@ -80,6 +233,7 @@
    @Override
    public List<Solutions> findList(Solutions solutions) {
        solutions.setIsdeleted(Constants.ZERO);
        QueryWrapper<Solutions> wrapper = new QueryWrapper<>(solutions);
        return solutionsMapper.selectList(wrapper);
    }
@@ -89,6 +243,8 @@
        IPage<Solutions> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Solutions> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setDataType(Constants.ZERO);//只选择基表数据
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Solutions::getId, pageWrap.getModel().getId());
        }
server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java
@@ -2,6 +2,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.WorktypeMapper;
import com.doumee.dao.business.model.Worktype;
@@ -80,6 +81,7 @@
    @Override
    public List<Worktype> findList(Worktype worktype) {
        worktype.setIsdeleted(Constants.ZERO);
        QueryWrapper<Worktype> wrapper = new QueryWrapper<>(worktype);
        return worktypeMapper.selectList(wrapper);
    }