入库单相关

liweidong
李涛 1 month ago
parent f1e82844fe
commit 3f3ceff67a
  1. 114
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/HandoverRecord.java
  2. 152
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/PrintWarehousingVO.java
  3. 8
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java
  4. 5
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java
  5. 22
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  6. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaSaveController.java
  7. 41
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PlateAroundController.java
  8. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/HandoverRecordMapper.java
  9. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/HandoverRecordMapper.xml
  10. 17
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java
  11. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java
  12. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java
  13. 134
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/HandoverRecordServiceImpl.java
  14. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java
  15. 62
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java
  16. 23
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java
  17. 50
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/HandoverRecordWrapper.java
  18. 6
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java
  19. 2
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java
  20. 8
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml
  21. 2
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java
  22. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java

@ -0,0 +1,114 @@
package org.springblade.desk.produce.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 移交记录 实体类
* @author BladeX
*/
@Data
@TableName("MES_HANDOVER_RECORD")
@Schema(description = "HandoverRecord对象")
@EqualsAndHashCode(callSuper = true)
public class HandoverRecord extends BaseEntity {
/**
* 入库单
*/
public static Short HR_TYPE_IN_WAREHOUSE = 0;
/**
* 转工单
*/
public static Short HR_TYPE_TRANSFER = 1;
/**
* 待移交
*/
public static Integer RUN_STATUS_WAIT = 1;
/**
* 完成
*/
public static Integer RUN_STATUS_COMPLETE = 2;
public static Map<Short, String> hrTypeMap = new HashMap<Short, String>(2);
public static Map<Integer, String> runStatusMap = new HashMap<Integer, String>(2);
static {
hrTypeMap.put(HR_TYPE_IN_WAREHOUSE, "入库单");
hrTypeMap.put(HR_TYPE_TRANSFER, "转工单");
}
static {
runStatusMap.put(RUN_STATUS_WAIT, "待移交");
runStatusMap.put(RUN_STATUS_COMPLETE, "完成");
}
@Schema(description = "单号")
private String hrCode;
@Schema(description = "移交类型")
private Short hrType;
@Schema(description = "车间Id")
private Long woId;
@Schema(description = "车间订单号")
private String woCode;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "路线卡号")
private String cardNo;
@Schema(description = "生产标识")
private String prodIdent;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "移交部门")
private String handoverUnit;
@Schema(description = "移交数量")
private Double handoverQty;
@Schema(description = "一级工序(B号)")
private String roamNo;
@Schema(description = "接收部门")
private String recDept;
@Schema(description = "备注")
private String memo;
@Schema(description = "打印时间")
private Date printTime;
@Schema(description = "打印标记")
private Integer printFlag;
@Schema(description = "外协交件单号")
private String deliverKey;
@TableField(exist = false)
@Schema(description = "移交类型")
private String hrTypeName;
@TableField(exist = false)
@Schema(description = "状态")
private String statusName;
@TableField(exist = false)
@Schema(description = "移交人员")
private String createName;
}

@ -0,0 +1,152 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 入库单打印模型 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class PrintWarehousingVO {
/**
* 入库单号
*/
@Schema(description = "入库单号")
private String hrCode;
/**
* 工作单号 生产订单计划单号
*/
@Schema(description = "工作单号 生产订单计划单号")
private String poCode;
/**
* 车间单号
*/
@Schema(description = "车间单号")
private String woCode;
/**
* 计划部门 生产订单使用部门
*/
@Schema(description = "计划部门 生产订单使用部门")
private String useDept;
/**
* 镀钟 生产订单
*/
@Schema(description = "镀钟 生产订单")
private String plate;
/**
* 生产标识 生产订单
*/
@Schema(description = "生产标识")
private String prodIdent;
/**
* 型别 生产订单产品型号
*/
@Schema(description = "产品型号")
private String productTypePart;
/**
* 零件号 生产订单
*/
@Schema(description = "零件号")
private String partCode;
/**
* 名称 生产订单
*/
@Schema(description = "名称")
private String partName;
/**
* 产品系列 pj_bom
*/
@Schema(description = "产品系列")
private String productType;
/**
* 原编码 pj_bom
*/
@Schema(description = "原编码")
private String oldCode;
/**
* 计划数量 生产订单加工数量
*/
@Schema(description = "计划数量")
private String makeQty;
/**
* 重量 镀前镀后
*/
@Schema(description = "重量")
private Double weight;
/**
* 批次号 车间订单
*/
@Schema(description = "批次号")
private String batchNo;
/**
* 提交数量 移交记录移交数量
*/
@Schema(description = "提交数量")
private String handoverQty;
/**
* 车间提交人 移交记录移交人
*/
@Schema(description = "车间提交人")
private String createMan;
/**
* 计划员 生产订单
*/
@Schema(description = "计划员")
private String planUser;
/**
* 使用部门
*/
@Schema(description = "使用部门")
private String recDept;
/**
* 制表日期
*/
@Schema(description = "制表日期")
private String tableDate;
/**
* 备注
*/
@Schema(description = "备注")
private String memo;
/**
* 保管员
*/
@Schema(description = "保管员")
private String custodian;
/**
* 委托车间
*/
@Schema(description = "委托车间")
private String entrustDept;
/**
* 废品数
*/
@Schema(description = "废品数")
private String scrapQty = "0";
/**
* 试验数
*/
@Schema(description = "试验数")
private String testQty = "0";
/**
* 消耗数
*/
@Schema(description = "消耗数")
private String useQty = "0";
/**
* 类型
*/
@Schema(description = "类型")
private Short hrType;
/**
* 工艺路线
*/
@Schema(description = "工艺路线")
private String primaryCraft;
}

@ -9,6 +9,7 @@ import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
@ -28,6 +29,7 @@ public interface IErpDataProduceClient {
String REWORK_ORDER = API_PREFIX + "/loadReworkOrder";
String PRODUCT_APP_AREA = API_PREFIX + "/productAppArea";
String VERSION = API_PREFIX + "/version";
String CUSTODIAN = API_PREFIX + "/getCustodian";
/**
* 缺件申报-通过零件号获取批次号
@ -52,4 +54,10 @@ public interface IErpDataProduceClient {
*/
@GetMapping(VERSION)
R<String> getVersionByPartCode(String partCode);
/**
* 获取保管员
*/
@GetMapping(CUSTODIAN)
R<String> getCustodianByRecDept(@RequestParam("partCode") String partCode, @RequestParam("recDept") String recDept);
}

@ -37,4 +37,9 @@ public class IErpDataProduceClientFallback implements IErpDataProduceClient {
public R<String> getVersionByPartCode(String partCode) {
return R.fail("获取数据失败");
}
@Override
public R<String> getCustodianByRecDept(String partCode, String recDept) {
return R.fail("获取数据失败");
}
}

@ -36,6 +36,7 @@ import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.pojo.enums.YieldPlanEnum;
import org.springblade.desk.order.service.IYieldOrderCraftService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
@ -676,16 +677,31 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
@Override
public void updateYieldStatus(Long yoId, Integer curStatus, double v) {
YieldOrder yo = this.getById(yoId);
if (YieldOrder.CUR_STATUS_VOIDED.equals(curStatus)) {
if (YieldOrder.CUR_STATUS_NORMAL.equals(curStatus)) {
yo.setStatus(curStatus);
yo.setReceiveTime(null);
yo.setYpMemo(null);
yo.setReceiveUser(null);
} else if (YieldOrder.CUR_STATUS_PROCESSING.equals(curStatus)) {
yo.setStatus(curStatus);
// if (po != null) {
// po.setStatus(YieldPlanEnum.STATUS_PROCESSING.getCode());
// }
} else if (YieldOrder.CUR_STATUS_COMPLETED.equals(curStatus)) {
List<WorkOrder> listWo = workOrderMapper.listByYoId(yo.getId());
boolean completed = listWo.stream().map(wo -> wo.getRunStatus() >= WorkOrder.RUN_STATUS_COMPLETED).findAny().isPresent();
if (completed) {
yo.setStatus(curStatus);
}
} else if (YieldOrder.CUR_STATUS_VOIDED.equals(curStatus)) {
//整单报废
List<WorkOrder> listWo = workOrderMapper.selectList(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, yo.getId()));
boolean completed = listWo.stream().map(wo -> WorkOrder.RUN_STATUS_VOIDED.equals(wo.getRunStatus())).findAny().isPresent();
if (completed) {
yo.setStatus(curStatus);
}
// 生产计划状态变为已完工时,推送至新mes,更新订单状态
// httpRequestService.pushYieldOrderStatusToNewMes(yo.getCardNo(), curStatus);
}
this.updateById(yo);
}
@Override

@ -118,7 +118,7 @@ public class PdaSaveController {
return R.data(pdaSaveService.getUnbindByCard(cardNo));
}
@Operation(summary = "烧结设备解绑解绑")
@Operation(summary = "烧结设备解绑")
@PostMapping("/sjDeviceUnBind")
public R sjDeviceUnBind(@RequestBody UnBingDeviceVo unBingDeviceVo) {
pdaSaveService.sjDeviceUnBind(unBingDeviceVo);

@ -1,22 +1,32 @@
package org.springblade.desk.produce.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.common.utils.CommonUtil;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.produce.pojo.dto.PlateAroundDto;
import org.springblade.desk.produce.pojo.dto.SavePlateAroundDto;
import org.springblade.desk.produce.pojo.entity.HandoverRecord;
import org.springblade.desk.produce.pojo.entity.PlateAround;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.vo.AfterPlateInVO;
import org.springblade.desk.produce.pojo.vo.PlateAroundVO;
import org.springblade.desk.produce.pojo.vo.PrintWarehousingVO;
import org.springblade.desk.produce.service.IHandoverRecordService;
import org.springblade.desk.produce.service.IPlateAroundService;
import org.springblade.desk.produce.wrapper.HandoverRecordWrapper;
import org.springblade.job.pojo.entity.JobInfo;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
@ -35,6 +45,8 @@ public class PlateAroundController extends BladeController {
private final IPlateAroundService plateAroundService;
private final IHandoverRecordService handoverRecordService;
@GetMapping("/queryPlateAround")
@ApiOperationSupport(order = 1)
@Operation(summary = "镀前镀后列表(通用)", description = "传入PlateAroundDto")
@ -106,17 +118,40 @@ public class PlateAroundController extends BladeController {
public R queryDelLogRecord(PlateAroundDto plateAroundDto, Query query) {
return R.data(plateAroundService.queryDelLogRecord(Condition.getPage(query), plateAroundDto));
}
@PostMapping(value = "/savePlateFrontEnter")
@ApiOperationSupport(order = 7)
@ApiOperationSupport(order = 8)
@Operation(summary = "保存镀前入库", description = "")
public R savePlateFrontEnter(@RequestBody List<PlateAround> plateArounds) {
plateAroundService.savePlateFrontEnter(plateArounds);
plateAroundService.savePlateFrontEnter(plateArounds, PlateAround.BEFORE_PLAT_IN);
return R.success();
}
@PostMapping(value = "/getByPartCode")
@ApiOperationSupport(order = 8)
@ApiOperationSupport(order = 9)
@Operation(summary = "获取零件信息", description = "")
public R getByPartCode(@RequestParam String partCode) {
return R.data(plateAroundService.getByPartCode(partCode));
}
@GetMapping("/queryNewRecord")
@ApiOperationSupport(order = 10)
@Operation(summary = "入库单列表", description = "")
public R<IPage<HandoverRecord>> queryNewRecord(HandoverRecord handoverRecord, Query query) {
LambdaQueryWrapper<HandoverRecord> wrapper = Wrappers.lambdaQuery(handoverRecord);
if (CommonUtil.isAllFieldsEmpty(handoverRecord)) {
wrapper.isNull(HandoverRecord::getPrintTime);
}
wrapper.eq(HandoverRecord::getCreateUser, AuthUtil.getUserId()).orderByDesc(HandoverRecord::getHrCode);
IPage<HandoverRecord> pages = handoverRecordService.page(Condition.getPage(query), wrapper);
return R.data(HandoverRecordWrapper.build().listHandoverRecordVO(pages));
}
@PostMapping(value = "/handoverRecordPrint")
@ApiOperationSupport(order = 11)
@Operation(summary = "入库单打印", description = "")
public R<List<PrintWarehousingVO>> handoverRecordPrint(@RequestParam String hrIds) {
return R.data(handoverRecordService.handoverRecordPrint(Func.toLongList(hrIds)));
}
}

@ -0,0 +1,15 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.HandoverRecord;
/**
* 移交记录 Mapper 接口
*
* @author BladeX
*/
public interface HandoverRecordMapper extends BaseMapper<HandoverRecord> {
Double getPaSumWeight(Long id);
}

@ -0,0 +1,8 @@
<?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="org.springblade.desk.produce.mapper.HandoverRecordMapper">
<select id="getPaSumWeight" resultType="java.lang.Double">
select nvl(sum(a.weight),0) from MES_PLATE_AROUND a where a.wp_id in ( select b.wp_id from MES_WORK_ORDER b where b.yo_id = #{id} )
</select>
</mapper>

@ -0,0 +1,17 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.HandoverRecord;
import org.springblade.desk.produce.pojo.vo.PrintWarehousingVO;
import java.util.List;
/**
* 移交记录 服务类
*
* @author BladeX
*/
public interface IHandoverRecordService extends BaseService<HandoverRecord> {
List<PrintWarehousingVO> handoverRecordPrint(List<Long> longList);
}

@ -35,7 +35,7 @@ public interface IPlateAroundService extends BaseService<PlateAround> {
IPage<PlateAroundDelLog> queryDelLogRecord(IPage<PlateAroundDelLog> page, PlateAroundDto plateAroundDto);
void savePlateFrontEnter(List<PlateAround> plateArounds);
void savePlateFrontEnter(List<PlateAround> plateArounds, Short paType);
DsPartEntity getByPartCode(String partCode);

@ -8,6 +8,7 @@ import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO;
import org.springblade.scheduling.pojo.entity.WorkPlanEntity;
import org.springblade.desk.produce.pojo.vo.WorkPlanVO;
import java.util.Date;
import java.util.List;
/**
@ -43,4 +44,9 @@ public interface IWorkPlanService extends BaseService<WorkPlan> {
WorkPlan findMaxHostWorkUnitByWoId(Long id, int i);
void verifyMakeUnit(WorkPlan prWorkPlan);
/**
* 工序完成
*/
void workPlanEnd(Long wpId, Date putStoreTime, Double makeQty);
}

@ -0,0 +1,134 @@
package org.springblade.desk.produce.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.HandoverRecordMapper;
import org.springblade.desk.produce.pojo.entity.HandoverRecord;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.PrintWarehousingVO;
import org.springblade.desk.produce.service.IHandoverRecordService;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.desk.produce.service.IWorkPlanService;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.system.cache.UserCache;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* 移交记录 服务实现类
*
* @author BladeX
* @since 2025-11-28
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class HandoverRecordServiceImpl extends BaseServiceImpl<HandoverRecordMapper, HandoverRecord> implements IHandoverRecordService {
private final IWorkOrderService prWorkOrderService;
private final IYieldOrderService yieldOrderService;
private final IWorkPlanService workPlanService;
private final IErpDataProduceClient erpDataProduceClient;
@Override
@Transactional(rollbackFor = Exception.class)
public List<PrintWarehousingVO> handoverRecordPrint(List<Long> longList) {
if (CollectionUtils.isEmpty(longList)) {
return null;
}
List<PrintWarehousingVO> list = new ArrayList<>();
HandoverRecord hr;
PrintWarehousingVO printWarehousing;
YieldOrder yo;
Double totalWeight;
Date date = new Date();
for (Long i : longList) {
hr = this.getById(i);
// 保存打印时间、更新打印标记
hr.setPrintTime(date);
hr.setPrintFlag(1);
printWarehousing = new PrintWarehousingVO();
printWarehousing.setHrCode(hr.getHrCode());
printWarehousing.setHrType(hr.getHrType());
printWarehousing.setWoCode(hr.getWoCode());
printWarehousing.setUseDept(hr.getRecDept());
printWarehousing.setProdIdent(hr.getProdIdent());
printWarehousing.setPartCode(hr.getPartCode());
printWarehousing.setBatchNo(hr.getBatchNo());
printWarehousing.setHandoverQty(String.valueOf(hr.getHandoverQty()));
printWarehousing.setRecDept(hr.getRecDept());
User user = UserCache.getUser(hr.getCreateUser());
printWarehousing.setCreateMan(user != null ? user.getRealName() : "");
printWarehousing.setTableDate(DateFormatUtils.format(hr.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
printWarehousing.setMemo(hr.getMemo());
// 打印结束最后一道工序
WorkOrder wo = prWorkOrderService.getById(hr.getWoId());
printWarehousing.setScrapQty(wo.getScrapQty().toString());
printWarehousing.setTestQty(wo.getTestQty().toString());
//手动创建的在打票时改为已交接
yo = yieldOrderService.getById(wo.getYoId());
prWorkOrderService.updateStatus(Collections.singletonList(wo.getId()), WorkOrder.RUN_STATUS_COMPLETED, AuthUtil.getUserId(), "");
// 如果不是第一次打印,保存第一次打印时间
if (wo.getPutStoreTime() != null) {
workPlanService.workPlanEnd(wo.getWpId(), wo.getPutStoreTime(), wo.getMakeQty());
} else {
workPlanService.workPlanEnd(wo.getWpId(), new Date(), wo.getMakeQty());
}
printWarehousing.setPoCode(yo.getYpCode());
printWarehousing.setMakeQty(String.valueOf(yo.getYpQty()));
printWarehousing.setPlate(yo.getPlate());
printWarehousing.setPartName(yo.getPartName());
printWarehousing.setPlanUser(yo.getPlanUser());
printWarehousing.setProductTypePart(yo.getProductType());
printWarehousing.setPrimaryCraft(yo.getPrimaryCraft());
//zxh 20241212 保管员取值根据是否更改接受部门增加分支
if (hr.getRecDept().matches("[0-9]+")) {
// 2025-07-23 线上迁移
log.info("getCustodianByRecDept开始时间{}", System.currentTimeMillis());
// String custodianByRecDept = this.getCustodianByRecDept(yo.getPartCode(), hr.getRecDept());
// 2025-07-23 线上迁移
log.info("getCustodianByRecDept结束时间{}", System.currentTimeMillis());
// printWarehousing.setCustodian(custodianByRecDept);
} else {
printWarehousing.setCustodian(yo.getCustodian());
}
// 委托车间
printWarehousing.setEntrustDept(yo.getEntrustDept());
//zxh 20241212 更改入库单中产品系列取值
printWarehousing.setProductType(yo.getProductType());
// 重量合计
totalWeight = baseMapper.getPaSumWeight(yo.getId());
printWarehousing.setWeight(totalWeight != 0 ? totalWeight : null);
list.add(printWarehousing);
}
return list;
}
private String getCustodianByRecDept(String partCode, String recDept) {
R<String> byPartCode = erpDataProduceClient.getCustodianByRecDept(partCode, recDept);
return byPartCode.getData();
}
}

@ -410,7 +410,7 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
return;
}
//绑定记录
List<MacToolUse> mtuList = macToolUseService.listByParams(bsRackSet.getId(), bsFeiBaSet != null ? bsFeiBaSet.getId() : null, equipmentCard != null ? equipmentCard.getId() : null, null);
List<MacToolUse> mtuList = macToolUseService.listByParams(bsRackSet != null ? bsRackSet.getId() : null, bsFeiBaSet != null ? bsFeiBaSet.getId() : null, equipmentCard != null ? equipmentCard.getId() : null, null);
macToolUseService.unMacToolUseBind(mtuList);
this.unBindDetail(mtuList);

@ -12,6 +12,10 @@ 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.Oem;
import org.springblade.desk.basic.pojo.entity.TeamSet;
import org.springblade.desk.basic.service.IOemService;
import org.springblade.desk.basic.service.ITeamSetService;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.service.IDsPartService;
@ -59,6 +63,10 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
private final WorkPlanMapper workPlanMapper;
private final ITeamSetService teamSetService;
private final IOemService oemService;
@Override
public IPage<PlateAroundVO> queryByReadStatus(IPage<PlateAroundVO> page, PlateAroundDto plateAroundDto) {
return page.setRecords(baseMapper.queryByReadStatus(page, plateAroundDto));
@ -176,28 +184,27 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
}
@Override
public void savePlateFrontEnter(List<PlateAround> list) {
if (list == null || list.size() == 0) {
public void savePlateFrontEnter(List<PlateAround> list, Short paType) {
if (CollectionUtils.isEmpty(list)) {
return;
}
int next = 0;
List<WorkOrder> woList = new ArrayList<>(list.size());
WorkOrder wo;
Date date = new Date();
Short paType = PlateAround.CUR_STATUS_NEW;
for (PlateAround plateAround : list) {
this.savePlateAround(AuthUtil.getUser(), plateAround, paType, next, Boolean.FALSE);
if (paType.equals(PlateAround.AFTER_PLAN_IN)) {
WorkPlan prWorkPlan = workPlanMapper.selectById(plateAround.getWpId());
wo = workOrderService.getById(prWorkPlan.getWoId());
wo.setHandoverTime( date);
wo.setHandoverTime(date);
woList.add(wo);
// 计算主工序对应的金额
//bsTeamWagesLevelService.countTeamSalary(wo.getWoId());
}
if (paType.equals(PlateAround.AFTER_PLAN_IN)) {
// prHandoverRecordService.saveHandoverRecord(woList, AuthUtil.getUser());
}
}
if (paType.equals(PlateAround.AFTER_PLAN_IN)) {
// prHandoverRecordService.saveHandoverRecord(woList, AuthUtil.getUser());
}
}
@ -231,7 +238,7 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
private void savePlateAround(BladeUser user, PlateAround plateAround, Short paType, int next, Boolean aTure) {
PlateAround newPa = null;
PlateAround oldPa=null;
PlateAround oldPa = null;
Date date = new Date();
WorkPlan wp = workPlanMapper.selectById(plateAround.getWpId());
if (paType.equals(PlateAround.BEFORE_PLAT_IN) || paType.equals(PlateAround.AFTER_PLAN_IN)) {
@ -247,8 +254,8 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
baseMapper.insert(plateAround);
if (paType.equals(PlateAround.BEFORE_PLAT_IN)) {
WorkPlan nextWorkPlan = workPlanMapper.selectById(wp.getNextWpId());
if (nextWorkPlan != null && nextWorkPlan.getNextWpId()== null) {
throw new ServiceException("pda.nextWorkPlan.noNext");
if (nextWorkPlan != null && nextWorkPlan.getNextWpId() == null) {
throw new ServiceException("工序已是最后一道!");
}
WorkOrder prWorkOrder = workOrderService.getById(wp.getWoId());
pdaLoadService.checkPrWorkOrder(prWorkOrder.getCardNo());
@ -262,7 +269,7 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
if (nextWorkPlan != null && nextWorkPlan.getOcId() != null && nextWorkPlan.getMakeTeam() == null) {
prWorkOrder.setOem("1");
prWorkOrder.setOemOut("0");
if (prWorkOrder.getOcId()== null) {
if (prWorkOrder.getOcId() == null) {
prWorkOrder.setTsId(null);
prWorkOrder.setOcId(nextWorkPlan.getOcId());
}
@ -306,7 +313,7 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
WorkOrder prWorkOrder = workOrderService.getById(wp.getWoId());
pdaLoadService.checkPrWorkOrder(prWorkOrder.getCardNo());
}
}else {
} else {
WorkPlan nextWorkPlan = workPlanMapper.selectById(plateAround.getWpId());
if (wp.getNextWpId() != null && nextWorkPlan.getNextWpId() == null) {
throw new ServiceException("pda.nextWorkPlan.noNext");
@ -316,11 +323,11 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
if (nextWorkPlan.getMakeTeam() == null && nextWorkPlan.getOcId() == null) {
//调用自动分派处理类
WorkOrderRun wor = workOrderRunService.getById(nextWorkPlan.getWoId());
// pjAutomaticDispatchService.beforePlatingAutomatic(wp.getPrWorkOrder().getCardNo(), pfUserInfo);
// pjAutomaticDispatchService.beforePlatingAutomatic(wp.getPrWorkOrder().getCardNo(), pfUserInfo);
wp = workPlanMapper.selectById(wp.getId());
//如果当前序是供应商,下序分派至班组(不是检验),或者其他供应商则调用erp关闭订单(待定)
if (nextWorkPlan.getOcId() != null && nextWorkPlan.getNextWpId() != null) {
if (nextWorkPlan.getPpsId()!= null) {
if (nextWorkPlan.getPpsId() != null) {
if (StringUtils.isNotBlank(wor.getDeliverKey())) {
//调用erp检验接口
// prWorkCheckService.checkCompleteErpBackFill(wor.getWoCode(), wor.getDeliverKey(), wp.getWorkQty(),
@ -329,8 +336,8 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
}
}
//如果下序供应商不为空,则代表存在原有供应商,则根据此供应商获取最后一个该供应商未关闭的运行记录,并绑定
}else if (wp.getNextWpId() != null &&nextWorkPlan.getOcId() != null) {
WorkOrderRun prWorkOrderRun =workOrderRunService.getById(nextWorkPlan.getOcId());
} else if (wp.getNextWpId() != null && nextWorkPlan.getOcId() != null) {
WorkOrderRun prWorkOrderRun = workOrderRunService.getById(nextWorkPlan.getOcId());
if (prWorkOrderRun != null) {
WorkOrder workOrder = workOrderService.getById(prWorkOrderRun.getWoId());
workOrder.setWorId(prWorkOrderRun.getId());
@ -364,16 +371,16 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
}
private PlateAround updatePrPlateAround(PlateAround plateAround) {
BsTeamSetEntity makeTeam;
// BsOemCustomer oemCustomer;
makeTeam = null;
// oemCustomer = plateAround.getOemCustomer();
if (makeTeam != null && makeTeam.getId() == null) {
plateAround.setMakeMan(null);
TeamSet makeTeam;
Oem oemCustomer;
makeTeam = teamSetService.getById(plateAround.getTsId());
oemCustomer = oemService.getById(plateAround.getOcId());
if (makeTeam == null) {
plateAround.setTsId(null);
}
if (oemCustomer == null) {
plateAround.setOcId(null);
}
// if (oemCustomer != null && oemCustomer.getOcId() == null) {
// plateAround.setOemCustomer(null);
// }
return plateAround;
}
@ -396,7 +403,7 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
// 编码模式
String codePattern = prefix + new SimpleDateFormat("yyyyMMdd").format(new Date());
// 当前模式下最大编码
List<PlateAround> plateAroundList= baseMapper.selectList(Wrappers.<PlateAround>lambdaQuery().
List<PlateAround> plateAroundList = baseMapper.selectList(Wrappers.<PlateAround>lambdaQuery().
likeLeft(PlateAround::getPaCode, codePattern).orderByAsc(PlateAround::getPaCode));
String maxCode = plateAroundList.size() > 0 ? plateAroundList.get(0).getPaCode() : null;
if (maxCode != null) {
@ -408,10 +415,11 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
+ prefix(String.valueOf(num), "0", len);
return code;
}
public static final String prefix(String StringToFix, String fixChar, int targetLen) {
int len = StringToFix.length();
for(int i = 0; i < targetLen - len; i += fixChar.length()) {
for (int i = 0; i < targetLen - len; i += fixChar.length()) {
StringToFix = fixChar + StringToFix;
}

@ -32,16 +32,20 @@ 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.IWorkPlanItemService;
import org.springblade.desk.util.date.DateUtils;
import org.springblade.scheduling.pojo.entity.WorkPlanEntity;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.fasterxml.jackson.databind.type.LogicalType.DateTime;
/**
* 车间作业计划 服务实现类
*
@ -289,4 +293,23 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
}
}
}
@Override
public void workPlanEnd(Long wpId, Date putStoreTime, Double makeQty) {
WorkPlan workPlan = this.getById(wpId);
if (workPlan == null) {
return;
}
//完成工序
workPlan.setStatus(WorkPlan.STATUS_COMPLETE);
workPlan.setFactEndTime(putStoreTime);
if (workPlan.getWorkQty() < 1) {
workPlan.setWorkQty(makeQty);
}
if (workPlan.getFactStartTime() != null && workPlan.getFactEndTime() != null) {
workPlan.setHours(BigDecimal.valueOf(DateUtils.differentDaysByMin(workPlan.getFactStartTime(), workPlan.getFactEndTime())));
}
this.updateById(workPlan);
}
}

@ -0,0 +1,50 @@
package org.springblade.desk.produce.wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.desk.produce.pojo.entity.HandoverRecord;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.enums.WorkOrderEnum;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User;
import java.util.List;
import java.util.Objects;
/**
* 移交记录 包装类,返回视图层所需的字段
*
* @since 2026-1-19
*/
public class HandoverRecordWrapper extends BaseEntityWrapper<HandoverRecord, HandoverRecord> {
public static HandoverRecordWrapper build() {
return new HandoverRecordWrapper();
}
@Override
public HandoverRecord entityVO(HandoverRecord handoverRecord) {
HandoverRecord handoverRecordVO = Objects.requireNonNull(BeanUtil.copyProperties(handoverRecord, HandoverRecord.class));
// User createUser = UserCache.getUser(workOrderVO.getCreateUser());
// User updateUser = UserCache.getUser(workOrderVO.getUpdateUser());
// workOrderVO.setCreateUserName(createUser.getName());
// workOrderVO.setUpdateUserName(updateUser.getName());
return handoverRecordVO;
}
public IPage<HandoverRecord> listHandoverRecordVO(IPage<HandoverRecord> pages) {
List<HandoverRecord> handoverRecords = pages.getRecords();
for (HandoverRecord handoverRecord : handoverRecords) {
handoverRecord.setHrTypeName(HandoverRecord.hrTypeMap.get(handoverRecord.getHrType()));
handoverRecord.setStatusName(HandoverRecord.runStatusMap.get(handoverRecord.getStatus()));
User user = UserCache.getUser(handoverRecord.getCreateUser());
handoverRecord.setCreateName(user != null ? user.getRealName() : "");
}
pages.setRecords(handoverRecords);
return pages;
}
}

@ -50,4 +50,10 @@ public class ErpDataProduceClient implements IErpDataProduceClient {
public R<String> getVersionByPartCode(String partCode) {
return R.data(erpDataProduceService.getVersionByPartCode(partCode));
}
@Override
public R<String> getCustodianByRecDept(String partCode, String recDept) {
return R.data(erpDataProduceService.getCustodianByRecDept(partCode, recDept));
}
}

@ -23,4 +23,6 @@ public interface ErpDataProduceMapper extends Mapper {
Map<String, String> getProductAppareaByPartCode(String partCode);
String getVersionByPartCode(String partCode);
String getCustodianByRecDept(String partCode, String recDept);
}

@ -70,4 +70,12 @@
select b.version from (select version from dba_mgr.drwversion@erp_mes_link a where a.drwpartno in (
select drwpartno from dba_mgr.t_prtbasdef@erp_mes_link where prtno = #{partCode})) b where rownum=1
</select>
<select id="getCustodianByRecDept" resultType="java.lang.String">
SELECT max(a.userdesc)
FROM aepcs_system.t_sysuser@erp_mes_link a,
dba_mgr.t_prtplndef@erp_mes_link b
where a.username = b.warctlr
and b.prtno = #{partCode}
and b.plndept = #{recDept}
</select>
</mapper>

@ -22,4 +22,6 @@ public interface IErpDataProduceService {
Map<String, String> getProductAppareaByPartCode(String partCode);
String getVersionByPartCode(String partCode);
String getCustodianByRecDept(String partCode, String recDept);
}

@ -41,4 +41,9 @@ public class ErpDataProduceServiceImpl implements IErpDataProduceService {
public String getVersionByPartCode(String partCode) {
return erpDataProduceMapper.getVersionByPartCode(partCode);
}
@Override
public String getCustodianByRecDept(String partCode, String recDept) {
return erpDataProduceMapper.getCustodianByRecDept(partCode, recDept);
}
}

Loading…
Cancel
Save