Merge remote-tracking branch 'origin/main'

This commit is contained in:
haozq 2025-11-25 16:02:35 +08:00
commit ac55f5d5f3
8 changed files with 386 additions and 8 deletions

View File

@ -3,6 +3,7 @@ package com.bonus.bmw.controller;
import com.bonus.bmw.domain.dto.PmWorkerDto;
import com.bonus.bmw.domain.dto.WebFileDto;
import com.bonus.bmw.domain.vo.PmWorker;
import com.bonus.bmw.domain.vo.PmWorkerImport;
import com.bonus.bmw.service.PmWorkerService;
import com.bonus.common.core.utils.encryption.Sm4Utils;
import com.bonus.common.core.utils.face.ArcFaceHelper;
@ -321,6 +322,28 @@ public class PmWorkerController extends BaseController {
logger.error(e.toString(), e);
return error(e.getMessage());
}
}
/**
* 导入数据
*/
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("worker:ein:admin"))
@PostMapping("/workerManyEinImport")
@SysLog(title = "人员多信息导入", businessType = OperaType.IMPORT, logType = 0, module = "施工人员->红绿灯管理->入场管理", details = "人员多信息导入")
public AjaxResult workerManyEinImport(@RequestParam(value = "file") MultipartFile file){
try {
ExcelUtil<PmWorkerImport> util = new ExcelUtil<>(PmWorkerImport.class);
List<PmWorkerImport> workerList = util.importExcel(file.getInputStream(),3);
boolean allNull = workerList.stream().allMatch(Objects::isNull);
if (allNull) {
return error("导入文件为空或字段不匹配");
}
String message = service.workerManyEinImport(workerList);
return success(message);
} catch (Exception e) {
logger.error(e.toString(), e);
return error(e.getMessage());
}
}

View File

@ -16,6 +16,9 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import static com.bonus.bmw.utils.OwnPermissionUtil.dealWithPermission;
/**
* 下拉选公用类
@ -37,6 +40,11 @@ public class SelectController extends BaseController {
@SysLog(title = "工程查询", businessType = OperaType.UPDATE, logType = 0, module = "下拉选公用类->工程")
public AjaxResult selectPro(@Validated @RequestBody MapBeanPo po) {
try {
Map<String,String> map = dealWithPermission();
if(!map.isEmpty()){
// 3. map 中的值复制到 o 对象中
org.apache.commons.beanutils.BeanUtils.populate(po, map);
}
List<MapBeanVo> list = service.selectPro(po);
return new AjaxResult(200,"查询成功",list);
} catch (Exception e) {

View File

@ -0,0 +1,228 @@
package com.bonus.bmw.domain.vo;
import com.bonus.common.core.annotation.Excel;
import com.bonus.system.api.model.UploadFileVo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 人员基础信息表
*/
@Data
public class PmWorkerImport {
//用于excel导出的序号一列,不需要业务逻辑处理
@Excel(name = "序号", isSequence = true, type = Excel.Type.EXPORT,sort = 1)
int sequence;
/**
* 编号
*/
private Integer id;
/**
* 姓名
*/
@Excel(name = "*姓名", sort = 2)
private String name;
/**
* 身份证
*/
@Excel(name = "*身份证号", sort = 3)
private String idNumber;
/**
* 性别
*/
private String sex;
/**
* 年龄
*/
private Integer age;
/**
* 手机号
*/
@Excel(name = "手机号码", type = Excel.Type.IMPORT)
private String phone;
/**
* 出生日期 生日
*/
private String birthday;
/**
* 民族
*/
@Excel(name = "*民族", type = Excel.Type.IMPORT)
private String nation;
/**
* 签发机关
*/
@Excel(name = "*签发机关", type = Excel.Type.IMPORT)
private String issuingAuthority;
/**
* 有效期开始时间
*/
@Excel(name = "*生效日期", type = Excel.Type.IMPORT)
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime;
/**
* 有效期结束时间
*/
@Excel(name = "*失效日期", type = Excel.Type.IMPORT)
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime;
/**
* 家庭住址
*/
@Excel(name = "*身份证住址", type = Excel.Type.IMPORT)
private String address;
/**
* 人脸照片
*/
private String facePhoto;
/**
* 入场状态 0未入场 1 已入场
*/
@Excel(name = "入场状态", type = Excel.Type.EXPORT, sort = 8,readConverterExp = "1=入场,0=出场,2=出场")
private Integer einStatus;
/**
* 0 默认 1 黄灯 2 绿灯 3 失信人员
*/
private Integer lightStatus;
/**
* 创建人
*/
private String createUser;
/**
* 修改人
*/
private String updateUser;
/**
* 项目名称
*/
@Excel(name = "工程名称", sort = 5)
private String proName;
/**
* 分包名称
*/
@Excel(name = "分包名称", sort = 6)
private String subName;
/**
* 班组名称
*/
@Excel(name = "班组名称", sort = 7)
private String teamName;
/**
* 岗位名称
*/
@Excel(name = "工种", sort = 4)
private String postName;
/**
* 项目名称
*/
private Integer proId;
/**
* 分包名称
*/
private Integer subId;
/**
* 班组名称
*/
private Integer teamId;
/**
* 岗位名称
*/
private Integer postId;
/**
* 入场时间
*/
private String einTime;
/**
* 创建时间
*/
private Integer contractId;
/**
* 合同信息
*/
private BmWorkerContract bmWorkerContract;
/**
* 工资卡信息
*/
private BmWorkerWageCard bmWorkerWageCard;
private String workerId;
private String exitTime;
/**
* 是否上传离职文件 0未上传 1已上传
*/
private String isUploadFile;
/**
* 离职时间间隔
*/
private String daysSinceExit;
/**
* 人脸照片
*/
private List<UploadFileVo> files;
private String photoIds;
private String isShanghai;
private String facePhotoBase64;
private String type;
//导入字段
/**
* 银行卡号
*/
@Excel(name = "银行卡号", type = Excel.Type.IMPORT)
private String bankCardCode;
/**
* 银行名称
*/
@Excel(name = "银行名称", type = Excel.Type.IMPORT)
private String bankName;
/**
* 银行支行名称
*/
@Excel(name = "银行支行名称", type = Excel.Type.IMPORT)
private String bankBranchName;
/**
* 银行联号
*/
@Excel(name = "银行联号", type = Excel.Type.IMPORT)
private String bankIdentifierCode;
}

View File

@ -156,4 +156,12 @@ public interface PmWorkerMapper {
List<MapBeanPo> getWageCardById(Integer workerId);
void insertWorkerWageCard(BmWorkerWageCard bmWorkerWageCard);
Integer getProIdByProName(String proName);
Integer getSubIdBySubName(String subName);
Integer getTeamIdByTeamName(String teamName);
Integer getPostIdByPostName(String postName);
}

View File

@ -3,6 +3,7 @@ package com.bonus.bmw.service;
import com.bonus.bmw.domain.dto.PmWorkerDto;
import com.bonus.bmw.domain.dto.WebFileDto;
import com.bonus.bmw.domain.vo.PmWorker;
import com.bonus.bmw.domain.vo.PmWorkerImport;
import com.bonus.common.core.web.domain.AjaxResult;
import java.util.List;
@ -44,4 +45,6 @@ public interface PmWorkerService{
List<PmWorker> selectEinListByWorkerId(PmWorkerDto o);
AjaxResult insertProEin(PmWorker o, List<WebFileDto> listFile);
String workerManyEinImport(List<PmWorkerImport> workerList);
}

View File

@ -5,10 +5,7 @@ import com.bonus.bmw.domain.dto.PmWorkerDto;
import com.bonus.bmw.domain.dto.WebFileDto;
import com.bonus.bmw.domain.po.FaceRecognitionBean;
import com.bonus.bmw.domain.po.MapBeanPo;
import com.bonus.bmw.domain.vo.BmWorkerContract;
import com.bonus.bmw.domain.vo.BmWorkerWageCard;
import com.bonus.bmw.domain.vo.MapBeanVo;
import com.bonus.bmw.domain.vo.PmWorker;
import com.bonus.bmw.domain.vo.*;
import com.bonus.bmw.mapper.PmWorkerMapper;
import com.bonus.bmw.service.*;
import com.bonus.common.core.constant.Constants;
@ -21,6 +18,7 @@ import com.bonus.system.api.model.UploadFileVo;
import com.github.pagehelper.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -299,6 +297,89 @@ public class PmWorkerServiceImpl implements PmWorkerService{
}
}
@Override
public String workerManyEinImport(List<PmWorkerImport> workerList) {
if (StringUtils.isNull(workerList) || workerList.isEmpty()) {
throw new ServiceException("导入数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
for (PmWorkerImport worker : workerList) {
try {
// 验证是否存在这个用户
// 添加员工时判断员工编号是否已存在
if(StringUtils.isEmpty(worker.getIdNumber())){
failureMsg.insert(0, "导入失败!第 " + (workerList.indexOf(worker) + 1) + " 行数据缺少关键信息!");
continue;
}
PmWorker w = mapper.getWorkerByNumber(worker.getIdNumber(),1);
Map<String, Object> idCardInfo = getIdCardInfo(worker.getIdNumber());
if (idCardInfo == null) {
failureMsg.insert(0, "导入失败!第 " + (workerList.indexOf(worker) + 1) + " 行数据身份证号码格式不正确!");
continue;
}else {
worker.setSex(idCardInfo.get("sex").toString());
worker.setAge(Integer.parseInt(idCardInfo.get("age").toString()));
worker.setBirthday(idCardInfo.get("birthday").toString());
}
PmWorker export = new PmWorker();
if (StringUtils.isNull(w)) {
worker.setCreateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
BeanUtils.copyProperties(worker, export);
mapper.insertBasicWorkerData(export);
successNum++;
successMsg.append("|").append(successNum).append("、施工人员信息 ").append(worker.getName()).append(" 导入成功");
} else {
worker.setId(w.getId());
worker.setUpdateUser(SecurityUtils.getLoginUser().getSysUser().getUserName());
BeanUtils.copyProperties(worker, export);
mapper.updateBasicWorkerData(export);
successNum++;
successMsg.append("|").append(successNum).append("、施工人员信息 ").append(worker.getName()).append(" 更新成功");
}
//合同
BmWorkerWageCard bmWorkerWageCard = new BmWorkerWageCard();
bmWorkerWageCard.setWorkerId(worker.getId());
bmWorkerWageCard.setBankCardCode(worker.getBankCardCode());
bmWorkerWageCard.setBankName(worker.getBankName());
bmWorkerWageCard.setBankBranchName(worker.getBankBranchName());
bmWorkerWageCard.setBankIdentifierCode(worker.getBankIdentifierCode());
insertWorkerWageCard(bmWorkerWageCard);
//入场
importEinData(export);
} catch (Exception e) {
failureNum++;
String msg = "|" + failureNum + "、施工人员信息 " + worker.getName() + " 导入失败:";
log.error(msg, e);
}
}
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
private void importEinData(PmWorker worker) {
Integer a = mapper.getProIdByProName(worker.getProName());
Integer b = mapper.getSubIdBySubName(worker.getSubName());
Integer c = mapper.getTeamIdByTeamName(worker.getTeamName());
Integer d = mapper.getPostIdByPostName(worker.getPostName());
if(a !=null && a > 0 && b !=null && b > 0 && c !=null && c > 0 && d !=null && d > 0){
//入场关联数据新增
worker.setProId(a);
worker.setSubId(b);
worker.setTeamId(c);
worker.setPostId(d);
addEinRecord(worker);
}
}
/**
* 修改入场数据
* @param record

View File

@ -11,11 +11,11 @@ spring:
discovery:
# 服务注册地址
server-addr: 192.168.0.14:8848
namespace: fangliang_test
namespace: huadong_realname_local
config:
# 配置中心地址
server-addr: 192.168.0.14:8848
namespace: fangliang_test
namespace: huadong_realname_local
# 配置文件格式
file-extension: yml
# 共享配置
@ -26,3 +26,6 @@ spring:
jasypt:
encryptor:
password: Encrypt
face:
path: http://112.29.103.165:1616/faceIdentification

View File

@ -203,9 +203,17 @@
<insert id="insertBasicWorkerData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into pm_worker (`name`, id_number, sex, age, birthday, nation, issuing_authority,
start_time, end_time, address, create_user)
start_time, end_time, address, create_user
<if test="phone != null and phone != ''">
,phone
</if>
)
values (#{name}, #{idNumber}, #{sex}, #{age},#{birthday}, #{nation}, #{issuingAuthority},
#{startTime}, #{endTime}, #{address}, #{createUser})
#{startTime}, #{endTime}, #{address}, #{createUser}
<if test="phone != null and phone != ''">
,#{phone}
</if>
)
</insert>
<update id="updateBasicWorkerData">
@ -360,4 +368,20 @@
insert into bm_worker_wage_card (worker_id,bank_card_code,bank_name,bank_branch_name,bank_identifier_code)
values (#{workerId},#{bankCardCode},#{bankName},#{bankBranchName},#{bankIdentifierCode})
</insert>
<select id="getProIdByProName" resultType="java.lang.Integer">
select id from pm_project where pro_name = #{proName}
</select>
<select id="getSubIdBySubName" resultType="java.lang.Integer">
select id from pm_sub where sub_name = #{subName}
</select>
<select id="getTeamIdByTeamName" resultType="java.lang.Integer">
select id from pm_sub_team where team_name = #{teamName}
</select>
<select id="getPostIdByPostName" resultType="java.lang.Integer">
select id from pm_post_type where post_name = #{postName}
</select>
</mapper>