fix: 审批人重复校验、查询过滤补全及车辆统计修正

- 新增 GET /checkExistByUserId/{userId} 审批人重复检查接口
- 新增 save 时审批人重复校验,存在则抛 BizException
- personnelVehicleManagementList 查询支持 name/projectName 过滤
- vehicleApply/list 支持 gateLevelAuthAreaId 港区 JSON 筛选
- personnelVehicleManagementList 车辆数统计去掉 audit_flag=2 限制

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
koumen
dearLin 2026-05-26 18:03:54 +08:00
parent 3304e16943
commit d4c2779336
11 changed files with 86 additions and 3 deletions

View File

@ -11,6 +11,7 @@ import com.zcloud.primeport.api.MkmjApprovalUserServiceI;
import com.zcloud.primeport.dto.MkmjApprovalUserAddCmd; import com.zcloud.primeport.dto.MkmjApprovalUserAddCmd;
import com.zcloud.primeport.dto.MkmjApprovalUserPageQry; import com.zcloud.primeport.dto.MkmjApprovalUserPageQry;
import com.zcloud.primeport.dto.MkmjApprovalUserUpdateCmd; import com.zcloud.primeport.dto.MkmjApprovalUserUpdateCmd;
import com.zcloud.primeport.dto.clientobject.AvailableResultCO;
import com.zcloud.primeport.dto.clientobject.MkmjApprovalUserCO; import com.zcloud.primeport.dto.clientobject.MkmjApprovalUserCO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -64,6 +65,12 @@ public class MkmjApprovalUserController {
mkmjApprovalUserService.remove(id); mkmjApprovalUserService.remove(id);
return SingleResponse.buildSuccess(); return SingleResponse.buildSuccess();
} }
@ApiOperation("校验审批人是否已录入")
@GetMapping("/checkExistByUserId/{userId}")
public SingleResponse<AvailableResultCO> checkExistByUserId(@PathVariable("userId") Long userId) {
return mkmjApprovalUserService.checkExistByUserId(userId);
}
@ApiOperation("修改") @ApiOperation("修改")
@PutMapping("/edit") @PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjApprovalUserUpdateCmd mkmjApprovalUserUpdateCmd) { public SingleResponse edit(@Validated @RequestBody MkmjApprovalUserUpdateCmd mkmjApprovalUserUpdateCmd) {

View File

@ -1,9 +1,12 @@
package com.zcloud.primeport.command; package com.zcloud.primeport.command;
import com.alibaba.cola.exception.BizException; import com.alibaba.cola.exception.BizException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zcloud.primeport.domain.gateway.MkmjApprovalUserGateway; import com.zcloud.primeport.domain.gateway.MkmjApprovalUserGateway;
import com.zcloud.primeport.domain.model.MkmjApprovalUserE; import com.zcloud.primeport.domain.model.MkmjApprovalUserE;
import com.zcloud.primeport.dto.MkmjApprovalUserAddCmd; import com.zcloud.primeport.dto.MkmjApprovalUserAddCmd;
import com.zcloud.primeport.persistence.dataobject.MkmjApprovalUserDO;
import com.zcloud.primeport.persistence.repository.MkmjApprovalUserRepository;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -20,9 +23,17 @@ import org.springframework.transaction.annotation.Transactional;
@AllArgsConstructor @AllArgsConstructor
public class MkmjApprovalUserAddExe { public class MkmjApprovalUserAddExe {
private final MkmjApprovalUserGateway mkmjApprovalUserGateway; private final MkmjApprovalUserGateway mkmjApprovalUserGateway;
private final MkmjApprovalUserRepository mkmjApprovalUserRepository;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean execute(MkmjApprovalUserAddCmd cmd) { public boolean execute(MkmjApprovalUserAddCmd cmd) {
QueryWrapper<MkmjApprovalUserDO> wrapper = new QueryWrapper<>();
wrapper.eq("user_id", cmd.getUserId());
wrapper.eq("delete_enum", "FALSE");
MkmjApprovalUserDO exist = mkmjApprovalUserRepository.getOne(wrapper);
if (exist != null) {
throw new BizException("该审批人已录入,不可重复添加");
}
MkmjApprovalUserE examTypeE = new MkmjApprovalUserE(); MkmjApprovalUserE examTypeE = new MkmjApprovalUserE();
BeanUtils.copyProperties(cmd, examTypeE); BeanUtils.copyProperties(cmd, examTypeE);
boolean res = false; boolean res = false;
@ -37,4 +48,3 @@ public class MkmjApprovalUserAddExe {
return true; return true;
} }
} }

View File

@ -73,6 +73,13 @@ public class MkmjApprovalUserQueryExe {
return mkmjApprovalUserCoConvertor.converDOToCO(byId); return mkmjApprovalUserCoConvertor.converDOToCO(byId);
} }
public MkmjApprovalUserDO getByUserId(Long userId) {
QueryWrapper<MkmjApprovalUserDO> wrapper = new QueryWrapper<>();
wrapper.eq("user_id", userId);
wrapper.eq("delete_enum", "FALSE");
return mkmjApprovalUserRepository.getOne(wrapper);
}
public static void main(String[] args) { public static void main(String[] args) {
for (int i = 0; i < 30; i++) { for (int i = 0; i < 30; i++) {

View File

@ -10,6 +10,7 @@ import com.zcloud.primeport.command.query.MkmjApprovalUserQueryExe;
import com.zcloud.primeport.dto.MkmjApprovalUserAddCmd; import com.zcloud.primeport.dto.MkmjApprovalUserAddCmd;
import com.zcloud.primeport.dto.MkmjApprovalUserPageQry; import com.zcloud.primeport.dto.MkmjApprovalUserPageQry;
import com.zcloud.primeport.dto.MkmjApprovalUserUpdateCmd; import com.zcloud.primeport.dto.MkmjApprovalUserUpdateCmd;
import com.zcloud.primeport.dto.clientobject.AvailableResultCO;
import com.zcloud.primeport.dto.clientobject.MkmjApprovalUserCO; import com.zcloud.primeport.dto.clientobject.MkmjApprovalUserCO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -69,5 +70,17 @@ public class MkmjApprovalUserServiceImpl implements MkmjApprovalUserServiceI {
public MkmjApprovalUserCO getInfoById(Long id) { public MkmjApprovalUserCO getInfoById(Long id) {
return mkmjApprovalUserQueryExe.getInfoById(id); return mkmjApprovalUserQueryExe.getInfoById(id);
} }
@Override
public SingleResponse<AvailableResultCO> checkExistByUserId(Long userId) {
AvailableResultCO result = new AvailableResultCO();
if (mkmjApprovalUserQueryExe.getByUserId(userId) != null) {
result.setAvailable(false);
result.setAvailableMessage("该审批人已录入,不可重复添加");
} else {
result.setAvailable(true);
}
return SingleResponse.of(result);
}
} }

View File

@ -7,6 +7,7 @@ import com.zcloud.primeport.dto.MkmjApprovalUserPageQry;
import com.zcloud.primeport.dto.MkmjApprovalUserUpdateCmd; import com.zcloud.primeport.dto.MkmjApprovalUserUpdateCmd;
import com.zcloud.primeport.dto.clientobject.MkmjApprovalUserCO; import com.zcloud.primeport.dto.clientobject.MkmjApprovalUserCO;
import com.zcloud.primeport.dto.clientobject.AvailableResultCO;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -30,5 +31,7 @@ public interface MkmjApprovalUserServiceI {
List<MkmjApprovalUserCO> listAll(MkmjApprovalUserPageQry qry); List<MkmjApprovalUserCO> listAll(MkmjApprovalUserPageQry qry);
MkmjApprovalUserCO getInfoById(Long id); MkmjApprovalUserCO getInfoById(Long id);
SingleResponse<AvailableResultCO> checkExistByUserId(Long userId);
} }

View File

@ -0,0 +1,13 @@
package com.zcloud.primeport.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class AvailableResultCO extends ClientObject {
@ApiModelProperty(value = "是否可用(true可用/false不可用)")
private Boolean available;
@ApiModelProperty(value = "不可用原因")
private String availableMessage;
}

View File

@ -26,5 +26,7 @@ public interface MkmjApprovalUserGateway {
Boolean deletedMkmjApprovalUserById(Long id); Boolean deletedMkmjApprovalUserById(Long id);
Boolean deletedMkmjApprovalUserByIds(Long[] id); Boolean deletedMkmjApprovalUserByIds(Long[] id);
MkmjApprovalUserE getByUserId(Long userId);
} }

View File

@ -1,5 +1,6 @@
package com.zcloud.primeport.gatewayimpl; package com.zcloud.primeport.gatewayimpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.primeport.domain.gateway.MkmjApprovalUserGateway; import com.zcloud.primeport.domain.gateway.MkmjApprovalUserGateway;
import com.zcloud.primeport.domain.model.MkmjApprovalUserE; import com.zcloud.primeport.domain.model.MkmjApprovalUserE;
import com.zcloud.primeport.persistence.dataobject.MkmjApprovalUserDO; import com.zcloud.primeport.persistence.dataobject.MkmjApprovalUserDO;
@ -46,5 +47,18 @@ public class MkmjApprovalUserGatewayImpl implements MkmjApprovalUserGateway {
public Boolean deletedMkmjApprovalUserByIds(Long[] ids) { public Boolean deletedMkmjApprovalUserByIds(Long[] ids) {
return mkmjApprovalUserRepository.removeByIds(Collections.singletonList(ids)); return mkmjApprovalUserRepository.removeByIds(Collections.singletonList(ids));
} }
}
@Override
public MkmjApprovalUserE getByUserId(Long userId) {
LambdaQueryWrapper<MkmjApprovalUserDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MkmjApprovalUserDO::getUserId, userId);
wrapper.eq(MkmjApprovalUserDO::getDeleteEnum, "FALSE");
MkmjApprovalUserDO d = mkmjApprovalUserRepository.getOne(wrapper);
if (d == null) {
return null;
}
MkmjApprovalUserE e = new MkmjApprovalUserE();
BeanUtils.copyProperties(d, e);
return e;
}
}

View File

@ -63,6 +63,18 @@
WHERE WHERE
c.delete_enum = 'FALSE' c.delete_enum = 'FALSE'
and c.type = 3 and c.type = 3
<if test="params.name != null and params.name != ''">
AND c.corp_name LIKE CONCAT('%', #{params.name}, '%')
</if>
<if test="params.projectName != null and params.projectName != ''">
AND c.id IN (
SELECT apply_corp_id FROM xgf_apply_person
WHERE project_name LIKE CONCAT('%', #{params.projectName}, '%') AND delete_enum = 'FALSE' AND person_belong_type = 3
UNION
SELECT vehicle_corp_id FROM vehicle_apply
WHERE project_name LIKE CONCAT('%', #{params.projectName}, '%') AND delete_enum = 'FALSE' AND vehicle_belong_type = 5 AND vehicle_corp_id IS NOT NULL
)
</if>
GROUP BY GROUP BY
c.id c.id
</select> </select>

View File

@ -76,6 +76,9 @@
<if test="params.employeeVehicleUserId != null"> <if test="params.employeeVehicleUserId != null">
AND f.employee_vehicle_user_id = #{params.employeeVehicleUserId} AND f.employee_vehicle_user_id = #{params.employeeVehicleUserId}
</if> </if>
<if test="params.gateLevelAuthAreaId != null and params.gateLevelAuthAreaId != ''">
AND JSON_CONTAINS(f.gate_level_auth_area, JSON_OBJECT('bianma', #{params.gateLevelAuthAreaId}), '$.area')
</if>
order by f.id desc order by f.id desc
</select> </select>
<select id="fgsCount" resultType="com.zcloud.primeport.persistence.dataobject.FgsVehicleCountDto"> <select id="fgsCount" resultType="com.zcloud.primeport.persistence.dataobject.FgsVehicleCountDto">

View File

@ -150,7 +150,6 @@
vehicle_apply va vehicle_apply va
WHERE WHERE
va.delete_enum = 'FALSE' va.delete_enum = 'FALSE'
AND va.audit_flag = 2
AND va.employee_vehicle_user_id != '' AND va.employee_vehicle_user_id != ''
AND va.employee_vehicle_user_id IS NOT NULL AND va.employee_vehicle_user_id IS NOT NULL
GROUP BY GROUP BY