供应功能

This commit is contained in:
hongchao 2025-11-20 14:35:40 +08:00
parent 90853274b2
commit c6c6e37496
2 changed files with 115 additions and 49 deletions

View File

@ -654,45 +654,45 @@ public class ComplexQueryServiceImpl implements ComplexQueryService {
// 1查询工程对应的物资名称型号需求数量已供数量 // 1查询工程对应的物资名称型号需求数量已供数量
List<ProjUsingRecord> list = complexQueryMapper.getStatisticsList(bean); List<ProjUsingRecord> list = complexQueryMapper.getStatisticsList(bean);
// 创建缓存Mapkey为typeIdvalue为对应的库存信息 // // 创建缓存Mapkey为typeIdvalue为对应的库存信息
Map<Long, RetainedEquipmentInfo> inventoryCache = new HashMap<>(); // Map<Long, RetainedEquipmentInfo> inventoryCache = new HashMap<>();
for (ProjUsingRecord item : list) { // for (ProjUsingRecord item : list) {
// 2计算需求数量已供数量的差值 // // 2计算需求数量已供数量的差值
BigDecimal needNum = new BigDecimal(item.getNeedNum()); // BigDecimal needNum = new BigDecimal(item.getNeedNum());
BigDecimal supplyNum = new BigDecimal(item.getSupplyNum()); // BigDecimal supplyNum = new BigDecimal(item.getSupplyNum());
BigDecimal diffNum = needNum.subtract(supplyNum); // BigDecimal diffNum = needNum.subtract(supplyNum);
item.setDiffNum(diffNum.toString()); // item.setDiffNum(diffNum.toString());
//
// 3查询该工程设备的在用数量 // // 3查询该工程设备的在用数量
ProjUsingRecord projUsingRecord3 = complexQueryMapper.getUsNum(item); // ProjUsingRecord projUsingRecord3 = complexQueryMapper.getUsNum(item);
if (projUsingRecord3 != null && projUsingRecord3.getUsNum() != null) { // if (projUsingRecord3 != null && projUsingRecord3.getUsNum() != null) {
item.setUsNum(projUsingRecord3.getUsNum()); // item.setUsNum(projUsingRecord3.getUsNum());
} else { // } else {
item.setUsNum(BigDecimal.ZERO); // item.setUsNum(BigDecimal.ZERO);
} // }
//
// 4根据typeId查询库存信息使用缓存优化 // // 4根据typeId查询库存信息使用缓存优化
Long typeId = Long.valueOf(item.getTypeId()); // Long typeId = Long.valueOf(item.getTypeId());
//
RetainedEquipmentInfo bean1 = inventoryCache.get(typeId); // RetainedEquipmentInfo bean1 = inventoryCache.get(typeId);
if (bean1 == null) { // if (bean1 == null) {
// 如果缓存中没有则查询数据库并放入缓存 // // 如果缓存中没有则查询数据库并放入缓存
bean1 = complexQueryMapper.selectInventory(item); // bean1 = complexQueryMapper.selectInventory(item);
inventoryCache.put(typeId, bean1); // inventoryCache.put(typeId, bean1);
} // }
//
// 设置库存相关信息 // // 设置库存相关信息
item.setStoreNum(bean1.getStoreNum()); // item.setStoreNum(bean1.getStoreNum());
item.setRepairNum(bean1.getRepairNum()); // item.setRepairNum(bean1.getRepairNum());
item.setAllUsNum(bean1.getUsNum()); // item.setAllUsNum(bean1.getUsNum());
//
// 使用三元运算符处理null值 // // 使用三元运算符处理null值
BigDecimal inputNum = bean1.getInputNum() != null ? bean1.getInputNum() : BigDecimal.ZERO; // BigDecimal inputNum = bean1.getInputNum() != null ? bean1.getInputNum() : BigDecimal.ZERO;
BigDecimal repairInputNum = bean1.getRepairInputNum() != null ? bean1.getRepairInputNum() : BigDecimal.ZERO; // BigDecimal repairInputNum = bean1.getRepairInputNum() != null ? bean1.getRepairInputNum() : BigDecimal.ZERO;
item.setInputNum(inputNum.add(repairInputNum)); // item.setInputNum(inputNum.add(repairInputNum));
item.setAllNum(bean1.getAllNum()); // item.setAllNum(bean1.getAllNum());
} // }
return list; return list;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -565,24 +565,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="getStatisticsList" resultType="com.bonus.material.basic.domain.ProjUsingRecord"> <select id="getStatisticsList" resultType="com.bonus.material.basic.domain.ProjUsingRecord">
SELECT SELECT
typeId,
proId, proId,
impUnitName,
proName, proName,
typeName, jiJuType,
modelName as typeModelName,
unit,
SUM(needNum) as needNum, SUM(needNum) as needNum,
SUM(outNum) as supplyNum SUM(outNum) as supplyNum,
SUM(outNum) - SUM(needNum) as diffNum
FROM ( FROM (
-- 语句一的结果作为outNum -- 语句一的结果作为outNum
SELECT SELECT
mt.type_id as typeId, mt.type_id as typeId,
bp.pro_id as proId, bp.pro_id as proId,
sd.dept_name AS impUnitName,
bp.pro_name as proName, bp.pro_name as proName,
mt2.type_name as typeName, mt2.type_name as typeName,
mt.type_name as modelName, mt.type_name as modelName,
mt.unit_name as unit, mt.unit_name as unit,
CASE mt.jiju_type
WHEN 2 THEN
'安全工器具'
ELSE
'施工机具'
END jiJuType,
SUM(sai.num) as outNum, SUM(sai.num) as outNum,
0 as needNum 0 as needNum
FROM FROM
@ -591,6 +596,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN ma_type mt2 on mt2.type_id=mt.parent_id LEFT JOIN ma_type mt2 on mt2.type_id=mt.parent_id
LEFT JOIN bm_agreement_info bai on sai.agreement_id=bai.agreement_id LEFT JOIN bm_agreement_info bai on sai.agreement_id=bai.agreement_id
LEFT JOIN bm_project bp on bai.project_id=bp.pro_id LEFT JOIN bm_project bp on bai.project_id=bp.pro_id
LEFT JOIN sys_dept sd ON sd.dept_id = bp.imp_unit
WHERE WHERE
sai.lease_id is not null sai.lease_id is not null
and bp.pro_name is not null and bp.pro_name is not null
@ -620,24 +626,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT SELECT
mt.type_id as typeId, mt.type_id as typeId,
bp.pro_id as proId, bp.pro_id as proId,
sd.dept_name AS impUnitName,
bp.pro_name as proName, bp.pro_name as proName,
mt2.type_name as typeName, mt2.type_name as typeName,
mt.type_name as modelName, mt.type_name as modelName,
mt.unit_name as unit, mt.unit_name as unit,
CASE mt.jiju_type
WHEN 2 THEN
'安全工器具'
ELSE
'施工机具'
END jiJuType,
0 as outNum, 0 as outNum,
SUM(lad.pre_num) as needNum SUM(lad.pre_num) as needNum
FROM FROM
lease_apply_details lad lease_apply_details lad
LEFT JOIN lease_apply_info lai on lad.parent_id=lai.id LEFT JOIN lease_apply_info lai on lad.parent_id=lai.id
LEFT JOIN tm_task tt on lai.task_id = tt.task_id LEFT JOIN tm_task tt on lai.task_id = tt.task_id
LEFT JOIN tm_task_agreement tta on tt.task_id = tta.task_id
LEFT JOIN bm_agreement_info bai on tta.agreement_id = bai.agreement_id
LEFT JOIN ma_type mt on mt.type_id=lad.type_id LEFT JOIN ma_type mt on mt.type_id=lad.type_id
LEFT JOIN ma_type mt2 on mt2.type_id=mt.parent_id LEFT JOIN ma_type mt2 on mt2.type_id=mt.parent_id
LEFT JOIN bm_project bp on lai.project_id=bp.pro_id LEFT JOIN bm_project bp on bai.project_id=bp.pro_id
LEFT JOIN sys_dept sd ON sd.dept_id = bp.imp_unit
WHERE WHERE
bp.pro_name is not null bp.pro_name is not null
and mt.del_flag='0' and mt.del_flag=0
and tt.task_type = '19' and tt.task_type = '2'
and tt.task_status in (1, 3, 4, 5) and tt.task_status in (3, 4)
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''"> <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
AND DATE_FORMAT( lad.create_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime} AND DATE_FORMAT( lad.create_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime}
</if> </if>
@ -656,8 +672,58 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and mt2.type_name like concat('%', #{typeName}, '%') and mt2.type_name like concat('%', #{typeName}, '%')
</if> </if>
GROUP BY bp.pro_id, mt.type_id GROUP BY bp.pro_id, mt.type_id
UNION ALL
-- 语句三的结果作为needNum
SELECT
mt.type_id as typeId,
bp.pro_id as proId,
sd.dept_name AS impUnitName,
bp.pro_name as proName,
mt2.type_name as typeName,
mt.type_name as modelName,
mt.unit_name as unit,
CASE mt.jiju_type
WHEN 2 THEN
'安全工器具'
ELSE
'施工机具'
END jiJuType,
0 as outNum,
SUM(lpd.num) as needNum
FROM
lease_publish_details lpd
LEFT JOIN lease_apply_info lai on lpd.parent_id=lai.id
LEFT JOIN tm_task tt on lai.task_id = tt.task_id
LEFT JOIN ma_type mt on mt.type_id=lpd.type_id
LEFT JOIN ma_type mt2 on mt2.type_id=mt.parent_id
LEFT JOIN bm_project bp on lai.project_id=bp.pro_id
LEFT JOIN sys_dept sd ON sd.dept_id = bp.imp_unit
WHERE
bp.pro_name is not null
and mt.del_flag='0'
and tt.task_type = '19'
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
AND DATE_FORMAT( lpd.create_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime}
</if>
<if test="keyWord != null and keyWord != ''">
and (
mt2.type_name like concat('%', #{keyWord}, '%') or
mt.type_name like concat('%', #{keyWord}, '%') or
bp.pro_name like concat('%', #{keyWord}, '%') or
mt.unit_name like concat('%', #{keyWord}, '%')
)
</if>
<if test="proName != null and proName != ''">
and bp.pro_name like concat('%', #{proName}, '%')
</if>
<if test="typeName != null and typeName != ''">
and mt2.type_name like concat('%', #{typeName}, '%')
</if>
GROUP BY bp.pro_id, mt.type_id
) combined ) combined
GROUP BY typeId, proId GROUP BY proId,jiJuType
ORDER BY proId ORDER BY proId
</select> </select>
<select id="getUsNum" resultType="com.bonus.material.basic.domain.ProjUsingRecord"> <select id="getUsNum" resultType="com.bonus.material.basic.domain.ProjUsingRecord">