This commit is contained in:
hayu 2025-09-05 16:49:01 +08:00
parent b5ca9c5f81
commit ac92abc828
6 changed files with 374 additions and 0 deletions

View File

@ -13,6 +13,7 @@ import com.bonus.material.basic.ProjUsingRecordExports;
import com.bonus.material.basic.domain.*;
import com.bonus.material.basic.domain.vo.MaTypeSelectInfo;
import com.bonus.material.basic.service.ComplexQueryService;
import com.bonus.material.ma.domain.Type;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.api.model.LoginUser;
import io.swagger.annotations.Api;
@ -533,4 +534,30 @@ public class ComplexQueryController extends BaseController {
ExcelUtil<ProjUsingRecordExports> util = new ExcelUtil<>(ProjUsingRecordExports.class);
util.exportExcel(response, exportList, "总在用工程明细");
}
/**
* 运维管理---库存操作日志列表
* @param bean
* @return
*/
@ApiOperation(value = "运维管理---库存操作日志列表")
@GetMapping("/getStorageNumLogList")
public AjaxResult getStorageNumLogList(Type bean) {
startPage();
List<Type> pageList = complexQueryService.getStorageNumLogList(bean);
return AjaxResult.success(getDataTable(pageList));
}
/**
* 运维管理---库存操作日志列表--详情
* @param bean
* @return
*/
@ApiOperation(value = "运维管理---库存操作日志列表--详情")
@GetMapping("/getStorageNumLogDetails")
public AjaxResult getStorageNumLogDetails(Type bean) {
startPage();
List<Type> pageList = complexQueryService.getStorageNumLogDetails(bean);
return AjaxResult.success(getDataTable(pageList));
}
}

View File

@ -2,6 +2,7 @@ package com.bonus.material.basic.mapper;
import com.bonus.material.basic.domain.*;
import com.bonus.material.basic.domain.vo.MaTypeSelectInfo;
import com.bonus.material.ma.domain.Type;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -197,4 +198,39 @@ public interface ComplexQueryMapper {
* @return
*/
List<RetainedEquipmentInfo> getPartPersonNum(RetainedEquipmentInfo bean);
/**
* 获取库存变化日志
* @param bean
* @return
*/
List<Type> getStorageNumLogList(Type bean);
/**
* 获取昨日库存数量
* @param item
* @return
*/
Type getYesterdayStorageNum(Type item);
/**
* 获取今日库存数量
* @param item
* @return
*/
Type getNewStorageNum(Type item);
/**
* 获取库存变化日志详情
* @param bean
* @return
*/
List<Type> getStorageNumLogDetails(Type bean);
/**
* 获取库存数量
* @param item
* @return
*/
Type getTotalStorageNumLog(Type item);
}

View File

@ -2,6 +2,7 @@ package com.bonus.material.basic.service;
import com.bonus.material.basic.domain.*;
import com.bonus.material.basic.domain.vo.MaTypeSelectInfo;
import com.bonus.material.ma.domain.Type;
import java.util.List;
@ -137,4 +138,18 @@ public interface ComplexQueryService {
* @return
*/
List<RetainedEquipmentInfo> getPartPersonNum(RetainedEquipmentInfo bean);
/**
* 库存操作日志列表
* @param bean
* @return
*/
List<Type> getStorageNumLogList(Type bean);
/**
* 库存操作日志列表详情
* @param bean
* @return
*/
List<Type> getStorageNumLogDetails(Type bean);
}

View File

@ -9,6 +9,7 @@ import com.bonus.material.basic.domain.*;
import com.bonus.material.basic.domain.vo.MaTypeSelectInfo;
import com.bonus.material.basic.mapper.ComplexQueryMapper;
import com.bonus.material.basic.service.ComplexQueryService;
import com.bonus.material.ma.domain.Type;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -705,4 +706,75 @@ public class ComplexQueryServiceImpl implements ComplexQueryService {
bean.setUserId(userId);
return complexQueryMapper.getPartPersonNum(bean);
}
@Override
public List<Type> getStorageNumLogList(Type bean) {
try {
List<Type> list = complexQueryMapper.getStorageNumLogList(bean);
for (Type item : list){
/* 根据开始结束时间查询昨日库存当日库存
* 昨日库存是开始时间之前的库存当前库存是结束时间的库存
* 昨日库存逻辑梳理
* 1正常情况查询开始日期之前日志表最后的库存
* 2如果开始日期之前表里没数据查询开始日期之后该类型的第一条数据的开始库存
* 3如果开始之前和结束日期之后都没有此类型则使用当前库存
* 当前库存逻辑梳理
* 1正常情况查询结束日期的库存
* 2如果结束日期没有数据查询结束日期后该类型的第一条数据的开始库存
* 3如果开始日期和结束日期都没有此类型则使用当前库存
*/
item.setStartTime(bean.getStartTime());
item.setEndTime(bean.getEndTime());
if (bean.getStartTime() != null && bean.getEndTime() != null){
//昨日库存
Type yesterdayStorageNum = complexQueryMapper.getYesterdayStorageNum(item);
if (yesterdayStorageNum != null){
if (yesterdayStorageNum.getAfterStoreNum()!=null){
item.setPreStoreNum(yesterdayStorageNum.getAfterStoreNum());
} else {
item.setPreStoreNum(yesterdayStorageNum.getPreStoreNum());
}
} else {
item.setPreStoreNum(item.getStorageNum());
}
//当前库存
Type storageNum = complexQueryMapper.getNewStorageNum(item);
if (storageNum != null){
if (storageNum.getAfterStoreNum()!=null){
item.setAfterStoreNum(storageNum.getAfterStoreNum());
} else {
item.setAfterStoreNum(storageNum.getPreStoreNum());
}
} else {
item.setAfterStoreNum(item.getStorageNum());
}
} else {
//没有时间查总的昨日库存为第一条数据的改前库存当前库存为最后一条数据的改后库存
Type totalStorageNum = complexQueryMapper.getTotalStorageNumLog(item);
if (totalStorageNum != null){
item.setPreStoreNum(totalStorageNum.getPreStoreNum());
item.setAfterStoreNum(totalStorageNum.getAfterStoreNum());
} else {
//为空的则使用当前库存
item.setPreStoreNum(item.getStorageNum());
item.setAfterStoreNum(item.getStorageNum());
}
}
}
return list;
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<>();
}
}
@Override
public List<Type> getStorageNumLogDetails(Type bean) {
try {
return complexQueryMapper.getStorageNumLogDetails(bean);
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<>();
}
}
}

View File

@ -271,4 +271,29 @@ public class Type extends BaseEntity {
@ApiModelProperty(value = "出库数量")
private BigDecimal outNum;
@ApiModelProperty(value = "设备第一级名称")
private String constructionType;
@ApiModelProperty(value = "设备第二级名称")
private String materialType;
@ApiModelProperty(value = "设备第四级名称")
private String typeModelName;
@ApiModelProperty(value="开始时间")
private String startTime;
@ApiModelProperty(value="结束时间")
private String endTime;
@ApiModelProperty(value="修改后库存")
private BigDecimal afterStoreNum;
@ApiModelProperty(value="昵称")
private String nickName;
@ApiModelProperty(value="机具编码")
private String maCode;
}

View File

@ -1543,4 +1543,203 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
</select>
<select id="getStorageNumLogList" resultType="com.bonus.material.ma.domain.Type">
SELECT
mt4.type_id as typeId,
mt1.type_name as constructionType,
mt2.type_name as materialType,
mt3.type_name as typeName,
mt4.type_name as typeModelName,
IFNULL(usnl.outNum,0) as outNum,
IFNULL(usnl.inputNum,0) as inputNum,
CASE mt4.manage_type
WHEN 0 THEN
IFNULL(subquery0.num, 0)
ELSE
IFNULL(mt4.storage_num, 0)
END AS storageNum
FROM
ma_type mt4
LEFT JOIN ma_type mt3 on mt3.type_id=mt4.parent_id
LEFT JOIN ma_type mt2 on mt2.type_id=mt3.parent_id
LEFT JOIN ma_type mt1 on mt1.type_id=mt2.parent_id
LEFT JOIN (
SELECT
mt.type_id,
mt.type_name AS typeModelName,
count(mm.ma_id) AS num
FROM ma_machine mm
LEFT JOIN ma_type mt ON mt.type_id = mm.type_id
WHERE mm.ma_code is not null and mm.ma_status in (1)
GROUP BY mt.type_id
) AS subquery0 ON subquery0.type_id = mt4.type_id
LEFT JOIN (
SELECT
usnl.type_id,
SUM(IFNULL(usnl.out_num,0)) as outNum,
SUM(IFNULL(usnl.input_num,0)) as inputNum
FROM
update_storage_num_log usnl
WHERE
1=1
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
and usnl.create_time BETWEEN CONCAT(#{startTime}, ' 00:00:00') AND CONCAT(#{endTime}, ' 23:59:59')
</if>
GROUP BY usnl.type_id
) usnl on usnl.type_id=mt4.type_id
WHERE
mt4.`level`='4'
<if test="keyword != null and keyword !=''">
and (
mt4.type_name like concat('%',#{keyword},'%') or
mt3.type_name like concat('%',#{keyword},'%') or
mt2.type_name like concat('%',#{keyword},'%') or
mt1.type_name like concat('%',#{keyword},'%')
)
</if>
ORDER BY mt1.type_id,mt2.type_id,mt3.type_id,mt4.type_id
</select>
<select id="getYesterdayStorageNum" resultType="com.bonus.material.ma.domain.Type">
SELECT
type_id as typeId,
MAX(CASE WHEN pre_store_num != '' THEN pre_store_num ELSE NULL END) as preStoreNum,
MAX(CASE WHEN after_store_num != '' THEN after_store_num ELSE NULL END) as afterStoreNum,
MAX(create_time) as createTime
FROM (
SELECT * FROM (
SELECT
usnl.type_id,
'' as pre_store_num,
usnl.after_store_num,
usnl.create_time
FROM update_storage_num_log usnl
WHERE usnl.type_id=#{typeId}
AND DATE_FORMAT(usnl.create_time, '%Y-%m-%d') &lt; #{startTime}
ORDER BY usnl.create_time DESC
LIMIT 1
) AS first_query
UNION ALL
SELECT * FROM (
SELECT
usnl.type_id,
usnl.pre_store_num,
'' as after_store_num,
usnl.create_time
FROM update_storage_num_log usnl
WHERE usnl.type_id=#{typeId}
AND DATE_FORMAT(usnl.create_time, '%Y-%m-%d') &gt;= #{startTime}
ORDER BY usnl.create_time ASC
LIMIT 1
) AS second_query
) AS combined
GROUP BY type_id
</select>
<select id="getNewStorageNum" resultType="com.bonus.material.ma.domain.Type">
SELECT
type_id as typeId,
MAX(CASE WHEN pre_store_num != '' THEN pre_store_num ELSE NULL END) as preStoreNum,
MAX(CASE WHEN after_store_num != '' THEN after_store_num ELSE NULL END) as afterStoreNum,
MAX(create_time) as createTime
FROM (
SELECT * FROM (
SELECT
usnl.type_id,
'' as pre_store_num,
usnl.after_store_num,
usnl.create_time
FROM update_storage_num_log usnl
WHERE usnl.type_id=#{typeId}
AND DATE_FORMAT(usnl.create_time, '%Y-%m-%d') = #{endTime}
ORDER BY usnl.create_time DESC
LIMIT 1
) AS first_query
UNION ALL
SELECT * FROM (
SELECT
usnl.type_id,
usnl.pre_store_num,
'' as after_store_num,
usnl.create_time
FROM update_storage_num_log usnl
WHERE usnl.type_id=#{typeId}
AND DATE_FORMAT(usnl.create_time, '%Y-%m-%d') &gt; #{endTime}
ORDER BY usnl.create_time ASC
LIMIT 1
) AS second_query
) AS combined
GROUP BY type_id
</select>
<select id="getStorageNumLogDetails" resultType="com.bonus.material.ma.domain.Type">
SELECT
usnl.type_id as typeId,
mt2.type_name as typeName,
mt.type_name as typeModelName,
usnl.out_num as outNum,
usnl.input_num as inputNum,
usnl.creater as nickName,
usnl.create_time as createTime,
usnl.`code`,
mm.ma_code as maCode
FROM
update_storage_num_log usnl
LEFT JOIN ma_type mt on mt.type_id=usnl.type_id
LEFT JOIN ma_type mt2 on mt2.type_id=mt.parent_id
LEFT JOIN ma_machine mm on mm.ma_id=usnl.ma_id
WHERE
usnl.type_id=#{typeId}
<if test="keyword != null and keyword !=''">
and (
mt2.type_name like concat('%',#{keyword},'%') or
mt.type_name like concat('%',#{keyword},'%') or
usnl.creater like concat('%',#{keyword},'%') or
usnl.code like concat('%',#{keyword},'%') or
mm.ma_code like concat('%',#{keyword},'%')
)
</if>
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
and usnl.create_time BETWEEN CONCAT(#{startTime}, ' 00:00:00') AND CONCAT(#{endTime}, ' 23:59:59')
</if>
order by usnl.create_time desc
</select>
<select id="getTotalStorageNumLog" resultType="com.bonus.material.ma.domain.Type">
SELECT
type_id as typeId,
MAX(CASE WHEN pre_store_num != '' THEN pre_store_num ELSE NULL END) as preStoreNum,
MAX(CASE WHEN after_store_num != '' THEN after_store_num ELSE NULL END) as afterStoreNum,
MAX(create_time) as createTime
FROM (
SELECT * FROM (
SELECT
usnl.type_id,
usnl.pre_store_num,
'' as after_store_num,
usnl.create_time
FROM update_storage_num_log usnl
WHERE usnl.type_id=#{typeId}
ORDER BY usnl.create_time ASC
LIMIT 1
) AS first_query
UNION ALL
SELECT * FROM (
SELECT
usnl.type_id,
'' as pre_store_num,
usnl.after_store_num as after_store_num,
usnl.create_time
FROM update_storage_num_log usnl
WHERE usnl.type_id=#{typeId}
ORDER BY usnl.create_time DESC
LIMIT 1
) AS second_query
) AS combined
GROUP BY type_id
</select>
</mapper>