From c975ef553a22c14e65888bb2aa4b5c04532f0f1c Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Thu, 18 Sep 2025 19:56:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E7=BB=B4=E6=A8=A1=E5=9D=97=E8=A1=A5?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/RemoteProjectService.java | 12 ++ .../system/api/domain/vo/RemoteProjectVo.java | 159 +++++++++++++++ .../dubbo/RemoteProjectServiceImpl.java | 25 +++ .../controller/OpsWorkWageController.java | 106 ++++++++++ .../dromara/personnel/domain/OpsWorkWage.java | 66 ++++++ .../personnel/domain/bo/OpsWorkWageBo.java | 70 +++++++ .../domain/enums/BusWageMeasureUnitEnum.java | 24 +++ .../personnel/domain/vo/OpsWorkWageVo.java | 82 ++++++++ .../personnel/mapper/OpsWorkWageMapper.java | 15 ++ .../service/IOpsUserFilesService.java | 3 +- .../personnel/service/IOpsUserService.java | 5 +- .../service/IOpsWorkWageService.java | 70 +++++++ .../service/impl/OpsUserFilesServiceImpl.java | 5 +- .../service/impl/OpsUserServiceImpl.java | 102 ++++++++- .../service/impl/OpsWorkWageServiceImpl.java | 193 ++++++++++++++++++ .../mapper/personnel/OpsWorkWageMapper.xml | 7 + 16 files changed, 931 insertions(+), 13 deletions(-) create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteProjectVo.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsWorkWageController.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsWorkWage.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsWorkWageBo.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/enums/BusWageMeasureUnitEnum.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsWorkWageVo.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsWorkWageMapper.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsWorkWageService.java create mode 100644 ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsWorkWageServiceImpl.java create mode 100644 ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsWorkWageMapper.xml diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteProjectService.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteProjectService.java index c4da5ff..57cb2d1 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteProjectService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteProjectService.java @@ -1,6 +1,9 @@ package org.dromara.system.api; import jakarta.validation.constraints.NotNull; +import org.dromara.system.api.domain.vo.RemoteProjectVo; + +import java.util.List; /** * @author lilemy @@ -22,4 +25,13 @@ public interface RemoteProjectService { * @param userId */ void validAuth(Long projectId, Long userId); + + /** + * 判断项目是否存在 + * @param projectId + * @return + */ + RemoteProjectVo getById(Long projectId); + + void validAuth(List projectIdList, Long userId); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteProjectVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteProjectVo.java new file mode 100644 index 0000000..f331641 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteProjectVo.java @@ -0,0 +1,159 @@ +package org.dromara.system.api.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 项目视图对象 project + * + * @author lilemy + * @date 2025-03-04 + */ +@Data +@ExcelIgnoreUnannotated +public class RemoteProjectVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 项目简称 + */ + private String shortName; + + /** + * 父项目id + */ + private Long parentId; + + /** + * 状态(0正常 1停用) + */ + private String status; + + /** + * 项目图片 + */ + private String picUrl; + + /** + * 经度 + */ + private String lng; + + /** + * 纬度 + */ + private String lat; + + /** + * 备注 + */ + private String remark; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 项目阶段 + */ + private String projectStage; + + /** + * 项目地址 + */ + private String projectSite; + + /** + * 负责人 + */ + private String principal; + + /** + * 负责人电话 + */ + private String principalPhone; + + /** + * 实际容量 + */ + private String actual; + + /** + * 计划容量 + */ + private String plan; + + /** + * 开工时间 + */ + private String onStreamTime; + + /** + * 打卡范围(09:00,18:00) + */ + private String punchRange; + + /** + * 打卡时间开始 + */ + private String playCardStart; + + /** + * 打卡时间结束 + */ + private String playCardEnd; + + /** + * 设计总量 + */ + private Long designTotal; + + /** + * 安全协议书 + */ + private String securityAgreement; + + /** + * 招标文件 + */ + private String tenderFiles; + + /** + * 显示隐藏(0显示 1隐藏) + */ + private String showHidden; + + /** + * 排序字段 + */ + private Long sort; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteProjectServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteProjectServiceImpl.java index 5b02331..16b6d58 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteProjectServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteProjectServiceImpl.java @@ -1,11 +1,23 @@ package org.dromara.system.dubbo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.exception.ServiceException; import org.dromara.system.api.RemoteProjectService; +import org.dromara.system.api.domain.vo.RemoteProjectVo; +import org.dromara.system.domain.BusProject; +import org.dromara.system.domain.BusUserProjectRelevancy; import org.dromara.system.service.IBusProjectService; +import org.dromara.system.service.IBusUserProjectRelevancyService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + /** * @author lilemy * @date 2025-09-11 18:33 @@ -32,4 +44,17 @@ public class RemoteProjectServiceImpl implements RemoteProjectService { public void validAuth(Long projectId, Long userId) { projectService.validAuth(projectId, userId); } + + @Override + public RemoteProjectVo getById(Long projectId) { + BusProject byId = projectService.getById(projectId); + RemoteProjectVo remoteProjectVo = new RemoteProjectVo(); + BeanUtils.copyProperties(byId, remoteProjectVo); + return remoteProjectVo; + } + + @Override + public void validAuth(List projectIdList, Long userId) { + projectService.validAuth(projectIdList, userId); + } } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsWorkWageController.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsWorkWageController.java new file mode 100644 index 0000000..69a2e51 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/controller/OpsWorkWageController.java @@ -0,0 +1,106 @@ +package org.dromara.personnel.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.personnel.domain.vo.OpsWorkWageVo; +import org.dromara.personnel.domain.bo.OpsWorkWageBo; +import org.dromara.personnel.service.IOpsWorkWageService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 工种薪水 + * 前端访问路由地址为:/personnel/workWage + * + * @author LionLi + * @date 2025-09-17 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/workWage") +public class OpsWorkWageController extends BaseController { + + private final IOpsWorkWageService opsWorkWageService; + + /** + * 查询工种薪水列表 + */ + @SaCheckPermission("personnel:workWage:list") + @GetMapping("/list") + public TableDataInfo list(OpsWorkWageBo bo, PageQuery pageQuery) { + return opsWorkWageService.queryPageList(bo, pageQuery); + } + + /** + * 导出工种薪水列表 + */ + @SaCheckPermission("personnel:workWage:export") + @Log(title = "工种薪水", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OpsWorkWageBo bo, HttpServletResponse response) { + List list = opsWorkWageService.queryList(bo); + ExcelUtil.exportExcel(list, "工种薪水", OpsWorkWageVo.class, response); + } + + /** + * 获取工种薪水详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("personnel:workWage:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(opsWorkWageService.queryById(id)); + } + + /** + * 新增工种薪水 + */ + @SaCheckPermission("personnel:workWage:add") + @Log(title = "工种薪水", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OpsWorkWageBo bo) { + return toAjax(opsWorkWageService.insertByBo(bo)); + } + + /** + * 修改工种薪水 + */ + @SaCheckPermission("personnel:workWage:edit") + @Log(title = "工种薪水", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OpsWorkWageBo bo) { + return toAjax(opsWorkWageService.updateByBo(bo)); + } + + /** + * 删除工种薪水 + * + * @param ids 主键串 + */ + @SaCheckPermission("personnel:workWage:remove") + @Log(title = "工种薪水", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(opsWorkWageService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsWorkWage.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsWorkWage.java new file mode 100644 index 0000000..ca5baff --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/OpsWorkWage.java @@ -0,0 +1,66 @@ +package org.dromara.personnel.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 工种薪水对象 ops_work_wage + * + * @author LionLi + * @date 2025-09-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ops_work_wage") +public class OpsWorkWage extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 工种 + */ + private String workType; + + /** + * 是否是特种兵(1是 2否) + */ + private String isSpecialType; + + /** + * 工资计算方式(1计时 2计件) + */ + private String wageCalculationType; + + /** + * 工资标准 + */ + private Long wage; + + /** + * 工资计量单位 + */ + private String wageMeasureUnit; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsWorkWageBo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsWorkWageBo.java new file mode 100644 index 0000000..3837423 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/bo/OpsWorkWageBo.java @@ -0,0 +1,70 @@ +package org.dromara.personnel.domain.bo; + +import org.dromara.personnel.domain.OpsWorkWage; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 工种薪水业务对象 ops_work_wage + * + * @author LionLi + * @date 2025-09-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = OpsWorkWage.class, reverseConvertGenerate = false) +public class OpsWorkWageBo extends BaseEntity { + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectId; + + /** + * 工种 + */ + @NotBlank(message = "工种不能为空", groups = { AddGroup.class, EditGroup.class }) + private String workType; + + /** + * 是否是特种兵(1是 2否) + */ + private String isSpecialType; + + /** + * 工资计算方式(1计时 2计件) + */ + @NotBlank(message = "工资计算方式(1计时 2计件)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String wageCalculationType; + + /** + * 工资标准 + */ + @NotNull(message = "工资标准不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long wage; + + /** + * 工资计量单位 + */ + @NotBlank(message = "工资计量单位不能为空", groups = { AddGroup.class, EditGroup.class }) + private String wageMeasureUnit; + + /** + * 备注 + */ + @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/enums/BusWageMeasureUnitEnum.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/enums/BusWageMeasureUnitEnum.java new file mode 100644 index 0000000..fe295e3 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/enums/BusWageMeasureUnitEnum.java @@ -0,0 +1,24 @@ +package org.dromara.personnel.domain.enums; + +import lombok.Getter; + +/** + * @author lilemy + * @date 2025/4/10 11:16 + */ +@Getter +public enum BusWageMeasureUnitEnum { + + TIME("计时:元/每天", "1"), + PIECE("计件:元/每个", "2"); + + private final String text; + + private final String value; + + BusWageMeasureUnitEnum(String text, String value) { + this.text = text; + this.value = value; + } + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsWorkWageVo.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsWorkWageVo.java new file mode 100644 index 0000000..6d9369b --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/domain/vo/OpsWorkWageVo.java @@ -0,0 +1,82 @@ +package org.dromara.personnel.domain.vo; + +import org.dromara.personnel.domain.OpsWorkWage; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 工种薪水视图对象 ops_work_wage + * + * @author LionLi + * @date 2025-09-17 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = OpsWorkWage.class) +public class OpsWorkWageVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 工种 + */ + @ExcelProperty(value = "工种") + private String workType; + + /** + * 是否是特种兵(1是 2否) + */ + @ExcelProperty(value = "是否是特种兵", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=是,2=否") + private String isSpecialType; + + /** + * 工资计算方式(1计时 2计件) + */ + @ExcelProperty(value = "工资计算方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=计时,2=计件") + private String wageCalculationType; + + /** + * 工资标准 + */ + @ExcelProperty(value = "工资标准") + private Long wage; + + /** + * 工资计量单位 + */ + @ExcelProperty(value = "工资计量单位") + private String wageMeasureUnit; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsWorkWageMapper.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsWorkWageMapper.java new file mode 100644 index 0000000..323506f --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/mapper/OpsWorkWageMapper.java @@ -0,0 +1,15 @@ +package org.dromara.personnel.mapper; + +import org.dromara.personnel.domain.OpsWorkWage; +import org.dromara.personnel.domain.vo.OpsWorkWageVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 工种薪水Mapper接口 + * + * @author LionLi + * @date 2025-09-17 + */ +public interface OpsWorkWageMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserFilesService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserFilesService.java index 6e67927..029c01a 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserFilesService.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserFilesService.java @@ -1,5 +1,6 @@ package org.dromara.personnel.service; +import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.personnel.domain.OpsUserFiles; import org.dromara.personnel.domain.vo.OpsUserFilesVo; import org.dromara.personnel.domain.bo.OpsUserFilesBo; @@ -15,7 +16,7 @@ import java.util.List; * @author LionLi * @date 2025-09-17 */ -public interface IOpsUserFilesService { +public interface IOpsUserFilesService extends IService { /** * 查询运维人员文件 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserService.java index c2cfd59..6742647 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserService.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsUserService.java @@ -1,5 +1,8 @@ package org.dromara.personnel.service; +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.personnel.domain.OpsUser; +import org.dromara.personnel.domain.OpsUserFiles; import org.dromara.personnel.domain.vo.OpsUserVo; import org.dromara.personnel.domain.bo.OpsUserBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -14,7 +17,7 @@ import java.util.List; * @author LionLi * @date 2025-09-16 */ -public interface IOpsUserService { +public interface IOpsUserService extends IService { /** * 查询运维人员 diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsWorkWageService.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsWorkWageService.java new file mode 100644 index 0000000..dd28e77 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/IOpsWorkWageService.java @@ -0,0 +1,70 @@ +package org.dromara.personnel.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.personnel.domain.OpsWorkWage; +import org.dromara.personnel.domain.vo.OpsWorkWageVo; +import org.dromara.personnel.domain.bo.OpsWorkWageBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工种薪水Service接口 + * + * @author LionLi + * @date 2025-09-17 + */ +public interface IOpsWorkWageService extends IService { + + /** + * 查询工种薪水 + * + * @param id 主键 + * @return 工种薪水 + */ + OpsWorkWageVo queryById(Long id); + + /** + * 分页查询工种薪水列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工种薪水分页列表 + */ + TableDataInfo queryPageList(OpsWorkWageBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的工种薪水列表 + * + * @param bo 查询条件 + * @return 工种薪水列表 + */ + List queryList(OpsWorkWageBo bo); + + /** + * 新增工种薪水 + * + * @param bo 工种薪水 + * @return 是否新增成功 + */ + Boolean insertByBo(OpsWorkWageBo bo); + + /** + * 修改工种薪水 + * + * @param bo 工种薪水 + * @return 是否修改成功 + */ + Boolean updateByBo(OpsWorkWageBo bo); + + /** + * 校验并批量删除工种薪水信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserFilesServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserFilesServiceImpl.java index f98c5a9..857597f 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserFilesServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserFilesServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.personnel.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,6 +10,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.personnel.domain.OpsWorkWage; +import org.dromara.personnel.mapper.OpsWorkWageMapper; import org.springframework.stereotype.Service; import org.dromara.personnel.domain.bo.OpsUserFilesBo; import org.dromara.personnel.domain.vo.OpsUserFilesVo; @@ -29,7 +32,7 @@ import java.util.Collection; @Slf4j @RequiredArgsConstructor @Service -public class OpsUserFilesServiceImpl implements IOpsUserFilesService { +public class OpsUserFilesServiceImpl extends ServiceImpl implements IOpsUserFilesService { private final OpsUserFilesMapper baseMapper; diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserServiceImpl.java index 912ea9f..68fe2c5 100644 --- a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserServiceImpl.java +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsUserServiceImpl.java @@ -1,5 +1,9 @@ package org.dromara.personnel.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdcardUtil; +import cn.hutool.core.util.PhoneUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; @@ -13,9 +17,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.personnel.domain.OpsUserFiles; +import org.dromara.personnel.domain.OpsWorkWage; +import org.dromara.personnel.mapper.OpsWorkWageMapper; +import org.dromara.personnel.service.IOpsUserFilesService; +import org.dromara.personnel.service.IOpsWorkWageService; import org.dromara.system.api.RemoteProjectService; import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.domain.vo.RemoteUserVo; +import org.dromara.system.api.utils.IdCardEncryptorUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.personnel.domain.bo.OpsUserBo; @@ -37,13 +47,21 @@ import java.util.Collection; @Slf4j @RequiredArgsConstructor @Service -public class OpsUserServiceImpl implements IOpsUserService { +public class OpsUserServiceImpl extends ServiceImpl implements IOpsUserService { private final OpsUserMapper baseMapper; - private final RemoteProjectService remoteProjectService; + @Autowired + private RemoteProjectService remoteProjectService; @Autowired private RemoteUserService remoteUserService; + @Autowired + private IdCardEncryptorUtil idCardEncryptorUtil; + + @Autowired + private IOpsWorkWageService opsWorkWageService; + @Autowired + private IOpsUserFilesService opsUserFilesService; /** * 查询运维人员 @@ -52,7 +70,7 @@ public class OpsUserServiceImpl implements IOpsUserService { * @return 运维人员 */ @Override - public OpsUserVo queryById(Long id){ + public OpsUserVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -130,7 +148,7 @@ public class OpsUserServiceImpl implements IOpsUserService { @Override public Boolean insertByBo(OpsUserBo bo) { OpsUser add = MapstructUtils.convert(bo, OpsUser.class); - validEntityBeforeSave(add); + validEntityBeforeSave(add, true); Long userId = LoginHelper.getUserId(); remoteProjectService.validAuth(bo.getProjectId(), userId); String phone = add.getPhone(); @@ -138,10 +156,15 @@ public class OpsUserServiceImpl implements IOpsUserService { if (userVo == null) { throw new ServiceException("当前用户未在系统注册", HttpStatus.BAD_REQUEST); } + add.setSysUserId(userVo.getUserId()); + String encrypt = idCardEncryptorUtil.encrypt(bo.getSfzNumber()); + add.setSfzNumber(encrypt); + boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); + if (!flag) { + throw new ServiceException("新增施工人员失败,数据库异常", HttpStatus.ERROR); } + bo.setId(add.getId()); return flag; } @@ -154,15 +177,45 @@ public class OpsUserServiceImpl implements IOpsUserService { @Override public Boolean updateByBo(OpsUserBo bo) { OpsUser update = MapstructUtils.convert(bo, OpsUser.class); - validEntityBeforeSave(update); + validEntityBeforeSave(update, false); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ - private void validEntityBeforeSave(OpsUser entity){ + private void validEntityBeforeSave(OpsUser entity, Boolean create) { //TODO 做一些数据校验,如唯一约束 + // 校验项目id和对应项目是否存在 + Long projectId = entity.getProjectId(); + // 校验分包公司id和对应项目是否存在 + String typeOfWork = entity.getTypeOfWork(); + String wageMeasureUnit = entity.getWageMeasureUnit(); + String phone = entity.getPhone(); + String sfzNumber = entity.getSfzNumber(); + if (projectId == null) { + throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST); + } + + if (remoteProjectService.getById(projectId) == null) { + throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND); + } + if (StringUtils.isNotEmpty(wageMeasureUnit) && StringUtils.isNotEmpty(typeOfWork)) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(OpsWorkWage.class) + .eq(OpsWorkWage::getProjectId, projectId) + .eq(OpsWorkWage::getWorkType, typeOfWork) + .eq(OpsWorkWage::getWageMeasureUnit, wageMeasureUnit); + long count = opsWorkWageService.getBaseMapper().selectCount(lqw); + if (count <= 0) { + throw new ServiceException("当前工种没有定义工资标准,请前往工种薪水设置进行设置后再选择", HttpStatus.BAD_REQUEST); + } + } + if (StringUtils.isNotEmpty(phone) && !PhoneUtil.isPhone(phone)) { + throw new ServiceException("手机号码格式不正确", HttpStatus.BAD_REQUEST); + } + if (StringUtils.isNotEmpty(sfzNumber) && !IdcardUtil.isValidCard(sfzNumber)) { + throw new ServiceException("身份证号码格式不正确", HttpStatus.BAD_REQUEST); + } } /** @@ -174,9 +227,38 @@ public class OpsUserServiceImpl implements IOpsUserService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ - //TODO 做一些业务上的校验,判断是否需要校验 + + //TODO 做一些业务上的校验,判断是否需要校验 + Long userId = LoginHelper.getUserId(); + List constructionUserList = this.listByIds(ids); + if (isValid) { + // 做一些业务上的校验,判断是否需要校验 + // 获取项目id列表 + List projectIdList = constructionUserList.stream().map(OpsUser::getProjectId).toList(); + // 判断是否有权限操作对应项目下的内容 + remoteProjectService.validAuth(projectIdList, userId); + // 判断待删除的人员是否存在于班组 +// LambdaQueryWrapper projectTeamMemberLqw = Wrappers.lambdaQuery(BusProjectTeamMember.class) +// .in(BusProjectTeamMember::getMemberId, ids); +// if (projectTeamMemberService.count(projectTeamMemberLqw) > 0) { +// throw new ServiceException("删除施工人员信息失败,施工人员存在于班组中", HttpStatus.BAD_REQUEST); +// } } + // 判断对应数据是否都存在 + if (constructionUserList.size() != ids.size()) { + throw new ServiceException("删除施工人员信息失败,数据缺失", HttpStatus.BAD_REQUEST); + } + // 批量删除施工人员下的文件信息 + LambdaQueryWrapper constructionUserFileLqw = Wrappers.lambdaQuery(OpsUserFiles.class) + .in(OpsUserFiles::getOpsUserId, ids); + List fileList = opsUserFilesService.list(constructionUserFileLqw); + if (CollUtil.isNotEmpty(fileList)) { + boolean removeFile = opsUserFilesService.remove(constructionUserFileLqw); + if (!removeFile) { + throw new ServiceException("删除施工人员信息失败,施工人员文件信息删除失败", HttpStatus.ERROR); + } + } + return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsWorkWageServiceImpl.java b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsWorkWageServiceImpl.java new file mode 100644 index 0000000..9cf6c2b --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/java/org/dromara/personnel/service/impl/OpsWorkWageServiceImpl.java @@ -0,0 +1,193 @@ +package org.dromara.personnel.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.personnel.domain.enums.BusWageMeasureUnitEnum; +import org.dromara.system.api.RemoteProjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.dromara.personnel.domain.bo.OpsWorkWageBo; +import org.dromara.personnel.domain.vo.OpsWorkWageVo; +import org.dromara.personnel.domain.OpsWorkWage; +import org.dromara.personnel.mapper.OpsWorkWageMapper; +import org.dromara.personnel.service.IOpsWorkWageService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 工种薪水Service业务层处理 + * + * @author LionLi + * @date 2025-09-17 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class OpsWorkWageServiceImpl extends ServiceImpl implements IOpsWorkWageService { + + private final OpsWorkWageMapper baseMapper; + + @Autowired + private RemoteProjectService remoteProjectService; + + /** + * 查询工种薪水 + * + * @param id 主键 + * @return 工种薪水 + */ + @Override + public OpsWorkWageVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询工种薪水列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工种薪水分页列表 + */ + @Override + public TableDataInfo queryPageList(OpsWorkWageBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的工种薪水列表 + * + * @param bo 查询条件 + * @return 工种薪水列表 + */ + @Override + public List queryList(OpsWorkWageBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OpsWorkWageBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(OpsWorkWage::getId); + lqw.eq(bo.getProjectId() != null, OpsWorkWage::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkType()), OpsWorkWage::getWorkType, bo.getWorkType()); + lqw.eq(StringUtils.isNotBlank(bo.getIsSpecialType()), OpsWorkWage::getIsSpecialType, bo.getIsSpecialType()); + lqw.eq(StringUtils.isNotBlank(bo.getWageCalculationType()), OpsWorkWage::getWageCalculationType, bo.getWageCalculationType()); + lqw.eq(bo.getWage() != null, OpsWorkWage::getWage, bo.getWage()); + lqw.eq(StringUtils.isNotBlank(bo.getWageMeasureUnit()), OpsWorkWage::getWageMeasureUnit, bo.getWageMeasureUnit()); + return lqw; + } + + /** + * 新增工种薪水 + * + * @param bo 工种薪水 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(OpsWorkWageBo bo) { + OpsWorkWage add = MapstructUtils.convert(bo, OpsWorkWage.class); + validEntityBeforeSave(add,true); + // 判断是否存在 + Long count = baseMapper.selectCount(new LambdaQueryWrapper() + .eq(OpsWorkWage::getProjectId, bo.getProjectId()) + .eq(OpsWorkWage::getWorkType, bo.getWorkType()) + .eq(OpsWorkWage::getWageCalculationType, bo.getWageCalculationType())); + if (count > 0) { + throw new ServiceException("该项目已存在该工种薪水信息", HttpStatus.CONFLICT); + } + // 填充默认值 + String wageCalculationType = bo.getWageCalculationType(); + switch (wageCalculationType) { + case "1": + add.setWageMeasureUnit(BusWageMeasureUnitEnum.TIME.getValue()); + break; + case "2": + add.setWageMeasureUnit(BusWageMeasureUnitEnum.PIECE.getValue()); + break; + default: + throw new ServiceException("工资计算方式错误", HttpStatus.BAD_REQUEST); + } + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改工种薪水 + * + * @param bo 工种薪水 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(OpsWorkWageBo bo) { + OpsWorkWage update = MapstructUtils.convert(bo, OpsWorkWage.class); + validEntityBeforeSave(update,false); + // 判断是否存在 + OpsWorkWage oldWorkWage = baseMapper.selectById(update.getId()); + if (oldWorkWage == null) { + throw new ServiceException("修改工种薪水失败,数据不存在", HttpStatus.NOT_FOUND); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OpsWorkWage entity, Boolean create){ + //TODO 做一些数据校验,如唯一约束 + // 做一些数据校验,如唯一约束 + Long userId = LoginHelper.getUserId(); + Long projectId = entity.getProjectId(); + if (create) { + if (projectId == null) { + throw new ServiceException("项目id不能为空", HttpStatus.BAD_REQUEST); + } + } + if (projectId != null && remoteProjectService.getById(projectId) == null) { + throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND); + } + remoteProjectService.validAuth(projectId, userId); + } + + /** + * 校验并批量删除工种薪水信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + // 获取当前登录用户 + Long userId = LoginHelper.getUserId(); + // 获取待删除数据详情 + List workWageList = baseMapper.selectByIds(ids); + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + List projectIdList = workWageList.stream().map(OpsWorkWage::getProjectId).toList(); + remoteProjectService.validAuth(projectIdList, userId); + } + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsWorkWageMapper.xml b/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsWorkWageMapper.xml new file mode 100644 index 0000000..0715fa5 --- /dev/null +++ b/ruoyi-modules/xny-ops/src/main/resources/mapper/personnel/OpsWorkWageMapper.xml @@ -0,0 +1,7 @@ + + + + +