Commit faf57420 authored by hongguangwu's avatar hongguangwu

Merge remote-tracking branch 'origin/MVP1.7.24' into MVP1.7.24

parents 55e55f69 cd56d289
package com.yifu.cloud.plus.v1.yifu.archives.constant;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 项目配置删除 — 在职续签待办预检/清除状态口径(已与产品确认,仅改此处)
*/
public final class AutoMainRelDeleteTodoStatus {
private AutoMainRelDeleteTodoStatus() {
}
/**
* 商险续保 process_status:0 待确认、1 待派单、2 派单失败、5 投保退回
*/
public static final List<String> INSURANCE_PROCESS_STATUS =
Collections.unmodifiableList(Arrays.asList("0", "1", "2", "5"));
/**
* 合同续签 process_status:0 待确认、1 待发起、3 线下签审核不通过、5 发起失败、
* 7 签署失败、10 撤销签署-客服撤销、11 撤销签署-系统自动撤销
*/
public static final List<String> CONTRACT_PROCESS_STATUS =
Collections.unmodifiableList(Arrays.asList("0", "1", "3", "5", "7", "10", "11"));
}
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 项目配置删除预检结果
*/
@Data
@Schema(description = "项目配置删除预检结果")
public class AutoMainRelDeletePrecheckVo implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "商险续签待办条数")
private int insuranceCount;
@Schema(description = "合同续签待办条数")
private int contractCount;
@Schema(description = "项目编码")
private String deptNo;
@Schema(description = "项目名称")
private String departName;
}
......@@ -21,20 +21,12 @@ import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
......
......@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TAutoContractScheme;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TAutoMainRel;
import com.yifu.cloud.plus.v1.yifu.archives.service.TAutoMainRelService;
import com.yifu.cloud.plus.v1.yifu.archives.vo.AutoMainRelDeletePrecheckVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoMainRelAddVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoMainRelDetailVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoMainRelExportVo;
......@@ -159,6 +160,17 @@ public class TAutoMainRelController {
return tAutoMainRelService.updateAsso(entity);
}
/**
* 删除预检:统计在职续签待办条数
* @param id 项目配置ID
* @return R
*/
@Operation(summary = "删除预检", description = "删除前统计商险/合同续签待办条数:hasPermission('demo_tautomainrel_del')")
@GetMapping("/deletePrecheck/{id}")
public R<AutoMainRelDeletePrecheckVo> deletePrecheck(@PathVariable String id) {
return tAutoMainRelService.deletePrecheck(id);
}
/**
* 通过id删除项目配置表主表
* @param id id
......@@ -167,9 +179,8 @@ public class TAutoMainRelController {
@Operation(summary = "通过id删除项目配置表主表", description = "通过id删除项目配置表主表:hasPermission('demo_tautomainrel_del')")
@SysLog("通过id删除项目配置表主表" )
@DeleteMapping("/{id}" )
@PreAuthorize("@pms.hasPermission('demo_tautomainrel_del')" )
public R<Boolean> removeById(@PathVariable String id) {
return R.ok(tAutoMainRelService.removeById(id));
return tAutoMainRelService.removeByIdAsso(id);
}
/**
......
......@@ -65,4 +65,22 @@ public interface TEmpContractAlertMapper extends BaseMapper<TEmpContractAlert> {
List<ContractAlertConfirmVo> getAutoRenewForConfirm(@Param("tEmpContractAlert")ContractAlertSearchVo tEmpContractAlert);
List<ContractAlertAutoVo> getPushWxConfrimInfos();
/**
* 项目配置删除预检:合同续签待办条数
*/
int countForProjectConfigRemove(@Param("deptNo") String deptNo,
@Param("processStatusList") List<String> processStatusList);
/**
* 项目配置删除:口径内提醒置为非自动化(保留 t_emp_contract_alert,不进续签待办列表)
*/
int disableAutoFlagForProjectConfigRemove(@Param("deptNo") String deptNo,
@Param("processStatusList") List<String> processStatusList);
/**
* 项目配置删除:清除口径内合同续签办理数据(pre_new,不删 t_emp_contract_alert)
*/
int deleteContractPreNewForProjectConfigRemove(@Param("deptNo") String deptNo,
@Param("processStatusList") List<String> processStatusList);
}
......@@ -102,4 +102,16 @@ public interface TAutoMainRelService extends IService<TAutoMainRel> {
* @param tAutoMainRel 项目配置对象
*/
void asyncRefreshRenewalDataAfterSave(TAutoMainRel tAutoMainRel);
/**
* 删除预检:统计在职续签待办条数
* @param id 项目配置ID
*/
R<AutoMainRelDeletePrecheckVo> deletePrecheck(String id);
/**
* 删除项目配置及关联子规则,并清除口径内续签待办
* @param id 项目配置ID
*/
R<Boolean> removeByIdAsso(String id);
}
......@@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.archives.constant.AutoMainRelDeleteTodoStatus;
import com.yifu.cloud.plus.v1.yifu.archives.entity.*;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.*;
import com.yifu.cloud.plus.v1.yifu.archives.service.TAutoMainRelService;
......@@ -141,6 +142,9 @@ public class TAutoMainRelServiceImpl extends ServiceImpl<TAutoMainRelMapper, TAu
@Autowired
private TSettleDomainMapper settleDomainMapper;
@Autowired
private TEmpContractAlertMapper empContractAlertMapper;
public static final String itemsLabel = "label,description,disable";
public static final String itemsLabelRepeat = "同一项目岗位名称不可重复";
......@@ -318,13 +322,13 @@ public class TAutoMainRelServiceImpl extends ServiceImpl<TAutoMainRelMapper, TAu
}
//社保规则配置表
detailVo.setSocialRuleInfo(autoSocialRuleInfoMapper.selectOne(Wrappers.<TAutoSocialRuleInfo>query().lambda()
.eq(TAutoSocialRuleInfo::getMainId,id)));
.eq(TAutoSocialRuleInfo::getMainId,id).last(CommonConstants.LAST_ONE_SQL)));
//社保规则配置明细表
detailVo.setSocialRuleRels(autoSocialRuleRelMapper.selectList(Wrappers.<TAutoSocialRuleRel>query().lambda()
.eq(TAutoSocialRuleRel::getDeptId,mainRel.getDeptId())));
//公积金规则配置表
detailVo.setFundRuleInfo(autoFundRuleInfoMapper.selectOne(Wrappers.<TAutoFundRuleInfo>query().lambda()
.eq(TAutoFundRuleInfo::getMainId,id)));
.eq(TAutoFundRuleInfo::getMainId,id).last(CommonConstants.LAST_ONE_SQL)));
//公积金规则配置明细表
detailVo.setFundRuleRels(autoFundRuleRelMapper.selectList(Wrappers.<TAutoFundRuleRel>query().lambda()
.eq(TAutoFundRuleRel::getDeptId,mainRel.getDeptId())));
......@@ -2596,4 +2600,115 @@ private R<Boolean> checkItemRepeat(List<SysAutoDictItem> autoDictItems, Map<Stri
}
return null;
}
@Override
public R<AutoMainRelDeletePrecheckVo> deletePrecheck(String id) {
if (Common.isEmpty(id)) {
return R.failed(CommonConstants.PARAM_IS_NOT_ERROR);
}
TAutoMainRel mainRel = baseMapper.selectById(id);
if (Common.isEmpty(mainRel)) {
return R.failed("项目配置不存在");
}
String deptNo = mainRel.getDeptNo();
AutoMainRelDeletePrecheckVo vo = new AutoMainRelDeletePrecheckVo();
vo.setDeptNo(deptNo);
TSettleDomain settleDomain = settleDomainMapper.selectOne(Wrappers.<TSettleDomain>query().lambda()
.eq(TSettleDomain::getDepartNo, deptNo)
.eq(TSettleDomain::getDeleteFlag, CommonConstants.ZERO_STRING)
.last(CommonConstants.LAST_ONE_SQL));
if (Common.isNotNull(settleDomain)) {
vo.setDepartName(settleDomain.getDepartName());
}
R<Integer> insuranceCountRes = insuranceDaprUtil.countRenewTodoByDeptNo(deptNo);
if (!R.isSuccess(insuranceCountRes) || insuranceCountRes.getData() == null) {
return R.failed("统计商险续签待办失败:" + (insuranceCountRes != null ? insuranceCountRes.getMsg() : ""));
}
vo.setInsuranceCount(insuranceCountRes.getData());
vo.setContractCount(empContractAlertMapper.countForProjectConfigRemove(
deptNo, AutoMainRelDeleteTodoStatus.CONTRACT_PROCESS_STATUS));
return R.ok(vo);
}
@Override
@Transactional(rollbackFor = Exception.class)
public R<Boolean> removeByIdAsso(String id) {
if (Common.isEmpty(id)) {
return R.failed(CommonConstants.PARAM_IS_NOT_ERROR);
}
TAutoMainRel mainRel = baseMapper.selectById(id);
if (Common.isEmpty(mainRel)) {
return R.failed("项目配置不存在");
}
String deptNo = mainRel.getDeptNo();
log.info("开始删除项目配置,id={}, deptNo={}", id, deptNo);
R<Boolean> insuranceClearRes = insuranceDaprUtil.clearRenewTodoByDeptNo(deptNo);
if (!R.isSuccess(insuranceClearRes)
|| insuranceClearRes.getData() == null
|| !insuranceClearRes.getData()) {
return R.failed("清除商险续签待办失败:" + (insuranceClearRes != null ? insuranceClearRes.getMsg() : ""));
}
// 续签待办按状态清除:先删 pre_new,再将同口径提醒 AUTO_FLAG 置 1(保留提醒、不进续签待办列表)
List<String> contractClearStatus = AutoMainRelDeleteTodoStatus.CONTRACT_PROCESS_STATUS;
int contractPreDeleted = empContractAlertMapper.deleteContractPreNewForProjectConfigRemove(
deptNo, contractClearStatus);
int contractAlertDisabled = empContractAlertMapper.disableAutoFlagForProjectConfigRemove(
deptNo, contractClearStatus);
log.info("清除合同续签待办,deptNo={}, preNew={}, alertAutoFlagDisabled={}",
deptNo, contractPreDeleted, contractAlertDisabled);
cascadeDeleteConfig(mainRel);
return R.ok(true);
}
private void cascadeDeleteConfig(TAutoMainRel mainRel) {
String mainId = mainRel.getId();
String deptNo = mainRel.getDeptNo();
String deptId = mainRel.getDeptId();
TAutoInsurRuleInfo insurRule = autoInsurRuleInfoMapper.selectOne(Wrappers.<TAutoInsurRuleInfo>query().lambda()
.eq(TAutoInsurRuleInfo::getMainId, mainId).last(CommonConstants.LAST_ONE_SQL));
if (Common.isNotNull(insurRule)) {
List<TAutoInsurStandard> standards = autoInsurStandardMapper.selectList(Wrappers.<TAutoInsurStandard>query()
.lambda().eq(TAutoInsurStandard::getMainId, insurRule.getId()));
if (Common.isNotNull(standards)) {
for (TAutoInsurStandard standard : standards) {
autoStandardInfoMapper.delete(Wrappers.<TAutoStandardInfo>query().lambda()
.eq(TAutoStandardInfo::getMainId, standard.getId()));
}
}
autoInsurStandardMapper.delete(Wrappers.<TAutoInsurStandard>query().lambda()
.eq(TAutoInsurStandard::getMainId, insurRule.getId()));
autoInsurRuleInfoMapper.deleteById(insurRule.getId());
}
TAutoContractRuleInfo contractRule = autoContractRuleInfoMapper.selectOne(Wrappers.<TAutoContractRuleInfo>query().lambda()
.eq(TAutoContractRuleInfo::getMainId, mainId).last(CommonConstants.LAST_ONE_SQL));
if (Common.isNotNull(contractRule)) {
contractSchemeMapper.delete(Wrappers.<TAutoContractScheme>query().lambda()
.eq(TAutoContractScheme::getMainId, contractRule.getId()));
autoContractRuleInfoMapper.deleteById(contractRule.getId());
}
if (Common.isNotNull(deptId)) {
autoSocialRuleRelMapper.delete(Wrappers.<TAutoSocialRuleRel>query().lambda()
.eq(TAutoSocialRuleRel::getDeptId, deptId));
autoFundRuleRelMapper.delete(Wrappers.<TAutoFundRuleRel>query().lambda()
.eq(TAutoFundRuleRel::getDeptId, deptId));
}
autoSocialRuleInfoMapper.delete(Wrappers.<TAutoSocialRuleInfo>query().lambda()
.eq(TAutoSocialRuleInfo::getMainId, mainId));
autoFundRuleInfoMapper.delete(Wrappers.<TAutoFundRuleInfo>query().lambda()
.eq(TAutoFundRuleInfo::getMainId, mainId));
autoEmpRuleInfoMapper.delete(Wrappers.<TAutoEmpRuleInfo>query().lambda()
.eq(TAutoEmpRuleInfo::getMainId, mainId));
autoDictItemMapper.delete(Wrappers.<SysAutoDictItem>query().lambda()
.eq(SysAutoDictItem::getDeptNo, deptNo));
baseMapper.deleteById(mainId);
}
}
\ No newline at end of file
......@@ -469,4 +469,40 @@
WHERE b.contract_id = a.CONTRACT_ID
)
</select>
<!-- 项目配置删除:合同续签待办 count/clear(口径见 AutoMainRelDeleteTodoStatus) -->
<select id="countForProjectConfigRemove" resultType="int">
SELECT count(1)
FROM t_emp_contract_alert a
LEFT JOIN t_employee_contract_pre_new b ON a.CONTRACT_ID = b.contract_id
WHERE a.PROJECT_NO = #{deptNo}
AND a.AUTO_FLAG = '0'
AND IFNULL(b.PROCESS_STATUS, '0') IN
<foreach collection="processStatusList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<update id="disableAutoFlagForProjectConfigRemove">
UPDATE t_emp_contract_alert a
LEFT JOIN t_employee_contract_pre_new b ON a.CONTRACT_ID = b.contract_id
SET a.AUTO_FLAG = '1'
WHERE a.PROJECT_NO = #{deptNo}
AND a.AUTO_FLAG = '0'
AND IFNULL(b.PROCESS_STATUS, '0') IN
<foreach collection="processStatusList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
<delete id="deleteContractPreNewForProjectConfigRemove">
DELETE b FROM t_employee_contract_pre_new b
INNER JOIN t_emp_contract_alert a ON a.CONTRACT_ID = b.contract_id
WHERE a.PROJECT_NO = #{deptNo}
AND a.AUTO_FLAG = '0'
AND b.PROCESS_STATUS IN
<foreach collection="processStatusList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
</mapper>
......@@ -314,4 +314,44 @@ public class InsuranceDaprUtil {
return res;
}
/**
* 项目配置删除预检:统计商险续签待办条数
*/
public R<Integer> countRenewTodoByDeptNo(String deptNo) {
BaseSearchVO paramVo = new BaseSearchVO();
paramVo.setDeptNo(deptNo);
R<Integer> res = HttpDaprUtil.invokeMethodPost(
daprInsurancesProperties.getAppUrl(),
daprInsurancesProperties.getAppId(),
"/insuranceWarn/inner/countRenewTodoByDeptNo",
paramVo,
Integer.class,
SecurityConstants.FROM_IN
);
if (Common.isEmpty(res)) {
return R.failed("统计商险续签待办失败!");
}
return res;
}
/**
* 项目配置删除:清除口径内商险续签待办
*/
public R<Boolean> clearRenewTodoByDeptNo(String deptNo) {
BaseSearchVO paramVo = new BaseSearchVO();
paramVo.setDeptNo(deptNo);
R<Boolean> res = HttpDaprUtil.invokeMethodPost(
daprInsurancesProperties.getAppUrl(),
daprInsurancesProperties.getAppId(),
"/insuranceWarn/inner/clearRenewTodoByDeptNo",
paramVo,
Boolean.class,
SecurityConstants.FROM_IN
);
if (Common.isEmpty(res)) {
return R.failed("清除商险续签待办失败!");
}
return res;
}
}
......@@ -220,6 +220,27 @@ public class TInsurancesWarnController {
}
}
@Operation(description = "项目配置删除预检:统计商险续签待办条数")
@Inner
@PostMapping("/inner/countRenewTodoByDeptNo")
public Integer countRenewTodoByDeptNo(@RequestBody(required = false) BaseSearchVO paramVo) {
String deptNo = Common.isNotNull(paramVo) ? paramVo.getDeptNo() : null;
return insuranceWarnService.countRenewTodoByDeptNo(deptNo);
}
@Operation(description = "项目配置删除:清除口径内商险续签待办")
@Inner
@PostMapping("/inner/clearRenewTodoByDeptNo")
public Boolean clearRenewTodoByDeptNo(@RequestBody(required = false) BaseSearchVO paramVo) {
try {
String deptNo = Common.isNotNull(paramVo) ? paramVo.getDeptNo() : null;
insuranceWarnService.clearRenewTodoByDeptNo(deptNo);
return true;
} catch (Exception e) {
return false;
}
}
/**
* @Author fxj
* @Description 每日09:00推送一条整合的待办数据——只推送前端客服,详情去HRO处理——消息待定:项目名称-项目编码、商险临期人数:**;商险过期人数:**;
......
......@@ -63,4 +63,12 @@ public interface TInsuranceWarnMapper extends BaseMapper<TInsuranceAlert> {
List<TInsuranceAlert> selectInsuranceAlertListBySure(@Param("idList") List<String> idList);
TInsuranceAlert selectInsuranceAlertOne(@Param("id") String id);
int countRenewTodoByDeptNo(@Param("deptNo") String deptNo,
@Param("processStatusList") List<String> processStatusList);
int clearRenewDetailLinkByDeptNo(@Param("deptNo") String deptNo);
int deleteRenewDetailByDeptNo(@Param("deptNo") String deptNo,
@Param("processStatusList") List<String> processStatusList);
}
......@@ -31,4 +31,8 @@ public interface TInsuranceWarnService extends IService<TInsuranceAlert> {
void pushInsuranceAlertToWx();
int countRenewTodoByDeptNo(String deptNo);
void clearRenewTodoByDeptNo(String deptNo);
}
......@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.admin.api.entity.SysUser;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysUserListVo;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysUsersVo;
import com.yifu.cloud.plus.v1.yifu.archives.constant.AutoMainRelDeleteTodoStatus;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TSettleDomain;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TSettleDomainListVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TSettleDomainRegistListVo;
......@@ -39,6 +40,7 @@ import com.yifu.cloud.plus.v1.yifu.insurances.util.LocalDateUtil;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import javax.servlet.ServletOutputStream;
......@@ -808,4 +810,23 @@ public class TInsuranceWarnServiceImpl extends ServiceImpl<TInsuranceWarnMapper,
}
}
}
@Override
public int countRenewTodoByDeptNo(String deptNo) {
if (Common.isEmpty(deptNo)) {
return 0;
}
return baseMapper.countRenewTodoByDeptNo(deptNo, AutoMainRelDeleteTodoStatus.INSURANCE_PROCESS_STATUS);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void clearRenewTodoByDeptNo(String deptNo) {
if (Common.isEmpty(deptNo)) {
return;
}
// 先删续签待办,再清空提醒表上的待办关联(保留 t_insurance_alert)
baseMapper.deleteRenewDetailByDeptNo(deptNo, AutoMainRelDeleteTodoStatus.INSURANCE_PROCESS_STATUS);
baseMapper.clearRenewDetailLinkByDeptNo(deptNo);
}
}
\ No newline at end of file
......@@ -773,4 +773,49 @@
AND b.id = #{id}
limit 1
</select>
<!-- 项目配置删除:商险续签待办 count/clear(process_status 口径由调用方传入,默认 0/1) -->
<sql id="renewTodoByDeptNoWhere">
a.DEPT_NO = #{deptNo}
AND a.EXPIRE_IGNORE_FLAG = '1'
AND a.DELETE_FLAG = 0
AND b.is_leave = '0'
AND a.IS_OVERDUE = 0
AND (a.REPLACE_TAG IS NULL OR a.REPLACE_TAG != '可替换')
AND b.PROCESS_STATUS IN
<foreach collection="processStatusList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</sql>
<select id="countRenewTodoByDeptNo" resultType="int">
SELECT count(1)
FROM t_insurance_alert a
JOIN t_insurance_pre_renew_detail b ON a.INSURANCES_PRE_RENEW_DETAIL_ID = b.ID
WHERE
<include refid="renewTodoByDeptNoWhere"/>
</select>
<!-- 删除待办后,解除提醒表上已失效的待办关联(不删提醒行) -->
<update id="clearRenewDetailLinkByDeptNo">
UPDATE t_insurance_alert a
SET a.INSURANCES_PRE_RENEW_DETAIL_ID = NULL
WHERE a.DEPT_NO = #{deptNo}
AND a.EXPIRE_IGNORE_FLAG = '1'
AND a.DELETE_FLAG = 0
AND a.IS_OVERDUE = 0
AND (a.REPLACE_TAG IS NULL OR a.REPLACE_TAG != '可替换')
AND a.INSURANCES_PRE_RENEW_DETAIL_ID IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM t_insurance_pre_renew_detail b
WHERE b.ID = a.INSURANCES_PRE_RENEW_DETAIL_ID
)
</update>
<delete id="deleteRenewDetailByDeptNo">
DELETE b FROM t_insurance_pre_renew_detail b
INNER JOIN t_insurance_alert a ON a.INSURANCES_PRE_RENEW_DETAIL_ID = b.ID
WHERE
<include refid="renewTodoByDeptNoWhere"/>
</delete>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment