Merge remote-tracking branch 'origin/master'

This commit is contained in:
hayu 2025-10-10 17:34:54 +08:00
commit ccbed741c7
9 changed files with 175 additions and 36 deletions

View File

@ -99,7 +99,6 @@ public class ClzSltAgreementInfoController extends BaseController {
}
}
/**
* 提交结算清单
*/

View File

@ -14,7 +14,7 @@ import java.util.List;
@Data
public class ClzSltApplyDTO extends BaseVO {
@ApiModelProperty("申请结算单位")
@ApiModelProperty("申请结算单位,数组形式")
private List<Integer> unitIds;
@ApiModelProperty("申请结算工程")

View File

@ -51,7 +51,7 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic
/**
* 进行结算审批
*
* @param sltAgreementApply
* @param sltAgreementApply 结算提交信息
*/
@Override
@Transactional(rollbackFor = Exception.class)
@ -265,24 +265,24 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic
});
}
// 返回之前对集合做去重处理根据外层的单位名称去重,保留每个单位名称的第一个
Set<String> seen = new HashSet<>();
List<MaterialSltInfoVo> dedup = new ArrayList<>(resultVoList.size());
for (MaterialSltInfoVo it : resultVoList) {
if (it == null) continue;
String key = normalize(it.getUnitName());
// 若不希望把 null 当作一个有效键可加if (key == null) continue;
if (key == null) continue;
if (seen.add(key)) {
dedup.add(it); // 第一次见到该单位名 -> 保留
}
}
return dedup;
}
/**
* 去除空行
*/
private static String normalize(String s) {
if (s == null) return null; // 若希望丢弃 null可直接返回 null 不参与去重键
return s.trim(); // 需要忽略大小写可用s.trim().toLowerCase(Locale.ROOT)
@ -307,9 +307,18 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic
sltInfoVo.setProjectName(sltInfoVo.getScrapList().get(0).getProjectName());
sltInfoVo.setUnitName(sltInfoVo.getScrapList().get(0).getUnitName());
}
// 合计一下总费用
sltInfoVo.setTotalCostAll(Optional.ofNullable(sltInfoVo.getLeaseCost()).orElse(BigDecimal.ZERO)
.add(Optional.ofNullable(sltInfoVo.getRepairCost()).orElse(BigDecimal.ZERO))
.add(Optional.ofNullable(sltInfoVo.getScrapCost()).orElse(BigDecimal.ZERO))
.add(Optional.ofNullable(sltInfoVo.getLoseCost()).orElse(BigDecimal.ZERO))
);
resultVoList.add(sltInfoVo);
}
/**
* 根据单位及工程查询待结算费用明细
* @param requestApplyDto 工程班组
@ -339,8 +348,8 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic
// 调用单个结算信息查询方法
MaterialSltInfoVo sltInfo = getSltInfo(sltAgreementInfo);
// 给外层的单位名称/工程名称赋值
if (sltInfo != null) {
// 给外层的单位名称/工程名称赋值
extractInnerNameToOuter(voList, sltInfo);
}
}

View File

@ -0,0 +1,35 @@
package com.bonus.material.push.enums;
import lombok.Getter;
/**
* @author : 洪超
* @version : 1.0
* @time : 2025-10-10 15:03
* @Description: 实施单位枚举
*/
@Getter
public enum IwsImpUnitEnum {
IMP_UNIT_HY(309, "安徽宏源电力建设有限公司"),
IMP_UNIT_SA(339, "安徽顺安电网建设有限公司"),
IMP_UNIT_BD(333, "变电分公司"),
IMP_UNIT_HYBD(309, "宏源变电工程处"),
IMP_UNIT_HYSD(309, "宏源送电工程处"),
IMP_UNIT_JJ(101, "机具(物流)分公司"),
IMP_UNIT_JXHFGS(344, "机械化分公司"),
IMP_UNIT_JXSY(337, "检修试验分公司"),
IMP_UNIT_JZFGS(338, "建筑分公司(消防分公司)"),
IMP_UNIT_SR(102, "送电二分公司"),
IMP_UNIT_SY(327, "送电一分公司"),
IMP_UNIT_YJFGS(346, "运检分公司(无人机作业中心)");
private final Integer impUnitId;
private final String impUnitName;
IwsImpUnitEnum(Integer impUnitId, String impUnitName) {
this.impUnitId = impUnitId;
this.impUnitName = impUnitName;
}
}

View File

@ -37,4 +37,8 @@ public interface ConsProjectLeaseMoneyMapper {
List<BmProject> getIwsProjectList();
void updateIwsProject(@Param("list") List<BmProject> list);
List<BmProject> getBmProjectIsExist();
int insertBmProject(@Param("list") List<BmProject> newProjects);
}

View File

@ -9,6 +9,7 @@ import com.bonus.material.push.domain.AccProjectLeaseMoneyBean;
import com.bonus.material.push.domain.ConsProjectLeaseMoneyBean;
import com.bonus.material.push.domain.IwsCostPushBean;
import com.bonus.material.push.domain.RentalCostsBean;
import com.bonus.material.push.enums.IwsImpUnitEnum;
import com.bonus.material.push.mapper.AccProjectLeaseMoneyMapper;
import com.bonus.material.push.mapper.ConsProjectLeaseMoneyMapper;
import com.bonus.material.push.mapper.IwsCostPushMapper;
@ -88,6 +89,52 @@ public class RentalCostsServiceImpl implements RentalCostsService {
consDao.updateIwsProject(list);
}
/***************将没有的工程插入到bm_project表中****************/
//1.获取bm_project表中已有的工程
List<BmProject> isExistList = consDao.getBmProjectIsExist();
//2.筛选出不在bm_project表中的工程
List<BmProject> newProjects = new ArrayList<>();
if (list != null && !list.isEmpty()) {
Set<String> existingExternalIds = isExistList.stream()
.map(BmProject::getExternalId) // 从每个 BmProject 对象中提取 externalId唯一标识
.collect(Collectors.toSet());
newProjects = list.stream()
.filter(project -> !existingExternalIds.contains(project.getExternalId())) // 判断当前工程的 externalId 是否不在已有 ID 集合中
.collect(Collectors.toList());
}
//3.如果有不存在的的工程则需要将其插入到bm_project表中
if (newProjects != null && !newProjects.isEmpty()) {
//4.定义实施单位通过impUnitName确定impUnit
for (BmProject project : newProjects) {
String impUnitName = project.getImpUnitName(); // 假设项目名称字段为proName
if(impUnitName!=null && !impUnitName.isEmpty()) {
// 遍历枚举查找项目名称中包含的单位名称
for (IwsImpUnitEnum unitEnum : IwsImpUnitEnum.values()) {
if (impUnitName.contains(unitEnum.getImpUnitName())) {
project.setImpUnit(String.valueOf(unitEnum.getImpUnitId())); // 假设setImpUnit方法
break; // 找到匹配就跳出内层循环
}
}
}
// 如果没有匹配到可以设置一个默认值或保持null
if (project.getImpUnit() == null) {
project.setImpUnit(null);
}
}
// 5.过滤掉impUnit为null的数据
newProjects = newProjects.stream()
.filter(project -> project.getImpUnit() != null)
.collect(Collectors.toList());
int res = consDao.insertBmProject(newProjects);
if (res == 0) {
throw new RuntimeException("新增bm_project失败");
}
}
}

View File

@ -280,8 +280,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT
saa.id as id, bai.agreement_id as agreementId, bai.agreement_code as agreementCode, saa.`code` as sltApplyCode,
bui.unit_id as unitId, bui.unit_name as unitName, bp.pro_id as projectId, bp.pro_name as projectName,
saa.remark, sad.money as costs, saa.audit_time as auditTime,
saa.`status` as sltStatus, sad.slt_type as sltType,
saa.remark, sad.money as costs, saa.audit_time as auditTime, sad.start_time as startTime, sad.end_time as endTime,
saa.`status` as sltStatus, sad.slt_type as sltType, sad.num, sad.price as leasePrice,
mt1.type_name as typeName, mt.type_name as modelName, mt.unit_name as mtUnitName
FROM
clz_slt_agreement_apply saa

View File

@ -1043,32 +1043,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getTeamInOrOutInfo" resultType="com.bonus.material.clz.domain.TeamVo">
SELECT DISTINCT
bzgl_bz.ssfbdw AS subcontractor,
bzgl_bz.bzmc AS teamName,
bzgl_bz.bzz_name AS teamLeaderName,
bzgl_bz.bz_status AS teamStatus,
CASE bzgl_bz.bz_status
WHEN '1' THEN '空闲'
WHEN '2' THEN '申报'
WHEN '3' THEN '进场'
ELSE '未知'
END AS teamStatusName,
bp.pro_id AS proId,
bzgl_bz.project_name AS projectName,
org_user.mobile AS teamLeaderPhone,
bzgl_bz.sfjs AS isDismiss,
CASE bzgl_bz.sfjs
WHEN '0' THEN '否'
WHEN '1' THEN '是'
ELSE '未知'
END AS isDismissName,
bzgl_bz.sjjcsj AS actualProcessTime,
bzgl_bz.sjccsj AS actualExitTime,
bp.imp_unit AS impUnit
sd.dept_name AS impUnitName,
bp.pro_center AS departName,
bzgl_bz.ssfbdw AS subcontractor,
bzgl_bz.bzmc AS teamName,
bzgl_bz.bzz_name AS teamLeaderName,
bzgl_bz.bz_status AS teamStatus,
CASE bzgl_bz.bz_status
WHEN '1' THEN '空闲'
WHEN '2' THEN '申报'
WHEN '3' THEN '进场'
ELSE '未知'
END AS teamStatusName,
bp.pro_id AS proId,
bzgl_bz.project_name AS projectName,
org_user.mobile AS teamLeaderPhone,
bzgl_bz.sfjs AS isDismiss,
CASE bzgl_bz.sfjs
WHEN '0' THEN '否'
WHEN '1' THEN '是'
ELSE '未知'
END AS isDismissName,
bzgl_bz.sjjcsj AS actualProcessTime,
bzgl_bz.sjccsj AS actualExitTime,
bp.imp_unit AS impUnit
FROM
`micro-tool`.bzgl_bz bzgl_bz
LEFT JOIN `uni_org`.org_user org_user ON bzgl_bz.bzz_idcard = org_user.id_card
LEFT JOIN bm_project bp ON bp.external_id = bzgl_bz.project_id
`micro-tool`.bzgl_bz bzgl_bz
LEFT JOIN `uni_org`.org_user org_user ON bzgl_bz.bzz_idcard = org_user.id_card
LEFT JOIN bm_project bp ON bp.external_id = bzgl_bz.project_id
LEFT JOIN sys_dept sd ON sd.dept_id = bp.imp_unit
WHERE 1 = 1
<if test="proId != null and proId != ''">
AND bp.pro_id = #{proId}
@ -1076,6 +1079,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="impUnit != null and impUnit != ''">
AND bp.imp_unit = #{impUnit}
</if>
<if test="impUnitName != null and impUnitName != ''">
AND sd.dept_name like concat('%',#{impUnitName},'%')
</if>
<if test="departName != null and departName != ''">
AND bp.pro_center like concat('%',#{departName},'%')
</if>
<if test="teamName != null and teamName != ''">
AND bzgl_bz.bzmc like concat('%',#{teamName},'%')
</if>
<if test="keyWord != null and keyWord != ''">
AND (
bzgl_bz.ssfbdw like concat('%',#{keyWord},'%') or

View File

@ -200,6 +200,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getIwsProjectList" resultType="com.bonus.material.basic.domain.BmProject">
select
dfs.id as externalId,
dfs.name as proName,
dfs.project_leader_name as proManager,
case dfs.project_type_id
when 1 then 0
when 2 then 1
else ''
end as proTypeId,
dfs.pc_no as proCode,
case dfs.engineer_type
when '基建' then 0
when '用户工程' then 1
when '技改大修' then 2
else 3
end as proNature,
case dfs.project_status
when '开工准备' then 0
when '在建' then 1
@ -208,7 +222,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
when '竣工' then 4
else dfs.project_status
end as proStatus,
dfs.real_end_date as actualEndDate
dfs.contract_body as contractPart,
dfs.project_dept as proCenter,
dfs.real_start_date as actualStartDate,
dfs.real_end_date as actualEndDate,
dfs.apply_company as impUnitName
from data_center.dx_fb_son dfs
</select>
@ -221,4 +239,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE external_id = #{item.externalId}
</foreach>
</update>
<select id="getBmProjectIsExist" resultType="com.bonus.material.basic.domain.BmProject">
select
distinct external_id as externalId
from bm_project
where external_id is not null
</select>
<insert id="insertBmProject">
insert into bm_project (pro_name,external_id,pro_type_id,pro_manager,create_by,create_time,del_flag,pro_code,imp_unit,pro_nature,pro_status,contract_part,pro_center,actual_start_date,actual_end_date)
values
<foreach collection="list" item="item" separator=",">
(#{item.proName},#{item.externalId},#{item.proTypeId},#{item.proManager},1,now(),0,#{item.proCode},#{item.impUnit},#{item.proNature},#{item.proStatus},#{item.contractPart},#{item.proCenter},#{item.actualStartDate},#{item.actualEndDate})
</foreach>
</insert>
</mapper>