xuhy
2 天以前 c2d49ede268b5ab8df639e494caae02cde8b2599
计费规则指标完成,人员管理职业技能处理
5个文件已修改
7个文件已添加
262 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppUserController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppUserSkillController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TMissionController.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/TAppUserDTO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TAppUserSkillMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TAppUser.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TAppUserSkill.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TAppUserSkillService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppUserSkillServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TAppUserDetailVO.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TAppUserMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TAppUserSkillMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppUserController.java
@@ -13,15 +13,19 @@
import com.ruoyi.system.dto.UpAndDownDTO;
import com.ruoyi.system.dto.UserIdDto;
import com.ruoyi.system.model.TAppUser;
import com.ruoyi.system.model.TAppUserSkill;
import com.ruoyi.system.model.TMajor;
import com.ruoyi.system.model.TUserMajor;
import com.ruoyi.system.query.TAppUserQuery;
import com.ruoyi.system.service.TAppUserService;
import com.ruoyi.system.service.TAppUserSkillService;
import com.ruoyi.system.service.TMajorService;
import com.ruoyi.system.service.TUserMajorService;
import com.ruoyi.system.vo.TAppUserDetailVO;
import com.ruoyi.system.vo.TAppUserPageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -47,13 +51,15 @@
    private final TAppUserService appUserService;
    private final TUserMajorService userMajorService;
    private final TMajorService majorService;
    private final TAppUserSkillService appUserSkillService;
    @Autowired
    public TAppUserController(TokenService tokenService, TAppUserService appUserService, TUserMajorService userMajorService, TMajorService majorService) {
    public TAppUserController(TokenService tokenService, TAppUserService appUserService, TUserMajorService userMajorService, TMajorService majorService, TAppUserSkillService appUserSkillService) {
        this.tokenService = tokenService;
        this.appUserService = appUserService;
        this.userMajorService = userMajorService;
        this.majorService = majorService;
        this.appUserSkillService = appUserSkillService;
    }
    /**
@@ -86,6 +92,10 @@
        if(CollectionUtils.isEmpty(userMajors)){
            return R.fail("请选择专业");
        }
        TAppUserSkill appUserSkill = dto.getAppUserSkill();
        if(appUserSkill==null){
            return R.fail("请输入职业技能");
        }
        String pwd = SecurityUtils.encryptPassword(dto.getPassword());
        dto.setPassword(pwd);
        dto.setState(1);
@@ -95,6 +105,9 @@
            userMajor.setAppUserId(dto.getId());
        }
        userMajorService.saveBatch(userMajors);
        // 职业技能
        appUserSkill.setAppUserId(dto.getId());
        appUserSkillService.save(appUserSkill);
        return R.ok();
    }
@@ -122,6 +135,9 @@
            userMajor.setAppUserId(dto.getId());
        }
        userMajorService.saveBatch(userMajors);
        // 职业技能
        TAppUserSkill appUserSkill = dto.getAppUserSkill();
        appUserSkillService.updateById(appUserSkill);
        return R.ok();
    }
@@ -135,6 +151,10 @@
        UserIdDto dto = JSON.parseObject(param, UserIdDto.class);
//        TAppUser appUser = appUserService.getById(dto.getId());
//        appUser.setDisabled(true);
        // 删除人员专业
        userMajorService.remove(Wrappers.lambdaQuery(TUserMajor.class).eq(TUserMajor::getAppUserId,dto.getId()));
        // 删除人员职业技能
        appUserSkillService.remove(Wrappers.lambdaQuery(TAppUserSkill.class).eq(TAppUserSkill::getAppUserId,dto.getId()));
        appUserService.removeById(dto.getId());
        return R.ok();
    }
@@ -220,9 +240,11 @@
    //    @PreAuthorize("@ss.hasPermi('system:user:auditUser')")
    @ApiOperation(value = "人员详情", response = AuditUserDto.class)
    @PostMapping(value = "/api/t-app-user/detailUser")
    public R<TAppUser> detailUser(@RequestBody String param) {
    public R<TAppUserDetailVO> detailUser(@RequestBody String param) {
        UserIdDto dto = JSON.parseObject(param, UserIdDto.class);
        TAppUser tAppUser = appUserService.getById(dto.getId());
        TAppUserDetailVO appUserDetailVO = new TAppUserDetailVO();
        BeanUtils.copyProperties(tAppUser,appUserDetailVO);
        List<TUserMajor> list = userMajorService.list(new LambdaQueryWrapper<TUserMajor>().eq(TUserMajor::getAppUserId, dto.getId()));
        if(!list.isEmpty()){
            List<String> mjIds = list.stream().map(TUserMajor::getMajorId).collect(Collectors.toList());
@@ -234,8 +256,13 @@
                }
            }
        }
        tAppUser.setUserMajors(list);
        return R.ok(tAppUser);
        appUserDetailVO.setUserMajors(list);
        // 查询职业技能
        TAppUserSkill appUserSkill = appUserSkillService.getOne(new LambdaQueryWrapper<TAppUserSkill>()
                .eq(TAppUserSkill::getAppUserId, dto.getId())
                .last("LIMIT 1"));
        appUserDetailVO.setAppUserSkill(appUserSkill);
        return R.ok(appUserDetailVO);
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppUserSkillController.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.web.controller.api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 人员职业技能 前端控制器
 * </p>
 *
 * @author xiaochen
 * @since 2025-10-24
 */
@RestController
@RequestMapping("/t-app-user-skill")
public class TAppUserSkillController {
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TMissionController.java
@@ -47,8 +47,9 @@
    private final TAppUserService appUserService;
    private final TAppUserEquipmentService appUserEquipmentService;
    private final TUserMajorService userMajorService;
    private final TAppUserSkillService appUserSkillService;
    @Autowired
    public TMissionController(TMissionService missionService, TMissionReassignService missionReassignService, TokenService tokenService, TMissionAssignRuleService missionAssignRuleService, TMissionAssignRuleIndicatorService missionAssignRuleIndicatorService, TAppUserService appUserService, TAppUserEquipmentService appUserEquipmentService, TUserMajorService userMajorService) {
    public TMissionController(TMissionService missionService, TMissionReassignService missionReassignService, TokenService tokenService, TMissionAssignRuleService missionAssignRuleService, TMissionAssignRuleIndicatorService missionAssignRuleIndicatorService, TAppUserService appUserService, TAppUserEquipmentService appUserEquipmentService, TUserMajorService userMajorService, TAppUserSkillService appUserSkillService) {
        this.missionService = missionService;
        this.missionReassignService = missionReassignService;
        this.tokenService = tokenService;
@@ -57,6 +58,7 @@
        this.appUserService = appUserService;
        this.appUserEquipmentService = appUserEquipmentService;
        this.userMajorService = userMajorService;
        this.appUserSkillService = appUserSkillService;
    }
    /**
@@ -155,6 +157,9 @@
        // 查询专业信息
        List<TUserMajor> userMajorList = userMajorService.list(Wrappers.lambdaQuery(TUserMajor.class)
                .in(TUserMajor::getAppUserId,appUserIds));
        // 查询技能信息
        List<TAppUserSkill> appUserSkillList = appUserSkillService.list(Wrappers.lambdaQuery(TAppUserSkill.class)
                .in(TAppUserSkill::getAppUserId,appUserIds));
        for (TAppUser appUser : appUsers) {
            double scoreTotal = 0;
@@ -162,6 +167,8 @@
            List<TAppUserEquipment> userEquipments = appUserEquipmentList.stream().filter(appEquipment -> appUser.getId().equals(appEquipment.getAppUserId())).collect(Collectors.toList());
            // 匹配专业信息
            List<TUserMajor> userMajors = userMajorList.stream().filter(userMajor -> appUser.getId().equals(userMajor.getAppUserId())).collect(Collectors.toList());
            // 匹配技能信息
            List<TAppUserSkill> userSkills = appUserSkillList.stream().filter(appUserSkill -> appUser.getId().equals(appUserSkill.getAppUserId())).collect(Collectors.toList());
            // 计算用户到任务的距离
            double distance = GDMapGeocodingUtil.getDistance(Double.parseDouble(mission.getMissionLon()), Double.parseDouble(mission.getMissionLat()), Double.parseDouble(appUser.getLon()), Double.parseDouble(appUser.getLat()));
@@ -234,8 +241,16 @@
                                    }
                                }
                                // 技能等级
                                if(2 == i){
                                    // TODO 技能等级
                                if(2 == i && !CollectionUtils.isEmpty(userSkills)){
                                    TAppUserSkill appUserSkill = userSkills.get(0);
                                    int count = appUserSkill.getAdvancedCount() + appUserSkill.getIntermediateCount() + appUserSkill.getPrimaryCount();
                                    if(count >= value){
                                        // 得基准分值
                                        scoreTotal += score;
                                    }else{
                                        // 训练次数 / 基准值 * 基准分值
                                        scoreTotal += (double)count / value * score;
                                    }
                                }
                            }
                        }
@@ -269,23 +284,30 @@
                        JSONArray trainingIndicators = JSONObject.parseArray(missionAssignRuleIndicator.getContent());
                        // 训练指标分数计算
                        // 实训次数
                        Integer practicalTrainCount = appUser.getPracticalTrainCount();
                        Integer reconnaissanceMajor = appUser.getReconnaissanceMajor();
                        Integer otherCount = appUser.getOtherCount();
                        for (int i = 0; i < 3; i++) {
                            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(trainingIndicators.get(i)));
                            Integer value = jsonObject.getInteger("value");
                            Integer score = jsonObject.getInteger("score");
                            // 侦察专业成绩
                            if(0 == i){
                                // TODO
                            }
                            // 训练次数
                            if(1 == i){
                                if(practicalTrainCount >= value){
                                if(reconnaissanceMajor >= value){
                                    // 得基准分值
                                    scoreTotal += score;
                                }else{
                                    // 训练次数 / 基准值 * 基准分值
                                    scoreTotal += (double)practicalTrainCount / value * score;
                                    scoreTotal += (double)reconnaissanceMajor / value * score;
                                }
                            }
                            // 训练次数
                            if(1 == i){
                                if(otherCount >= value){
                                    // 得基准分值
                                    scoreTotal += score;
                                }else{
                                    // 训练次数 / 基准值 * 基准分值
                                    scoreTotal += (double)otherCount / value * score;
                                }
                            }
                        }
ruoyi-system/src/main/java/com/ruoyi/system/dto/TAppUserDTO.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.dto;
import com.ruoyi.system.model.TAppUser;
import com.ruoyi.system.model.TAppUserSkill;
import com.ruoyi.system.model.TUserMajor;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -12,7 +13,10 @@
@ApiModel(value="TAppUserDTO对象", description="人员管理")
public class TAppUserDTO extends TAppUser {
    @ApiModelProperty(value = "专业id集合")
    @ApiModelProperty(value = "专业集合")
    private List<TUserMajor> userMajors;
    @ApiModelProperty(value = "职业技能")
    private TAppUserSkill appUserSkill;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TAppUserSkillMapper.java
New file
@@ -0,0 +1,16 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.model.TAppUserSkill;
/**
 * <p>
 * 人员职业技能 Mapper 接口
 * </p>
 *
 * @author xiaochen
 * @since 2025-10-24
 */
public interface TAppUserSkillMapper extends BaseMapper<TAppUserSkill> {
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TAppUser.java
@@ -10,8 +10,6 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
 * <p>
 * 人员管理
@@ -71,9 +69,9 @@
    @TableField("state")
    private Integer state;
    @ApiModelProperty(value = "职业技能 1=无 2=初级 3=中级 4=高级")
    @TableField("level")
    private Integer level;
    @ApiModelProperty(value = "侦察专业人数")
    @TableField("reconnaissance_major")
    private Integer reconnaissanceMajor;
    @ApiModelProperty(value = "执行任务状态 1=空闲 2=任务中")
    @TableField("mission_state")
@@ -86,9 +84,6 @@
    @TableField(exist = false)
    private String lat;
    @TableField(exist = false)
    @ApiModelProperty(value = "用户专业")
    private List<TUserMajor> userMajors;
    @ApiModelProperty(value = "距离 km")
    @TableField(exist = false)
ruoyi-system/src/main/java/com/ruoyi/system/model/TAppUserSkill.java
New file
@@ -0,0 +1,50 @@
package com.ruoyi.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 * 人员职业技能
 * </p>
 *
 * @author xiaochen
 * @since 2025-10-24
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_app_user_skill")
@ApiModel(value="TAppUserSkill对象", description="人员职业技能")
public class TAppUserSkill implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;
    @ApiModelProperty(value = "用户id")
    @TableField("app_user_id")
    private String appUserId;
    @ApiModelProperty(value = "初级人数")
    @TableField("primary_count")
    private Integer primaryCount;
    @ApiModelProperty(value = "中级人数")
    @TableField("intermediate_count")
    private Integer intermediateCount;
    @ApiModelProperty(value = "高级人数")
    @TableField("advanced_count")
    private Integer advancedCount;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TAppUserSkillService.java
New file
@@ -0,0 +1,16 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.model.TAppUserSkill;
/**
 * <p>
 * 人员职业技能 服务类
 * </p>
 *
 * @author xiaochen
 * @since 2025-10-24
 */
public interface TAppUserSkillService extends IService<TAppUserSkill> {
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppUserSkillServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.mapper.TAppUserSkillMapper;
import com.ruoyi.system.model.TAppUserSkill;
import com.ruoyi.system.service.TAppUserSkillService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 人员职业技能 服务实现类
 * </p>
 *
 * @author xiaochen
 * @since 2025-10-24
 */
@Service
public class TAppUserSkillServiceImpl extends ServiceImpl<TAppUserSkillMapper, TAppUserSkill> implements TAppUserSkillService {
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/TAppUserDetailVO.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.system.vo;
import com.ruoyi.system.model.TAppUser;
import com.ruoyi.system.model.TAppUserSkill;
import com.ruoyi.system.model.TUserMajor;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel("人员管理详情TAppUserDetailVO")
public class TAppUserDetailVO extends TAppUser {
    @ApiModelProperty(value = "用户专业")
    private List<TUserMajor> userMajors;
    @ApiModelProperty(value = "用户职业技能")
    private TAppUserSkill appUserSkill;
}
ruoyi-system/src/main/resources/mapper/system/TAppUserMapper.xml
@@ -15,6 +15,7 @@
        <result column="practical_train_count" property="practicalTrainCount" />
        <result column="other_count" property="otherCount" />
        <result column="mission_state" property="missionState" />
        <result column="reconnaissance_major" property="reconnaissanceMajor" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <result column="create_by" property="createBy" />
@@ -30,7 +31,7 @@
    <select id="pageList" resultType="com.ruoyi.system.vo.TAppUserPageVo">
        SELECT
        t1.id, t1.nick_name, t1.phone, t1.account, t1.password, t1.team_name, t1.team_id, t1.status,
        t1.practical_train_count,t1.mission_state,
        t1.practical_train_count,t1.mission_state,t1.reconnaissance_major,
        t1.other_count, t1.create_time, t1.update_time, t1.create_by, t1.update_by, t1.disabled,t2.team_name
        FROM
        t_app_user t1 left join t_division_team t2 on t1.team_id = t2.id
@@ -51,7 +52,7 @@
    <select id="pageAuditList" resultType="com.ruoyi.system.vo.TAppUserPageVo">
        SELECT
        t1.id, t1.nick_name, t1.phone, t1.account, t1.password, t1.team_name, t1.team_id, t1.status,
        t1.practical_train_count,t1.mission_state,
        t1.practical_train_count,t1.mission_state,t1.reconnaissance_major,
        t1.other_count, t1.create_time, t1.update_time, t1.create_by, t1.update_by, t1.disabled,t2.team_name
        FROM
        t_app_user t1 left join t_division_team t2 on t1.team_id = t2.id
ruoyi-system/src/main/resources/mapper/system/TAppUserSkillMapper.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.TAppUserSkillMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TAppUserSkill">
        <id column="id" property="id" />
        <result column="app_user_id" property="appUserId" />
        <result column="primary_count" property="primaryCount" />
        <result column="intermediate_count" property="intermediateCount" />
        <result column="advanced_count" property="advancedCount" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, app_user_id, primary_count, intermediate_count, advanced_count
    </sql>
</mapper>