更新检测员工相关功能

This commit is contained in:
许允枞 2025-01-23 17:46:11 +08:00
parent 756ce20950
commit 7b206d8f7c
12 changed files with 374 additions and 35 deletions

View File

@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.constant;
/**
* @Description: 检测常量信息
* @Author: 86187
* @Date: 2025/01/23 13:55
* @Version: 1.0
*/
public class InspectionConstants {
/**
* 检测基础员工角色 Code
*/
public static final String INSPECTION_BASE_STAFF_ROLE = "jcworker";
}

View File

@ -3,34 +3,41 @@ package cn.iocoder.yudao.module.inspection.controller;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.PhoneUtil; import cn.hutool.core.util.PhoneUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.core.controller.BaseController; import cn.iocoder.yudao.module.core.controller.BaseController;
import cn.iocoder.yudao.module.inspection.entity.InspectionPickCar;
import cn.iocoder.yudao.module.inspection.entity.InspectionStaff;
import cn.iocoder.yudao.module.inspection.enums.DriverLicenseType; import cn.iocoder.yudao.module.inspection.enums.DriverLicenseType;
import cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery; import cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery;
import cn.iocoder.yudao.module.inspection.service.InspectionStaffService; import cn.iocoder.yudao.module.inspection.service.InspectionStaffService;
import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo; import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo;
import cn.iocoder.yudao.module.inspection.vo.StaffImportExcelVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO;
import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.module.system.convert.user.UserConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import static io.micrometer.core.instrument.config.validate.Validated.valid; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.excel.core.util.ExcelUtils.exportBlankTemplate;
/** /**
* inspectionFileController * inspectionFileController
@ -52,7 +59,7 @@ public class InspectionStaffController extends BaseController {
*/ */
@GetMapping("/list") @GetMapping("/list")
public CommonResult list(InspectionStaffQuery query, public CommonResult list(InspectionStaffQuery query,
@RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum, @RequestParam(value = "pageNo", required = false, defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) { @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
Page<InspectionStaffSaveVo> page = new Page<>(pageNum, pageSize); Page<InspectionStaffSaveVo> page = new Page<>(pageNum, pageSize);
IPage<InspectionStaffSaveVo> list = inspectionStaffService.getList(page, query); IPage<InspectionStaffSaveVo> list = inspectionStaffService.getList(page, query);
@ -70,6 +77,19 @@ public class InspectionStaffController extends BaseController {
return success(inspectionStaffService.get(id)); return success(inspectionStaffService.get(id));
} }
/**
* 新增检测员工
*
* @param inspectionStaff
* @return
*/
@PostMapping("/save")
public CommonResult save(@RequestBody InspectionStaffSaveVo inspectionStaff) {
//校验
verify(inspectionStaff);
return success(inspectionStaffService.saveInspectionStaff(inspectionStaff));
}
/** /**
* 编辑检测员工 * 编辑检测员工
* *
@ -84,11 +104,55 @@ public class InspectionStaffController extends BaseController {
return success(inspectionStaffService.edit(inspectionStaff)); return success(inspectionStaffService.edit(inspectionStaff));
} }
/**
* 模板
*
* @param response
* @throws IOException
*/
@GetMapping("/get-import-template") @GetMapping("/get-import-template")
public void importTemplate(HttpServletResponse response) throws IOException { public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo // 手动创建导出 demo
// 输出 // 输出
ExcelUtils.write(response, "用户导入模板.xls", "用户列表", StaffImportExcelVO.class, null); // ExcelUtils.write(response, "用户导入模板.xls", "用户列表", StaffImportExcelVO.class, null);
// 使用 HashMap 来替代 Map.of兼容 JDK 1.8
Map<Integer, String> headerMap = new HashMap<>();
headerMap.put(0, "部门名称");
headerMap.put(1, "员工姓名");
headerMap.put(2, "身份证号码");
headerMap.put(3, "居住地址");
headerMap.put(4, "学历");
headerMap.put(5, "毕业院校");
headerMap.put(6, "电话号码");
headerMap.put(7, "短号");
headerMap.put(8, "入职时间");
headerMap.put(9, "试用期");
headerMap.put(10, "社保购买日期");
headerMap.put(11, "紧急联系人");
headerMap.put(12, "紧急联系人电话");
headerMap.put(13, "驾驶证类型");
headerMap.put(14, "备注");
// 下拉框列及选项列索引 -> 下拉框选项
Map<Integer, String[]> dropdownColumns = new HashMap<>();
List<String> allId = DriverLicenseType.getAllId();
String[] array = ArrayUtil.toArray(allId, String.class);
dropdownColumns.put(13, array); // 驾照类型
// 导出空白模板到Excel
exportBlankTemplate(response, "staff_template.xlsx", "员工信息", headerMap, dropdownColumns, true);
}
@GetMapping("/export")
@ApiAccessLog(operateType = EXPORT)
public void exportUserList(InspectionStaffQuery query,
HttpServletResponse response) throws IOException {
List<InspectionStaffSaveVo> list = inspectionStaffService.getAll(query);
// 输出 Excel
ExcelUtils.write(response, "用户数据.xls", "数据", InspectionStaffSaveVo.class,
list);
} }
/** /**

View File

@ -1,9 +1,13 @@
package cn.iocoder.yudao.module.inspection.entity; package cn.iocoder.yudao.module.inspection.entity;
import cn.iocoder.yudao.annotation.Excel;
import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
@ -20,77 +24,92 @@ public class InspectionStaff extends TenantBaseDO {
* 员工id * 员工id
*/ */
@TableId(type = IdType.NONE) @TableId(type = IdType.NONE)
@ExcelIgnore
private Long userId; private Long userId;
/** /**
* 身份证号 * 身份证号
*/ */
@TableField("id_card") @TableField("id_card")
@ExcelProperty("身份证号")
private String idCard; private String idCard;
/** /**
* 居住地址 * 居住地址
*/ */
@TableField("address") @TableField("address")
@ExcelProperty("居住地址")
private String address; private String address;
/** /**
* 学历 * 学历
*/ */
@TableField("educational") @TableField("educational")
@ExcelProperty("学历")
private String educational; private String educational;
/** /**
* 毕业院校 * 毕业院校
*/ */
@TableField("school") @TableField("school")
@ExcelProperty("毕业院校")
private String school; private String school;
/** /**
* 短号 * 短号
*/ */
@TableField("short_number") @TableField("short_number")
@ExcelProperty("短号")
private String shortNumber; private String shortNumber;
/** /**
* 入职日期 * 入职日期
*/ */
@TableField("join_date") @TableField("join_date")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@ExcelProperty("入职日期")
private Date joinDate; private Date joinDate;
/** /**
* 试用期 * 试用期
*/ */
@TableField("probation_period") @TableField("probation_period")
@ExcelProperty("试用期")
private String probationPeriod; private String probationPeriod;
/** /**
* 社保购买日期 * 社保购买日期
*/ */
@TableField("social_security_buy_date") @TableField("social_security_buy_date")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@ExcelProperty("社保购买日期")
private Date socialSecurityBuyDate; private Date socialSecurityBuyDate;
/** /**
* 紧急联系人 * 紧急联系人
*/ */
@TableField("emergency_contact_name") @TableField("emergency_contact_name")
@ExcelProperty("紧急联系人")
private String emergencyContactName; private String emergencyContactName;
/** /**
* 紧急联系人电话 * 紧急联系人电话
*/ */
@TableField("emergency_contact_phone") @TableField("emergency_contact_phone")
@ExcelProperty("联系人电话")
private String emergencyContactPhone; private String emergencyContactPhone;
/** /**
* 驾驶证类型 * 驾驶证类型
*/ */
@TableField("driver_license_type") @TableField("driver_license_type")
@ExcelProperty("驾驶证类型")
private String driverLicenseType; private String driverLicenseType;
/** /**
* 备注 * 备注
*/ */
@TableField("remark") @TableField("remark")
@ExcelIgnore
private String remark; private String remark;
} }

View File

@ -44,4 +44,11 @@ public enum DriverLicenseType {
return commonDownRespVo; return commonDownRespVo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
public static List<String> getAllId() {
DriverLicenseType[] values = DriverLicenseType.values();
return Arrays.stream(values).map(item -> {
return item.getId();
}).collect(Collectors.toList());
}
} }

View File

@ -31,7 +31,7 @@ public interface InspectionStaffMapper extends BaseMapper<InspectionStaff> {
* @param query * @param query
* @return * @return
*/ */
IPage<InspectionStaffSaveVo> getList(Page<InspectionStaffSaveVo> page, InspectionStaffQuery query); IPage<InspectionStaffSaveVo> getList(@Param("page") Page<InspectionStaffSaveVo> page, @Param("query") InspectionStaffQuery query);
/** /**
* 根据条件查询检测员工子表 * 根据条件查询检测员工子表
@ -40,5 +40,13 @@ public interface InspectionStaffMapper extends BaseMapper<InspectionStaff> {
* @return * @return
*/ */
InspectionStaffSaveVo get(Long id); InspectionStaffSaveVo get(Long id);
/**
* 根据条件查询检测员工子表
*
* @param query
* @return
*/
List<InspectionStaffSaveVo> getAll(InspectionStaffQuery query);
} }

View File

@ -49,4 +49,9 @@ public class InspectionStaffQuery extends InspectionStaff {
* 用户性别 * 用户性别
**/ **/
private String sex; private String sex;
/**
* 用户状态
*/
private Integer status;
} }

View File

@ -26,6 +26,13 @@ public interface InspectionStaffService extends IService<InspectionStaff> {
* @return * @return
*/ */
IPage<InspectionStaffSaveVo> getList(Page<InspectionStaffSaveVo> page, InspectionStaffQuery query); IPage<InspectionStaffSaveVo> getList(Page<InspectionStaffSaveVo> page, InspectionStaffQuery query);
/**
* 获取所有检测员工
*
* @param query
* @return
*/
List<InspectionStaffSaveVo> getAll(InspectionStaffQuery query);
/** /**
* 编辑检测员工 * 编辑检测员工
@ -42,5 +49,13 @@ public interface InspectionStaffService extends IService<InspectionStaff> {
* @return * @return
*/ */
InspectionStaffSaveVo get(Long id); InspectionStaffSaveVo get(Long id);
/**
* 保存检测员工
*
* @param inspectionStaffVo
* @return
*/
boolean saveInspectionStaff(InspectionStaffSaveVo inspectionStaffVo);
} }

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.inspection.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.constant.InspectionConstants;
import cn.iocoder.yudao.module.inspection.entity.InspectionPickCar; import cn.iocoder.yudao.module.inspection.entity.InspectionPickCar;
import cn.iocoder.yudao.module.inspection.entity.InspectionStaff; import cn.iocoder.yudao.module.inspection.entity.InspectionStaff;
import cn.iocoder.yudao.module.inspection.mapper.InspectionStaffMapper; import cn.iocoder.yudao.module.inspection.mapper.InspectionStaffMapper;
@ -11,15 +12,24 @@ import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.permission.RoleService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
@ -34,6 +44,12 @@ public class InspectionStaffServiceImpl extends ServiceImpl<InspectionStaffMappe
@Autowired @Autowired
private AdminUserService userService; private AdminUserService userService;
@Autowired
private RoleService roleService;
@Autowired
private PermissionService permissionService;
/** /**
* 获取检测员工分页 * 获取检测员工分页
* *
@ -46,6 +62,17 @@ public class InspectionStaffServiceImpl extends ServiceImpl<InspectionStaffMappe
return baseMapper.getList(page, query); return baseMapper.getList(page, query);
} }
/**
* 获取所有检测员工
*
* @param query
* @return
*/
@Override
public List<InspectionStaffSaveVo> getAll(InspectionStaffQuery query) {
return baseMapper.getAll(query);
}
/** /**
* 编辑检测员工 * 编辑检测员工
* *
@ -87,5 +114,36 @@ public class InspectionStaffServiceImpl extends ServiceImpl<InspectionStaffMappe
} }
return inspectionStaffSaveVo; return inspectionStaffSaveVo;
} }
/**
* 保存检测员工
*
* @param inspectionStaffVo
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean saveInspectionStaff(InspectionStaffSaveVo inspectionStaffVo) {
//新增system_users主表
UserSaveReqVO userDTO = BeanUtil.copyProperties(inspectionStaffVo, UserSaveReqVO.class);
userDTO.setId(inspectionStaffVo.getUserId());
Long userId = userService.createUser(userDTO);
//查询检测基础员工角色
List<RoleDO> role = roleService.getRoleListByCodesTenant(Collections.singletonList(InspectionConstants.INSPECTION_BASE_STAFF_ROLE));
if (ObjectUtil.isNull(role)) {
throw new RuntimeException("检测基础员工角色不存在");
}
Set<Long> roleIds = role.stream().map(RoleDO::getId).collect(Collectors.toSet());
//设置角色为检测基础员工
permissionService.assignUserRole(userId, roleIds);
InspectionStaff inspectionStaff = BeanUtil.copyProperties(inspectionStaffVo, InspectionStaff.class);
inspectionStaff.setUserId(userId);
//新增检测员工子表
return this.save(inspectionStaff);
}
} }

View File

@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.inspection.vo; package cn.iocoder.yudao.module.inspection.vo;
import cn.iocoder.yudao.annotation.Excel;
import cn.iocoder.yudao.module.inspection.entity.InspectionStaff; import cn.iocoder.yudao.module.inspection.entity.InspectionStaff;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@ -16,54 +19,78 @@ public class InspectionStaffSaveVo extends InspectionStaff {
/** /**
* 员工编号 * 员工编号
*/ */
@ExcelIgnore
private Long id; private Long id;
/** /**
* 用户账号 * 用户账号
*/ */
@ExcelProperty("员工账号")
private String username; private String username;
/** /**
* 用户昵称 * 用户昵称
*/ */
@ExcelProperty("员工名称")
private String nickname; private String nickname;
/** /**
* 用户类型 * 用户类型
*/ */
@ExcelIgnore
private String userType; private String userType;
/** /**
* 备注 * 备注
*/ */
@ExcelIgnore
private String remark; private String remark;
/** /**
* 部门编号 * 部门编号
*/ */
@ExcelIgnore
private Long deptId; private Long deptId;
/** /**
* 用户手机号码 * 用户手机号码
*/ */
@ExcelProperty("手机号")
private String mobile; private String mobile;
/** /**
* 用户密码 * 用户密码
*/ */
@ExcelIgnore
private String password; private String password;
/** /**
* 用户头像 * 用户头像
*/ */
@ExcelIgnore
private String avatar; private String avatar;
/** /**
* 用户性别 * 用户性别
**/ **/
@ExcelIgnore
private String sex; private String sex;
/**
* 用户性别
*/
@ExcelProperty(value = "用户性别")
private String sexStr;
/** /**
* 用户状态 * 用户状态
*/ */
@ExcelIgnore
private Integer status; private Integer status;
/**
* 用户状态
*/
@ExcelProperty("状态")
private String statusStr;
/** /**
* 用户邮箱 * 用户邮箱
*/ */
@ExcelProperty("邮箱")
private String email; private String email;
/** /**

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.inspection.vo; package cn.iocoder.yudao.module.inspection.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.converters.localdate.LocalDateStringConverter;
import lombok.Data; import lombok.Data;
/** /**
@ -36,13 +37,13 @@ public class StaffImportExcelVO {
@ExcelProperty("短号") @ExcelProperty("短号")
private String shortNumber; private String shortNumber;
@ExcelProperty("入职时间") @ExcelProperty(value = "入职时间")
private String joinDate; private String joinDate;
@ExcelProperty("试用期") @ExcelProperty("试用期")
private String probationPeriod; private String probationPeriod;
@ExcelProperty("社保购买日期") @ExcelProperty(value = "社保购买日期")
private String socialSecurityBuyDate; private String socialSecurityBuyDate;
@ExcelProperty("紧急联系人") @ExcelProperty("紧急联系人")

View File

@ -5,34 +5,43 @@
<mapper namespace="cn.iocoder.yudao.module.inspection.mapper.InspectionStaffMapper"> <mapper namespace="cn.iocoder.yudao.module.inspection.mapper.InspectionStaffMapper">
<select id="getList" resultType="cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo"> <select id="getList" resultType="cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo">
SELECT distinct SELECT distinct
su.id, su.id,
su.nickname, su.nickname,
su.username, su.username,
su.user_type, su.user_type,
su.remark, su.remark,
su.dept_id, su.dept_id,
su.mobile, su.mobile,
su.password, su.password,
su.avatar, su.avatar,
su.sex, su.sex,
su.status, su.status,
iss.id_card, iss.id_card,
iss.address, iss.address,
iss.educational, iss.educational,
iss.school, iss.school,
iss.short_number, iss.short_number,
iss.join_date, iss.join_date,
iss.probation_period, iss.probation_period,
iss.social_security_buy_date, iss.social_security_buy_date,
iss.emergency_contact_name, iss.emergency_contact_name,
iss.emergency_contact_phone, iss.emergency_contact_phone,
iss.driver_license_type iss.driver_license_type
FROM system_users su FROM system_users su
left join system_user_role sur on su.id = sur.user_id left join system_user_role sur on su.id = sur.user_id
left join system_role sr on sur.role_id = sr.id left join system_role sr on sur.role_id = sr.id
left join inspection_staff iss on iss.user_id = su.id left join inspection_staff iss on iss.user_id = su.id
<where> <where>
sr.service_package_id = 'jiance' and sr.code != 'jcyh' sr.service_package_id = 'jiance' and sr.code != 'jcyh'
<if test="query.nickname != null and query.nickname != ''">
and su.nickname like concat('%', #{query.nickname}, '%')
</if>
<if test="query.mobile != null and query.mobile != ''">
and su.mobile like concat('%', #{query.mobile}, '%')
</if>
<if test="query.status != null and query.status != ''">
and su.status = #{query.status}
</if>
</where> </where>
</select> </select>
<select id="get" resultType="cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo"> <select id="get" resultType="cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo">
@ -68,4 +77,44 @@
and su.id = #{id} and su.id = #{id}
</where> </where>
</select> </select>
<select id="getAll" resultType="cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo"
parameterType="cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery">
SELECT distinct
su.id,
su.nickname,
su.username,
su.mobile,
su.avatar,
su.sex,
case sex when 0 then '男' when 1 then '女' end as sexStr,
su.status,
case su.status when 0 then '正常' when 1 then '停用' end as statusStr,
iss.id_card,
iss.address,
iss.educational,
iss.school,
iss.short_number,
iss.join_date,
iss.probation_period,
iss.social_security_buy_date,
iss.emergency_contact_name,
iss.emergency_contact_phone,
iss.driver_license_type
FROM system_users su
left join system_user_role sur on su.id = sur.user_id
left join system_role sr on sur.role_id = sr.id
left join inspection_staff iss on iss.user_id = su.id
<where>
sr.service_package_id = 'jiance' and sr.code != 'jcyh'
<if test="nickname != null and nickname != ''">
and su.nickname like concat('%', #{nickname}, '%')
</if>
<if test="mobile != null and mobile != ''">
and su.mobile like concat('%', #{mobile}, '%')
</if>
<if test="status != null and status != ''">
and su.status = #{status}
</if>
</where>
</select>
</mapper> </mapper>

View File

@ -6,9 +6,16 @@ import cn.iocoder.yudao.framework.excel.core.handler.SetColumnWidthHandler;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.converters.longconverter.LongStringConverter; import com.alibaba.excel.converters.longconverter.LongStringConverter;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@ -80,4 +87,68 @@ public class ExcelUtils {
.doReadAllSync(); .doReadAllSync();
} }
/**
* 导出空白模板Excel并为指定列添加下拉框
*
* @param fileName 文件名
* @param sheetName 工作表名称
* @param headerMap 表头字段映射列索引 -> 列名称
* @param dropdownColumns 带下拉框的列及选项列索引 -> 下拉框选项数组
* @throws IOException
*/
public static void exportBlankTemplate(HttpServletResponse response, String fileName, String sheetName,
Map<Integer, String> headerMap,
Map<Integer, String[]> dropdownColumns,
boolean isMultiSelect) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet(sheetName);
// 创建表头
Row headerRow = sheet.createRow(0);
for (Map.Entry<Integer, String> entry : headerMap.entrySet()) {
headerRow.createCell(entry.getKey()).setCellValue(entry.getValue());
}
// 添加下拉框到指定列
if (dropdownColumns != null) {
for (Map.Entry<Integer, String[]> entry : dropdownColumns.entrySet()) {
addDropdownValidation(sheet, entry.getKey(), entry.getValue(), isMultiSelect);
}
}
// 设置响应头指示浏览器下载文件
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()) + ".xlsx");
// Excel 文件写入输出流
try (ServletOutputStream out = response.getOutputStream()) {
workbook.write(out);
out.flush();
} finally {
workbook.close();
}
}
// 修改下拉框验证方法支持多选功能
private static void addDropdownValidation(Sheet sheet, int column, String[] options, boolean isMultiSelect) {
DataValidationHelper validationHelper = sheet.getDataValidationHelper();
DataValidationConstraint constraint;
// 判断是否启用多选下拉框
if (isMultiSelect) {
// 如果是多选则使用逗号分隔的方式构建一个包含所有选项的下拉框
String combinedOptions = String.join(",", options);
constraint = validationHelper.createExplicitListConstraint(new String[]{combinedOptions});
} else {
// 否则使用单选下拉框
constraint = validationHelper.createExplicitListConstraint(options);
}
// 设置下拉框范围从第2行开始到第65535行第column列
CellRangeAddressList addressList = new CellRangeAddressList(1, 65535, column, column);
DataValidation validation = validationHelper.createValidation(constraint, addressList);
sheet.addValidationData(validation);
}
} }