生产监控接口开发

liweidong
李涛 1 month ago
parent 50ce4a9eab
commit 433a21440c
  1. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java
  2. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  3. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IOemCraftAbilityService.java
  4. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/OemCraftAbilityServiceImpl.java
  5. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
  6. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  7. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java
  8. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ProduceMonitorController.java
  9. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml
  10. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  11. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  12. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java
  13. 68
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml
  14. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java
  15. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  16. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java
  17. 19
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java
  18. 46
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java
  19. 199
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  20. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java
  21. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/WorkOrderWrapper.java

@ -69,12 +69,12 @@ public class BsTeamSetEntity extends BaseEntity {
* 计划员外键-人员
*/
@Schema(description = "计划员(外键-人员)")
private BigDecimal planner;
private Long planner;
/**
* 调度员外键-人员
*/
@Schema(description = "调度员(外键-人员)")
private BigDecimal dispatcher;
private Long dispatcher;
/**
* 班组成员
*/

@ -164,6 +164,9 @@ public class YieldOrder extends BaseEntity {
@TableField(value = "PART_VERSION")
private String partVersion;
@Schema(description = "工艺级别")
private String rank;
/**
* 名称
*/

@ -43,5 +43,12 @@ import java.util.List;
*/
public interface IOemCraftAbilityService extends BaseService<OemCraftAbilityEntity> {
/**
* 根据工艺能力外协商获取关联信息
*
* @param ocId 外协商ID
* @param caId 工艺能力ID
* @return
*/
OemCraftAbilityEntity findBsOemAbility(Long ocId, Long caId);
}

@ -27,6 +27,8 @@ package org.springblade.desk.basic.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.basic.excel.CraftAbilityExcel;
import org.springblade.desk.basic.mapper.CraftAbilityMapper;
@ -50,4 +52,12 @@ import java.util.List;
public class OemCraftAbilityServiceImpl extends BaseServiceImpl<OemCraftAbilityMapper, OemCraftAbilityEntity> implements IOemCraftAbilityService {
@Override
public OemCraftAbilityEntity findBsOemAbility(Long ocId, Long caId) {
List<OemCraftAbilityEntity> entities = this.list(Wrappers.lambdaQuery(OemCraftAbilityEntity.class).eq(OemCraftAbilityEntity::getOtherId, ocId).eq(OemCraftAbilityEntity::getCraftAbilityId, caId));
if (CollectionUtils.isNotEmpty(entities)) {
return entities.get(0);
}
return null;
}
}

@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.dashboard.excel.DsPartExcel;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity;
import org.springblade.desk.dashboard.pojo.vo.*;
import java.util.List;
@ -220,4 +221,13 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
*/
DsPartEntity selectDsPartByPatCode(String partCode);
/**
* 根据零件号工序ID版本号工艺级别查询对应的检验项目
* @param partCode 零件号
* @param orders 工序编号
* @param partVersion 版本号
* @param rank 工艺级别
* @return 检验项目列表
*/
List<DsProcessProjectEntity> selectDsProcessProjectByPartNoAndPpsId(String partCode, String orders, String partVersion, String rank);
}

@ -509,4 +509,25 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
public DsPartEntity selectDsPartByPatCode(String partCode) {
return dsPartMapper.selectDsPartByPatCode(partCode);
}
@Override
public List<DsProcessProjectEntity> selectDsProcessProjectByPartNoAndPpsId(String partCode, String orders, String partVersion, String rank) {
// 根据零件号、版本号查询零件版本信息信息
DsPartVersionEntity partVersionEntity = partVersionService.selectByPartCodeAndPartVersion(partCode, partVersion);
if (partVersionEntity == null) {
return List.of();
}
// 根据零件ID、工艺等级查询工艺信息
DsCraftEntity partCraft = craftService.getPartCraft(partVersionEntity.getPartId(), rank);
if (partCraft == null) {
return List.of();
}
// 根据工艺ID查询工序信息
List<DsProcessEntity> list = processService.list(Wrappers.lambdaQuery(DsProcessEntity.class).eq(DsProcessEntity::getCraftId, partCraft.getId()).eq(DsProcessEntity::getProcessNo, orders));
if (CollectionUtils.isEmpty(list)) {
return List.of();
}
// 根据工序ID查询项目信息
return processProjectService.selectDsProcessProjectByProcessId(list.get(0).getId());
}
}

@ -12,6 +12,7 @@ import org.springblade.desk.device.pojo.vo.RackSetVO;
import org.springblade.desk.device.wrapper.RackSetWrapper;
import org.springblade.desk.produce.pojo.dto.TurnTypeDTO;
import org.springblade.desk.produce.service.IPdaLoadService;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springframework.web.bind.annotation.*;
/**
@ -80,4 +81,12 @@ public class PdaLoadController {
pdaLoadService.deletedProduceRun(mtnCode);
return R.success();
}
@PostMapping(value = "/saveProCheck")
@ApiOperationSupport(order = 9)
@Operation(summary = "工艺检验保存", description = "")
public R saveProCheck(@RequestBody InspectionTask inspectionTask) {
return R.status(pdaLoadService.saveProCheck(inspectionTask));
}
}

@ -55,4 +55,11 @@ public class ProduceMonitorController extends BladeController {
return R.data(workOrderService.generateWorkOrder(id));
}
@PostMapping("/workPlanReceive")
@ApiOperationSupport(order = 5)
@Operation(summary = "工序接收")
public R workPlanReceive(@RequestParam Long wpId) {
return R.data(workOrderService.workPlanReceive(wpId));
}
}

@ -32,7 +32,7 @@
<select id="queryMacToolUse" resultMap="mesMakeRecResultMap">
select * from MES_MAKE_REC where is_deleted = 0
select * from MES_MAC_TOOL_USE where is_deleted = 0
</select>
<select id="listSlotInfo" resultType="org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO">
SELECT

@ -52,4 +52,8 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
List<WorkOrder> findCubByYoId(Long id);
List<WorkOrder> findByPartCodeAndMemo(String partCode, String ypCode);
WorkOrder getMaxByMesCard(String code);
List<WorkOrder> listByYoId(Long fatherYoId);
}

@ -204,5 +204,11 @@
FROM MES_WORK_ORDER mwo INNER JOIN MES_YIELD_ORDER myo ON mwo.YO_ID = myo.ID
WHERE myo.PART_CODE = #{partCode} AND myo.MEMO = #{ypCode}
</select>
<select id="getMaxByMesCard" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT * FROM (SELECT * FROM MES_WORK_ORDER WHERE mes_card_no = #{code} ORDER BY mes_card_no DESC) WHERE ROWNUM = 1
</select>
<select id="listByYoId" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT a.* FROM MES_WORK_ORDER a INNER JOIN MES_YIELD_ORDER b ON a.YO_ID = b.ID where b.father_yo_id = #{fatherYoId}
</select>
</mapper>

@ -20,7 +20,6 @@ import java.util.List;
*/
public interface WorkPlanMapper extends BaseMapper<WorkPlan> {
List<WorkPlanEntity> selectByWoId(@Param("woId") Long woId);
IPage<WorkPlanVO> queryWorkPlan(IPage<WorkPlanVO> page, String cardNo, List<Long> tsIds);
@ -30,4 +29,8 @@ public interface WorkPlanMapper extends BaseMapper<WorkPlan> {
List<ProduceMonitorWorkPlanVO> getProduceMonitorWorkPlanList(Long woId);
List<WorkPlanLoadVO> loadNotReceived(List<Long> tsIds, Long id);
WorkPlan findMaxHostWorkUnitByWoId(Long id, int i);
List<WorkPlan> afterPlaReceive(String cardNo);
}

@ -46,20 +46,24 @@
<result column="IS_DELETED" property="isDeleted"/>
</resultMap>
<select id="selectByWoId" resultType="org.springblade.scheduling.pojo.entity.WorkPlanEntity">
select * from MES_WORK_PLAN where WO_ID = #{woId}
select *
from MES_WORK_PLAN
where WO_ID = #{woId}
</select>
<select id="queryWorkPlan" resultMap="workPlanResultMap">
select * from MES_WORK_PLAN where is_deleted = 0
select *
from MES_WORK_PLAN
where is_deleted = 0
</select>
<select id="loadPrMacToolUseByMtnCode" resultType="java.lang.String">
SELECT
c.card_no
c.card_no
FROM
PR_MAC_TOOL_USE a,
rb_pr_work_plan b,
pr_work_order c
PR_MAC_TOOL_USE a,
rb_pr_work_plan b,
pr_work_order c
<where>
a.wp_id = b.wp_id
AND b.wo_id = c.wo_id
@ -68,23 +72,23 @@
</if>
</where>
</select>
<select id="getProduceMonitorWorkPlanList" resultType="org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO">
SELECT
mwp.ID,
mwp.ORDERS,
mwp.STATUS,
bpe.NAME AS ppsName,
bpe.IS_MAIN AS mainProcess,
bte.TS_NAME AS makeTeam,
bo.OC_NAME AS oemCustomer,
mwp.RECEIVE_MAN AS receiveMan,
mmr.WORKER AS workMan,
mwp.WORK_QTY AS workQty,
mwp.HOUR_QUOTA AS hourQuota,
mwp.PLAN_START_TIME AS planStartTime,
mwp.PLAN_END_TIME AS planEndTime,
mwp.FACT_START_TIME AS factStartTime,
mwp.FACT_END_TIME AS factEndTime
<select id="getProduceMonitorWorkPlanList"
resultType="org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO">
SELECT mwp.ID,
mwp.ORDERS,
mwp.STATUS,
bpe.NAME AS ppsName,
bpe.IS_MAIN AS mainProcess,
bte.TS_NAME AS makeTeam,
bo.OC_NAME AS oemCustomer,
mwp.RECEIVE_MAN AS receiveMan,
mmr.WORKER AS workMan,
mwp.WORK_QTY AS workQty,
mwp.HOUR_QUOTA AS hourQuota,
mwp.PLAN_START_TIME AS planStartTime,
mwp.PLAN_END_TIME AS planEndTime,
mwp.FACT_START_TIME AS factStartTime,
mwp.FACT_END_TIME AS factEndTime
FROM MES_WORK_PLAN mwp
LEFT JOIN BS_PROCESS_SET bpe ON mwp.PPS_ID = bpe.ID
LEFT JOIN BS_TEAM_SET bte ON mwp.MAKE_TEAM = bte.ID
@ -145,5 +149,23 @@
</foreach>
) AND c.run_status >= 2 AND c.run_status &lt; 15 AND c.id = #{id}
</select>
<select id="findMaxHostWorkUnitByWoId" resultType="org.springblade.desk.produce.pojo.entity.WorkPlan">
SELECT * FROM (select * from mes_work_plan where wo_id = #{id} and CRUX_PROCESS = '1'
<if test="i == 1">and status &lt; 3 order by orders asc</if>
<if test="i == 0">order by orders desc</if>
) WHERE ROWNUM = 1
</select>
<select id="afterPlaReceive" resultType="org.springblade.desk.produce.pojo.entity.WorkPlan">
select a.*
from mes_work_plan a
inner join mes_work_plan b on a.FRONT_WP_ID = b.WP_ID
inner join mes_WORK_ORDER c on a.WO_ID = c.ID
where a.NEXT_WP_ID is null
and b.STATUS = 3
and c.run_status &lt; 15
and a.STATUS = 1
and c.CARD_NO = #{cardNo}
order by c.id desc
</select>
</mapper>

@ -8,6 +8,7 @@ import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.vo.LoadSubOrderVO;
import org.springblade.desk.produce.pojo.vo.PdaProRelevantVO;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
import java.util.List;
@ -61,4 +62,6 @@ public interface IPdaLoadService extends BaseService<WorkPlan> {
void deletedProduceRun(String mtnCode);
public WorkOrder checkPrWorkOrder(String cardNo);
boolean saveProCheck(InspectionTask inspectionTask);
}

@ -174,4 +174,20 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
* @param workPlan 工单计划
*/
void getProcessByWp(ProduceMonitorPlanDataVO planDataVO, WorkPlan workPlan);
/**
* <p>方法名: workPlanReceive </p>
* <p>方法描述: 工序接收 </p>
*
* @param wpId 工序id
*/
boolean workPlanReceive(Long wpId);
/**
* <p>方法名: updateHostWorkUnit </p>
* <p>方法描述: 更新订单所属部门 </p>
*
* @param workOrder 订单
*/
void updateHostWorkUnit(WorkOrder workOrder);
}

@ -39,4 +39,6 @@ public interface IWorkPlanService extends BaseService<WorkPlan> {
IPage<WorkPlanVO> queryWorkPlan(IPage<WorkPlanVO> page, String cardNo);
List<ProduceMonitorWorkPlanVO> getProduceMonitorWorkPlanList(Long woId);
WorkPlan findMaxHostWorkUnitByWoId(Long id, int i);
}

@ -84,22 +84,22 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
public WorkPlanDto loadCurrentWp(String cardNo) {
WorkOrder wo = workOrderMapper.getWorkOrderByCardNo(cardNo, (short) 0);
if (wo == null) {
throw new ServiceException("pda.prWorkOrder.absent");
throw new ServiceException("车间订单不存在!");
}
if (!WorkOrder.RUN_STATUS_RECEIVE.equals(wo.getRunStatus())) {
throw new ServiceException("pda.prWorkOrder.runStatus" + wo.getRunStatus());
throw new ServiceException("车间订单状态为" + wo.getRunStatus());
}
//验证当前当前登陆人是否可以填写加工记录
WorkPlan wp = workPlanMapper.selectById(wo.getWpId());
if (!WorkPlan.STATUS_START.equals(wp.getStatus())) {
throw new ServiceException("product.prWorkPlan.workOk");
throw new ServiceException("当前工序已报工完成!");
}
//this.checkTeamWorkPlan(wp, prWorkPlanService.getTeamId(userInfo.getUserId()));
Boolean isBinging = false;
// this.checkTeamWorkPlan(wp, prWorkPlanService.getTeamId(userInfo.getUserId()));
boolean isBinging = false;
// 查询当前工序是否绑定了挂次号
MacToolUse prMacToolUse = macToolUseService.getOne(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId()));
if (prMacToolUse != null && prMacToolUse.getMtnCode() != null) {
long count = macToolUseService.count(Wrappers.<MacToolUse>lambdaQuery().eq(MacToolUse::getWpId, wp.getId()).isNotNull(MacToolUse::getHangNum));
if (count > 0) {
isBinging = true;
}
YieldOrder yieldOrder = yieldOrderService.getById(wo.getYoId());
@ -311,9 +311,8 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
@Override
public List<WorkPlan> afterPlaReceive(String cardNo) {
WorkOrder wo = workOrderMapper.getWorkOrderByCardNo(cardNo, (short) 0);
List<WorkPlan> wpList = workPlanMapper.selectList(Wrappers.<WorkPlan>lambdaQuery()
.eq(WorkPlan::getWoId, wo.getId()));
return wpList;
Optional.ofNullable(wo).orElseThrow(() -> new ServiceException("车间订单不存在!"));
return workPlanMapper.afterPlaReceive(wo.getCardNo());
}
@Override

@ -11,6 +11,7 @@ import org.springblade.common.exception.BusinessException;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.basic.pojo.entity.RelTeamSetUser;
import org.springblade.desk.basic.service.IRelTeamSetUserService;
import org.springblade.desk.dashboard.pojo.entity.*;
@ -36,6 +37,7 @@ import org.springblade.desk.quality.service.IWorkPlanItemService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -52,7 +54,7 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan> implements IPdaLoadService {
private final IBsProcedureTeamService bsProcedureTeamService;
private final IBsTeamSetService bsTeamSetService;
private final IBsProcessSetService bsProcessSetService;
@ -125,7 +127,7 @@ public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
}
YieldOrder yieldOrder = yieldOrderService.getYoByCardNo(cardNo);
WorkPlan wp = baseMapper.selectOne(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, workOrder.getWpId()));
WorkPlan wp = baseMapper.selectOne(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, workOrder.getWpId()));
//不是最后一道不允许入库
if (wp.getNextWpId() != null) {
throw new ServiceException("pda.cur.work.not.last.one");
@ -151,20 +153,26 @@ public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
@Override
public PdaProRelevantVO loadProTestWorkPlan(String cardNo) {
WorkOrder prWorkOrder = this.checkPrWorkOrder(cardNo);
WorkPlan prWorkPlan = this.getOne(Wrappers.lambdaQuery(WorkPlan.class)
.eq(WorkPlan::getWoId, prWorkOrder.getId()));
DsPartEntity part = partService.getOne(Wrappers.lambdaQuery(DsPartEntity.class)
.eq(DsPartEntity::getPartCode, prWorkOrder.getPartCode()));
PdaProRelevantVO jsonObj =
PdaProRelevantVO.builder()
WorkPlan prWorkPlan = this.getOne(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getId, prWorkOrder.getWpId()));
WorkPlan frontWorkPlan = this.getById(prWorkPlan.getFrontWpId());
DsPartEntity part = partService.selectDsPartByPatCodeAndVersion(prWorkOrder.getPartCode(), null);
List<BsProcessSetEntity> processSets = bsProcessSetService.listByIds(List.of(prWorkPlan.getPpsId(), frontWorkPlan.getPpsId()));
// 将processSets根据主键ID转换为Map
Map<Long, BsProcessSetEntity> processSetMap = processSets.stream().collect(Collectors.toMap(BsProcessSetEntity::getId, processSet -> processSet));
BsTeamSetEntity teamSet = bsTeamSetService.getById(prWorkPlan.getSubsidiaryTeam() != null ? prWorkPlan.getSubsidiaryTeam() : prWorkPlan.getMakeTeam());
PdaProRelevantVO jsonObj = PdaProRelevantVO.builder()
.cardNo(cardNo)
.woCode(prWorkOrder.getWoCode())
.batchNo(prWorkOrder.getBatchNo())
.partCode(prWorkOrder.getPartCode())
.partName(part.getPartName())
.frontOrders(prWorkPlan.getOrders())
.frontPpsName(part.getCraftWay())
.wpId(prWorkPlan.getId()).build();
.frontOrders(frontWorkPlan.getOrders())
.frontPpsName(processSetMap.get(frontWorkPlan.getPpsId()).getName())
.wpId(prWorkPlan.getId())
.makeQty(prWorkOrder.getMakeQty())
.orders(prWorkPlan.getOrders())
.ppsName(processSetMap.get(prWorkPlan.getPpsId()).getName())
.makeTeam(teamSet.getTsName()).build();
return jsonObj;
}
@ -179,7 +187,7 @@ public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
List<MesQcProduceRunEntity> qcProduceRunList = mesQcProduceRunService.list(Wrappers.lambdaQuery(MesQcProduceRunEntity.class)
.eq(MesQcProduceRunEntity::getMtnCode, mtnCode));
if (qcProduceRunList != null && qcProduceRunList.size() > 0) {
List< Long> qcProduceRunIds = qcProduceRunList.stream().map(MesQcProduceRunEntity::getId).collect(Collectors.toList());
List<Long> qcProduceRunIds = qcProduceRunList.stream().map(MesQcProduceRunEntity::getId).collect(Collectors.toList());
mesQcProduceRunService.deleteLogic(qcProduceRunIds);
}
// 删除绑定记录
@ -241,15 +249,25 @@ public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
WorkOrder prWorkOrder = this.checkWo(cardNo);
//车间订单状态小于已下达并且大于加工中的情况下,不允许下序接收
if (prWorkOrder.getRunStatus() < WorkOrder.RUN_STATUS_ISSUED || prWorkOrder.getRunStatus() > WorkOrder.RUN_STATUS_RECEIVE) {
throw new ServiceException("pda.prWorkOrder.runStatus"+prWorkOrder.getRunStatus());
throw new ServiceException("车间订单不存在!" + prWorkOrder.getRunStatus());
}
return prWorkOrder;
}
@Override
public boolean saveProCheck(InspectionTask inspectionTask) {
inspectionTask.setReviewStatus((short) 0);
if (inspectionTask.getId() == null) {
inspectionTask.setCheckUserId(AuthUtil.getUserId());
inspectionTask.setCheckDate(LocalDateTime.now());
}
return inspectionTaskService.saveOrUpdate(inspectionTask);
}
private WorkOrder checkWo(String cardNo) {
WorkOrder prWorkOrder = workOrderService.getOne(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getCardNo, cardNo));
if (prWorkOrder == null) {
throw new ServiceException("pda.prWorkOrder.absent"+null);
throw new ServiceException("pda.prWorkOrder.absent" + null);
}
return prWorkOrder;
}

@ -19,14 +19,18 @@ import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.desk.basic.constant.FlowConst;
import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity;
import org.springblade.desk.basic.service.IOemCraftAbilityService;
import org.springblade.desk.basic.service.IOemService;
import org.springblade.desk.basic.service.IProcessAbilityService;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.dashboard.service.IBsTeamSetService;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.dashboard.service.IDsProcessProjectService;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.pojo.entity.FeiBaSetEntity;
import org.springblade.desk.device.pojo.entity.RackSetEntity;
@ -50,6 +54,7 @@ import org.springblade.desk.produce.pojo.vo.*;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.*;
import org.springblade.desk.quality.service.*;
import org.springblade.desk.util.date.DateUtils;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.system.cache.DictCache;
@ -136,6 +141,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final IOemService oemService;
private final IReviewSheetService reviewSheetService;
private final IOemCraftAbilityService oemCraftAbilityService;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
@ -1449,6 +1458,196 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
@Override
public boolean workPlanReceive(Long wpId) {
WorkPlan workPlan = workPlanService.getById(wpId);
WorkPlan frontWorkPlan = workPlanService.getById(workPlan.getFrontWpId());
WorkOrder workOrder = this.getById(workPlan.getWoId());
// 上序不为空时进行审理单验证
if (frontWorkPlan != null) {
// 验证上序是否存在未完成审理,如果存在则不允许接收
InspectionTask checkByWpId = iInspectionTaskService.getPrWorkCheckByWpId(frontWorkPlan.getId());
if (checkByWpId != null) {
// 查询是否存在未完的审理单
List<ReviewSheet> rsLst = reviewSheetService.getNoCompleteByWcId(checkByWpId.getId());
if (CollectionUtils.isNotEmpty(rsLst)) {
throw new ServiceException("存在未完成审理单,请处理后再进行接收");
}
}
// 验证车间订单状态
if (!WorkOrder.RUN_STATUS_RECEIVE.equals(workOrder.getRunStatus())) {
throw new ServiceException("存在未完成审理单,请处理后再进行接收");
}
}
Date newDate = new Date();
// 完成上序
this.workPlanEnd(frontWorkPlan, newDate, workOrder.getMakeQty());
// 开始本序
this.workPlanStart(workPlan, newDate, AuthUtil.getUserId(), workOrder);
return true;
}
private void workPlanStart(WorkPlan workPlan, Date startDate, Long userId, WorkOrder workOrder) {
if (workPlan == null) {
return;
}
// 开始本序
workPlan.setFactStartTime(startDate);
workPlan.setStatus(WorkPlan.STATUS_START);
if ("1".equals(workPlan.getOem())) {
workPlan.setStatus(WorkPlan.STATUS_WORK_OK);
}
workPlan.setQualifiedQty(workOrder.getMakeQty());
workPlan.setReceiveMan(userId);
workPlanService.updateById(workPlan);
// 修改车间订单当前加工工序
workOrder.setWpId(workPlan.getId());
workOrder.setOemType(-1);
//第一道工序更改车间状态
log.info("工序接收,当前工序ID:{}", workPlan.getId());
if (workPlan.getFrontWpId() == null) {
log.info("第一道工序更改车间状态为加工中,车间订单ID:{}", workOrder.getId());
// 快速将Long转换为List<Long>
this.updateStatus(List.of(workPlan.getId()), WorkOrder.RUN_STATUS_RECEIVE, userId, null);
// 如果是返工回来的不验证子件
if (StringUtils.isBlank(workOrder.getReworkCode())) {
// yieldOrderService.verifyYield(workOrder.getYoId());
}
}
YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
// 根据零件号、工序ID、版本号、工艺级别查询对应的检验项目
List<DsProcessProjectEntity> projects = dsPartService.selectDsProcessProjectByPartNoAndPpsId(workOrder.getPartCode(), workPlan.getOrders(), yieldOrder.getPartVersion(), yieldOrder.getRank());
if (CollectionUtils.isNotEmpty(projects)) {
// 保存检验任务
InspectionTask inspectionTask = new InspectionTask();
inspectionTask.setWpId(workPlan.getId());
inspectionTaskService.saveOrEdit(inspectionTask, userId);
// 保存检验项目
List<WorkPlanItem> workPlanItems = new ArrayList<>();
WorkPlanItem workPlanItem;
for (DsProcessProjectEntity project : projects) {
workPlanItem = new WorkPlanItem();
workPlanItem.setWpId(workPlan.getId());
workPlanItem.setItemCode(project.getProjectCode());
workPlanItem.setItemName(project.getProjectName());
workPlanItem.setStandardId(Long.valueOf(project.getProjectStandard()));
workPlanItem.setStandardName(project.getProjectStandardName());
workPlanItem.setHourQuota(project.getProHours());
workPlanItem.setHourPrepare(project.getPrepareHours());
workPlanItem.setTaskId(inspectionTask.getId());
workPlanItem.setItemId(project.getId());
workPlanItems.add(workPlanItem);
}
workPlanItemService.saveBatch(workPlanItems);
// 修改车间订单为检验中
workOrder.setRunStatus(WorkOrder.RUN_STATUS_CHECK);
} else {
// 更新调度员
this.updateHostWorkUnit(workOrder);
}
this.updateById(workOrder);
if (yieldOrder.getFatherYoId() != null) {
List<WorkOrder> prWorkOrderList = baseMapper.listByYoId(yieldOrder.getFatherYoId());
if (CollectionUtils.isNotEmpty(prWorkOrderList)) {
for (WorkOrder order : prWorkOrderList) {
if (StringUtils.isBlank(order.getMesCardNo())) {
String code = this.cardNextCode();
//验证此编码是否重复
if (this.getMaxByMesCard(code)) {
code = this.cardNextCode();
}
order.setMesCardNo(code);
}
}
this.updateBatchById(prWorkOrderList);
}
}
}
private boolean getMaxByMesCard(String code) {
WorkOrder workOrder = baseMapper.getMaxByMesCard(code);
if (workOrder != null) {
return true;
}
return false;
}
@Override
public void updateHostWorkUnit(WorkOrder wo) {
Long caId = null;
if (wo != null) {
//查到了代表存在主工序标识,反之则默认当前工序的作业单位
WorkPlan wp = workPlanService.findMaxHostWorkUnitByWoId(wo.getId(), 1);
if (wp != null) {
wo.setTsId(wp.getMakeTeam());
wo.setOcId(wp.getOcId());
} else {
wp = workPlanService.findMaxHostWorkUnitByWoId(wo.getId(), 0);
if (wp != null) {
wo.setTsId(wp.getMakeTeam());
wo.setOcId(wp.getOcId());
}
}
//根据规则拿到主工序,如果没有主工序或者主工序没有加工单位,则默认获取当前工序
if (wp == null || (wp.getMakeTeam() == null && wp.getOcId() == null)) {
wp = workPlanService.getById(wo.getWpId());
//如果当前工序已经报工完成,则默认获取下道工序的加工单位,反之则获取当前工序的加工作单位
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
WorkPlan nextWorkPlan = workPlanService.getById(wp.getNextWpId());
wo.setTsId(nextWorkPlan.getMakeTeam());
wo.setOcId(nextWorkPlan.getOcId());
caId = nextWorkPlan.getCaId();
} else {
wo.setTsId(wp.getMakeTeam());
wo.setOcId(wp.getOcId());
caId = wp.getCaId();
}
} else {
caId = wp.getCaId();
}
//如果当前订单的主作业单位不为空,重新赋值一下调度员和计划员
if (wo.getTsId() != null) {
BsTeamSetEntity bsTeamSet = teamSetService.getById(wo.getTsId());
if (bsTeamSet != null) {
wo.setPlanner(bsTeamSet.getPlanner());
wo.setDispatcher(bsTeamSet.getDispatcher());
}
wo.setTsId(null);
} else if (wo.getOcId() != null) {
OemCraftAbilityEntity oa = oemCraftAbilityService.findBsOemAbility(wo.getOcId(), caId);
if (oa == null) {
throw new ServiceException("外协商【" + wo.getOcId() + "】没有配置对应的工艺能力!!!");
}
wo.setPlanner(oa.getPlanner());
wo.setDispatcher(oa.getDispatcher());
wo.setTsId(null);
}
}
}
private void workPlanEnd(WorkPlan workPlan, Date newDate, Double makeQty) {
if (workPlan == null) {
return;
}
workPlan.setStatus(WorkPlan.STATUS_COMPLETE);
workPlan.setFactEndTime(newDate);
if (workPlan.getWorkQty() < 1) {
workPlan.setWorkQty(makeQty);
}
workPlan.setHours(BigDecimal.valueOf(DateUtils.differentDaysByMin(workPlan.getFactStartTime(), newDate)));
workPlanService.updateById(workPlan);
}
private void setRbFilePreserveData(List<MesRbFilePreserveSlotEntity> preserveSlotList, List<MesQcProduceRunEntity> qcProduceRunsList, WorkPlan workPlan, List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList, MacToolUse prMacToolUse) {
List<MesRbFilePreserveDetailEntity> dsRbFilePreserveDetailList = null;
ProduceMonitorFileSlotVO newDsRbFilePreserveSlot = null;

@ -244,4 +244,9 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
public List<ProduceMonitorWorkPlanVO> getProduceMonitorWorkPlanList(Long woId) {
return baseMapper.getProduceMonitorWorkPlanList(woId);
}
@Override
public WorkPlan findMaxHostWorkUnitByWoId(Long id, int i) {
return baseMapper.findMaxHostWorkUnitByWoId(id, i);
}
}

@ -38,7 +38,7 @@ public class WorkOrderWrapper extends BaseEntityWrapper<WorkOrder, WorkOrderVO>
List<WorkOrderVO> workOrderVos = pages.getRecords();
for (WorkOrderVO workOrderVo : workOrderVos) {
User user = UserCache.getUser(workOrderVo.getDispatcher());
workOrderVo.setDispatcherName(user.getRealName());
workOrderVo.setDispatcherName(user != null ? user.getRealName() : "");
workOrderVo.setRunStatusName(WorkOrderEnum.getName(workOrderVo.getRunStatus()));
workOrderVo.setPriorityName(WorkOrder.priorityMap.get(workOrderVo.getPriority()));
}

Loading…
Cancel
Save