bug修改

This commit is contained in:
方亮 2025-09-06 13:44:55 +08:00
parent 380fabe2bb
commit 1532f10d97
15 changed files with 500 additions and 2 deletions

View File

@ -3,10 +3,13 @@ package com.bonus.bmw.controller;
import com.bonus.bmw.domain.dto.FileBasicMsgDto;
import com.bonus.bmw.domain.dto.WebFileDto;
import com.bonus.bmw.domain.po.BmSubContract;
import com.bonus.bmw.domain.po.PmSubCompany;
import com.bonus.bmw.domain.vo.BmSubContractVo;
import com.bonus.bmw.domain.vo.PmWorker;
import com.bonus.bmw.domain.vo.TreeVo;
import com.bonus.bmw.service.AppService;
import com.bonus.bmw.service.BmSubContractService;
import com.bonus.common.core.utils.encryption.Sm4Utils;
import com.bonus.common.core.utils.json.FastJsonHelper;
import com.bonus.common.core.utils.poi.ExcelUtil;
import com.bonus.common.core.web.controller.BaseController;
@ -82,6 +85,42 @@ public class AppController extends BaseController {
return error("系统异常,请联系管理员");
}
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false))
@PostMapping("/uploadFile")
@SysLog(title = "单文件上传", businessType = OperaType.QUERY, logType = 0, module = "APP->单文件上传", details = "单文件上传")
public AjaxResult uploadFile(@RequestParam(value = "file") MultipartFile file,@RequestParam(value = "type") String type) {
try {
return service.uploadFile(file, type);
} catch (Exception e) {
logger.error(e.toString(), e);
}
return error("系统异常,请联系管理员");
}
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth)
@PostMapping("/appWorkerInsert")
@SysLog(title = "新增app人员入场", businessType = OperaType.UPDATE, logType = 0, module = "施工人员->出入场管理->app人员入场", details = "新增人员入场")
public AjaxResult appWorkerInsert(@Validated @RequestBody PmWorker pmWorker) {
try {
return service.appWorkerInsert(pmWorker);
} catch (Exception e) {
logger.error(e.toString(), e);
}
return error("系统异常,请联系管理员");
}
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("worker:ein:edit"))
@PostMapping("/appWorkerEdit")
@SysLog(title = "人员入场管理", businessType = OperaType.UPDATE, logType = 0, module = "施工人员->出入场管理->人员入场管理", details = "修改人员入场")
public AjaxResult appWorkerEdit(@Validated @RequestBody PmWorker pmWorker) {
try {
return service.appWorkerEdit(pmWorker);
} catch (Exception e) {
logger.error(e.toString(), e);
}
return error("系统异常,请联系管理员");
}
}

View File

@ -33,6 +33,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@ -81,6 +82,7 @@ public class PmWorkerController extends BaseController {
List<WebFileDto> listFile = FastJsonHelper.jsonArrStrToBeanList(fileMsg, WebFileDto.class);
// 验证对应关系
if (listFile.size() != files.length) {
logger.error("文件信息:{}文件数量:{}", listFile.size(), files.length);
throw new IllegalArgumentException("文件信息与文件数量不匹配");
}
//先将数据对应关系处理还
@ -124,6 +126,7 @@ public class PmWorkerController extends BaseController {
listFile = FastJsonHelper.jsonArrStrToBeanList(fileMsg, WebFileDto.class);
// 验证对应关系
if (listFile.size() != files.length) {
logger.error("文件信息:{}文件数量:{}", listFile.size(), files.length);
throw new IllegalArgumentException("文件信息与文件数量不匹配");
}
//先将数据对应关系处理

View File

@ -22,4 +22,6 @@ public class WebFileDto {
private MultipartFile file;
private String base64File;
}

View File

@ -148,4 +148,6 @@ public class BmWorkerContract {
private Integer subComId;
private Integer orgId;
private String photoIds;
}

View File

@ -91,4 +91,6 @@ public class BmWorkerWageCard {
*/
private String delIds;
private String photoIds;
}

View File

@ -192,4 +192,6 @@ public class PmWorker {
*/
private List<UploadFileVo> files;
private String photoIds;
}

View File

@ -2,6 +2,7 @@ package com.bonus.bmw.mapper;
import com.bonus.bmw.domain.vo.TreeVo;
import com.bonus.system.api.domain.SysUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -14,4 +15,6 @@ public interface AppMapper {
List<TreeVo> getComList(TreeVo vo);
List<TreeVo> getSubComList(TreeVo company);
int updateFileMsg(@Param("id") String facePhotoId,@Param("sourceTable") String sourceTable,@Param("sourceId") Integer id);
}

View File

@ -19,6 +19,8 @@ public interface AppRecognitionService {
String uploadFaceRecognition(MultipartFile facePhoto, FaceRecognitionBean bean);
String uploadFaceRecognition(String facePhoto, FaceRecognitionBean bean);
AjaxResult getFaceRecognition(MultipartFile facePhoto);
AjaxResult bankCardRecognition(BankCardBean bean);

View File

@ -1,8 +1,10 @@
package com.bonus.bmw.service;
import com.bonus.bmw.domain.vo.PmWorker;
import com.bonus.bmw.domain.vo.TreeVo;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.system.api.domain.SysUser;
import org.springframework.web.multipart.MultipartFile;
public interface AppService {
@ -23,4 +25,25 @@ public interface AppService {
AjaxResult getComWorkerTree(TreeVo vo);
/**
* 文件上传
* @param file
* @return
*/
AjaxResult uploadFile(MultipartFile file, String type);
/**
* 新增人员入场
* @param pmWorker
* @return
*/
AjaxResult appWorkerInsert(PmWorker pmWorker) throws Exception;
/**
* 修改人员入场
* @param pmWorker
* @return
*/
AjaxResult appWorkerEdit(PmWorker pmWorker) throws Exception;
}

View File

@ -106,6 +106,51 @@ public class AppRecognitionServiceImpl implements AppRecognitionService {
return "公司内部人脸识别服务处理异常";
}
/**
* 人脸识别-人脸照片采集入库
* @param facePhoto url
* @param bean
* @return
*/
@Override
public String uploadFaceRecognition(String facePhoto, FaceRecognitionBean bean) {
try {
// 最多尝试两次避免无限循环 ,删除无需重复
int maxRetries = 1;
if(!"delete".equals(bean.getOptMode())){
bean.setImg(facePhoto);
maxRetries = 2;
}else{
bean.setImg("data:image/jpeg;base64,fddsdafretrthwuwtrewyewtrweet");
}
log.error("进人脸服务器的人脸图片:{}", facePhoto);
for (int i = 0; i < maxRetries; i++) {
String body = HttpUtil.post(IpAndPathConfig.getFaceRecognitionUrl() + "/updatedb",
FastJsonHelper.beanToJsonStr(bean));
log.error(body);
JSONObject jsonObject = FastJsonHelper.jsonStrToJsonObj(body);
String code = jsonObject.getString("code");
if(StringUtils.isEmpty(code)){
log.error("公司人脸识别大傻逼,code不放一起");
code = jsonObject.getJSONObject("detail").getString("code");
}
if ("30019".equals(code) && i == 0) {
// 第一次遇到30019错误时设置replace模式再试一次
bean.setOptMode("replace");
} else {
// 其他情况直接返回结果
return "30002".equals(code) ? FaceStatusCodeReturn.faceStatusCodeReturn(30002)
: FaceStatusCodeReturn.faceStatusCodeReturn(Integer.parseInt(code));
}
}
} catch (Exception e) {
log.error("上传文件失败", e);
return "公司内部人脸识别服务处理异常";
}
return "公司内部人脸识别服务处理异常";
}
@Override
public AjaxResult getFaceRecognition(MultipartFile facePhoto) {
try {

View File

@ -1,17 +1,38 @@
package com.bonus.bmw.service.impl;
import cn.hutool.core.date.DateUtil;
import com.bonus.bmw.domain.dto.WebFileDto;
import com.bonus.bmw.domain.po.FaceRecognitionBean;
import com.bonus.bmw.domain.vo.BmWorkerContract;
import com.bonus.bmw.domain.vo.BmWorkerWageCard;
import com.bonus.bmw.domain.vo.PmWorker;
import com.bonus.bmw.domain.vo.TreeVo;
import com.bonus.bmw.mapper.AppMapper;
import com.bonus.bmw.mapper.BmWorkerContractMapper;
import com.bonus.bmw.mapper.BmWorkerWageCardMapper;
import com.bonus.bmw.mapper.PmWorkerMapper;
import com.bonus.bmw.service.AppRecognitionService;
import com.bonus.bmw.service.AppService;
import com.bonus.bmw.service.BmWorkerWageCardService;
import com.bonus.bmw.service.UrkSendService;
import com.bonus.common.core.constant.Constants;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.api.model.LoginUser;
import com.bonus.system.api.model.UploadFileVo;
import com.github.pagehelper.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 马三炮
@ -24,6 +45,26 @@ public class AppServiceImpl implements AppService {
@Resource
private AppMapper mapper;
@Autowired
private FileUploadUtils fileUploadUtils;
@Autowired
private PmWorkerMapper pmWorkerMapper;
/**
* 引入urk服务 调用考勤机服务
*/
@Autowired
private UrkSendService urkSendService;
@Resource
private AppRecognitionService appRecognitionService;
@Resource
private BmWorkerWageCardMapper wageCardMapper;
@Autowired
private BmWorkerContractMapper contractMapper;
@Override
public AjaxResult validatePassword(SysUser sysUser) {
@ -45,7 +86,7 @@ public class AppServiceImpl implements AppService {
int i = mapper.updatePassword(sysUser);
if (i > 0) {
return AjaxResult.success();
}else{
} else {
return AjaxResult.error("修改失败");
}
}
@ -63,4 +104,228 @@ public class AppServiceImpl implements AppService {
});
return null;
}
@Override
public AjaxResult uploadFile(MultipartFile file, String type) {
UploadFileVo noTable = fileUploadUtils.uploadFile(file, "no_table", "-1", type, "", "");
return AjaxResult.success("上传成功", noTable.getId());
}
@Override
public AjaxResult appWorkerInsert(PmWorker record) throws Exception {
StringBuilder sb = new StringBuilder();
//是否失信人员名单
PmWorker worker2 = pmWorkerMapper.getBlackWorkerByNumber(record.getIdNumber());
if (worker2 != null && worker2.getName() != null) {
return new AjaxResult(500, worker2.getName() + "施工人员在失信人员名单,无法入场");
}
//如果是以前被删除的人员自动恢复以前的数据
PmWorker delWorker = pmWorkerMapper.getWorkerByNumber(record.getIdNumber(), 0);
if (delWorker != null && delWorker.getId() != null) {
// 添加员工时判断员工编号是否已存在
PmWorker worker3 = pmWorkerMapper.getWorkerByPhone(record.getPhone(), record.getIdNumber());
if (worker3 != null && worker3.getName() != null) {
return new AjaxResult(500, "注册的手机号已存在,手机号拥有者姓名为" + worker3.getName() + ",请去确认手机号是否有误");
}
pmWorkerMapper.updateIsActiveById(delWorker.getId(), 1);
record.setId(delWorker.getId());
record.setEinStatus(0);
//将数据还原并去修改
appWorkerEdit(record);
} else {
// 添加员工时判断员工编号是否已存在
PmWorker worker = pmWorkerMapper.getWorkerByNumber(record.getIdNumber(), 1);
if (worker != null && worker.getId() != null) {
return new AjaxResult(500, "施工人员身份证已存在,当前系统姓名为" + worker.getName() + "如果想入场请去修改数据即可");
}
// 添加员工时手机号是否重复
PmWorker worker3 = pmWorkerMapper.getWorkerByPhone(record.getPhone(), record.getIdNumber());
if (worker3 != null && worker3.getName() != null) {
return new AjaxResult(500, "注册的手机号已存在,手机号拥有者姓名为" + worker3.getName() + ",请去确认手机号是否有误");
}
record.setCreateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
int insert = pmWorkerMapper.insert(record);
if (insert > 0) {
//单独上传的修改数据
if (!StringUtils.isEmpty(record.getPhotoIds())) {
int i = mapper.updateFileMsg(record.getPhotoIds(), Constants.FILE_UPLOAD_WORKER, record.getId());
log.error("app更新人员人脸图片信息成功条数{}", i);
//下发人脸到考勤机
urkSendService.sendUserToDevice(record.getId(), record.getProId(), "0");
// //下发人脸到人脸库
// FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
// faceRecognitionBean.setUniqueKey(record.getIdNumber());
// faceRecognitionBean.setOptMode("add");
// List<UploadFileVo> fileList = fileUploadUtils.getFileList(record.getPhotoIds(), "", Constants.FILE_UPLOAD_WORKER, "");
// if (!fileList.isEmpty()) {
// sb.append(appRecognitionService.uploadFaceRecognition(fileList.get(0).getLsUrl(), faceRecognitionBean));
// }
}
//入场相关数据添加
addWorkerEinData(record);
}
}
return AjaxResult.success(sb.append(",基础数据添加成功").toString(), record.getId());
}
@Override
public AjaxResult appWorkerEdit(PmWorker record) throws Exception {
StringBuilder sb = new StringBuilder();
//是否失信人员名单
PmWorker worker2 = pmWorkerMapper.getBlackWorkerByNumber(record.getIdNumber());
if(worker2 != null && worker2.getName() != null){
return new AjaxResult(500, worker2.getName()+"施工人员在失信人员名单,无法入场");
}
// 添加员工时判断员工编号是否已存在
PmWorker worker3 = pmWorkerMapper.getWorkerByPhone(record.getPhone(),record.getIdNumber());
if(worker3 != null && worker3.getName() != null){
return new AjaxResult(500, "注册的手机号已存在,手机号拥有者姓名为"+worker3.getName()+",请去确认手机号是否有误");
}
//更新基础数据
record.setUpdateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
int update = pmWorkerMapper.updateByPrimaryKey(record);
//单独上传的修改数据
//人脸照片是否修改
if(!StringUtils.isEmpty(record.getPhotoIds())){
//删除旧人脸
String s = fileUploadUtils.delFileListById("", record.getId().toString(), Constants.FILE_UPLOAD_WORKER, "");
//更新新人脸信息
int i = mapper.updateFileMsg(record.getPhotoIds(), Constants.FILE_UPLOAD_WORKER, record.getId());
log.error("app更新人员人脸图片信息成功条数{}", i);
//下发人脸到考勤机
if(record.getEinStatus() == 1){
//没换工程换人脸
urkSendService.sendUserToDevice(record.getId(),record.getProId(),"1");
}else{
//换工程换人脸
urkSendService.sendUserToDevice(record.getId(),record.getProId(),"0");
}
//下发人脸到人脸库
// FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
// faceRecognitionBean.setUniqueKey(record.getIdNumber());
// faceRecognitionBean.setOptMode("add");
// List<UploadFileVo> fileList = fileUploadUtils.getFileList(record.getPhotoIds(), "", Constants.FILE_UPLOAD_WORKER, "");
// if (!fileList.isEmpty()) {
// sb.append(appRecognitionService.uploadFaceRecognition(fileList.get(0).getLsUrl(), faceRecognitionBean));
// }
}
if(record.getEinStatus() == 1){
//已经入过场了
addWorkerWageCardDataAndContract(record);
}else {
//重新入场 再入场清除最新标识
pmWorkerMapper.updateEinRecordLast(record.getId());
//换工程没换人脸
urkSendService.sendUserToDevice(record.getId(),record.getProId(),"0");
addWorkerEinData(record);
}
return AjaxResult.success(sb.append(",基础数据更新成功").toString());
}
/**
* 基础数据添加完毕在进行入场数据添加
*
* @param record
*/
private void addWorkerEinData(PmWorker record) {
//工资卡和合同数据
addWorkerWageCardDataAndContract(record);
record.setEinTime(DateUtil.now());
record.setEinStatus(1);
//1.bm_worker_ein_msg
int i = pmWorkerMapper.insertEinMsg(record);
//2.bm_worker_ein_pro 忽略新增
int j = pmWorkerMapper.insertEinPro(record);
//3.bm_worker_ein_pro_record
int k = pmWorkerMapper.insertEinProRecord(record);
}
private void addWorkerWageCardDataAndContract(PmWorker record) {
BmWorkerWageCard bmWorkerWageCard = record.getBmWorkerWageCard();
BmWorkerContract bmWorkerContract = record.getBmWorkerContract();
if (bmWorkerWageCard != null && StringUtil.isNotEmpty(bmWorkerWageCard.getBankCardCode())) {
bmWorkerWageCard.setCreateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
bmWorkerWageCard.setWorkerId(record.getId());
updateWageCard(bmWorkerWageCard);
}
if (bmWorkerContract != null && StringUtil.isNotEmpty(bmWorkerContract.getContractCode())) {
bmWorkerContract.setCreateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
bmWorkerContract.setWorkerId(record.getId());
updateWorkerContract(bmWorkerContract);
record.setContractId(bmWorkerContract.getId());
}
}
private void updateWorkerContract(BmWorkerContract record) {
//如果有旧的有效合同执行删除
if (record.getId() != null) {
contractMapper.deleteByPrimaryKey(record.getId());
}
record.setCreateUser(SecurityUtils.getUsername());
//判断是日合同还是月合同
if ("".equals(record.getWageApprovedWay())) {
BigDecimal wageCriterion = BigDecimal.valueOf(record.getWageCriterion());
BigDecimal dayRate = wageCriterion.divide(BigDecimal.valueOf(30), 2, RoundingMode.HALF_UP);
record.setDayRate(dayRate.doubleValue());
} else {
// 保持原值也建议保留两位小数以统一精度
BigDecimal wageCriterion = BigDecimal.valueOf(record.getWageCriterion());
BigDecimal dayRate = wageCriterion.setScale(2, RoundingMode.HALF_UP);
record.setDayRate(dayRate.doubleValue());
}
Integer oldContractId = null;
if (record.getId() != null) {
oldContractId = record.getId();
}
int insert = contractMapper.insert(record);
//属于废弃上一个合同重新签一个需要修改掉之前考情绑定
contractMapper.updateEinDayRecordContractId(oldContractId, record.getWorkerId(), record.getId());
if (insert > 0) {
if (!StringUtils.isEmpty(record.getPhotoIds())) {
String[] split = record.getPhotoIds().split(",");
for (int x = 0; x < split.length; x++) {
int i = mapper.updateFileMsg(split[x], Constants.FILE_UPLOAD_CONTRACT, record.getId());
log.error("app更新合同图片:第{}条,{}", x, i > 0 ? "更新成功" : "更新失败");
}
}
}
//将合同id保存到入场表和入场实时表
contractMapper.updateEinRecordContractId(record.getId(), record.getWorkerId());
}
private void updateWageCard(BmWorkerWageCard record) {
//存在则删除后新增不存在则新增
if (record.getId() != null) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (record.getDelIds() != null) {
//修改时删除部分图片
String[] split = record.getDelIds().split(",");
fileUploadUtils.delFileList(split, null, null, null);
}
if (!StringUtils.isEmpty(record.getPhotoIds())) {
String[] split = record.getPhotoIds().split(",");
for (int x = 0; x < split.length; x++) {
int i = mapper.updateFileMsg(split[x], Constants.FILE_UPLOAD_WAGE_CARD, record.getId());
log.error("app更新发工资卡图片:第{}条,{}", x, i > 0 ? "更新成功" : "更新失败");
}
}
wageCardMapper.updateByPrimaryKeySelective(record);
} else {
//新增
record.setCreateUser(SecurityUtils.getLoginUser().getUsername());
int insert = wageCardMapper.insert(record);
//添加到文件库和minio上
if (insert > 0) {
if (!StringUtils.isEmpty(record.getPhotoIds())) {
String[] split = record.getPhotoIds().split(",");
for (int x = 0; x < split.length; x++) {
int i = mapper.updateFileMsg(split[x], Constants.FILE_UPLOAD_WAGE_CARD, record.getId());
log.error("app更新发工资卡图片:第{}条,{}", x, i > 0 ? "更新成功" : "更新失败");
}
}
}
}
}
}

View File

@ -98,7 +98,7 @@ public class PmWorkerExitServiceImpl implements PmWorkerExitService {
FaceRecognitionBean faceRecognitionBean = new FaceRecognitionBean();
faceRecognitionBean.setUniqueKey(idNumber);
faceRecognitionBean.setOptMode("delete");
appRecognitionService.uploadFaceRecognition(null, faceRecognitionBean);
appRecognitionService.uploadFaceRecognition("", faceRecognitionBean);
}
@Override

View File

@ -0,0 +1,105 @@
package com.bonus.bmw.utils;
import cn.hutool.core.codec.Base64;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
public class BASE64DecodedMultipartFile implements MultipartFile {
private final byte[] imgContent;
private final String header;
public BASE64DecodedMultipartFile(byte[] imgContent, String header) {
this.imgContent = imgContent;
this.header = header.split(";")[0];
}
@NotNull
@Override
public String getName() {
return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
}
@Override
public String getOriginalFilename() {
return System.currentTimeMillis() + (int) Math.random() * 10000 + "." + header.split("/")[1];
}
@Override
public String getContentType() {
return header.split(":")[1];
}
@Override
public boolean isEmpty() {
return imgContent == null || imgContent.length == 0;
}
@Override
public long getSize() {
return imgContent.length;
}
@Override
public byte[] getBytes() throws IOException {
return imgContent;
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(imgContent);
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
new FileOutputStream(dest).write(imgContent);
}
public static MultipartFile base64ToMultipart(String base64) {
try {
String[] baseStrs = base64.split(",");
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = new byte[0];
b = decoder.decodeBuffer(baseStrs[1]);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new BASE64DecodedMultipartFile(b, baseStrs[0]);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static String getBase64(String path) {
File file = new File(path);
String base64 = null;
try {
BufferedImage image = ImageIO.read(file);
Integer width = image.getWidth();
Integer height = image.getHeight();
System.out.println("宽:" + width + " 高:" + height);
//输出流
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(image, "png", stream);
base64 = Base64.encode(stream.toByteArray());
System.out.println(base64);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return base64;
}
}

View File

@ -20,4 +20,8 @@
select id,sub_company_name as name from pm_sub_company where is_active = 1 and is_enable = 1 and com_id = #{id}
</select>
<update id="updateFileMsg">
update bm_files set source_table = #{sourceTable},source_id = #{sourceId} where id = #{id}
</update>
</mapper>

View File

@ -258,6 +258,7 @@
<if test="idNumber != null and idNumber != ''">
AND pw.id_number != #{idNumber}
</if>
limit 1
</select>
<update id="updateIsActiveById">