耗材数据统计

This commit is contained in:
Tankaikai
2025-03-12 19:26:31 +08:00
parent c0aa412e0b
commit b2651410b6
5 changed files with 74 additions and 5 deletions

View File

@@ -3,9 +3,12 @@ package com.czg.controller;
import com.czg.enums.CrudEnum;
import com.czg.log.annotation.OperationLog;
import com.czg.product.dto.ConsInfoDTO;
import com.czg.product.param.ConsInfoParam;
import com.czg.product.param.ConsSubUnitParam;
import com.czg.product.service.ConsInfoService;
import com.czg.product.vo.ConsStatisticsVo;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.utils.AssertUtil;
import com.czg.validator.ValidatorUtil;
import com.czg.validator.group.DefaultGroup;
@@ -55,6 +58,7 @@ public class ConsInfoController {
/**
* 详情
*
* @param id 耗材信息id
*/
@GetMapping("{id}")
@@ -164,4 +168,17 @@ public class ConsInfoController {
consInfoService.modifySubUnit(param);
return CzgResult.success();
}
/**
* 统计
*/
@GetMapping("statistics")
@OperationLog("耗材信息-统计")
//@SaAdminCheckPermission("consInfo:info")
public CzgResult<ConsStatisticsVo> getConsInfoById(ConsInfoParam param) {
Long shopId = StpKit.USER.getShopId(0L);
param.setShopId(shopId);
ConsStatisticsVo data = consInfoService.statistics(param);
return CzgResult.success(data);
}
}

View File

@@ -2,7 +2,9 @@ package com.czg.product.service;
import com.czg.product.dto.ConsInfoDTO;
import com.czg.product.entity.ConsInfo;
import com.czg.product.param.ConsInfoParam;
import com.czg.product.param.ConsSubUnitParam;
import com.czg.product.vo.ConsStatisticsVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
@@ -92,4 +94,11 @@ public interface ConsInfoService extends IService<ConsInfo> {
*/
void modifySubUnit(ConsSubUnitParam param);
/**
* 耗材数据统计
* @param param 统计条件
* @return 统计结果
*/
ConsStatisticsVo statistics(ConsInfoParam param);
}

View File

@@ -1,6 +1,8 @@
package com.czg.service.product.mapper;
import com.czg.product.entity.ConsStockFlow;
import com.czg.product.param.ConsInfoParam;
import com.czg.product.vo.ConsStatisticsVo;
import com.mybatisflex.core.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@@ -12,5 +14,5 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface ConsStockFlowMapper extends BaseMapper<ConsStockFlow> {
ConsStatisticsVo getConsStatistics(ConsInfoParam param);
}

View File

@@ -12,13 +12,12 @@ import com.czg.product.dto.ProductBriefDTO;
import com.czg.product.entity.ConsGroup;
import com.czg.product.entity.ConsGroupRelation;
import com.czg.product.entity.ConsInfo;
import com.czg.product.param.ConsInfoParam;
import com.czg.product.param.ConsSubUnitParam;
import com.czg.product.service.ConsInfoService;
import com.czg.product.vo.ConsStatisticsVo;
import com.czg.sa.StpKit;
import com.czg.service.product.mapper.ConsGroupMapper;
import com.czg.service.product.mapper.ConsGroupRelationMapper;
import com.czg.service.product.mapper.ConsInfoMapper;
import com.czg.service.product.mapper.ProdConsRelationMapper;
import com.czg.service.product.mapper.*;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
@@ -46,6 +45,7 @@ public class ConsInfoServiceImpl extends ServiceImpl<ConsInfoMapper, ConsInfo> i
private final ConsGroupRelationMapper consGroupRelationMapper;
private final ProdConsRelationMapper prodConsRelationMapper;
private final ConsGroupMapper consGroupMapper;
private final ConsStockFlowMapper consStockFlowMapper;
private QueryWrapper buildQueryWrapper(ConsInfoDTO param) {
QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper();
@@ -205,4 +205,13 @@ public class ConsInfoServiceImpl extends ServiceImpl<ConsInfoMapper, ConsInfo> i
}
}
@Override
public ConsStatisticsVo statistics(ConsInfoParam param) {
ConsStatisticsVo data = consStockFlowMapper.getConsStatistics(param);
if (data == null) {
data = new ConsStatisticsVo();
}
return data;
}
}

View File

@@ -3,4 +3,36 @@
<mapper namespace="com.czg.service.product.mapper.ConsStockFlowMapper">
<select id="getConsStatistics" resultType="com.czg.product.vo.ConsStatisticsVo">
SELECT
sum( CASE WHEN t1.in_out_type = 'in' then t1.in_out_number end) AS inSumTotal,
sum( CASE WHEN t1.in_out_item = 'win-in' THEN t1.in_out_number END ) AS winInNum,
sum( CASE WHEN t1.in_out_item = 'manual-in' THEN t1.in_out_number END ) AS stockInNum,
sum( CASE WHEN t1.in_out_type = 'out' then abs(t1.in_out_number) end) AS outSumTotal,
sum( CASE WHEN t1.in_out_item = 'loss-out' THEN abs(t1.in_out_number) END ) AS lossOutNum,
sum( CASE WHEN t1.in_out_item = 'order-out' THEN abs(t1.in_out_number) END ) AS consumeNum,
sum( CASE WHEN t1.in_out_item = 'damage-out' THEN abs(t1.in_out_number) END ) AS damageNum,
sum( CASE WHEN t1.in_out_item = 'manual-out' THEN abs(t1.in_out_number) END ) AS stockOutNum
FROM
tb_cons_stock_flow t1
LEFT JOIN tb_cons_info t2 on t1.con_id = t2.id
where t1.shop_id = #{shopId}
<if test="id != null">
and t1.con_id = #{id}
</if>
<if test="consGroupId != null">
and t2.cons_group_id = #{consGroupId}
</if>
<if test="conName != null and conName != ''">
and t1.con_name like concat('%', #{conName}, '%')
</if>
<if test="beginTime != null and beginTime != ''">
and t1.create_time >= str_to_date(#{beginTime}, '%Y-%m-%d %H:%i:%s')
</if>
<if test="endTime != null and endTime != ''">
<![CDATA[
and t1.create_time <= str_to_date(#{endTime}, '%Y-%m-%d %H:%i:%s')
]]>
</if>
</select>
</mapper>