fix:首页生产工单接口开发(包括工序进度)

This commit is contained in:
zhangxuanming 2025-01-20 18:18:34 +08:00
parent b681e845da
commit 5d1b0da8f6
17 changed files with 217 additions and 3 deletions

View File

@ -306,4 +306,14 @@ public class ProWorkorderController extends BaseController
return AjaxResult.success();
}
/**
* 首页生产工单查询
* @param proWorkorder
* @return
*/
@GetMapping("/getHomeList")
public AjaxResult getHomeList(ProWorkorder proWorkorder) {
return proWorkorderService.getHomeList(proWorkorder);
}
}

View File

@ -0,0 +1,26 @@
package com.ktg.mes.pro.controller.vo;
import com.ktg.mes.pro.domain.ProRouteProcess;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ProRouteHomeVO extends ProRouteProcess {
/**
* 完成数量
*/
private BigDecimal completeNumber;
/**
* 未完成数量
*/
private BigDecimal incompleteNumber;
/**
* 总数
*/
private BigDecimal total;
}

View File

@ -0,0 +1,13 @@
package com.ktg.mes.pro.controller.vo;
import com.ktg.mes.pro.domain.ProWorkorder;
import lombok.Data;
import java.util.List;
@Data
public class ProWorkorderHomeVO extends ProWorkorder {
private List<ProRouteHomeVO> routeHomg;
}

View File

@ -2,6 +2,7 @@ package com.ktg.mes.pro.mapper;
import java.util.List;
import com.ktg.mes.pro.domain.ProFeedback;
import org.apache.ibatis.annotations.Param;
/**
* 生产报工记录Mapper接口
@ -58,4 +59,6 @@ public interface ProFeedbackMapper
* @return 结果
*/
public int deleteProFeedbackByRecordIds(Long[] recordIds);
List<ProFeedback> selectByWorkorderIds(@Param("workorderIds") List<Long> workorderIds);
}

View File

@ -92,4 +92,6 @@ public interface ProRouteProcessMapper
void updateBatch(@Param("list") List<ProRouteProcess> list);
List<ProRouteProcess> selectByProcessIds(@Param("entity") Long[] processIds);
List<ProRouteProcess> selectByRouteIds(@Param("routeIds") List<Long> routeIds);
}

View File

@ -2,6 +2,7 @@ package com.ktg.mes.pro.mapper;
import java.util.List;
import com.ktg.mes.pro.domain.ProRouteProduct;
import org.apache.ibatis.annotations.Param;
/**
* 产品制程Mapper接口
@ -67,4 +68,11 @@ public interface ProRouteProductMapper
* @return
*/
public int deleteByRouteId(Long routeId);
/**
* 根据 productIds 查询相关数据
* @param productIds
* @return
*/
List<ProRouteProduct> selectByProductIds(@Param("productIds") List<Long> productIds);
}

View File

@ -58,4 +58,11 @@ public interface IProFeedbackService
* @return 结果
*/
public int deleteProFeedbackByRecordId(Long recordId);
/**
* 根据 workorderIds 查询
* @param workorderIds
* @return
*/
List<ProFeedback> selectByWorkorderIds(List<Long> workorderIds);
}

View File

@ -114,4 +114,6 @@ public interface IProRouteProcessService
List<ProRouteProcess> selectByProcessIds(Long[] processIds);
AjaxResult editProRouteProcess(ProRouteProcess proRouteProcess);
List<ProRouteProcess> selectByRouteIds(List<Long> routeIds);
}

View File

@ -72,4 +72,11 @@ public interface IProRouteProductService
* @return
*/
public int deleteByRouteId(Long routeId);
/**
* 根据 productIds 查询相关数据
* @param productIds
* @return
*/
List<ProRouteProduct> selectByProductIds(List<Long> productIds);
}

View File

@ -1,5 +1,6 @@
package com.ktg.mes.pro.service;
import com.ktg.common.core.domain.AjaxResult;
import com.ktg.mes.pro.domain.ProWorkorder;
import java.util.List;
@ -72,5 +73,10 @@ public interface IProWorkorderService
public int deleteProWorkorderByWorkorderId(Long workorderId);
/**
* 首页生产工单查询
* @param proWorkorder
* @return
*/
AjaxResult getHomeList(ProWorkorder proWorkorder);
}

View File

@ -93,4 +93,9 @@ public class ProFeedbackServiceImpl implements IProFeedbackService
{
return proFeedbackMapper.deleteProFeedbackByRecordId(recordId);
}
@Override
public List<ProFeedback> selectByWorkorderIds(List<Long> workorderIds) {
return proFeedbackMapper.selectByWorkorderIds(workorderIds);
}
}

View File

@ -264,4 +264,9 @@ public class ProRouteProcessServiceImpl implements IProRouteProcessService
}
return AjaxResult.success(status);
}
@Override
public List<ProRouteProcess> selectByRouteIds(List<Long> routeIds) {
return proRouteProcessMapper.selectByRouteIds(routeIds);
}
}

View File

@ -111,4 +111,9 @@ public class ProRouteProductServiceImpl implements IProRouteProductService
public int deleteByRouteId(Long routeId) {
return proRouteProductMapper.deleteByRouteId(routeId);
}
@Override
public List<ProRouteProduct> selectByProductIds(List<Long> productIds) {
return proRouteProductMapper.selectByProductIds(productIds);
}
}

View File

@ -1,15 +1,31 @@
package com.ktg.mes.pro.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ktg.common.constant.UserConstants;
import com.ktg.common.core.domain.AjaxResult;
import com.ktg.common.utils.DateUtils;
import com.ktg.common.utils.StringUtils;
import com.ktg.mes.pro.controller.vo.ProRouteHomeVO;
import com.ktg.mes.pro.controller.vo.ProWorkorderHomeVO;
import com.ktg.mes.pro.domain.ProFeedback;
import com.ktg.mes.pro.domain.ProRouteProcess;
import com.ktg.mes.pro.domain.ProRouteProduct;
import com.ktg.mes.pro.domain.ProWorkorder;
import com.ktg.mes.pro.mapper.ProWorkorderMapper;
import com.ktg.mes.pro.service.IProFeedbackService;
import com.ktg.mes.pro.service.IProRouteProcessService;
import com.ktg.mes.pro.service.IProRouteProductService;
import com.ktg.mes.pro.service.IProWorkorderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 生产工单Service业务层处理
@ -23,6 +39,15 @@ public class ProWorkorderServiceImpl implements IProWorkorderService
@Autowired
private ProWorkorderMapper proWorkorderMapper;
@Autowired
private IProRouteProductService proRouteProductService;
@Autowired
private IProRouteProcessService proRouteProcessService;
@Autowired
private IProFeedbackService proFeedbackService;
/**
* 查询生产工单
*
@ -126,4 +151,73 @@ public class ProWorkorderServiceImpl implements IProWorkorderService
{
return proWorkorderMapper.deleteProWorkorderByWorkorderId(workorderId);
}
@Override
public AjaxResult getHomeList(ProWorkorder proWorkorder) {
// 获取所有工单
List<ProWorkorder> workorders = proWorkorderMapper.selectProWorkorderList(proWorkorder);
// 获取所有的工单ID
List<Long> workorderIds = workorders.stream().map(ProWorkorder::getWorkorderId).collect(Collectors.toList());
List<ProFeedback> feedbacks = proFeedbackService.selectByWorkorderIds(workorderIds);
// 处理报工数据
feedbacks.stream().forEach(item -> {
if (ObjectUtil.isEmpty(item.getQuantityFeedback())) {
item.setQuantityFeedback(BigDecimal.ZERO);
}
});
// 获取所有工单所需的工序
List<Long> productIds = workorders.stream().map(ProWorkorder::getProductId).distinct().collect(Collectors.toList());
// 根据所有产品ID查询所有工序数据
List<ProRouteProduct> products = proRouteProductService.selectByProductIds(productIds);
List<Long> routeIds = products.stream().map(ProRouteProduct::getRouteId).collect(Collectors.toList());
List<ProRouteProcess> routeList = proRouteProcessService.selectByRouteIds(routeIds);
List<ProRouteHomeVO> routeHomeList = new ArrayList<>();
routeList.forEach(item -> {
ProRouteHomeVO proWorkorderHomeVO = new ProRouteHomeVO();
BeanUtil.copyProperties(item, proWorkorderHomeVO);
routeHomeList.add(proWorkorderHomeVO);
});
// 构建工序流程数据
Map<Long, List<ProRouteHomeVO>> routeMap = new HashMap<>();
products.forEach(item -> {
routeMap.putIfAbsent(item.getItemId(), routeHomeList.stream().filter(val -> val.getRouteId().equals(item.getRouteId())).collect(Collectors.toList()));
});
// 遍历构造
List<ProWorkorderHomeVO> proWorkorders = new ArrayList<>();
workorders.stream().forEach(item -> {
ProWorkorderHomeVO proWorkorderHomeVO = new ProWorkorderHomeVO();
BeanUtil.copyProperties(item, proWorkorderHomeVO);
proWorkorders.add(proWorkorderHomeVO);
Long productId = item.getProductId();
List<ProRouteHomeVO> processes = routeMap.get(productId);
if (processes != null && processes.size() > 0) {
processes.forEach(val -> {
val.setTotal(item.getQuantity());
List<ProFeedback> collect = feedbacks.stream().filter(entity ->
(entity.getWorkorderId().equals(item.getWorkorderId())
&& entity.getRouteId().equals(val.getRouteId())
&& entity.getProcessId().equals(val.getProcessId())))
.collect(Collectors.toList());
if (collect != null && collect.size() > 0) {
BigDecimal reduce = collect.stream().map(ProFeedback::getQuantityFeedback).reduce(BigDecimal.ZERO, BigDecimal::add);
val.setCompleteNumber(reduce);
val.setIncompleteNumber(val.getTotal().subtract(val.getCompleteNumber()));
}
});
proWorkorderHomeVO.setRouteHomg(processes);
}
});
// 构建工单树结构数据
Map<Long, List<ProWorkorderHomeVO>> map = proWorkorders.stream().collect(Collectors.groupingBy(ProWorkorderHomeVO::getParentId));
proWorkorders.stream().forEach(item -> {
item.setChildren(map.get(item.getWorkorderId()));
});
List<ProWorkorderHomeVO> collect = proWorkorders.stream().filter(item -> 0L == item.getParentId()).collect(Collectors.toList());
return AjaxResult.success(collect);
}
}

View File

@ -98,6 +98,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectProFeedbackVo"/>
where f.record_id = #{recordId}
</select>
<select id="selectByWorkorderIds" resultType="com.ktg.mes.pro.domain.ProFeedback" resultMap="ProFeedbackResult">
<include refid="selectProFeedbackVo"/>
where f.workorder_id in
<foreach collection="workorderIds" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<insert id="insertProFeedback" parameterType="ProFeedback" useGeneratedKeys="true" keyProperty="recordId">
insert into pro_feedback

View File

@ -114,13 +114,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectByRouteId" resultType="ProRouteProcess" resultMap="ProRouteProcessResult">
select * from pro_route_process where route_id = #{routeId}
</select>
<select id="selectByProcessIds" resultType="com.ktg.mes.pro.domain.ProRouteProcess">
<select id="selectByProcessIds" resultType="com.ktg.mes.pro.domain.ProRouteProcess" resultMap="ProRouteProcessResult">
select * from pro_route_process
where process_id in
<foreach collection="entity" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<select id="selectByRouteIds" resultType="com.ktg.mes.pro.domain.ProRouteProcess" resultMap="ProRouteProcessResult">
<include refid="selectProRouteProcessVo"/>
where route_id in
<foreach collection="routeIds" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<insert id="insertProRouteProcess" parameterType="ProRouteProcess" useGeneratedKeys="true" keyProperty="recordId">
insert into pro_route_process

View File

@ -55,6 +55,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectProRouteProductVo"/>
where item_id = #{itemId} limit 1
</select>
<select id="selectByProductIds" resultType="ProRouteProduct" resultMap="ProRouteProductResult">
<include refid="selectProRouteProductVo"/>
where item_id in
<foreach collection="productIds" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<insert id="insertProRouteProduct" parameterType="ProRouteProduct" useGeneratedKeys="true" keyProperty="recordId">
insert into pro_route_product