机台删除,工序加工,排单加工时间,排单数据筛选Bug修改

This commit is contained in:
liuzhaotian
2024-07-08 18:25:20 +08:00
parent 03cce64688
commit fbb57ab252
37 changed files with 522 additions and 79 deletions
@@ -0,0 +1,25 @@
package com.cf.imes.module.executor.api.plan;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.module.executor.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = ApiConstants.NAME) // TODO 晨丰:fallbackFactory =
@Tag(name = "RPC 服务 - 多组织")
public interface OrderPlanApi {
String PREFIX = ApiConstants.PREFIX + "/plan";
@GetMapping(PREFIX +"/apiGetOrderPlan")
@Operation(summary = "查询当前机台对应的排单是否有使用")
@Parameter(name = "machineId", description = "机台ID", required = true, example = "1024")
CommonResult<Boolean> getOrderPlan(@RequestParam("machineId") Long id);
}
@@ -0,0 +1,39 @@
package com.cf.imes.module.executor.api.plan;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
@RestController // 提供 RESTful API 接口,给 Feign 调用
@Validated
public class OrderPlanApiImpl implements OrderPlanApi{
@Resource
private PlanMapper planMapper;
@Override
public CommonResult<Boolean> getOrderPlan(Long machineId) {
List<PlanDO> planDOS = planMapper.selectByMachineId(machineId, getUserOrganId());
if(!planDOS.isEmpty()){
return CommonResult.success(true);
}
return CommonResult.success(false);
}
}
@@ -0,0 +1,20 @@
package com.cf.imes.module.executor.controller.admin.plan.bo;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Builder
public class ProcessStepAreaIds {
// 生产单工序步骤ID
private Long processStepId;
// 生产单工序步骤对应的板件面积
private BigDecimal area;
}
@@ -0,0 +1,20 @@
package com.cf.imes.module.executor.controller.admin.plan.bo;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Builder
public class ProcessStepSalaryIds {
// 生产单工序步骤ID
private Long processStepId;
// 生产单工序步骤工资金额
private BigDecimal salary;
}
@@ -77,6 +77,14 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
PlanDO selectPlanByOrderIds(@Param("ids") List<Long> ids);
default List<PlanDO> selectByMachineId(Long machineId,Long organId) {
return selectList( new LambdaQueryWrapperX<PlanDO>()
.eq(PlanDO::getDeleted,false)
.eq(PlanDO::getOrganId,organId)
.eq(PlanDO::getMachineId,machineId));
}
//
// default PlanDO selectByOrderId(Long orderId) {
// return selectOne(new MPJLambdaWrapperX<PlanDO>()
@@ -1,15 +1,18 @@
package com.cf.imes.module.executor.dal.mysql.processStep;
import java.math.BigDecimal;
import java.util.*;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.executor.dal.dataobject.process.OrderProcessDO;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepAreaIds;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepSalaryIds;
import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
import org.apache.ibatis.annotations.Mapper;
import com.cf.imes.module.executor.controller.admin.processStep.vo.*;
import org.apache.ibatis.annotations.Param;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
@@ -53,4 +56,19 @@ public interface ProcessStepMapper extends BaseMapperX<ProcessStepDO> {
wrapper.eq(ProcessStepDO::getDeleted, 1);
return update(wrapper);
}
default List<ProcessStepDO> selectOrderList(List<Long> orderIds,Long organId) {
return selectList(new LambdaQueryWrapperX<ProcessStepDO>()
.eq(ProcessStepDO::getOrganId, organId)
.inIfPresent(ProcessStepDO::getOrderId, orderIds));
}
List<ProcessStepSalaryIds> calculateSalary(@Param("processStepAreaIds") List<ProcessStepAreaIds> processStepAreaIds, @Param("organId") Long organId);
void updateStatus(@Param("processStepSalaryIds") List<ProcessStepSalaryIds> processStepSalaryIds,@Param("nickname") String nickname);
}
@@ -2,9 +2,7 @@ package com.cf.imes.module.executor.dal.mysql.processStepItem;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.executor.controller.admin.plate.vo.BodyPlateDetailVO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepAreaIds;
import com.cf.imes.module.executor.dal.dataobject.processStepItem.OrderProcessStepItemDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -15,4 +13,9 @@ import java.util.List;
public interface ProcessStepItemMapper extends BaseMapperX<OrderProcessStepItemDO> {
List<ProcessStepAreaIds> selectAreaByProcessStepId(@Param("processStepId") List<Long> processStepId, @Param("organId") Long organId);
void updateStatus(@Param("processStepIds") List<Long> processStepIds);
}
@@ -4,6 +4,7 @@ import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.system.api.application.ApplicationApi;
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
import com.cf.imes.module.system.api.machine.MachineApi;
import com.cf.imes.module.system.api.process.ProcessApi;
import com.cf.imes.module.system.api.process.ProcessGroupApi;
import com.cf.imes.module.system.api.user.AdminUserApi;
import com.cf.imes.module.system.api.dict.DictDataApi;
@@ -15,6 +16,6 @@ import org.springframework.context.annotation.Configuration;
*/
@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {AdminUserApi.class, MachineApi.class, DictDataApi.class,
FileApi.class, ProcessGroupApi.class, FileApi.class, DataSourceApi.class, ApplicationApi.class})
FileApi.class, ProcessGroupApi.class, FileApi.class, DataSourceApi.class, ApplicationApi.class, ProcessApi.class})
public class RpcConfiguration {
}
@@ -9,8 +9,7 @@ import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.search.Hit;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.alibaba.fastjson.JSON;
import com.cf.imes.framework.common.enums.PlanStatusEnum;
import com.cf.imes.framework.common.enums.RemainTypeEnum;
import com.cf.imes.framework.common.exception.ServiceException;
@@ -19,10 +18,10 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.es.core.service.ESDocumentService;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepAreaIds;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepSalaryIds;
import com.cf.imes.module.executor.controller.admin.plan.dto.Material;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.OptimizeRemainPlate;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO;
@@ -38,6 +37,7 @@ import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
import com.cf.imes.module.executor.dal.dataobject.remainplaten.OutlineDTO;
import com.cf.imes.module.executor.dal.dataobject.remainplaten.PointDTO;
import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO;
@@ -47,6 +47,8 @@ import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.executor.dal.mysql.processStep.ProcessStepMapper;
import com.cf.imes.module.executor.dal.mysql.processStepItem.ProcessStepItemMapper;
import com.cf.imes.module.executor.dal.mysql.remainplaten.RemainPlateMapper;
import com.cf.imes.module.executor.enums.ErrorCodeConstants;
import com.cf.imes.module.executor.util.RandomUtils;
@@ -55,6 +57,8 @@ import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.infra.api.file.dto.FileCreateReqDTO;
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
import com.cf.imes.module.system.api.machine.MachineApi;
import com.cf.imes.module.system.api.process.ProcessApi;
import com.cf.imes.module.system.api.process.dto.ProcessDTO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -62,13 +66,14 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.UNKNOWN;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.organ.core.context.OrganContextHolder.getOrganId;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXISTS;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS;
@@ -110,6 +115,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Resource
private MachineApi machineApi;
@Resource
private ProcessApi processApi;
@Resource
private ESDocumentService esDocumentService;
@@ -119,6 +127,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Resource
private OrderPartsMapper orderPartsMapper;
@Resource
private ProcessStepMapper processStepMapper;
@Resource
private ProcessStepItemMapper processStepItemMapper;
@Override
public List<PlateOptimize> getPlateListByPlanId(Long planId) {
return planMapper.selectPlateListByPlanId(planId,getUserOrganId());
@@ -197,6 +212,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean endCutting(Long planId) {
PlanDO planDO = planMapper.selectById(planId);
if (Objects.isNull(planDO)) {
@@ -205,11 +221,62 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
planMapper.updateById(PlanDO.builder()
.id(planId)
.status(PlanStatusEnum.OPENEDMATERIAL.getStatus())
.produceTime(LocalDateTime.now())
.build());
LoginUser loginUser = getLoginUser();
List<ProcessDTO> userProcess = processApi.getUserProcess(loginUser.getId());
if(!userProcess.isEmpty()) {
List<Long> processStepIds = new ArrayList<>();
List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class);
List<ProcessStepDO> processStepDOS = processStepMapper.selectOrderList(orderIds, getUserOrganId());
for (ProcessDTO process : userProcess) {
processStepIds.addAll(processStepDOS.stream().filter(f -> Objects.equals(f.getProcessinfoId(), process.getId()))
.map(ProcessStepDO::getId).toList());
}
if(!processStepIds.isEmpty()) {
List<ProcessStepSalaryIds> processStepSalaryIds = calculateSalary(processStepIds);
// 修改生产明细表和步骤表的工序状态
processStepMapper.updateStatus(processStepSalaryIds, loginUser.getNickname());
processStepItemMapper.updateStatus(processStepIds);
}
}
return Boolean.TRUE;
}
// 计算工资金额
public List<ProcessStepSalaryIds> calculateSalary(List<Long> processStepId){
// 查询当前工序对应的板材的面积
List<ProcessStepAreaIds> processStepAreaIds = processStepItemMapper.selectAreaByProcessStepId(processStepId,getUserOrganId());
// 计算当前工序的工资金额
List<ProcessStepSalaryIds> salary = processStepMapper.calculateSalary(processStepAreaIds,getUserOrganId());
return salary;
}
@Override
public OptimizeParamResVO getOptimizeParam(Long planId) {
//小板列表
@@ -58,6 +58,7 @@ import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
/**
* 生产单开料排单 Service 实现类
@@ -347,18 +348,18 @@ public class PlanServiceImpl implements PlanService {
.betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()})
.groupBy("a.id", " a.order_date", "a.delivery_date", "a.customer", "a.address", "a.custom_order_no","a.create_time","a.update_time")
.orderByDesc("a.update_time");
List<Integer> filterTypes = new ArrayList<>();
String filterTypes = "";
if (Objects.nonNull(pageReqVO.getHoleThrough()) && pageReqVO.getHoleThrough()) {
filterTypes.add(PlanFilterTypeEnum.DIGGINGTHROUGHTHESHAPE.getType());
filterTypes += PlanFilterTypeEnum.DIGGINGTHROUGHTHESHAPE.getType().toString();
}
if (Objects.nonNull(pageReqVO.getBurrow()) && pageReqVO.getBurrow()) {
filterTypes.add(PlanFilterTypeEnum.THEREAREPERFORATEDHOLES.getType());
filterTypes += PlanFilterTypeEnum.THEREAREPERFORATEDHOLES.getType().toString();
}
if (Objects.nonNull(pageReqVO.getTwoDimensionalToolPath()) && pageReqVO.getTwoDimensionalToolPath()) {
filterTypes.add(PlanFilterTypeEnum.TWODIMENSIONALCUTTINGPATH.getType());
filterTypes += PlanFilterTypeEnum.TWODIMENSIONALCUTTINGPATH.getType().toString();
}
queryWrapperX.inIfPresent("op.filter_type", filterTypes);
queryWrapperX.likeIfPresent("op.filter_type", insertSeparator(filterTypes));
IPage<OrderRespVOCopy> orderRespVOCopies = orderMapper.selectOrderPage(page, queryWrapperX);
@@ -425,18 +426,18 @@ public class PlanServiceImpl implements PlanService {
.eqIfPresent("op.is_door", pageReqVO.getIsDoor())
.betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()})
.betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()});
List<Integer> filterTypes = new ArrayList<>();
String filterTypes = "";
if (Objects.nonNull(pageReqVO.getHoleThrough()) && pageReqVO.getHoleThrough()) {
filterTypes.add(PlanFilterTypeEnum.DIGGINGTHROUGHTHESHAPE.getType());
filterTypes += PlanFilterTypeEnum.DIGGINGTHROUGHTHESHAPE.getType().toString();
}
if (Objects.nonNull(pageReqVO.getBurrow()) && pageReqVO.getBurrow()) {
filterTypes.add(PlanFilterTypeEnum.THEREAREPERFORATEDHOLES.getType());
filterTypes += PlanFilterTypeEnum.THEREAREPERFORATEDHOLES.getType().toString();
}
if (Objects.nonNull(pageReqVO.getTwoDimensionalToolPath()) && pageReqVO.getTwoDimensionalToolPath()) {
filterTypes.add(PlanFilterTypeEnum.TWODIMENSIONALCUTTINGPATH.getType());
filterTypes += PlanFilterTypeEnum.TWODIMENSIONALCUTTINGPATH.getType().toString();
}
queryWrapperX.inIfPresent("op.filter_type", filterTypes);
queryWrapperX.likeIfPresent("op.filter_type", insertSeparator(filterTypes));
List<Long> orderIds = orderMapper.selectOrderIds(queryWrapperX);
@@ -539,15 +540,16 @@ public class PlanServiceImpl implements PlanService {
validatePlanExists(planId);
}
QueryWrapperX<PlateDO> queryWrapperX = new QueryWrapperX<>();
List<Integer> filterTypes = new ArrayList<>();
String filterTypes = "";
if (Objects.nonNull(vo.getHoleThrough()) && vo.getHoleThrough()) {
filterTypes.add(PlanFilterTypeEnum.DIGGINGTHROUGHTHESHAPE.getType());
filterTypes += PlanFilterTypeEnum.DIGGINGTHROUGHTHESHAPE.getType().toString();
}
if (Objects.nonNull(vo.getBurrow()) && vo.getBurrow()) {
filterTypes.add(PlanFilterTypeEnum.THEREAREPERFORATEDHOLES.getType());
filterTypes += PlanFilterTypeEnum.THEREAREPERFORATEDHOLES.getType().toString();
}
if (Objects.nonNull(vo.getTwoDimensionalToolPath()) && vo.getTwoDimensionalToolPath()) {
filterTypes.add(PlanFilterTypeEnum.TWODIMENSIONALCUTTINGPATH.getType());
filterTypes += PlanFilterTypeEnum.TWODIMENSIONALCUTTINGPATH.getType().toString();
}
queryWrapperX.in("p.plan_id", vo.getPlanIds())
@@ -558,7 +560,7 @@ public class PlanServiceImpl implements PlanService {
.eqIfPresent("a.is_sculpt", vo.getSculpt())
.betweenIfPresent("a.width", new BigDecimal[]{vo.getWidthMinRang(), vo.getWidthMaxRang()})
.betweenIfPresent("a.height", new BigDecimal[]{vo.getLongMinRang(), vo.getLongMaxRang()})
.inIfPresent("a.filter_type", filterTypes)
.likeIfPresent("a.filter_type", insertSeparator(filterTypes))
.betweenIfPresent("f.delivery_date", new Date[]{vo.getBeginDate(), vo.getEndDate()})
.orderByDesc("a.order_id")
.orderByDesc("a.name");
@@ -0,0 +1,53 @@
<?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" >
<mapper namespace="com.cf.imes.module.executor.dal.mysql.processStep.ProcessStepMapper">
<select id="calculateSalary"
parameterType="map"
resultType="com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepSalaryIds">
select distinct ROUND(ops.piece_rate *
<foreach collection="processStepAreaIds" item="processStepAreaIds" open="(" close=")" separator=",">
(#{processStepAreaIds.area})
</foreach>,3) as salary,
ops.id as processStepId
from order_process_step ops
where ops.organ_id = #{organId}
and ops.id in
<foreach collection="processStepAreaIds" item="processStepAreaIds" open="(" close=")" separator=",">
(#{processStepAreaIds.processStepId})
</foreach>
group by ops.piece_rate,ops.id;
</select>
<update id="updateStatus" parameterType="map">
update order_process_step
set status = true,
finish_time = now(),
manager = #{nickname},
salary_amount =
<foreach collection="processStepSalaryIds" item="processStepSalaryIds" open="(" close=")" separator=",">
(#{processStepSalaryIds.salary})
</foreach>
where id in
<foreach collection="processStepSalaryIds" item="processStepSalaryIds" open="(" close=")" separator=",">
(#{processStepSalaryIds.processStepId})
</foreach>
</update>
</mapper>
@@ -0,0 +1,51 @@
<?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" >
<mapper namespace="com.cf.imes.module.executor.dal.mysql.processStepItem.ProcessStepItemMapper">
<select id="selectAreaByProcessStepId"
resultType="com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepAreaIds">
select distinct
sum(op.area) as area,
opsi.process_step_id as processStepId
from order_process_step_item opsi
join order_body ob on opsi.body_id = ob.id and opsi.organ_id = ob.organ_id
join order_item oi on ob.id = oi.body_id and ob.organ_id = oi.organ_id
join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
where opsi.organ_id = #{organId}
and opsi.process_step_id in
<foreach item="processStepId" collection="processStepId" open="(" separator="," close=")">
#{processStepId}
</foreach>
group by opsi.process_step_id
</select>
<update id="updateStatus">
update order_process_step_item
SET status = TRUE
WHERE process_step_id in
<foreach item="processStepIds" collection="processStepIds" open="(" separator="," close=")">
#{processStepIds}
</foreach>
</update>
</mapper>