问题修改

This commit is contained in:
hayu 2025-07-29 17:43:21 +08:00
parent cbd7538120
commit 2983184263
14 changed files with 241 additions and 8 deletions

View File

@ -11,7 +11,7 @@ import lombok.Getter;
@Getter
public enum RepairTaskStatusEnum {
TASK_STATUS_PROCESSING(0, "维修管理--进行中"),
TASK_STATUS_PROCESSING(0, "定损--进行中"),
TASK_STATUS_COMPLETE(1, "维修管理--已完成"),
TASK_STATUS_REJECT(2, "维修管理--驳回退料"),
TASK_STATUS_AUDIT_REJECT(3, "维修管理--修饰审核驳回"),
@ -19,7 +19,7 @@ public enum RepairTaskStatusEnum {
TASK_STATUS_REVIEW(11, "修饰审核--审核完成"),
TASK_STATUS_NO_REVIEW(12, "修饰审核--审核不通过"),
SCRAP_UNDER_REVIEW(6, "报废审核--待审核"),
TASK_LOSS_ASSESSMENT_COMPLETE(4, "定损完成");
TASK_LOSS_ASSESSMENT_COMPLETE(4, "维修--进行中");
private final Integer status;
private final String statusName;

View File

@ -64,8 +64,34 @@ public class LossAssessmentServiceImpl implements LossAssessmentService {
@Override
public List<RepairTask> getLossAssessmentList(RepairTask bean) {
try {
Long userId = SecurityUtils.getLoginUser().getUserid();
// 首先根据用户名去ma_type_manage表查询是否存在绑定物资信息
List<Long> typeIdList = backApplyInfoMapper.selectTypeIdList(userId);
if (CollectionUtils.isEmpty(typeIdList)) {
bean.setUserId(userId == 0 ? null : userId);
}
List<RepairTask> list = mapper.getLossAssessmentList(bean);
if (CollectionUtil.isNotEmpty(list)) {
if (CollectionUtil.isNotEmpty(typeIdList)) {
// 使用流过滤符合条件的元素
list = list.stream()
.filter(item -> {
String firstIdStr = item.getFirstId();
if (firstIdStr == null) {
return false;
}
// 将逗号分隔的字符串转为集合
Set<Long> firstIds = Arrays.stream(firstIdStr.split(","))
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(Long::parseLong)
.collect(Collectors.toSet());
// 判断两个集合是否有交集
return firstIds.stream().anyMatch(typeIdList::contains);
})
.collect(Collectors.toList());
}
String keyWord = bean.getKeyWord();
// 如果关键字不为空进行过滤
if (!StringUtils.isBlank(keyWord)) {

View File

@ -58,6 +58,16 @@ public class PartTypeController extends BaseController
return partTypeService.selectPartTypeList(partType);
}
/**
* 根据配件配置管理以及领用配件数量查询配件列表
*/
@ApiOperation(value = "查询配件列表")
@GetMapping("/partList")
public AjaxResult partList(PartType partType)
{
return partTypeService.selectPartTypeListNew(partType);
}
/**
* 根据左列表类型id查询右表格
*

View File

@ -125,4 +125,11 @@ public interface PartTypeMapper
* @return
*/
PartType getUserName(PartType partType);
/**
* 根据配件配置管理以及领用配件数量查询配件列表
* @param partType
* @return
*/
List<TreeNode> selectPartTypeListNew(PartType partType);
}

View File

@ -92,4 +92,11 @@ public interface IPartTypeService
* @return
*/
List<PartType> getMyTypeAndBindUsers(List<PartType> maTypeVos);
/**
* 根据配件配置管理以及领用配件数量查询配件列表
* @param partType
* @return
*/
AjaxResult selectPartTypeListNew(PartType partType);
}

View File

@ -109,6 +109,23 @@ public class PartTypeServiceImpl implements IPartTypeService
return AjaxResult.success(groupList);
}
@Override
public AjaxResult selectPartTypeListNew(PartType partType) {
List<TreeNode> list = new ArrayList<>();
try {
String userId = SecurityUtils.getLoginUser().getUserid().toString();
partType.setUserId(Long.valueOf(userId));
list = partTypeMapper.selectPartTypeListNew(partType);
if (CollectionUtils.isNotEmpty(list)){
TreeBuild treeBuild = new TreeBuild(list);
list = treeBuild.buildTree();
}
} catch (Exception e) {
log.error("配件类型树-查询失败", e);
}
return AjaxResult.success(list);
}
/**
* 新增配件类型管理
*
@ -273,4 +290,5 @@ public class PartTypeServiceImpl implements IPartTypeService
}
return maTypeVos;
}
}

View File

@ -14,6 +14,9 @@ import java.util.List;
@Data
@ApiModel(value="维修配件")
public class RepairPart {
private Long id;
/**
* 任务ID
*/

View File

@ -189,4 +189,9 @@ public class RepairTask {
@ApiModelProperty(value = "一级类型id")
private String firstId;
/**
* 数据状态 3-修饰后入库驳回
*/
private String dataStatus;
}

View File

@ -334,4 +334,25 @@ public interface RepairMapper {
* @return
*/
int deleteRepairById(Long id);
/**
* 查询配件数量
* @param partId
* @return
*/
int getPartNum(Long partId);
/**
* 获取配件列表
* @param partId
* @return
*/
List<RepairPart> getPartList(Long partId);
/**
* 修改配件数量
* @param currentPart
* @return
*/
int updatePartNum(RepairPart currentPart);
}

View File

@ -878,10 +878,28 @@ public class RepairServiceImpl implements RepairService {
.setPartId(Optional.ofNullable(partDetails.getPartId()).orElse(0L));
// 添加维修记录表
repairMapper.addRecord(repairApplyRecord);
// 扣减个人库配件库存数量
int res = repairMapper.updateStorageNum(partDetails);
if (0 == res) {
throw new ServiceException("个人配件库存不足");
//1查询该附件的库存数量
int partNum = repairMapper.getPartNum(partDetails.getPartId());
if (partNum >= partDetails.getPartNum()) {
//2查询所有该配件数据数据根据数量递减扣除数量
List<RepairPart> list = repairMapper.getPartList(partDetails.getPartId());
Integer partNums = partDetails.getPartNum();
for (int i = 0; i < list.size() && partNums > 0; i++) {
RepairPart currentPart = list.get(i);
if (currentPart.getPartNum() >= partNums) {
// 当前记录数量足够直接减去全部需要的数量
currentPart.setPartNum(currentPart.getPartNum() - partNums);
partNums = 0;
} else {
// 当前记录数量不足全部减去并继续下一条记录
partNums -= currentPart.getPartNum();
}
// 更新数据库中的配件数量
repairMapper.updatePartNum(currentPart);
}
} else {
throw new ServiceException("配件库存不足");
}
} else {

View File

@ -284,7 +284,8 @@
0
ELSE
1
END `status`
END `status`,
rd.`status` as dataStatus
FROM
repair_apply_details rd
LEFT JOIN ma_type mt on rd.type_id = mt.type_id
@ -297,6 +298,9 @@
LEFT JOIN bm_project bpi ON bai2.project_id = bpi.pro_id and bpi.del_flag = '0'
left join sys_user su on rd.create_by = su.user_id
left join sys_user su2 on su2.user_id = rd.repairer
<if test="userId != null">
JOIN ma_type_repair mtr ON mtr.type_id = rd.type_id AND mtr.user_id = #{userId}
</if>
where
rd.is_ds=1
<if test="appTaskStatus !=null">

View File

@ -280,4 +280,94 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE
mp.type_id = #{id}
</select>
<select id="selectPartTypeListNew" resultType="com.bonus.common.biz.domain.TreeNode">
SELECT
mpt.pa_id as id,
mpt.pa_name as label,
mpt.parent_id as parentId,
mpt.unit_name as unitName,
mpt.buy_price as buyPrice,
mpt.`level`,
mpt.remark,
pps.part_num as storageNum
FROM
ma_part_type_keeper mpk
LEFT JOIN (
SELECT
part_id,
SUM(part_num) as part_num
FROM
pa_person_storage
GROUP BY part_id
) pps ON pps.part_id = mpk.type_id
LEFT JOIN ma_part_type mpt ON mpt.pa_id = mpk.type_id AND mpt.del_flag = '0'
WHERE
mpk.user_id = #{userId}
-- 添加条件如果level为3则要求part_num > 0
AND (mpt.`level` != 3 OR (mpt.`level` = 3 AND (pps.part_num IS NOT NULL AND pps.part_num > 0)))
GROUP BY pa_id
UNION ALL
-- 一级父级
SELECT
p1.pa_id,
p1.pa_name,
p1.parent_id,
p1.unit_name,
p1.buy_price,
p1.`level`,
p1.remark,
NULL AS part_num
FROM
ma_part_type_keeper mpk
JOIN ma_part_type c ON c.pa_id = mpk.type_id AND c.del_flag = '0'
JOIN ma_part_type p1 ON p1.pa_id = c.parent_id AND p1.del_flag = '0'
WHERE
mpk.user_id = #{userId}
-- 确保原始部件满足level=3时的part_num条件
AND (c.`level` != 3 OR EXISTS (
SELECT 1 FROM (
SELECT part_id, SUM(part_num) as part_num
FROM pa_person_storage
GROUP BY part_id
) pps
WHERE pps.part_id = c.pa_id
AND pps.part_num > 0
))
GROUP BY pa_id
UNION ALL
-- 二级父级(祖父级)
SELECT
p2.pa_id,
p2.pa_name,
p2.parent_id,
p2.unit_name,
p2.buy_price,
p2.`level`,
p2.remark,
NULL AS part_num
FROM
ma_part_type_keeper mpk
JOIN ma_part_type c ON c.pa_id = mpk.type_id AND c.del_flag = '0'
JOIN ma_part_type p1 ON p1.pa_id = c.parent_id AND p1.del_flag = '0'
JOIN ma_part_type p2 ON p2.pa_id = p1.parent_id AND p2.del_flag = '0'
WHERE
mpk.user_id = #{userId}
-- 确保原始部件满足level=3时的part_num条件
AND (c.`level` != 3 OR EXISTS (
SELECT 1 FROM (
SELECT part_id, SUM(part_num) as part_num
FROM pa_person_storage
GROUP BY part_id
) pps
WHERE pps.part_id = c.pa_id
AND pps.part_num > 0
))
GROUP BY pa_id
</select>
</mapper>

View File

@ -424,7 +424,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="rejectNum != null">
#{rejectNum},
</if>
0,
3,
<if test="createBy != null and createBy != ''">
#{createBy},
</if>

View File

@ -1005,6 +1005,22 @@
WHERE
id = #{id}
</select>
<select id="getPartNum" resultType="java.lang.Integer">
SELECT SUM(part_num) as partNum
FROM pa_person_storage
WHERE part_id = #{partId}
GROUP BY part_id
</select>
<select id="getPartList" resultType="com.bonus.material.repair.domain.RepairPart">
SELECT id,
part_id AS partId,
part_num AS partNum
FROM pa_person_storage
WHERE part_id = #{partId}
AND is_active = '1'
AND part_num > 0
ORDER BY part_num DESC
</select>
<update id="updateRepairedAndScrapNum">
update
@ -1049,4 +1065,12 @@
where
id = #{id}
</update>
<update id="updatePartNum">
update
pa_person_storage
set
part_num = part_num - #{partNum}
where
id=#{id}
</update>
</mapper>