diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java index bd061a72..fec9add8 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java @@ -13,7 +13,9 @@ import java.io.Serial; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 车间作业计划 实体类 @@ -46,6 +48,23 @@ public class WorkPlan extends BaseEntity { */ public static Integer STATUS_VOIDED = 6; + /** + * 绑定 + */ + public static Short BIND_STATUS_BIND = 1; + /** + * 加工 + */ + public static Short BIND_STATUS_WORK = 2; + /** + * 解绑 + */ + public static Short BIND_STATUS_FREE = 3; + public static Map statusMap = new HashMap(3); + /** + * 生产过程 + */ + public static Short PRINT_TYPE_PROCESS = 1; @Serial private static final long serialVersionUID = 1L; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/process/mapper/ProjectApplicationMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/process/mapper/ProjectApplicationMapper.xml index e03bd84a..688f38bb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/process/mapper/ProjectApplicationMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/process/mapper/ProjectApplicationMapper.xml @@ -40,7 +40,7 @@ and n.PA_CODE = #{fmProjectApplication.paCode} - and n.PROJECT_NAME = #{fmProjectApplication.projectName} + and n.PROJECT_NAME LIKE '%' || #{fmProjectApplication.projectName} || '%' and n.PROJECT_HEAD = #{fmProjectApplication.projectHead} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java new file mode 100644 index 00000000..e35dbd0d --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java @@ -0,0 +1,52 @@ +package org.springblade.desk.produce.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; +import org.springblade.desk.device.pojo.entity.RackSetEntity; +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.springframework.web.bind.annotation.*; + +/** + * @ClassName PdaLoadController + * @Description: 手持移动端数据查询接口 + * @Author qjh + * @Date 2022-10-28 14:41 + * @Version 1.0 + * 注意:本内容仅限于内部传阅,禁止外泄及用于其他的商业目的 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/pdaLoad") +@Tag(name = "手持移动端数据查询接口", description = "接口") +public class PdaLoadController { + + private final IPdaLoadService pdaLoadService; + @GetMapping(value = "/loadBindData/{cardNo}") + @ApiOperationSupport(order = 1) + @Operation(summary = "加载绑定需要的流程卡数据", description = "传入cardNo") + public R loadBindData(@PathVariable String cardNo) { + return R.data(pdaLoadService.loadBindData(AuthUtil.getUser(), cardNo)); + } + @GetMapping(value = "getBsFeiBaSetByCode/{rsCode}") + @ApiOperationSupport(order = 2) + @Operation(summary = "根据挂具编码查询数据", description = "传入rsCode") + public R getBsFeiBaSetByCode(@PathVariable String rsCode) { + return R.data(pdaLoadService.getBsRackSetByCode(rsCode)); + } + @GetMapping(value = "/getBsFeiBaSetByCodeUn/{fsCode}") + @ApiOperationSupport(order = 3) + @Operation(summary = "根据挂具编码查询数据(解绑)", description = "传入fsCode") + public R getBsFeiBaSetByCodeUn(@PathVariable String fsCode) { + return R.data(pdaLoadService.getBsFeiBaSetByCode(fsCode)); + } + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaSaveController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaSaveController.java new file mode 100644 index 00000000..73ec74e7 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaSaveController.java @@ -0,0 +1,89 @@ +package org.springblade.desk.produce.controller; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springblade.core.tool.api.R; +import org.springblade.desk.basic.pojo.entity.BasicClazz; +import org.springblade.desk.basic.service.IBasicClazzService; +import org.springblade.desk.produce.service.IPdaSaveService; +import org.springframework.web.bind.annotation.*; + +/** + * @ClassName PdaLoadController + * @Description: 手持移动端数据查询接口 + * @Author qjh + * @Date 2022-10-28 14:41 + * @Version 1.0 + * 注意:本内容仅限于内部传阅,禁止外泄及用于其他的商业目的 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/pdaSave") +@Tag(name = "手持移动端数据查询接口", description = "接口") +public class PdaSaveController { + + private final IPdaSaveService pdaSaveService; + + private final IBasicClazzService basicClazzService; + @Operation(summary = "流程卡与挂具绑定") + @PostMapping("/gjBindingCrad") + public R gjBindingCrad(@RequestParam(value = "rsId") Long rsId,@RequestParam(value = "planListIds") String planListIds) { + pdaSaveService.bindingCard(rsId, null, null, planListIds); + return R.success() ; + } + @Operation(summary = "挂具与飞靶绑定") + @PostMapping("/gjBindingFb") + public R gjBindingFb(@RequestParam(value = "fsId") Long fsId,@RequestParam(value = "rsListIds") String rsListIds) { + pdaSaveService.binding(fsId, null, null,null, rsListIds); + return R.success() ; + } + @Operation(summary = "飞靶与设备绑定") + @PostMapping("/fbBindingEc") + public R fbBindingEc(@RequestParam(value = "fsId") Long fsId,@RequestParam(value = "ecId") Long ecId, + @RequestParam(value = "hangNum") Long hangNum,@RequestParam(value = "unFsBool") Boolean unFsBool) { + String hangNumName = ""; + BasicClazz bsBasicClass = null; + if(hangNum != null&&hangNum != -1){ + bsBasicClass = basicClazzService.getById(hangNum); + if(bsBasicClass != null){ + hangNumName = bsBasicClass.getName(); + } + }else if(hangNum == -1){ + hangNumName = "-1"; + } + pdaSaveService.binding(fsId, ecId, unFsBool, hangNumName,null); + // 删除产线设备对应的挂次号之前的数据 + if(bsBasicClass!= null){ + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(BasicClazz::getCode,bsBasicClass.getCode()); + wrapper.eq(BasicClazz::getBizType,"6"); + wrapper.lt(BasicClazz::getUpdateTime,bsBasicClass.getUpdateTime()); + wrapper.set(BasicClazz::getIsDeleted,1); + basicClazzService.update(null, wrapper); + } + return R.success() ; + } + @Operation(summary = "流程卡与飞靶绑定") + @PostMapping("/fbBindingCrad") + public R fbBindingCrad(@RequestParam(value = "fsId") Long fsId,@RequestParam(value = "planListIds") String planListIds) { + pdaSaveService.bindingCard(null, fsId, null, planListIds); + return R.success() ; + } + @Operation(summary = "流程卡与设备绑定") + @PostMapping("/ecBindingCrad") + public R ecBindingCrad(@RequestParam(value = "ecId") Long ecId,@RequestParam(value = "planListIds") String planListIds) { + pdaSaveService.bindingCard(null, null, ecId, planListIds); + return R.success() ; + } + @Operation(summary = "挂具与设备绑定") + @PostMapping("/gjBindingEc") + public R gjBindingEc(@RequestParam(value = "ecId") Long ecId,@RequestParam(value = "rsListIds") String rsListIds) { + pdaSaveService.binding(null, ecId, null,null, rsListIds); + return R.success() ; + } + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java index 294bfe39..d5193c84 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java @@ -11,5 +11,11 @@ import org.springblade.desk.produce.pojo.entity.MacToolUse; */ public interface IMacToolUseService extends BaseService { - + /** + * 获取下一个编号 + * + * @param i + * @return + */ + String nextCode(int i); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java new file mode 100644 index 00000000..6d3cfc92 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java @@ -0,0 +1,44 @@ +package org.springblade.desk.produce.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.secure.BladeUser; +import org.springblade.desk.device.pojo.entity.FeiBaSetEntity; +import org.springblade.desk.device.pojo.entity.RackSetEntity; +import org.springblade.desk.produce.pojo.entity.WorkOrder; +import org.springblade.desk.produce.pojo.entity.WorkPlan; + +import java.util.List; + +/** + * 车间作业计划 服务类 + * + * @author BladeX + * @since 2025-11-28 + */ +public interface IPdaLoadService extends BaseService { + /** + *

方法名: loadBindData

+ *

方法描述: 加载绑定数据

+ * + * @param user 用户 + * @param cardNo 卡号 + * @return org.springblade.desk.produce.pojo.entity.WorkPlan + */ + WorkPlan loadBindData(BladeUser user, String cardNo); + /** + *

方法名: getBsRackSetByCode

+ *

方法描述: 根据挂具编码查询数据

+ * + * @param rsCode 挂具编码 + * @return org.springblade.desk.device.pojo.entity.RackSetEntity + */ + RackSetEntity getBsRackSetByCode(String rsCode); + /** + *

方法名: getBsFeiBaSetByCode

+ *

方法描述: 根据飞靶编码查询数据

+ * + * @param fsCode 飞靶编码 + * @return org.springblade.desk.device.pojo.entity.BsFeiBaSet + */ + FeiBaSetEntity getBsFeiBaSetByCode(String fsCode); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java new file mode 100644 index 00000000..38111cd0 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java @@ -0,0 +1,32 @@ +package org.springblade.desk.produce.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.produce.pojo.entity.WorkPlan; + +/** + * 车间作业计划 服务类 + * + * @author BladeX + * @since 2025-11-28 + */ +public interface IPdaSaveService extends BaseService { + /** + *

方法名: bindingCard

+ *

方法描述: 绑定卡

+ * + * @param rsId 挂具id + * @param planListIds 绑定数据 + */ + void bindingCard(Long rsId, Long fsId, Long ecId, String planListIds); + /** + *

方法名: binding

+ *

方法描述: 绑定

+ * + * @param rsId 挂具id + * @param ecId 设备id + * @param unFsBool 是否解绑 + * @param rsListIds 绑定数据 + * @param listIds + */ + void binding(Long rsId, Long ecId, Boolean unFsBool,String hangNum,String rsListIds); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java index 701286a6..c9d0e14f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java @@ -8,6 +8,13 @@ import org.springblade.desk.produce.pojo.entity.MacToolUse; import org.springblade.desk.produce.service.IMacToolUseService; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Random; + +import static com.fasterxml.jackson.databind.type.LogicalType.DateTime; + /** * 设备,工装使用记录 服务实现类 * @@ -18,4 +25,27 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class MacToolUseServiceImpl extends BaseServiceImpl implements IMacToolUseService { + @Override + public String nextCode(int i) { + // 编码模式 + + String str = ""; + if (i == 0) { + str = "G-"; + } else if (i == 1) { + str = "B-"; + } else if (i == 2) { + str = "S-"; + } else if (i == 3) { + str = "SJ-"; + } + String codePattern = str + "BD" + new SimpleDateFormat("YYYYMMDD").format(new Date()); + + return codePattern + time2Integer(new Date()) + new Random().nextInt(100); + } + public static final int time2Integer(Date d) { + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + return cal.get(11) * 10000 + cal.get(12) * 100 + cal.get(13); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java new file mode 100644 index 00000000..9db8571c --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java @@ -0,0 +1,163 @@ +package org.springblade.desk.produce.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +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.desk.basic.pojo.entity.RelTeamSetUser; +import org.springblade.desk.basic.service.IRelTeamSetUserService; +import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; +import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; +import org.springblade.desk.dashboard.pojo.entity.DsProcessMeasuringToolEntity; +import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity; +import org.springblade.desk.dashboard.service.*; +import org.springblade.desk.device.pojo.entity.FeiBaSetEntity; +import org.springblade.desk.device.pojo.entity.RackSetEntity; +import org.springblade.desk.device.service.IFeiBaSetService; +import org.springblade.desk.device.service.IRackSetService; +import org.springblade.desk.produce.mapper.WorkPlanMapper; +import org.springblade.desk.produce.pojo.entity.*; +import org.springblade.desk.produce.service.*; +import org.springblade.desk.quality.pojo.entity.InspectionTask; +import org.springblade.desk.quality.pojo.entity.WorkPlanItem; +import org.springblade.desk.quality.pojo.vo.WorkPlanItemDetailVO; +import org.springblade.desk.quality.pojo.vo.WorkPlanItemVO; +import org.springblade.desk.quality.service.IInspectionTaskService; +import org.springblade.desk.quality.service.IPlanTestService; +import org.springblade.desk.quality.service.IWorkPlanItemService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 车间作业计划 服务实现类 + * + * @author BladeX + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PdaLoadServiceImpl extends BaseServiceImpl implements IPdaLoadService { + + private final IBsProcedureTeamService bsProcedureTeamService; + + private final IBsProcessSetService bsProcessSetService; + + private final IDsProcessService dsProcessService; + + private final IPrReworkProcessService prReworkProcessService; + + private final IWorkPlanItemService workPlanItemService; + + private final IInspectionTaskService inspectionTaskService; + + private final IWorkOrderRunService workOrderRunService; + + private final IDsProcessMeasuringToolService processMeasuringToolService; + + private final IDsProcessProjectService dsProcessProjectService; + + private final IMakeRecService makeRecService; + + private final IMacToolUseService macToolUseService; + + private final IPlanTestService planTestService; + + private final IWorkOrderService workOrderService; + + private final IRelTeamSetUserService relTeamSetUserService; + + private final IRackSetService rackSetService; + + private final IFeiBaSetService feiBaSetService; + + @Override + public WorkPlan loadBindData(BladeUser user, String cardNo) { + WorkPlan prWorkPlan = this.getCurrentWorkPlan(cardNo, user, false, false); + return prWorkPlan; + } + + @Override + public RackSetEntity getBsRackSetByCode(String rsCode) { + return rackSetService.getOne(Wrappers.lambdaQuery(RackSetEntity.class) + .eq(RackSetEntity::getRsCode, rsCode)); + } + + @Override + public FeiBaSetEntity getBsFeiBaSetByCode(String fsCode) { + return feiBaSetService.getOne(Wrappers.lambdaQuery(FeiBaSetEntity.class) + .eq(FeiBaSetEntity::getFsCode, fsCode)); + } + + private WorkPlan getCurrentWorkPlan(String cardNo, BladeUser user, boolean checkCurrentProcess, boolean checkAfterPlating) { + //获取并验证车间订单 + WorkOrder prWorkOrder = this.checkPrWorkOrder(cardNo); + //获取当前登录人班组 + List tsIds = relTeamSetUserService. + list(Wrappers.lambdaQuery(RelTeamSetUser.class) + .eq(RelTeamSetUser::getUserId, user.getUserId())) + .stream().map(RelTeamSetUser::getUserId).collect(Collectors.toList()); + //获取作业计划 + WorkPlan prWorkPlan = this.getOne(Wrappers.lambdaQuery(WorkPlan.class) + .eq(WorkPlan::getId, prWorkOrder.getWpId())); + //获取当前工序的下序 + WorkPlan nextPrWorkPlan = this.getOne(Wrappers.lambdaQuery(WorkPlan.class) + .eq(WorkPlan::getId, prWorkPlan.getNextWpId())); + //获取当前工序的上序 + WorkPlan frontPrWorkPlan = this.getOne(Wrappers.lambdaQuery(WorkPlan.class) + .eq(WorkPlan::getId, prWorkPlan.getFrontWpId())); + //如果是最后一道工序(当前序下序为空或者下序的下序为空) + if (nextPrWorkPlan == null || nextPrWorkPlan.getNextWpId() == null) { + //如果是镀后入库则不验证 + if (checkAfterPlating) { + throw new ServiceException("pda.nextWorkPlan.noNext"); + } + } + //验证作业中心 + //this.checkWorkCenter(checkCurrentProcess, frontPrWorkPlan, prWorkPlan, nextPrWorkPlan, tsIds, checkAfterPlating); + //状态是false或者上序为空,并且当前序(首道)状态未未开工时,获取当前序; + if (!checkCurrentProcess || (frontPrWorkPlan == null && prWorkPlan.getStatus().equals(WorkPlan.STATUS_NO_START))) { + return prWorkPlan; + } + //如果是镀后入库则不验证 + if (checkAfterPlating) { + if (prWorkPlan != null) { + //验证上道工序是否报工完成 + if (!WorkPlan.STATUS_WORK_OK.equals(prWorkPlan.getStatus())) { + throw new ServiceException("product.frontWpNotWork"); + } + } + } + return nextPrWorkPlan; + } + + private void checkWorkCenter(boolean checkCurrentProcess, WorkPlan frontPrWorkPlan, WorkPlan prWorkPlan, WorkPlan nextPrWorkPlan, List tsIds, boolean checkAfterPlating) { + + } + + private WorkOrder checkPrWorkOrder(String cardNo) { + 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()); + } + return prWorkOrder; + } + + 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); + } + return prWorkOrder; + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java new file mode 100644 index 00000000..ec77f42e --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java @@ -0,0 +1,208 @@ +package org.springblade.desk.produce.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.desk.basic.service.IRelTeamSetUserService; +import org.springblade.desk.dashboard.service.*; +import org.springblade.desk.device.pojo.entity.FeiBaSetEntity; +import org.springblade.desk.device.pojo.entity.RackSetEntity; +import org.springblade.desk.device.service.IFeiBaSetService; +import org.springblade.desk.device.service.IRackSetService; +import org.springblade.desk.produce.mapper.WorkPlanMapper; +import org.springblade.desk.produce.pojo.entity.MacToolUse; +import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.service.*; +import org.springblade.desk.quality.service.IInspectionTaskService; +import org.springblade.desk.quality.service.IPlanTestService; +import org.springblade.desk.quality.service.IWorkPlanItemService; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** + * 车间作业计划 服务实现类 + * + * @author BladeX + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PdaSaveServiceImpl extends BaseServiceImpl implements IPdaSaveService { + + private final IBsProcedureTeamService bsProcedureTeamService; + + private final IBsProcessSetService bsProcessSetService; + + private final IDsProcessService dsProcessService; + + private final IPrReworkProcessService prReworkProcessService; + + private final IWorkPlanItemService workPlanItemService; + + private final IInspectionTaskService inspectionTaskService; + + private final IWorkOrderRunService workOrderRunService; + + private final IDsProcessMeasuringToolService processMeasuringToolService; + + private final IDsProcessProjectService dsProcessProjectService; + + private final IMakeRecService makeRecService; + + private final IMacToolUseService macToolUseService; + + private final IPlanTestService planTestService; + + private final IWorkOrderService workOrderService; + + private final IRelTeamSetUserService relTeamSetUserService; + + private final IRackSetService rackSetService; + + private final IFeiBaSetService feiBaSetService; + + @Override + public void bindingCard(Long rsId, Long fsId, Long ecId, String planListIds) { + RackSetEntity rackSet = rackSetService.getById(rsId); + //BsFeiBaSet bsFeiBaSet = this.getFeiBaSetByFsId(fsId); + //DeEquipmentCard equipmentCard = this.getEquipmentCardByEcId(ecId); + + //同槽号 + String code = null; + //rsId挂具绑定流程卡,fsId飞靶绑定流程卡 + if(rsId!=null){ + List macToolUseList = macToolUseService.list(Wrappers.query().lambda() + .eq(MacToolUse::getBsRackSet, rsId) + .eq(MacToolUse::getFinished, false) + .eq(MacToolUse::getIsDeleted, 0).orderByDesc(MacToolUse::getMtnCode) + ); + if(macToolUseList.size()>0){ + code = macToolUseList.get(0).getMtnCode(); + } + //如果未找到满足条件的同槽号 + if (StringUtils.isBlank(code)) { + code = macToolUseService.nextCode(0); + } + //修改挂具状态 + rackSetService.updateById(rackSet); + } + //fsId 是空,逻辑不会走 + //处理绑定信息 + WorkPlan prWorkPlan = null; + MacToolUse mtu = null; + //绑定日期 + Date nowDate = new Date(); + String [] str= planListIds.split(","); + for (int i = 0; i < str.length; i++) { + Long planId = Long.parseLong(str[i]); + prWorkPlan = this.getById(planId); + mtu = new MacToolUse(); + mtu.setMtnCode(code); + mtu.setBsRackSet(rsId); + mtu.setWpId(prWorkPlan.getId()); + mtu.setCreateMan(AuthUtil.getUser().getUserId()); + mtu.setUpdateTime(nowDate); + mtu.setCreateTime(nowDate); + macToolUseService.saveOrUpdate(mtu); + //修改作业计划绑定状态为绑定 + prWorkPlan.setBindStatus(WorkPlan.BIND_STATUS_BIND); + if (rsId == null) { + prWorkPlan.setPrintType(WorkPlan.PRINT_TYPE_PROCESS); + } + this.updateById(prWorkPlan); + } + // 存储同槽额外面积 没有表,后期添加 + this.setBsAdditionalMess(code); + } + + @Override + public void binding(Long fsId, Long ecId, Boolean unFsBool,String hangNum, String rsListIds) { + //获取同槽号 + String code = null; + Date nowDate = new Date(); + FeiBaSetEntity frackSet = feiBaSetService.getById(fsId); + //挂具集合不为空,则代表是挂具相关绑定,反之则是飞靶绑定设备 + if (rsListIds != null) { + if (fsId != null) { + List macToolUseList = macToolUseService.list(Wrappers.query().lambda() + .eq(MacToolUse::getBsRackSet, fsId) + .eq(MacToolUse::getFinished, false) + .eq(MacToolUse::getIsDeleted, 0).orderByDesc(MacToolUse::getMtnCode) + ); + if(macToolUseList.size()>0){ + code = macToolUseList.get(0).getMtnCode(); + } + //修改飞靶状态 + feiBaSetService.updateById(frackSet); + //如果未找到满足条件的同槽号,则自动生成一个同槽号(飞靶) + if (StringUtils.isBlank(code)) { + code = macToolUseService.nextCode(0); + } + }else { + //如果未找到满足条件的同槽号,则自动生成一个同槽号(设备) + if (StringUtils.isBlank(code)) { + code = macToolUseService.nextCode(2); + } + } + //挂具 + RackSetEntity rackSet = null; + String [] str= rsListIds.split(","); + for (int i = 0; i < str.length; i++) { + Long rsId = Long.parseLong(str[i]); + rackSet = rackSetService.getById(rsId); + List macToolUseList = macToolUseService.list(Wrappers.query().lambda() + .eq(MacToolUse::getBsRackSet, rsId) + .eq(MacToolUse::getFinished, false) + .eq(MacToolUse::getIsDeleted, 0) + ); + //开始绑定 + for (int i1 = 0; i1 < macToolUseList.size(); i1++) { + MacToolUse mtu = macToolUseList.get(i1); + mtu.setMtnCode(code); + mtu.setBsRackSet(rsId); + mtu.setUpdateTime(nowDate); + mtu.setCreateMan(AuthUtil.getUser().getUserId()); + macToolUseService.updateById(mtu); + } + // 存储同槽额外面积 + this.setBsAdditionalMess(code); + } + + }else { + List macToolUseList = macToolUseService.list(Wrappers.query().lambda() + .eq(MacToolUse::getBsFeiBaSet, frackSet.getId()) + .eq(MacToolUse::getIsDeleted, 0) + ); + //未标记解绑飞靶,则代表正常绑定 + if (unFsBool == null){ + //获取以设备为基准的同槽号 + code = macToolUseService.nextCode(2); + //开始绑定 + for (int i = 0; i < macToolUseList.size(); i++) { + MacToolUse mtu = macToolUseList.get(i); + mtu.setMtnCode(code); + mtu.setHangNum(null); + mtu.setMtnCode(code); + mtu.setUpdateTime(nowDate); + mtu.setCreateMan(AuthUtil.getUser().getUserId()); + macToolUseService.updateById(mtu); + } + } //else 逻辑不走 + } + } + + /** + * 存储同槽额外面积 + * @param code + */ + private void setBsAdditionalMess(String code) { + + } + + +}