From 1532f10d97522c62cdd6488fe3d3b112cf98e979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E4=BA=AE?= Date: Sat, 6 Sep 2025 13:44:55 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/bmw/controller/AppController.java | 39 +++ .../bmw/controller/PmWorkerController.java | 3 + .../com/bonus/bmw/domain/dto/WebFileDto.java | 2 + .../bonus/bmw/domain/vo/BmWorkerContract.java | 2 + .../bonus/bmw/domain/vo/BmWorkerWageCard.java | 2 + .../com/bonus/bmw/domain/vo/PmWorker.java | 2 + .../java/com/bonus/bmw/mapper/AppMapper.java | 3 + .../bmw/service/AppRecognitionService.java | 2 + .../com/bonus/bmw/service/AppService.java | 23 ++ .../impl/AppRecognitionServiceImpl.java | 45 +++ .../bmw/service/impl/AppServiceImpl.java | 267 +++++++++++++++++- .../service/impl/PmWorkerExitServiceImpl.java | 2 +- .../bmw/utils/BASE64DecodedMultipartFile.java | 105 +++++++ .../main/resources/mapper/bmw/AppMapper.xml | 4 + .../resources/mapper/bmw/PmWorkerMapper.xml | 1 + 15 files changed, 500 insertions(+), 2 deletions(-) create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/utils/BASE64DecodedMultipartFile.java diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/AppController.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/AppController.java index 9e61455..49d10e4 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/AppController.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/AppController.java @@ -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("系统异常,请联系管理员"); + } } diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmWorkerController.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmWorkerController.java index aedd664..7761473 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmWorkerController.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/PmWorkerController.java @@ -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 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("文件信息与文件数量不匹配"); } //先将数据对应关系处理 diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WebFileDto.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WebFileDto.java index f0281f5..14141ea 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WebFileDto.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WebFileDto.java @@ -22,4 +22,6 @@ public class WebFileDto { private MultipartFile file; + private String base64File; + } diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerContract.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerContract.java index 92334df..d444cf2 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerContract.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerContract.java @@ -148,4 +148,6 @@ public class BmWorkerContract { private Integer subComId; private Integer orgId; + private String photoIds; + } \ No newline at end of file diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerWageCard.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerWageCard.java index cd2856e..81bdb33 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerWageCard.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/BmWorkerWageCard.java @@ -91,4 +91,6 @@ public class BmWorkerWageCard { */ private String delIds; + private String photoIds; + } \ No newline at end of file diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/PmWorker.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/PmWorker.java index 5ba65de..7501d95 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/PmWorker.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/vo/PmWorker.java @@ -192,4 +192,6 @@ public class PmWorker { */ private List files; + private String photoIds; + } \ No newline at end of file diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/AppMapper.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/AppMapper.java index 3530dfb..729693b 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/AppMapper.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/AppMapper.java @@ -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 getComList(TreeVo vo); List getSubComList(TreeVo company); + + int updateFileMsg(@Param("id") String facePhotoId,@Param("sourceTable") String sourceTable,@Param("sourceId") Integer id); } diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppRecognitionService.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppRecognitionService.java index bc1167b..ef818fd 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppRecognitionService.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppRecognitionService.java @@ -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); diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppService.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppService.java index 9f693ae..93236e3 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppService.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/AppService.java @@ -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; } diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppRecognitionServiceImpl.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppRecognitionServiceImpl.java index d5b52ea..712955a 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppRecognitionServiceImpl.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppRecognitionServiceImpl.java @@ -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 { diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppServiceImpl.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppServiceImpl.java index 9d26e43..a071665 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppServiceImpl.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/AppServiceImpl.java @@ -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 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 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 ? "更新成功" : "更新失败"); + } + } + } + } + } + } diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/PmWorkerExitServiceImpl.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/PmWorkerExitServiceImpl.java index d609df1..8fd3d6a 100644 --- a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/PmWorkerExitServiceImpl.java +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/PmWorkerExitServiceImpl.java @@ -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 diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/utils/BASE64DecodedMultipartFile.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/utils/BASE64DecodedMultipartFile.java new file mode 100644 index 0000000..dc0c082 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/utils/BASE64DecodedMultipartFile.java @@ -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; + } +} \ No newline at end of file diff --git a/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/AppMapper.xml b/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/AppMapper.xml index efd90d7..a4f3988 100644 --- a/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/AppMapper.xml +++ b/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/AppMapper.xml @@ -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} + + + update bm_files set source_table = #{sourceTable},source_id = #{sourceId} where id = #{id} + diff --git a/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/PmWorkerMapper.xml b/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/PmWorkerMapper.xml index 99551b6..5ff7927 100644 --- a/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/PmWorkerMapper.xml +++ b/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/PmWorkerMapper.xml @@ -258,6 +258,7 @@ AND pw.id_number != #{idNumber} + limit 1