fix:首页生产工单接口开发(包括工序进度)
This commit is contained in:
parent
b681e845da
commit
5d1b0da8f6
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -58,4 +58,11 @@ public interface IProFeedbackService
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteProFeedbackByRecordId(Long recordId);
|
||||
|
||||
/**
|
||||
* 根据 workorderIds 查询
|
||||
* @param workorderIds
|
||||
* @return
|
||||
*/
|
||||
List<ProFeedback> selectByWorkorderIds(List<Long> workorderIds);
|
||||
}
|
||||
|
@ -114,4 +114,6 @@ public interface IProRouteProcessService
|
||||
List<ProRouteProcess> selectByProcessIds(Long[] processIds);
|
||||
|
||||
AjaxResult editProRouteProcess(ProRouteProcess proRouteProcess);
|
||||
|
||||
List<ProRouteProcess> selectByRouteIds(List<Long> routeIds);
|
||||
}
|
||||
|
@ -72,4 +72,11 @@ public interface IProRouteProductService
|
||||
* @return
|
||||
*/
|
||||
public int deleteByRouteId(Long routeId);
|
||||
|
||||
/**
|
||||
* 根据 productIds 查询相关数据
|
||||
* @param productIds
|
||||
* @return
|
||||
*/
|
||||
List<ProRouteProduct> selectByProductIds(List<Long> productIds);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -98,7 +98,14 @@ 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
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user