Browse Source

add:唯一索引

caozixuan 1 year ago
parent
commit
29a788f1b6

+ 3 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingServiceImpl.java

@@ -368,6 +368,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
         List<TBDing> tbDingList = this.list(new QueryWrapper<TBDing>().lambda()
                 .eq(TBDing::getSopNo, sopNo)
                 .eq(TBDing::getUserId, userId)
+                .eq(TBDing::getSignYear, signYear)
                 .eq(TBDing::getSignDate, signDate));
 
         if (CollectionUtils.isEmpty(tbDingList)) {
@@ -573,9 +574,9 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
         for (TBService tbService : tbServiceList) {
             Long serviceUnitId = tbService.getId();
             List<Map<String, Object>> sopPassageMap = tbSopInfoService.findSopPassage(serviceUnitId);
-            if (CollectionUtils.isNotEmpty(sopPassageMap)){
+            if (CollectionUtils.isNotEmpty(sopPassageMap)) {
                 Map<String, Object> map = sopPassageMap.get(0);
-                if (Objects.nonNull(map)){
+                if (Objects.nonNull(map)) {
                     String engineerUserIds = String.valueOf(map.get("engineerUserIds"));
                     String assistantEngineerUserIds = String.valueOf(map.get("assistantEngineerUserIds"));
 

+ 54 - 40
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.params.ServiceUnitParam;
 import com.qmth.sop.business.bean.result.ReductionResult;
@@ -16,10 +17,9 @@ import com.qmth.sop.business.service.SysDingGroupService;
 import com.qmth.sop.business.service.SysUserRoleService;
 import com.qmth.sop.business.service.TBServiceService;
 import com.qmth.sop.common.contant.SystemConstant;
-import com.qmth.sop.common.enums.ExceptionResultEnum;
-import com.qmth.sop.common.enums.ProductTypeEnum;
-import com.qmth.sop.common.enums.RoleTypeEnum;
-import com.qmth.sop.common.enums.ServiceStatusEnum;
+import com.qmth.sop.common.enums.*;
+import com.qmth.sop.common.util.ResultUtil;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -51,45 +51,59 @@ public class TBServiceServiceImpl extends ServiceImpl<TBServiceMapper, TBService
     @Transactional
     @Override
     public Long edit(ServiceUnitParam serviceUnitParam, SysUser requestUser) {
-        Long id = serviceUnitParam.getId();
-        Long leaderId = serviceUnitParam.getServiceLeadId();
-        Long startTime = serviceUnitParam.getStartTime();
-        Long endTime = serviceUnitParam.getEndTime();
-
-        Integer regionPeopleCount = serviceUnitParam.getRegionPeopleCount();
-        Integer regionProjectCount = serviceUnitParam.getRegionProjectCount();
-        ReductionResult reduction = this.reduction(regionPeopleCount, regionProjectCount);
-
-        if (endTime < startTime) {
-            throw ExceptionResultEnum.ERROR.exception("服务截止时间不能小于服务开始时间");
-        }
+        try {
+            Long id = serviceUnitParam.getId();
+            Long leaderId = serviceUnitParam.getServiceLeadId();
+            Long startTime = serviceUnitParam.getStartTime();
+            Long endTime = serviceUnitParam.getEndTime();
+
+            Integer regionPeopleCount = serviceUnitParam.getRegionPeopleCount();
+            Integer regionProjectCount = serviceUnitParam.getRegionProjectCount();
+            ReductionResult reduction = this.reduction(regionPeopleCount, regionProjectCount);
+
+            if (endTime < startTime) {
+                throw ExceptionResultEnum.ERROR.exception("服务截止时间不能小于服务开始时间");
+            }
 
-        if (!sysUserRoleService.userContainsRoles(leaderId, RoleTypeEnum.BUSSINESS)) {
-            throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元的负责人");
-        }
+            if (!sysUserRoleService.userContainsRoles(leaderId, RoleTypeEnum.BUSSINESS)) {
+                throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元的负责人");
+            }
 
-        TBService tbService = new TBService();
-        tbService.setName(serviceUnitParam.getName());
-        tbService.setType(serviceUnitParam.getType());
-        tbService.setStartTime(serviceUnitParam.getStartTime());
-        tbService.setEndTime(serviceUnitParam.getEndTime());
-        tbService.setRegionPeopleCount(reduction.getMolecular());
-        tbService.setRegionProjectCount(reduction.getDenominator());
-        tbService.setServiceLeadId(serviceUnitParam.getServiceLeadId());
-        if (Objects.isNull(id)) {
-            // id不存在新增
-            tbService.setEnable(true);
-            tbService.setStatus(ServiceStatusEnum.NEW);
-            tbService.setCreateId(requestUser.getId());
-            this.save(tbService);
-            id = tbService.getId();
-        } else {
-            // id存在更新
-            tbService.setId(id);
-            tbService.setUpdateId(requestUser.getUpdateId());
-            this.updateById(tbService);
+            TBService tbService = new TBService();
+            tbService.setName(serviceUnitParam.getName());
+            tbService.setType(serviceUnitParam.getType());
+            tbService.setStartTime(serviceUnitParam.getStartTime());
+            tbService.setEndTime(serviceUnitParam.getEndTime());
+            tbService.setRegionPeopleCount(reduction.getMolecular());
+            tbService.setRegionProjectCount(reduction.getDenominator());
+            tbService.setServiceLeadId(serviceUnitParam.getServiceLeadId());
+            if (Objects.isNull(id)) {
+                // id不存在新增
+                tbService.setEnable(true);
+                tbService.setStatus(ServiceStatusEnum.NEW);
+                tbService.setCreateId(requestUser.getId());
+                this.save(tbService);
+                id = tbService.getId();
+            } else {
+                // id存在更新
+                tbService.setId(id);
+                tbService.setUpdateId(requestUser.getUpdateId());
+                this.updateById(tbService);
+            }
+            return id;
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof DuplicateKeyException) {
+                String errorColumn = e.getCause().toString();
+                String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3).replaceAll("'", "");
+                throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
+            } else if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+            return null;
         }
-        return id;
     }
 
     @Override

+ 31 - 0
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -392,3 +392,34 @@ UPDATE sys_privilege SET url = '/api/sso/rtzf/login' WHERE (id = '2055');
 ALTER TABLE sys_user
     ADD COLUMN rtzf_sync_status VARCHAR(20) NULL COMMENT '软通智服同步状态' AFTER source;
 
+-- 2023-11-27
+-- t_b_ding表和t_b_service_region表测试环境有脏数据
+ALTER TABLE t_b_ding
+    ADD UNIQUE INDEX t_b_ding_un (sop_no ASC, user_id ASC, sign_year ASC, sign_date ASC) VISIBLE;
+;
+ALTER TABLE t_b_ding_submit
+    ADD UNIQUE INDEX t_b_ding_submit_un (sop_no ASC, user_archives_id ASC) VISIBLE;
+;
+ALTER TABLE t_b_product
+    ADD UNIQUE INDEX t_b_product_un_code (code ASC) VISIBLE;
+;
+ALTER TABLE t_b_service
+    ADD UNIQUE INDEX t_b_service_un_name (name ASC) VISIBLE;
+;
+ALTER TABLE t_b_service_region
+    ADD UNIQUE INDEX t_b_service_region_un (service_id ASC, region_name ASC) VISIBLE;
+;
+ALTER TABLE t_b_service_scope
+    ADD UNIQUE INDEX t_b_service_scope_un (service_id ASC, crm_no ASC) VISIBLE;
+;
+ALTER TABLE t_b_user_archives
+    ADD UNIQUE INDEX t_b_user_archives_un_identity (identity ASC) INVISIBLE,
+    ADD UNIQUE INDEX t_b_user_archives_un_mobile_number (mobile_number ASC) VISIBLE;
+;
+ALTER TABLE t_b_user_archives_allocation
+    ADD UNIQUE INDEX t_b_user_archives_allocation_un (crm_no ASC, archives_id ASC) VISIBLE;
+;
+ALTER TABLE t_b_user_archives_supplier
+    ADD UNIQUE INDEX t_b_user_archives_supplier_un (user_archives_id ASC, supplier_id ASC) VISIBLE;
+;
+

+ 21 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/FieldUniqueEnum.java

@@ -37,7 +37,27 @@ public enum FieldUniqueEnum {
 
     t_b_violation_un_code("违规编号"),
 
-    t_b_crm_un_crm_no("派单号");
+    t_b_crm_un_crm_no("派单号"),
+
+    t_b_ding_un("sop编号-用户id-签到年度-签到日期"),
+
+    t_b_ding_submit_un("sop编号-人员档案id"),
+
+    t_b_product_un_code("产品编号"),
+
+    t_b_service_un_name("服务单元名称"),
+
+    t_b_service_region_un("服务单元id-大区名称"),
+
+    t_b_service_scope_un("服务单元id-派单编号"),
+
+    t_b_user_archives_un_identity("身份证号"),
+
+    t_b_user_archives_un_mobile_number("手机号"),
+
+    t_b_user_archives_allocation_un("派单编号-人员档案id"),
+
+    t_b_user_archives_supplier_un("人员档案id-供应商id");
 
     private String title;