材料站点导出及查询优化

This commit is contained in:
liux 2025-10-10 20:56:27 +08:00
parent b252062602
commit b75ab65778
7 changed files with 311 additions and 166 deletions

View File

@ -0,0 +1,83 @@
package com.bonus.material.clz.domain.back;
import com.bonus.common.core.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author xliu
* @date 2025/10/10 15:41
*/
@Data
public class MaterialBackExportVO {
@ApiModelProperty(value = "序号")
@Excel(name = "序号", isSequence = true, sort = 0)
private String serialNumber;
@Excel(name = "分公司")
@ApiModelProperty(value = "分公司")
private String impUnitName;
@Excel(name = "退料工程")
@ApiModelProperty(value = "退料工程")
private String proName;
@Excel(name = "单位名称")
@ApiModelProperty(value = "单位名称")
private String unitName;
@Excel(name = "退料人")
@ApiModelProperty(value = "退料人")
private String backPerson;
@ApiModelProperty(value = "物资类型")
private String materialType;
@Excel(name = "退料单号")
@ApiModelProperty(value = "退料单号")
private String code;
@ApiModelProperty(value = "工器具名称")
@Excel(name = "工器具名称")
private String materialName;
@Excel(name = "规格型号")
@ApiModelProperty(value = "规格型号")
private String typeModelName;
@ApiModelProperty(value = "类型名称")
@Excel(name = "类型名称")
private String typeCode;
/** 退料数量 */
@ApiModelProperty(value = "预退数量")
@Excel(name = "预退数量", cellType = Excel.ColumnType.NUMERIC)
private BigDecimal backNum;
@Excel(name = "退料数量",cellType = Excel.ColumnType.NUMERIC)
@ApiModelProperty(value = "退料数量")
private BigDecimal outNum;
@ApiModelProperty(value = "计量单位")
@Excel(name = "计量单位")
private String unit;
@Excel(name = "退料时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "退料时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date backTime;
}

View File

@ -4,6 +4,7 @@ import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.clz.domain.back.MaterialBackApplyDetails;
import com.bonus.material.clz.domain.back.MaterialBackApplyInfo;
import com.bonus.material.clz.domain.back.MaterialBackApplyTotalInfo;
import com.bonus.material.clz.domain.back.MaterialBackExportVO;
import com.bonus.material.clz.domain.vo.back.MaterialBackApplyRequestVo;
import com.bonus.material.clz.domain.vo.back.MaterialBackMaCodeVo;
@ -120,4 +121,6 @@ public interface MaterialBackApplyInfoService {
* @return
*/
AjaxResult getMachine(MaterialBackApplyInfo dto);
List<MaterialBackExportVO> exportBackInfoExcl(MaterialBackApplyInfo bean);
}

View File

@ -50,7 +50,6 @@ import com.bonus.material.work.domain.SysWorkflowRecordHistory;
import com.bonus.material.work.domain.SysWorkflowType;
import com.bonus.material.work.mapper.*;
import com.bonus.system.api.domain.SysUser;
import com.sun.org.apache.bcel.internal.generic.NEW;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.util.UriComponentsBuilder;

View File

@ -13,6 +13,7 @@ import com.bonus.common.biz.enums.TmTaskTypeEnum;
import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.bean.BeanUtils;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.material.back.domain.BackApplyInfo;
@ -20,6 +21,7 @@ import com.bonus.material.back.domain.MaCodeDto;
import com.bonus.material.back.domain.vo.MaCodeVo;
import com.bonus.material.basic.mapper.BmFileInfoMapper;
import com.bonus.material.clz.domain.BmTeam;
import com.bonus.material.clz.domain.back.MaterialBackExportVO;
import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo;
import com.bonus.material.clz.mapper.IwsTeamUserMapper;
import com.bonus.material.clz.mapper.MaterialMachineMapper;
@ -226,6 +228,7 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe
*/
@Override
public List<MaterialBackApplyInfo> getTotalList(MaterialBackApplyInfo backApplyInfo) {
long time1 = System.currentTimeMillis();
Set<String> userRoles = SecurityUtils.getLoginUser().getRoles();
String username = SecurityUtils.getLoginUser().getUsername();
// 检查用户是否具有特殊角色
@ -234,16 +237,23 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe
if (!hasSpecialRole) {
// 根据用户名判断用户是否为班组长
teamData = materialMachineMapper.getTeamData(username);
long time2 = System.currentTimeMillis();
System.err.println("查询用户信息耗时time2 - time1" + (time2 - time1));
if (teamData == null) {
// 根据用户名查询项目部信息
List<String> departId = mapper.getDepartId(username);
long time3 = System.currentTimeMillis();
System.err.println("查询用户所属项目部信息耗时time3 - time2" + (time3 - time2));
// 根据项目部id查询工程信息
List<String> projectIdList = mapper.getProjectId(departId);
if (!org.springframework.util.CollectionUtils.isEmpty(projectIdList)) {
backApplyInfo.setProjectIdList(projectIdList);
}
long time4 = System.currentTimeMillis();
System.err.println("查询用户所属项目部工程信息耗时time4 - time3" + (time4 - time3));
}
}
long time5 = System.currentTimeMillis();
List<MaterialBackApplyInfo> list = materialBackInfoMapper.getTotalList(backApplyInfo);
if (!hasSpecialRole) {
Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
@ -252,6 +262,8 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe
list.removeIf(info -> !deptId.toString().equals(info.getImpUnit()));
}
}
long time6 = System.currentTimeMillis();
System.err.println("查询总站点退料记录数据耗时time6 - time5" + (time6 - time5));
if (!org.springframework.util.CollectionUtils.isEmpty(list)) {
// 班组长权限
if (teamData != null) {
@ -264,6 +276,8 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe
list = filterList(list, username);
}*/
}
long time7 = System.currentTimeMillis();
System.err.println("过滤数据耗时time7 - time6" + (time7 - time6));
// 新增typeName过滤条件
if (!org.springframework.util.CollectionUtils.isEmpty(list) && !StringUtils.isBlank(backApplyInfo.getTypeName())) {
list = list.stream()
@ -281,6 +295,8 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe
// 查询所有未结算的工程
List<String> projectIdList = mapper.getUnsettledProId();
long time8 = System.currentTimeMillis();
System.err.println("查询所有未结算的工程耗时time8 - time7" + (time8 - time7));
// 使用 HashSet 来加速查找过程
Set<String> unsettledProjectIds = new HashSet<>(projectIdList);
// 过滤掉不在未结算工程集合内的设备
@ -294,6 +310,8 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe
iterator.remove();
}
}
long time9 = System.currentTimeMillis();
System.err.println("过滤未结算工程耗时time9 - time8" + (time9 - time8));
}
return list;
}
@ -1303,4 +1321,26 @@ public class MaterialBackApplyInfoServiceImpl implements MaterialBackApplyInfoSe
(item.getBackPerson() != null && item.getBackPerson().contains(keyWord)) ||
(item.getCode() != null && item.getCode().contains(keyWord));
}
@Override
public List<MaterialBackExportVO> exportBackInfoExcl(MaterialBackApplyInfo backApplyInfo) {
List<MaterialBackApplyInfo> list = this.getTotalList(backApplyInfo);
List<MaterialBackExportVO> result = new ArrayList<>();
for (MaterialBackApplyInfo bean: list) {
bean.setParentId(bean.getId());
List<MaterialBackApplyInfo> details = this.getDetailsList(bean);
for (MaterialBackApplyInfo detail: details){
MaterialBackExportVO vo = new MaterialBackExportVO();
BeanUtils.copyProperties(bean, vo);
vo.setUnit(detail.getUnitNames());
vo.setOutNum(detail.getBackNum());
vo.setBackNum(detail.getBackNum());
vo.setTypeModelName(detail.getModelCode());
vo.setMaterialName(detail.getTypeName());
vo.setTypeCode(detail.getTypeCode());
result.add( vo);
}
}
return result;
}
}

View File

@ -10,10 +10,14 @@ spring:
# 服务注册地址
server-addr: 127.0.0.1:8848
namespace: sgzb_bns
username: nacos
password: nacos
config:
# 配置中心地址
server-addr: 127.0.0.1:8848
namespace: sgzb_bns
username: nacos
password: nacos
# 配置文件格式
file-extension: yml
# 共享配置

View File

@ -1,7 +1,7 @@
<?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">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.material.clz.mapper.MaterialBackInfoMapper">
<insert id="insertBackApplyInfo" useGeneratedKeys="true" keyProperty="id">
insert into clz_back_apply_info
@ -343,7 +343,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
END isZz,
bu.bzz_idcard AS idCard
FROM
back_apply_info bai
(select * from back_apply_info
<where>
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
and create_time between concat(#{startTime},' 00:00:00') and concat(#{endTime},' 23:59:59')
</if>
</where>
) bai
LEFT JOIN back_check_details bad on bad.parent_id = bai.id
LEFT JOIN tm_task tt on tt.task_id = bai.task_id
LEFT JOIN tm_task_agreement tta on tta.task_id = tt.task_id
@ -379,9 +385,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="proId != null">
and bp.pro_id = #{proId}
</if>
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
<![CDATA[and DATE_FORMAT( bai.create_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime} ]]>
</if>
<!-- <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">-->
<!-- <![CDATA[and DATE_FORMAT( bai.create_time, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime} ]]>-->
<!-- </if>-->
<if test="appTaskStatus != null and appTaskStatus == 0">
and tt.task_status = #{appTaskStatus}
</if>
@ -443,7 +449,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bp.pro_name AS proName,
bai.direct_audit_by AS directAuditBy,
bai.back_sign_url AS backSignUrl,
bai.back_sign_type AS backSignType,
bai.back_sign_type AS backSignType
bp.external_id AS externalId
FROM
clz_back_apply_info bai

View File

@ -1173,15 +1173,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY bzgl_bz.bzmc
</select>
<select id="getUnsettledProId" resultType="java.lang.String">
SELECT DISTINCT bp.pro_id as proId
<!-- 数据量小的时候用上面的SQL数据量大的时候用下面的sql -->
SELECT bp.pro_id as proId
FROM bm_project bp
WHERE EXISTS(
SELECT 1
WHERE bp.pro_id IS NOT NULL
AND bp.pro_id IN (
SELECT bai.project_id
FROM bm_agreement_info bai
INNER JOIN slt_agreement_info sai ON bai.agreement_id = sai.agreement_id
WHERE bai.project_id = bp.pro_id
AND sai.is_slt = 0
WHERE sai.is_slt = 0
)
AND bp.pro_id IS NOT NULL
<!-- SELECT DISTINCT bp.pro_id as proId-->
<!-- FROM bm_project bp-->
<!-- WHERE EXISTS(-->
<!-- SELECT 1-->
<!-- FROM bm_agreement_info bai-->
<!-- INNER JOIN slt_agreement_info sai ON bai.agreement_id = sai.agreement_id-->
<!-- WHERE bai.project_id = bp.pro_id-->
<!-- AND sai.is_slt = 0-->
<!-- )-->
<!-- AND bp.pro_id IS NOT NULL-->
</select>
</mapper>