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 @Data
public class ClzSltApplyDTO extends BaseVO { public class ClzSltApplyDTO extends BaseVO {
@ApiModelProperty("申请结算单位") @ApiModelProperty("申请结算单位,数组形式")
private List<Integer> unitIds; private List<Integer> unitIds;
@ApiModelProperty("申请结算工程") @ApiModelProperty("申请结算工程")

View File

@ -51,7 +51,7 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic
/** /**
* 进行结算审批 * 进行结算审批
* *
* @param sltAgreementApply * @param sltAgreementApply 结算提交信息
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -265,24 +265,24 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic
}); });
} }
// 返回之前对集合做去重处理根据外层的单位名称去重,保留每个单位名称的第一个 // 返回之前对集合做去重处理根据外层的单位名称去重,保留每个单位名称的第一个
Set<String> seen = new HashSet<>(); Set<String> seen = new HashSet<>();
List<MaterialSltInfoVo> dedup = new ArrayList<>(resultVoList.size()); List<MaterialSltInfoVo> dedup = new ArrayList<>(resultVoList.size());
for (MaterialSltInfoVo it : resultVoList) { for (MaterialSltInfoVo it : resultVoList) {
if (it == null) continue; if (it == null) continue;
String key = normalize(it.getUnitName()); String key = normalize(it.getUnitName());
// 若不希望把 null 当作一个有效键可加if (key == null) continue; if (key == null) continue;
if (seen.add(key)) { if (seen.add(key)) {
dedup.add(it); // 第一次见到该单位名 -> 保留 dedup.add(it); // 第一次见到该单位名 -> 保留
} }
} }
return dedup; return dedup;
} }
/**
* 去除空行
*/
private static String normalize(String s) { private static String normalize(String s) {
if (s == null) return null; // 若希望丢弃 null可直接返回 null 不参与去重键 if (s == null) return null; // 若希望丢弃 null可直接返回 null 不参与去重键
return s.trim(); // 需要忽略大小写可用s.trim().toLowerCase(Locale.ROOT) 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.setProjectName(sltInfoVo.getScrapList().get(0).getProjectName());
sltInfoVo.setUnitName(sltInfoVo.getScrapList().get(0).getUnitName()); 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); resultVoList.add(sltInfoVo);
} }
/** /**
* 根据单位及工程查询待结算费用明细 * 根据单位及工程查询待结算费用明细
* @param requestApplyDto 工程班组 * @param requestApplyDto 工程班组
@ -339,8 +348,8 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic
// 调用单个结算信息查询方法 // 调用单个结算信息查询方法
MaterialSltInfoVo sltInfo = getSltInfo(sltAgreementInfo); MaterialSltInfoVo sltInfo = getSltInfo(sltAgreementInfo);
// 给外层的单位名称/工程名称赋值
if (sltInfo != null) { if (sltInfo != null) {
// 给外层的单位名称/工程名称赋值
extractInnerNameToOuter(voList, sltInfo); 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(); List<BmProject> getIwsProjectList();
void updateIwsProject(@Param("list") List<BmProject> list); 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.ConsProjectLeaseMoneyBean;
import com.bonus.material.push.domain.IwsCostPushBean; import com.bonus.material.push.domain.IwsCostPushBean;
import com.bonus.material.push.domain.RentalCostsBean; 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.AccProjectLeaseMoneyMapper;
import com.bonus.material.push.mapper.ConsProjectLeaseMoneyMapper; import com.bonus.material.push.mapper.ConsProjectLeaseMoneyMapper;
import com.bonus.material.push.mapper.IwsCostPushMapper; import com.bonus.material.push.mapper.IwsCostPushMapper;
@ -88,6 +89,52 @@ public class RentalCostsServiceImpl implements RentalCostsService {
consDao.updateIwsProject(list); 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 SELECT
saa.id as id, bai.agreement_id as agreementId, bai.agreement_code as agreementCode, saa.`code` as sltApplyCode, 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, 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.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, 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 mt1.type_name as typeName, mt.type_name as modelName, mt.unit_name as mtUnitName
FROM FROM
clz_slt_agreement_apply saa 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 id="getTeamInOrOutInfo" resultType="com.bonus.material.clz.domain.TeamVo">
SELECT DISTINCT SELECT DISTINCT
bzgl_bz.ssfbdw AS subcontractor, sd.dept_name AS impUnitName,
bzgl_bz.bzmc AS teamName, bp.pro_center AS departName,
bzgl_bz.bzz_name AS teamLeaderName, bzgl_bz.ssfbdw AS subcontractor,
bzgl_bz.bz_status AS teamStatus, bzgl_bz.bzmc AS teamName,
CASE bzgl_bz.bz_status bzgl_bz.bzz_name AS teamLeaderName,
WHEN '1' THEN '空闲' bzgl_bz.bz_status AS teamStatus,
WHEN '2' THEN '申报' CASE bzgl_bz.bz_status
WHEN '3' THEN '进场' WHEN '1' THEN '空闲'
ELSE '未知' WHEN '2' THEN '申报'
END AS teamStatusName, WHEN '3' THEN '进场'
bp.pro_id AS proId, ELSE '未知'
bzgl_bz.project_name AS projectName, END AS teamStatusName,
org_user.mobile AS teamLeaderPhone, bp.pro_id AS proId,
bzgl_bz.sfjs AS isDismiss, bzgl_bz.project_name AS projectName,
CASE bzgl_bz.sfjs org_user.mobile AS teamLeaderPhone,
WHEN '0' THEN '否' bzgl_bz.sfjs AS isDismiss,
WHEN '1' THEN '是' CASE bzgl_bz.sfjs
ELSE '未知' WHEN '0' THEN '否'
END AS isDismissName, WHEN '1' THEN '是'
bzgl_bz.sjjcsj AS actualProcessTime, ELSE '未知'
bzgl_bz.sjccsj AS actualExitTime, END AS isDismissName,
bp.imp_unit AS impUnit bzgl_bz.sjjcsj AS actualProcessTime,
bzgl_bz.sjccsj AS actualExitTime,
bp.imp_unit AS impUnit
FROM FROM
`micro-tool`.bzgl_bz bzgl_bz `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 `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 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 WHERE 1 = 1
<if test="proId != null and proId != ''"> <if test="proId != null and proId != ''">
AND bp.pro_id = #{proId} AND bp.pro_id = #{proId}
@ -1076,6 +1079,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="impUnit != null and impUnit != ''"> <if test="impUnit != null and impUnit != ''">
AND bp.imp_unit = #{impUnit} AND bp.imp_unit = #{impUnit}
</if> </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 != ''"> <if test="keyWord != null and keyWord != ''">
AND ( AND (
bzgl_bz.ssfbdw like concat('%',#{keyWord},'%') or 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 id="getIwsProjectList" resultType="com.bonus.material.basic.domain.BmProject">
select select
dfs.id as externalId, 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 case dfs.project_status
when '开工准备' then 0 when '开工准备' then 0
when '在建' then 1 when '在建' then 1
@ -208,7 +222,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
when '竣工' then 4 when '竣工' then 4
else dfs.project_status else dfs.project_status
end as proStatus, 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 from data_center.dx_fb_son dfs
</select> </select>
@ -221,4 +239,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE external_id = #{item.externalId} WHERE external_id = #{item.externalId}
</foreach> </foreach>
</update> </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> </mapper>