diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/BoxbarcodeDetailsVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/BoxbarcodeDetailsVO.java new file mode 100644 index 000000000..0b8b0d37a --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/BoxbarcodeDetailsVO.java @@ -0,0 +1,50 @@ +package org.springblade.desk.logistics.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springblade.desk.order.pojo.entity.YieldOrder; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 获取箱条码订单详情前端返回 + * + * @author + * @since + */ +@Data +@Schema(description = "获取箱条码订单详情前端返回") +public class BoxbarcodeDetailsVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 箱条码 + */ + @Schema(description = "箱条码") + private String boxBarcode; + + /** + * 订单数量 + */ + @Schema(description = "订单数量") + private Long quantity; + /** + * 总重量 + */ + @Schema(description = "总重量") + private BigDecimal weight; + /** + * 订单详情数据 + */ + @Schema(description = "订单详情数据") + private List yieldOrderList; + + + +} \ No newline at end of file diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/QuantityLocationVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/QuantityLocationVO.java new file mode 100644 index 000000000..718e76d7a --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/QuantityLocationVO.java @@ -0,0 +1,41 @@ +package org.springblade.desk.logistics.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 获取订单数量与作业中心前端返回 + * + * @author + * @since + */ +@Data +@Schema(description = "获取订单数量与作业中心前端返回") +public class QuantityLocationVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 箱条码 + */ + @Schema(description = "箱条码") + private String boxBarcode; + + /** + * 订单数量 + */ + @Schema(description = "订单数量") + private Long quantity; + /** + * 作业中心名字 + */ + @Schema(description = "作业中心名字") + private String wcName; + + + +} \ No newline at end of file diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/StationNameBoxBarcodeVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/StationNameBoxBarcodeVO.java new file mode 100644 index 000000000..c420959cd --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/StationNameBoxBarcodeVO.java @@ -0,0 +1,23 @@ +package org.springblade.desk.logistics.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springblade.desk.logistics.pojo.entity.Station; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 获取订单数量与作业中心前端返回 + * + * @author + * @since + */ +@Data +@Schema(description = "获取订单数量与作业中心前端返回") +public class StationNameBoxBarcodeVO implements Serializable { + private BoxbarcodeDetailsVO boxbarcodeDetailsVO; + private Station station; + + +} \ No newline at end of file diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java index 5ab2e78ff..f8a982275 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; import org.springblade.desk.produce.pojo.dto.MesRbFilePreserveDetailDTO; +import org.springblade.desk.quality.pojo.entity.ProReTemplate; import java.io.Serial; import java.math.BigDecimal; @@ -67,4 +68,6 @@ public class MesRbFilePreserveSlotEntity extends BaseEntity { private List childrenList; // @TableField(exist = false) // List childrenListNew; + @TableField(exist = false) + private ProReTemplate dsRbFilePreserve; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java index fdb9a5b7c..65f491dae 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java @@ -1,5 +1,6 @@ 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; @@ -74,4 +75,12 @@ public class PlateAround extends BaseEntity { @Schema(description = "状态") private Short curStatus = 1; + @TableField(exist = false) + @Schema(description = "0-转工 1-入库") + private Integer hrTypeBool; + + @TableField(exist = false) + @Schema(description = "移交部门") + private String useDept; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java index ecbe5de17..217cb2319 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java @@ -1,5 +1,6 @@ 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; @@ -424,5 +425,16 @@ public class WorkOrder extends BaseEntity { @Schema(description = "零件号") private String partCode; + /** + * 移交部门 + */ + @TableField(exist = false) + private String useDept; + + /** + * 移交类型:0-转工 1-入库 + */ + @TableField(exist = false) + private Integer hrTypeBool; } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java index 43c3b31c3..fc2578c74 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java @@ -30,6 +30,8 @@ public interface IErpDataProduceClient { String PRODUCT_APP_AREA = API_PREFIX + "/productAppArea"; String VERSION = API_PREFIX + "/version"; String CUSTODIAN = API_PREFIX + "/getCustodian"; + String CHK_SJJD = API_PREFIX + "/chkSjjd"; + String CHK_SHJH = API_PREFIX + "/chkShjh"; /** * 缺件申报-通过零件号获取批次号 @@ -60,4 +62,16 @@ public interface IErpDataProduceClient { */ @GetMapping(CUSTODIAN) R getCustodianByRecDept(@RequestParam("partCode") String partCode, @RequestParam("recDept") String recDept); + + /** + * 验证是订单是否通过首件鉴定 + */ + @GetMapping(CHK_SJJD) + R chkSjjd(@RequestParam("ypCode")String ypCode, @RequestParam("batchNo")String batchNo); + + /** + * 验证是订单是否通过首件审核 + */ + @GetMapping(CHK_SHJH) + R chkShjh(@RequestParam("woCode")String woCode, @RequestParam("ypCode")String ypCode, @RequestParam("partCode")String partCode, @RequestParam("productIdent")String productIdent, @RequestParam("makeQty")Double makeQty, @RequestParam("memo")String memo); } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java index fb4726406..9be84656e 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java @@ -42,4 +42,14 @@ public class IErpDataProduceClientFallback implements IErpDataProduceClient { public R getCustodianByRecDept(String partCode, String recDept) { return R.fail("获取数据失败"); } + + @Override + public R chkSjjd(String ypCode, String batchNo) { + return R.fail("获取数据失败"); + } + + @Override + public R chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo) { + return R.fail("获取数据失败"); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartRelationController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartRelationController.java index a26e65832..8ca1e3fab 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartRelationController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartRelationController.java @@ -38,6 +38,8 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.service.IDsPartService; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -50,6 +52,8 @@ import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.tool.constant.BladeConstant; + +import java.util.ArrayList; import java.util.Map; import java.util.List; import jakarta.servlet.http.HttpServletResponse; @@ -68,6 +72,8 @@ public class DsPartRelationController extends BladeController { private final IDsPartRelationService dsPartRelationService; + private final IDsPartService dsPartService; + /** * 部件-子件关联表 详情 */ @@ -100,6 +106,24 @@ public class DsPartRelationController extends BladeController { return R.data(pages); } + @GetMapping("/getSubParts") + @ApiOperationSupport(order = 3) + @Operation(summary = "分页", description = "传入dsPartRelation") + public R> getSubParts(String partCode) { + List pages = new ArrayList<>(); + + QueryWrapper relationQuery = new QueryWrapper<>(); + relationQuery.eq("part_code", partCode); + List list = dsPartRelationService.list(relationQuery); + if(null != list && list.size() > 0){ + List childPartIds = list.stream().map(DsPartRelationEntity::getChildPartId).toList(); + QueryWrapper partQuery = new QueryWrapper<>(); + partQuery.in("id", childPartIds); + pages = dsPartService.list(partQuery); + } + return R.data(pages); + } + /** * 部件-子件关联表 新增 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBindController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBindController.java index 4a24b877a..6dfa57cfc 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBindController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBindController.java @@ -9,12 +9,15 @@ import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springblade.common.exception.BusinessException; +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.tool.api.R; import org.springblade.desk.logistics.pojo.dto.BoxBindingDto; import org.springblade.desk.logistics.pojo.dto.OrderBindDto; +import org.springblade.desk.logistics.pojo.dto.ReturnToWarehouseDto; import org.springblade.desk.logistics.pojo.dto.TaskDto; import org.springblade.desk.logistics.pojo.vo.OrderBindVO; import org.springblade.desk.logistics.pojo.vo.TaskVO; @@ -23,6 +26,8 @@ import org.springblade.desk.logistics.service.IOrderBoxService; import org.springblade.desk.order.service.IYieldOrderService; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; + /** * 订单绑定对象控制器 * @@ -94,5 +99,14 @@ public class OrderBindController { return iYieldOrderService.getCardNo(cardNo); } + @GetMapping("/boxbarcode-details") + @ApiOperationSupport(order = 6) + @Operation( + summary = "箱条码查询", + description = "获取箱条码数据详情" + ) + public R getBoxbarcodeDetails(@RequestParam String boxBarcode) throws BusinessException { + return iOrderBoxService.getBoxbarcodeDetails(boxBarcode); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java index 6432c6e78..56ca22249 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java @@ -13,6 +13,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jodd.util.StringUtil; import lombok.AllArgsConstructor; import lombok.Value; +import org.springblade.common.exception.BusinessException; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; @@ -27,6 +28,7 @@ import org.springblade.desk.logistics.pojo.dto.TaskDto; import org.springblade.desk.logistics.pojo.vo.TaskVO; import org.springblade.desk.logistics.service.IOrderBoxService; +import org.springblade.desk.logistics.service.IStationService; import org.springblade.desk.logistics.service.ITaskService; import org.springframework.web.bind.annotation.*; @@ -47,6 +49,7 @@ public class OrderBoxController extends BladeController { private final ITaskService taskService; + @PostMapping("/getWeighing") @ApiOperationSupport(order = 1) @Operation( @@ -119,9 +122,21 @@ public class OrderBoxController extends BladeController { @GetMapping("/receive") @ApiOperationSupport(order = 7) @Operation(summary = "接收", description = "接收释放站点") - public R receive(@RequestParam String stationCode) { + public R receive(@RequestParam String stationCode) throws BusinessException { return iOrderBoxService.receive(stationCode); } + /** + * 回调作业中心list + */ + @GetMapping("/getQuantity-Location") + @ApiOperationSupport(order = 7) + @Operation(summary = "订单位置和重量", description = "获取箱条码对应的订单位置与作业中心") + public R getQuantityLocation(@RequestParam String boxBarcode) { + return iOrderBoxService.getQuantityLocation(boxBarcode); + } + + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/StationController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/StationController.java new file mode 100644 index 000000000..0134f7471 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/StationController.java @@ -0,0 +1,40 @@ +package org.springblade.desk.logistics.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.AllArgsConstructor; +import org.springblade.core.tool.api.R; +import org.springblade.desk.logistics.service.IOrderBoxService; +import org.springblade.desk.logistics.service.IStationService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@AllArgsConstructor +@RequestMapping("/station") +@Tag(name = "站点", description = "站点相关接口") +public class StationController { + private final IStationService stationService; + private final IOrderBoxService iOrderBoxService; + /** + * 获取起点站点名字 + */ + @GetMapping("/getName") + @ApiOperationSupport(order = 1) + @Operation(summary = "站点名字", description = "获取站点名字") + public R getStationName(@RequestParam String stationCode) { + return stationService.getStationName(stationCode); + } + /** + * 获取起点站点名字 + */ + @GetMapping("/getName-boxbarcode") + @ApiOperationSupport(order = 1) + @Operation(summary = "站点名字", description = "获取站点名字") + public R getStationNameBoxBarcode(@RequestParam String stationCode) { + return iOrderBoxService.getStationNameBoxBarcode(stationCode); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBindService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBindService.java index d6a3c632d..bec29f302 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBindService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBindService.java @@ -53,4 +53,5 @@ public interface IOrderBindService extends BaseService { R getBoxcodelist(); + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java index f863e93fc..3849a9864 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java @@ -1,5 +1,6 @@ package org.springblade.desk.logistics.service; +import org.springblade.common.exception.BusinessException; import org.springblade.core.tool.api.R; import org.springblade.desk.logistics.pojo.dto.BoxBindingDto; import org.springblade.desk.logistics.pojo.dto.ReturnToWarehouseDto; @@ -44,8 +45,13 @@ public interface IOrderBoxService { - R receive(String stationCode); + R receive(String stationCode) throws BusinessException; R saveTask(ReturnToWarehouseDto returnToWarehouseDto,Boolean agvSend); R getWcId(String boxBarcode); + + R getQuantityLocation(String boxBarcode); + R getBoxbarcodeDetails(String boxBarcode); + + R getStationNameBoxBarcode(String stationCode); } \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java index 31894efeb..e0fa46235 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java @@ -26,6 +26,7 @@ package org.springblade.desk.logistics.service; import org.springblade.core.mp.base.BaseService; +import org.springblade.core.tool.api.R; import org.springblade.desk.logistics.pojo.entity.Location; import org.springblade.desk.logistics.pojo.entity.Station; @@ -52,4 +53,8 @@ public interface IStationService extends BaseService { * @return */ Station getByStationCode(String stationCode); + + R getStationName(String stationCode); + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java index a1e0857d3..3115eb9ef 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java @@ -6,14 +6,20 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.exception.BusinessException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; import org.springblade.desk.dashboard.service.IBsWorkCenterService; import org.springblade.desk.logistics.pojo.dto.BoxBindingDto; import org.springblade.desk.logistics.pojo.dto.ReturnToWarehouseDto; import org.springblade.desk.logistics.pojo.entity.*; +import org.springblade.desk.logistics.pojo.vo.BoxbarcodeDetailsVO; import org.springblade.desk.logistics.pojo.vo.BsWorkCenterVO; +import org.springblade.desk.logistics.pojo.vo.QuantityLocationVO; +import org.springblade.desk.logistics.pojo.vo.StationNameBoxBarcodeVO; import org.springblade.desk.logistics.service.*; import org.springblade.desk.logistics.utils.AgvTaskTypeUtil; import org.springblade.desk.order.pojo.entity.YieldOrder; @@ -307,7 +313,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { * */ @Override - public R receive(String stationCode) { + public R receive(String stationCode) throws BusinessException { log.info("【站点状态接收】开始处理 - 站点编码:{}", stationCode); // 1. 参数校验 @@ -333,6 +339,10 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { // 4. 返回结果 if (updateResult) { log.info("【站点状态接收】站点编码{}已置为空闲", stationCode); + List taskList = taskService.list(new LambdaQueryWrapper().eq(Task::getStationId, targetStation.getId()).orderByDesc(Task::getUpdateTime)); + BoxBindingDto boxBindingDto = new BoxBindingDto(); + boxBindingDto.setBoxBarcode(taskList.get(0).getBoxBarcode()); + orderBindService.boxUnbind(boxBindingDto); return R.success(); } else { log.error("【站点状态接收】站点编码{}状态更新失败", stationCode); @@ -477,6 +487,8 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { return R.data(wcId); } + + // ========================== 私有工具方法 ========================== /** @@ -929,4 +941,90 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { log.warn("【订单绑定校验】{}", errorMsg); return R.fail(errorMsg); } + + + + @Override + public R getQuantityLocation(String boxBarcode) { +// 1. 校验箱条码非空(增加空白字符校验) + if (StringUtils.isEmpty(boxBarcode) || boxBarcode.trim().isEmpty()) { + return R.fail("箱条码信息不能为空"); + } + + // 2. 查询箱条码绑定信息(使用Spring工具类简化空值判断) + List orderBindList = orderBindService.list( + new LambdaQueryWrapper() + .eq(OrderBind::getBoxBarcode, boxBarcode.trim()) + .eq(OrderBind::getBindingStatus, OrderBind.STATUS_BOUND) + ); + if (CollectionUtils.isEmpty(orderBindList)) { + return R.fail("未查询到该箱条码的绑定信息"); + } + + // 3. 构建返回VO(提前获取首个元素,避免多次调用get(0)) + OrderBind firstOrderBind = orderBindList.get(0); + QuantityLocationVO quantityLocationVO = new QuantityLocationVO(); + quantityLocationVO.setBoxBarcode(boxBarcode.trim()); + quantityLocationVO.setQuantity((long) orderBindList.size()); // Long类型可直接自动装箱,无需强制转换 + + // 4. 查询作业中心信息(增加wcId空值校验,避免NPE) + Long wcId = yieldOrderService.getWcId(firstOrderBind.getOrderId()); + if (wcId == null) { + return R.fail("订单未关联作业中心"); + } + + BsWorkCenterEntity workCenter = bsWorkCenterService.getById(wcId); + if (workCenter == null) { + return R.fail("订单所属作业中心异常"); + } + quantityLocationVO.setWcName(workCenter.getWcName()); + + return R.data(quantityLocationVO); + } + @Override + public R getBoxbarcodeDetails(String boxBarcode) { + if (StringUtils.isBlank(boxBarcode)) { + return R.fail("箱条码不能为空"); + } + List orderBindList = orderBindService.list(new LambdaQueryWrapper().eq(OrderBind::getBoxBarcode, boxBarcode).eq(OrderBind::getBindingStatus, OrderBind.STATUS_BOUND)); + if (orderBindList==null||orderBindList.size()==0) { + BoxbarcodeDetailsVO boxbarcodeDetailsVO = new BoxbarcodeDetailsVO(); + boxbarcodeDetailsVO.setBoxBarcode(boxBarcode); + boxbarcodeDetailsVO.setWeight(new BigDecimal(0)); + boxbarcodeDetailsVO.setQuantity(0L); + return R.data(boxbarcodeDetailsVO); + + } + List orderIdList = orderBindList.stream() + .map(OrderBind::getOrderId) + .collect(Collectors.toList()); + BigDecimal totalWeight = calculateOrderTotalWeight(orderIdList); + List orderList = yieldOrderService.list( + new LambdaQueryWrapper().in(YieldOrder::getId, orderIdList) + ); + BoxbarcodeDetailsVO boxbarcodeDetailsVO = new BoxbarcodeDetailsVO(); + boxbarcodeDetailsVO.setBoxBarcode(boxBarcode); + boxbarcodeDetailsVO.setWeight(totalWeight); + boxbarcodeDetailsVO.setQuantity((long) orderList.size()); + boxbarcodeDetailsVO.setYieldOrderList(orderList); + return R.data(boxbarcodeDetailsVO); + } + + @Override + public R getStationNameBoxBarcode(String stationCode) { + R stationR = stationService.getStationName(stationCode); + if (!stationR.isSuccess()) { + return stationR; + } + Station station = (Station) stationR.getData(); + List taskList = taskService.list(new LambdaQueryWrapper().eq(Task::getStationId, station.getId()).orderByDesc(Task::getUpdateTime)); + R boxbarcodeDetailsR = getBoxbarcodeDetails(taskList.get(0).getBoxBarcode()); + if (!boxbarcodeDetailsR.isSuccess()) { + return boxbarcodeDetailsR; + } + StationNameBoxBarcodeVO stationNameBoxBarcodeVO = new StationNameBoxBarcodeVO(); + stationNameBoxBarcodeVO.setStation(station); + stationNameBoxBarcodeVO.setBoxbarcodeDetailsVO((BoxbarcodeDetailsVO) boxbarcodeDetailsR.getData()); + return R.data(stationNameBoxBarcodeVO); + } } \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/OrderBindServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/OrderBindServiceImpl.java index ffb37cf61..46ec52902 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/OrderBindServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/OrderBindServiceImpl.java @@ -36,12 +36,15 @@ import org.springblade.desk.logistics.mapper.OrderBindMapper; import org.springblade.desk.logistics.pojo.dto.BoxBindingDto; import org.springblade.desk.logistics.pojo.dto.OrderBindDto; import org.springblade.desk.logistics.pojo.entity.OrderBind; +import org.springblade.desk.logistics.pojo.vo.BoxbarcodeDetailsVO; import org.springblade.desk.logistics.pojo.vo.OrderBindVO; import org.springblade.desk.logistics.pojo.vo.TaskVO; import org.springblade.desk.logistics.service.IOrderBindService; +import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -110,6 +113,8 @@ public class OrderBindServiceImpl extends BaseServiceImpl public Station getByStationCode(String stationCode) { return baseMapper.selectByStationCode(stationCode); } + + @Override + public R getStationName(String stationCode) { + if (stationCode.isEmpty()) { + return R.fail("站点不能为空"); + } + List list = list(new LambdaQueryWrapper().eq(Station::getStationCode, stationCode)); + if (list==null||list.size()==0) { + return R.fail("该站点编码不存在"); + } + return R.data(list.get(0)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java index ba0d95e7f..bf1cc782f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java @@ -433,7 +433,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl plateArounds) { plateAroundService.savePlateFrontEnter(plateArounds, PlateAround.BEFORE_PLAT_IN); return R.success(); } - @PostMapping(value = "/getByPartCode") + @PostMapping(value = "/savePlateFrontIssue") + @ApiOperationSupport(order = 8) + @Operation(summary = "保存镀前出库", description = "") + public R savePlateFrontIssue(@RequestBody List plateArounds) { + plateAroundService.savePlateFrontEnter(plateArounds, PlateAround.BEFORE_PLAN_OUT); + return R.success(); + } + + @PostMapping(value = "/savePlateAfterEnter") @ApiOperationSupport(order = 9) + @Operation(summary = "保存镀后入库", description = "") + public R savePlateAfterEnter(@RequestBody List plateArounds) { + plateAroundService.savePlateFrontEnter(plateArounds, PlateAround.AFTER_PLAN_IN); + return R.success(); + } + + @PostMapping(value = "/getByPartCode") + @ApiOperationSupport(order = 101) @Operation(summary = "获取零件信息", description = "") public R getByPartCode(@RequestParam String partCode) { return R.data(plateAroundService.getByPartCode(partCode)); } @GetMapping("/queryNewRecord") - @ApiOperationSupport(order = 10) + @ApiOperationSupport(order = 11) @Operation(summary = "入库单列表", description = "") public R> queryNewRecord(HandoverRecord handoverRecord, Query query) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(handoverRecord); @@ -148,7 +157,7 @@ public class PlateAroundController extends BladeController { } @PostMapping(value = "/handoverRecordPrint") - @ApiOperationSupport(order = 11) + @ApiOperationSupport(order = 12) @Operation(summary = "入库单打印", description = "") public R> handoverRecordPrint(@RequestParam String hrIds) { return R.data(handoverRecordService.handoverRecordPrint(Func.toLongList(hrIds))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrMakeRecController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrMakeRecController.java index b6f81be3d..95e8288c1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrMakeRecController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrMakeRecController.java @@ -47,7 +47,7 @@ public class PrMakeRecController extends BladeController { @Operation(summary = "报工提交") @PostMapping("/saveMakeRec") public R saveMakeRec(@RequestBody MakeRecDTO makeRecDTO) { - return R.status(makeRecService.saveMakeRec(makeRecDTO)); + return R.status(workOrderService.saveMakeRec(makeRecDTO)); } @GetMapping("/queryMakeRec") diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml index 3d488d5af..b0402ef31 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml @@ -292,9 +292,9 @@ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java index e83d6404c..1398f441b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java @@ -2,6 +2,7 @@ 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.entity.WorkOrder; import org.springblade.desk.produce.pojo.vo.PrintWarehousingVO; import java.util.List; @@ -14,4 +15,11 @@ import java.util.List; public interface IHandoverRecordService extends BaseService { List handoverRecordPrint(List longList); + + /** + * 保存移交记录 + */ + void saveHandoverRecord(List woList); + + String nextCode(String codePattern); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMakeRecService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMakeRecService.java index ce6dd4b27..ca66d16d8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMakeRecService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMakeRecService.java @@ -22,11 +22,8 @@ public interface IMakeRecService extends BaseService { WorkPlanDto loadCurrentWp(String cardNo); - /** - * 增加工序记录 - * @param makeRecDTO - */ - boolean saveMakeRec(MakeRecDTO makeRecDTO); + + boolean chkRfpDetail(Long wpId); IPage selectMesMakeRecPage(IPage page, MesMakeRecVO mesMakeRec); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index 77455e1a9..e5a4a1116 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -194,4 +194,19 @@ public interface IWorkOrderService extends BaseService { void dataValidation(Long wpId); R inOemBatches(Long oldWoId, InBatchesDTO inBatchesDTO, Long userId); + + /** + *

方法名: oemHandle

+ *

方法描述: OEM处理

+ * + * @param nextWpId 下一个工序id(如果不是第一个工序,传下工序ID) + * @param type 类型:1-工序报工 2-第一个工序为外协 3-转外协审批通过 + */ + void oemHandle(Long nextWpId, int type); + + /** + * 增加工序记录 + * @param makeRecDTO + */ + boolean saveMakeRec(MakeRecDTO makeRecDTO); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/HandoverRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/HandoverRecordServiceImpl.java index d4038646b..1cb5e3774 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/HandoverRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/HandoverRecordServiceImpl.java @@ -1,33 +1,35 @@ package org.springblade.desk.produce.service.impl; +import cn.hutool.core.util.StrUtil; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; +import org.springblade.core.log.exception.ServiceException; 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.entity.WorkOrderRun; import org.springblade.desk.produce.pojo.vo.PrintWarehousingVO; import org.springblade.desk.produce.service.IHandoverRecordService; +import org.springblade.desk.produce.service.IWorkOrderRunService; 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; +import java.util.*; +import java.util.stream.Collectors; /** * 移交记录 服务实现类 @@ -48,6 +50,8 @@ public class HandoverRecordServiceImpl extends BaseServiceImpl handoverRecordPrint(List longList) { @@ -127,6 +131,97 @@ public class HandoverRecordServiceImpl extends BaseServiceImpl woList) { + if (CollectionUtils.isEmpty(woList)) { + return; + } + YieldOrder yo; + HandoverRecord hr; + String woCode; + String excflag = "1"; + String shjhflag = "1"; + // 获取当前时间YYMM格式字符串 + String now = DateFormatUtils.format(new Date(), "yyMM"); + List yieldOrders = yieldOrderService.list(Wrappers.lambdaQuery(YieldOrder.class).in(YieldOrder::getId, woList.stream().map(WorkOrder::getYoId).distinct().collect(Collectors.toList()))); + // yieldOrders转map + Map yieldOrderMap = yieldOrders.stream().collect(Collectors.toMap(YieldOrder::getId, v -> v)); + for (WorkOrder workOrder : woList) { + yo = yieldOrderMap.get(workOrder.getYoId()); + hr = new HandoverRecord(); + + hr.setHandoverUnit("3400"); + hr.setProdIdent(yo.getProductIdent()); + hr.setPartCode(yo.getPartCode()); + hr.setWoId(workOrder.getId()); + + woCode = workOrder.getWoCode(); + if ("1".equals(workOrder.getOem())) { + WorkOrderRun workOrderRun = workOrderRunService.getById(workOrder.getWorId()); + if (workOrderRun != null) { + woCode = workOrderRun.getWoCode(); + hr.setDeliverKey(workOrderRun.getDeliverKey()); + } + } + + hr.setHrType(workOrder.getHrTypeBool() == 1 ? HandoverRecord.HR_TYPE_TRANSFER : HandoverRecord.HR_TYPE_IN_WAREHOUSE); + + //如果是返工描述类则需要判定责任部门 + if (StringUtils.isNotBlank(workOrder.getReworkMemo()) && "1".equals(workOrder.getReInStore()) && workOrder.getHrTypeBool() == 1) { + hr.setRoamNo("3400"); + } else { + hr.setRoamNo(yo.getRoamNo()); + } + + String prefix = "ZG"; + if (HandoverRecord.HR_TYPE_IN_WAREHOUSE.equals(hr.getHrType())) { + // 入库单 + prefix = "RB"; + } + + String codePattern = prefix + now + AuthUtil.getUserAccount(); + + hr.setHrCode(this.nextCode(codePattern)); + hr.setWoCode(woCode); + hr.setCardNo(workOrder.getCardNo()); + hr.setBatchNo(workOrder.getBatchNo()); + hr.setHandoverQty(workOrder.getMakeQty()); + hr.setMemo(woCode); + hr.setRecDept(workOrder.getUseDept()); + + hr.setStatus(HandoverRecord.RUN_STATUS_WAIT); + excflag = erpDataProduceClient.chkSjjd(yo.getYpCode(), yo.getBatchNo()).getData(); + if ("3500".equals(yo.getUseDeptCode()) || "3502".equals(yo.getUseDeptCode()) || "3507".equals(yo.getUseDeptCode()) || "3512".equals(yo.getUseDeptCode())) { + shjhflag = erpDataProduceClient.chkShjh(woCode, yo.getYpCode(), yo.getPartCode(), yo.getProductIdent(), workOrder.getMakeQty(), woCode).getData(); + } + //zxh 20250721 首件鉴定仅限制入库单 + if ("0".equals(excflag) && hr.getHrType().equals(HandoverRecord.HR_TYPE_IN_WAREHOUSE)) { + throw new ServiceException("订单存在首件鉴定未审核,不允许入库"); + } else if ("0".equals(shjhflag) && hr.getHrType().equals(HandoverRecord.HR_TYPE_IN_WAREHOUSE)) { + throw new ServiceException("订单不满足入库制造一部送货计划校验,不允许入库"); + } else { + this.save(hr); + } + } + } + + @Override + public String nextCode(String codePattern) { + // 自增总长度 + int len = 5; + // 自增值 + int num = 0; + // 编码模式 + + // 当前模式下最大编码 + List list = this.list(Wrappers.lambdaQuery(HandoverRecord.class).eq(HandoverRecord::getHrCode, codePattern + "%").orderByDesc(HandoverRecord::getHrCode)); + if (CollectionUtils.isNotEmpty(list)) { + num = Integer.parseInt(list.get(0).getHrCode().substring(codePattern.length())); + } + num++; + return codePattern + StrUtil.padPre(String.valueOf(num), len, '0'); + } + private String getCustodianByRecDept(String partCode, String recDept) { R byPartCode = erpDataProduceClient.getCustodianByRecDept(partCode, recDept); return byPartCode.getData(); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java index 038c85ebc..8f71605c8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java @@ -11,14 +11,11 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.desk.basic.pojo.entity.RelTeamSetUser; -import org.springblade.desk.basic.pojo.entity.UserRight; import org.springblade.desk.basic.service.IRelTeamSetUserService; -import org.springblade.desk.basic.service.IUserRightService; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; 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.order.pojo.entity.YieldOrder; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.mapper.MakeRecMapper; @@ -32,7 +29,6 @@ import org.springblade.desk.produce.pojo.enums.WorkOrderEnum; import org.springblade.desk.produce.pojo.vo.MesMakeRecVO; import org.springblade.desk.produce.pojo.vo.WorkPlanLoadVO; import org.springblade.desk.produce.service.*; -import org.springblade.desk.quality.service.IAuditFileService; import org.springblade.system.cache.UserCache; import org.springblade.system.pojo.entity.User; import org.springframework.beans.BeanUtils; @@ -71,8 +67,6 @@ public class MakeRecServiceImpl extends BaseServiceImpl private final IMesEquipmentCardService mesEquipmentCardService; - private final IUserRightService userRightService; - private final IMesRbFilePreserveSlotService mesRbFilePreserveSlotService; private final IMesRbFilePreserveDetailService mesRbFilePreserveDetailService; @@ -128,132 +122,7 @@ public class MakeRecServiceImpl extends BaseServiceImpl } } - @Override - @Transactional(rollbackFor = Exception.class) - public boolean saveMakeRec(MakeRecDTO makeRecDTO) { - WorkPlan wp = workPlanMapper.selectById(makeRecDTO.getWpId()); - if (!WorkPlan.STATUS_START.equals(wp.getStatus())) { - throw new ServiceException("当前工序已报工完成!"); - } - MacToolUse mtu; - BsProcessSetEntity dsProcess = bsProcessSetService.getById(wp.getPpsId()); - WorkPlan frontWp = workPlanMapper.selectById(wp.getFrontWpId()); - BsProcessSetEntity frontProcess = null; - if (frontWp != null) { - frontProcess = bsProcessSetService.getById(wp.getFrontWpId()); - } - //如果是上挂工序,需判定是否绑定挂具 - if ("上挂".equals(dsProcess.getName())) { - mtu = macToolUseService.queryByParams(wp.getId(), 1, 0, 0); - if (mtu == null) { - throw new ServiceException("上挂工序未绑定挂具!"); - } - // 如果上序是上挂工序、并且本序是主工序,则代表本序是 需要绑定飞靶及设备的工序 或者手动维护生产追溯信息 - } else if (frontProcess != null && "上挂".equals(frontProcess.getName()) && "1".equals(wp.getCruxProcess())) { - mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1); - if (mtu == null) { - // 验证是否维护了生产追溯信息 - List qcProduceRunList = mesQcProduceRunService.listPrByWpId(wp.getId()); - if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) { - throw new ServiceException("此工序卡未绑定飞靶或设备!"); - } - } - } else if (dsProcess.getName().contains("镀金")) { - mtu = macToolUseService.queryByParams(wp.getId(), 0, 1, 0); - if (mtu == null) { - throw new ServiceException("此工序未绑定飞跋,请绑定飞跋!!!"); - } - //验证是否绑定设备 - mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1); - if (mtu == null) { - List produceRunList = null; - produceRunList = mesQcProduceRunService.listPrByWpIdIndex(wp.getId(), 1, Boolean.FALSE); - if (produceRunList == null || produceRunList.isEmpty()) { - produceRunList = mesQcProduceRunService.listPrByWpIdIndex(wp.getId(), 2, Boolean.FALSE); - } - if (!(produceRunList != null && !produceRunList.isEmpty())) { - throw new ServiceException("未绑定飞跋和设备或未维护生产追溯信息!!!"); - } - } - } else if ("玻璃封接清洗".equals(dsProcess.getName()) || "玻璃封接退火".equals(dsProcess.getName()) || - "玻璃封接预氧化(箱式炉)".equals(dsProcess.getName()) || "玻璃封接预氧化(链式炉)".equals(dsProcess.getName()) || - "玻璃封接(链式炉)".equals(dsProcess.getName()) || "玻璃封接(真空炉)".equals(dsProcess.getName()) || - "玻璃封接灌胶".equals(dsProcess.getName()) || "玻璃饼压制".equals(dsProcess.getName()) || - "玻璃饼排蜡玻化".equals(dsProcess.getName()) || "玻璃饼振光".equals(dsProcess.getName()) || - "石墨模烘干".equals(dsProcess.getName()) || "石墨模焙烧".equals(dsProcess.getName()) || - "真空炉灌胶".equals(dsProcess.getName()) || "玻璃封接电镀去氧化皮".equals(dsProcess.getName()) || - "玻璃封接电化学抛光".equals(dsProcess.getName()) || "玻璃封接湿喷砂".equals(dsProcess.getName()) || - "玻璃封接电镀".equals(dsProcess.getName()) || "玻璃封接插针电镀".equals(dsProcess.getName()) || - "玻璃封接壳体电镀".equals(dsProcess.getName()) || "玻璃封接电镀下挂".equals(dsProcess.getName()) || - "烧结浸保护剂".equals(dsProcess.getName())) { - mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1); - if (mtu == null) { - // 验证是否维护了生产追溯信息 - List qcProduceRunList = mesQcProduceRunService.listPrByWpId(wp.getId()); - if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) { - throw new ServiceException("此工序卡未绑定飞靶或设备!"); - } - } - } - boolean aBoolean = this.chkRfpDetail(wp.getId()); - if (!aBoolean) { - throw new ServiceException("生产记录未填写完整,不允许报工!!!!"); - } - MakeRec mr = new MakeRec(); - BeanUtils.copyProperties(makeRecDTO, mr); - mr.setWorker(AuthUtil.getUserId()); - mr.setMakeTime(new Date()); - this.save(mr); - if (mr.getScrapQty() > 0) { - wp.setScrapQty(wp.getScrapQty() + mr.getScrapQty()); - WorkOrder wo = workOrderMapper.selectById(wp.getWoId()); - wo.setMakeQty(wo.getMakeQty() - mr.getScrapQty()); - workOrderMapper.updateById(wo); - } - wp.setWorkQty(wp.getWorkQty() + mr.getWorkQty()); - if (wp.getQualifiedQty().equals(wp.getScrapQty() + wp.getWorkQty())) { - wp.setStatus(WorkPlan.STATUS_WORK_OK); - } - if ("热处理".equals(dsProcess.getName())) { - wp.setPrintType((short) 1); - String code = macToolUseService.nextCode(2); - MacToolUse prMacToolUse = new MacToolUse(); - prMacToolUse.setWpId(wp.getId()); - prMacToolUse.setFinished(1); - prMacToolUse.setCreateTime(new Date()); - prMacToolUse.setCreateMan(makeRecDTO.getWorker()); - prMacToolUse.setMtnCode(code); - prMacToolUse.setMtuIndex(String.valueOf(0)); - macToolUseService.save(prMacToolUse); - String deviceCode = prMacToolUse.getEquipmentCard() != null ? prMacToolUse.getMtnCode() : ""; - log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, prMacToolUse.getHangNum(), prMacToolUse.getMtnCode(), prMacToolUse.getFinished()); - - MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity(); - qcProduceRun.setMtnCode(code); - qcProduceRun.setWorkSlot("热处理自检"); - qcProduceRun.setInDate(DateUtil.now()); - qcProduceRun.setDataOne(makeRecDTO.getResource()); - qcProduceRun.setDataTwo(makeRecDTO.getNum()); - qcProduceRun.setDataThree(makeRecDTO.getThickness()); - qcProduceRun.setDataFour(makeRecDTO.getCode()); - qcProduceRun.setDataFive(makeRecDTO.getInspectCode()); - qcProduceRun.setDataSix(String.valueOf(makeRecDTO.getStatus())); - qcProduceRun.setDataSeven(makeRecDTO.getShape()); - mesQcProduceRunService.save(qcProduceRun); - } - workPlanMapper.updateById(wp); - // 2025-07-23 线上迁移修改 - MacToolUse macToolUse = macToolUseService.getDataByWpIdAndIndex(wp.getId(), "2"); - if (macToolUse != null && macToolUse.getRfpId() != null && macToolUse.getFinished() != 1) { - macToolUse.setFinished(1); - String deviceCode = macToolUse.getEquipmentCard() != null ? macToolUse.getMtnCode() : ""; - log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, macToolUse.getHangNum(), macToolUse.getMtnCode(), macToolUse.getFinished()); - macToolUseService.updateById(macToolUse); - } - return true; - } - - private boolean chkRfpDetail(Long wpId) { + public boolean chkRfpDetail(Long wpId) { List macToolUses = macToolUseService.list(Wrappers.lambdaQuery(MacToolUse.class).isNotNull(MacToolUse::getRfpId).ne(MacToolUse::getMtuIndex, "2").eq(MacToolUse::getWpId, wpId)); if (CollectionUtils.isNotEmpty(macToolUses)) { for (MacToolUse macToolUs : macToolUses) { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java index 3c0d02bd2..5193d8ae7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java @@ -19,6 +19,7 @@ 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; +import org.springblade.desk.oem.service.IOemStatementService; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.mapper.PlateAroundMapper; @@ -34,6 +35,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; @@ -55,10 +57,6 @@ public class PlateAroundServiceImpl extends BaseServiceImpl queryByReadStatus(IPage page, PlateAroundDto plateAroundDto) { return page.setRecords(baseMapper.queryByReadStatus(page, plateAroundDto)); @@ -78,7 +80,12 @@ public class PlateAroundServiceImpl extends BaseServiceImpl 0) { + throw new ServiceException("此订单已存在镀前入库记录!"); + } + return beforePlatInCardNo; } @Override @@ -87,7 +94,12 @@ public class PlateAroundServiceImpl extends BaseServiceImpl 0) { + throw new ServiceException("此订单已存在镀前出库记录!"); + } + return plateAround; } @Override @@ -127,6 +139,10 @@ public class PlateAroundServiceImpl extends BaseServiceImpl 0) { + throw new ServiceException("此订单已存在镀后入库记录!"); + } return afterPlateInVO; } @@ -191,20 +207,24 @@ public class PlateAroundServiceImpl extends BaseServiceImpl woList = new ArrayList<>(list.size()); WorkOrder wo; - Date date = new Date(); + LocalDate now = LocalDate.now(); 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.setUseDept(plateAround.getUseDept()); + wo.setHrTypeBool(plateAround.getHrTypeBool()); woList.add(wo); - // 计算主工序对应的金额 - //bsTeamWagesLevelService.countTeamSalary(wo.getWoId()); + // todo 计算主工序对应的金额 +// bsTeamWagesLevelService.countTeamSalary(wo.getWoId()); + // 调用外协结算 + oemStatementService.autoSettlement(wo.getWoCode(), now); } } if (paType.equals(PlateAround.AFTER_PLAN_IN)) { - // prHandoverRecordService.saveHandoverRecord(woList, AuthUtil.getUser()); + // 保存移交记录 + handoverRecordService.saveHandoverRecord(woList); } } @@ -238,136 +258,47 @@ public class PlateAroundServiceImpl extends BaseServiceImpl qcProduceRunList = qcProduceRunService.listPrByWpId(wp.getId()); + if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) { + throw new ServiceException("此工序卡未绑定飞靶或设备!"); + } + } + } else if (dsProcess.getName().contains("镀金")) { + mtu = macToolUseService.queryByParams(wp.getId(), 0, 1, 0); + if (mtu == null) { + throw new ServiceException("此工序未绑定飞跋,请绑定飞跋!!!"); + } + //验证是否绑定设备 + mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1); + if (mtu == null) { + List produceRunList = null; + produceRunList = qcProduceRunService.listPrByWpIdIndex(wp.getId(), 1, Boolean.FALSE); + if (produceRunList == null || produceRunList.isEmpty()) { + produceRunList = qcProduceRunService.listPrByWpIdIndex(wp.getId(), 2, Boolean.FALSE); + } + if (!(produceRunList != null && !produceRunList.isEmpty())) { + throw new ServiceException("未绑定飞跋和设备或未维护生产追溯信息!!!"); + } + } + } else if ("玻璃封接清洗".equals(dsProcess.getName()) || "玻璃封接退火".equals(dsProcess.getName()) || + "玻璃封接预氧化(箱式炉)".equals(dsProcess.getName()) || "玻璃封接预氧化(链式炉)".equals(dsProcess.getName()) || + "玻璃封接(链式炉)".equals(dsProcess.getName()) || "玻璃封接(真空炉)".equals(dsProcess.getName()) || + "玻璃封接灌胶".equals(dsProcess.getName()) || "玻璃饼压制".equals(dsProcess.getName()) || + "玻璃饼排蜡玻化".equals(dsProcess.getName()) || "玻璃饼振光".equals(dsProcess.getName()) || + "石墨模烘干".equals(dsProcess.getName()) || "石墨模焙烧".equals(dsProcess.getName()) || + "真空炉灌胶".equals(dsProcess.getName()) || "玻璃封接电镀去氧化皮".equals(dsProcess.getName()) || + "玻璃封接电化学抛光".equals(dsProcess.getName()) || "玻璃封接湿喷砂".equals(dsProcess.getName()) || + "玻璃封接电镀".equals(dsProcess.getName()) || "玻璃封接插针电镀".equals(dsProcess.getName()) || + "玻璃封接壳体电镀".equals(dsProcess.getName()) || "玻璃封接电镀下挂".equals(dsProcess.getName()) || + "烧结浸保护剂".equals(dsProcess.getName())) { + mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1); + if (mtu == null) { + // 验证是否维护了生产追溯信息 + List qcProduceRunList = qcProduceRunService.listPrByWpId(wp.getId()); + if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) { + throw new ServiceException("此工序卡未绑定飞靶或设备!"); + } + } + } + boolean aBoolean = makeRecService.chkRfpDetail(wp.getId()); + if (!aBoolean) { + throw new ServiceException("生产记录未填写完整,不允许报工!!!!"); + } + MakeRec mr = new MakeRec(); + BeanUtils.copyProperties(makeRecDTO, mr); + mr.setWorker(AuthUtil.getUserId()); + mr.setMakeTime(new Date()); + makeRecService.save(mr); + if (mr.getScrapQty() > 0) { + wp.setScrapQty(wp.getScrapQty() + mr.getScrapQty()); + WorkOrder wo = this.getById(wp.getWoId()); + wo.setMakeQty(wo.getMakeQty() - mr.getScrapQty()); + this.updateById(wo); + } + wp.setWorkQty(wp.getWorkQty() + mr.getWorkQty()); + if (wp.getQualifiedQty().equals(wp.getScrapQty() + wp.getWorkQty())) { + wp.setStatus(WorkPlan.STATUS_WORK_OK); + } + if ("热处理".equals(dsProcess.getName())) { + wp.setPrintType((short) 1); + String code = macToolUseService.nextCode(2); + MacToolUse prMacToolUse = new MacToolUse(); + prMacToolUse.setWpId(wp.getId()); + prMacToolUse.setFinished(1); + prMacToolUse.setCreateTime(new Date()); + prMacToolUse.setCreateMan(makeRecDTO.getWorker()); + prMacToolUse.setMtnCode(code); + prMacToolUse.setMtuIndex(String.valueOf(0)); + macToolUseService.save(prMacToolUse); + String deviceCode = prMacToolUse.getEquipmentCard() != null ? prMacToolUse.getMtnCode() : ""; + log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, prMacToolUse.getHangNum(), prMacToolUse.getMtnCode(), prMacToolUse.getFinished()); + + MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity(); + qcProduceRun.setMtnCode(code); + qcProduceRun.setWorkSlot("热处理自检"); + qcProduceRun.setInDate(cn.hutool.core.date.DateUtil.now()); + qcProduceRun.setDataOne(makeRecDTO.getResource()); + qcProduceRun.setDataTwo(makeRecDTO.getNum()); + qcProduceRun.setDataThree(makeRecDTO.getThickness()); + qcProduceRun.setDataFour(makeRecDTO.getCode()); + qcProduceRun.setDataFive(makeRecDTO.getInspectCode()); + qcProduceRun.setDataSix(String.valueOf(makeRecDTO.getStatus())); + qcProduceRun.setDataSeven(makeRecDTO.getShape()); + qcProduceRunService.save(qcProduceRun); + } + wp.setFactEndTime(new Date()); + workPlanService.updateById(wp); + // 线上迁移修改 + MacToolUse macToolUse = macToolUseService.getDataByWpIdAndIndex(wp.getId(), "2"); + if (macToolUse != null && macToolUse.getRfpId() != null && macToolUse.getFinished() != 1) { + macToolUse.setFinished(1); + String deviceCode = macToolUse.getEquipmentCard() != null ? macToolUse.getMtnCode() : ""; + log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, macToolUse.getHangNum(), macToolUse.getMtnCode(), macToolUse.getFinished()); + macToolUseService.updateById(macToolUse); + } + + // 如果下工序是外协:生成外协订单,完成本序,接收下序 + this.oemHandle(wp.getNextWpId(), 1); + return true; + } + private void workPlanEnd(WorkPlan workPlan, Date newDate, Double makeQty) { if (workPlan == null) { return; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java index 1b7568a62..39a6fc0cd 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java @@ -44,8 +44,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static com.fasterxml.jackson.databind.type.LogicalType.DateTime; - /** * 车间作业计划 服务实现类 * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java index 0ca67d39f..f7f340a54 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java @@ -19,6 +19,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -123,6 +124,7 @@ public class AuditFileController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 30) + @ApiLog("新增工艺文件") @Operation(summary = "新增一条", description = "传入AuditFile Obj") public R save(@Valid @RequestBody AuditFile addOne) { addOne.setId(null); @@ -135,6 +137,7 @@ public class AuditFileController extends BladeController { */ @PostMapping("/saveBat") @ApiOperationSupport(order = 31) + @ApiLog("新增工艺文件") @Operation(summary = "新增批量", description = "传入AuditFile List") public R saveBat(@Valid @RequestBody List addList) { addList.forEach(one -> { @@ -148,6 +151,7 @@ public class AuditFileController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 40) + @ApiLog("修改工艺文件") @Operation(summary = "修改一条", description = "传入AuditFile Obj") public R update(@Valid @RequestBody AuditFile updateOne) { return R.status(service.updateById(updateOne)); @@ -158,6 +162,7 @@ public class AuditFileController extends BladeController { */ @PostMapping("/updateBat") @ApiOperationSupport(order = 41) + @ApiLog("修改工艺文件") @Operation(summary = "修改批量", description = "传入AuditFile List") public R updateBat(@Valid @RequestBody List updateList) { return R.status(service.updateBatchById(updateList)); @@ -188,6 +193,7 @@ public class AuditFileController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除工艺文件") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java index 16528460d..763ac404d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java @@ -19,6 +19,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -113,6 +114,7 @@ public class CycleTestController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 4) + @ApiLog("新增周期试验") @Operation(summary = "新增", description = "传入cycleTest") public R save(@Valid @RequestBody CycleTestSubmit ct) { if (ct.getTestDuration() == null) { @@ -127,6 +129,7 @@ public class CycleTestController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 5) + @ApiLog("修改周期试验") @Operation(summary = "修改", description = "传入cycleTest") public R update(@Valid @RequestBody CycleTest ct) { return service.update(ct); @@ -147,6 +150,7 @@ public class CycleTestController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 7) + @ApiLog("删除周期试验") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java index 713ad309a..005c8626a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java @@ -19,6 +19,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -101,6 +102,7 @@ public class CycleTestItemController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 4) + @ApiLog("新增周期试验项目") @Operation(summary = "新增", description = "传入cycleTestItem") public R save(@Valid @RequestBody CycleTestItemSubmit submit) { return service2.save(submit); @@ -111,6 +113,7 @@ public class CycleTestItemController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 5) + @ApiLog("修改周期试验项目") @Operation(summary = "修改", description = "传入cycleTestItem") public R update(@Valid @RequestBody CycleTestItemSubmit submit) { return service2.update(submit); @@ -131,6 +134,7 @@ public class CycleTestItemController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 7) + @ApiLog("删除周期试验项目") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/IndicatorMonthController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/IndicatorMonthController.java index 29c2948f2..fc90e5950 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/IndicatorMonthController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/IndicatorMonthController.java @@ -18,6 +18,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -134,6 +135,7 @@ public class IndicatorMonthController extends BladeController { */ @PostMapping("/saveBat") @ApiOperationSupport(order = 31) + @ApiLog("新增质量指标") @Operation(summary = "新增批量", description = "传入IndicatorMonth List") public R saveBat(@Valid @RequestBody List addList) { for (IndicatorMonth one : addList) { @@ -149,6 +151,7 @@ public class IndicatorMonthController extends BladeController { * [月度指标] 修改一条 */ @PostMapping("/update") + @ApiLog("修改质量指标") @ApiOperationSupport(order = 40) @Operation(summary = "修改一条", description = "传入IndicatorMonth Obj") public R update(@Valid @RequestBody IndicatorMonth updateOne) { @@ -167,6 +170,7 @@ public class IndicatorMonthController extends BladeController { */ @PostMapping("/updateBat") @ApiOperationSupport(order = 41) + @ApiLog("修改质量指标") @Operation(summary = "修改批量", description = "传入IndicatorMonth List") public R updateBat(@Valid @RequestBody List updateList) { return R.status(service.updateBatchById(updateList)); @@ -197,6 +201,7 @@ public class IndicatorMonthController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除质量指标") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionItemController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionItemController.java index a9dfb050b..95d64c953 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionItemController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionItemController.java @@ -17,6 +17,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -117,6 +118,7 @@ public class InspectionItemController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 30) + @ApiLog("新增检验项目") @Operation(summary = "新增一条", description = "传入InspectionItem Obj") public R save(@Valid @RequestBody InspectionItem addOne) { addOne.setId(null); @@ -141,6 +143,7 @@ public class InspectionItemController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 40) + @ApiLog("修改检验项目") @Operation(summary = "修改一条", description = "传入InspectionItem Obj") public R update(@Valid @RequestBody InspectionItem updateOne) { return R.status(service.updateById(updateOne)); @@ -181,6 +184,7 @@ public class InspectionItemController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除检验项目") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTaskController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTaskController.java index 82564f243..ada2cf1f9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTaskController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTaskController.java @@ -289,26 +289,29 @@ public class InspectionTaskController extends BladeController { private IMesRbFilePreserveSlotService mesRbFilePreserveSlotService; @Operation(summary = "获取热表电子档案维护-槽子明细及对应的明细") - @RequestMapping(value = "/getByRfpId/{pssId}", method = RequestMethod.GET) - public R getByRfpId(@PathVariable Long pssId) { + @RequestMapping(value = "/getByRfpId/{rfpId}", method = RequestMethod.GET) + public R getByRfpId(@PathVariable Long rfpId) { List preserveSlotList = new ArrayList<>(); - - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("PPS_ID", pssId); - List workPlanList = workPlanMapper.selectList(queryWrapper); - WorkPlan plan = new WorkPlan(); - if(null != workPlanList && workPlanList.size() > 0){ - plan = workPlanList.get(0); - } - - if(plan != null && plan.getId() != null){ - List toolUseList = workPlanMapper.getDataByWpIdAndIndexListNew(plan.getId()); - for(MacToolUse toolUse : toolUseList){ - List list = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(toolUse.getRfpId())); - preserveSlotList.addAll(list); - } - } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("RFP_ID", rfpId); + preserveSlotList = mesRbFilePreserveSlotService.list(queryWrapper); + +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.eq("PPS_ID", pssId); +// List workPlanList = workPlanMapper.selectList(queryWrapper); +// WorkPlan plan = new WorkPlan(); +// if(null != workPlanList && workPlanList.size() > 0){ +// plan = workPlanList.get(0); +// } +// +// if(plan != null && plan.getId() != null){ +// List toolUseList = workPlanMapper.getDataByWpIdAndIndexListNew(plan.getId()); +// for(MacToolUse toolUse : toolUseList){ +// List list = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(toolUse.getRfpId())); +// preserveSlotList.addAll(list); +// } +// } JSONObject obj = new JSONObject(); @@ -339,6 +342,21 @@ public class InspectionTaskController extends BladeController { } + @Operation(summary = "新增或修改热表电子档案维护-槽子明细及对应的明细") + @PostMapping(value = "/saveOrEdit") + public R saveOrEdit(@RequestBody JSONObject data, HttpServletRequest request) throws Exception { + + List submitList = JSONArray.parseArray(data.get("submitList").toString(), MesRbFilePreserveSlotEntity.class); + List deleteIds = JSONArray.parseArray(data.get("deleteIds").toString(), Long.class); + BladeUser curUserInfo = AuthUtil.getUser(); +// PfUserInfo curUserInfo = (PfUserInfo) ControllerUtils.getCurUserInfo(request); + Long rfpId = data.getLong("rfpId"); + service.saveOrEditMes(submitList, deleteIds, curUserInfo, rfpId); + return R.status(true); + } + + + /** * [检验任务] 自定义分页 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTemplateController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTemplateController.java index 92462e53b..ea2e0f910 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTemplateController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTemplateController.java @@ -18,6 +18,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -160,6 +161,7 @@ public class InspectionTemplateController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 30) + @ApiLog("新增检验模板") @Operation(summary = "新增一条", description = "传入InspectionTemplate Obj") public R save(@Valid @RequestBody InspectionTemplateAdd addOne) { addOne.setId(null); @@ -190,6 +192,7 @@ public class InspectionTemplateController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 40) + @ApiLog("修改检验模板") @Operation(summary = "修改一条", description = "传入InspectionTemplate Obj") public R update(@Valid @RequestBody InspectionTemplateUpdate updateOne) { service.updateById(updateOne); @@ -235,6 +238,7 @@ public class InspectionTemplateController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除检验模板") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java index b5c64cd15..529b30595 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java @@ -17,6 +17,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -181,6 +182,7 @@ public class LiquidTankController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 30) + @ApiLog("新增槽液") @Operation(summary = "新增一条", description = "传入LiquidTank Obj") public R save(@Valid @RequestBody LiquidTank addOne) { addOne.setId(null); @@ -205,6 +207,7 @@ public class LiquidTankController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 40) + @ApiLog("修改槽液") @Operation(summary = "修改一条", description = "传入LiquidTank Obj") public R update(@Valid @RequestBody LiquidTank updateOne) { return R.status(service.updateById(updateOne)); @@ -245,6 +248,7 @@ public class LiquidTankController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除槽液") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java index 76afca897..610970162 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ProReTemplateController.java @@ -18,6 +18,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -122,6 +123,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 30) + @ApiLog("新增过程记录模板") @Operation(summary = "新增一条", description = "传入ProReTemplate Obj") public R save(@Valid @RequestBody ProReTemplate addOne) { @@ -145,6 +147,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/saveBat") @ApiOperationSupport(order = 31) + @ApiLog("新增过程记录模板") @Operation(summary = "新增批量", description = "传入ProReTemplate List") public R saveBat(@Valid @RequestBody List addList) { addList.forEach(one -> { @@ -160,6 +163,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 40) + @ApiLog("修改过程记录模板") @Operation(summary = "修改一条", description = "传入ProReTemplate Obj") public R update(@Valid @RequestBody ProReTemplate updateOne) { @@ -181,6 +185,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/updateDetail") @ApiOperationSupport(order = 42) + @ApiLog("修改过程记录模板") @Operation(summary = "修改一条明细", description = "传入ProReTemplate Obj") public R updateDetail(@Valid @RequestBody ProReTemplateVO updateDetail) { return service.updateDetail(updateDetail); @@ -191,6 +196,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/updateBat") @ApiOperationSupport(order = 41) + @ApiLog("修改过程记录模板") @Operation(summary = "修改批量", description = "传入ProReTemplate List") public R updateBat(@Valid @RequestBody List updateList) { return R.status(service.updateBatchById(updateList)); @@ -201,6 +207,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/submit") @ApiOperationSupport(order = 50) + @ApiLog("新增或修改过程记录模板") @Operation(summary = "新增或修改一条", description = "传入ProReTemplate Obj") public R submit(@Valid @RequestBody ProReTemplate mergeOne) { return R.status(service.saveOrUpdate(mergeOne)); @@ -211,6 +218,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/submitBat") @ApiOperationSupport(order = 51) + @ApiLog("新增或修改过程记录模板") @Operation(summary = "新增或修改批量", description = "传入ProReTemplate List") public R submitBat(@Valid @RequestBody List mergeList) { return R.status(service.saveOrUpdateBatch(mergeList)); @@ -221,6 +229,7 @@ public class ProReTemplateController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除过程记录模板") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RaiseHandController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RaiseHandController.java index d1005964c..a4172a806 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RaiseHandController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RaiseHandController.java @@ -21,6 +21,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -282,6 +283,7 @@ public class RaiseHandController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 30) + @ApiLog("新增举手免责") @Operation(summary = "新增一条", description = "传入LiquidTankWave Obj") @Transactional public R save(@Valid @RequestBody RaiseHand addOne) { @@ -306,6 +308,7 @@ public class RaiseHandController extends BladeController { @PostMapping("/saveBat") @ApiOperationSupport(order = 31) + @ApiLog("新增举手免责") @Operation(summary = "新增批量", description = "传入LiquidTankWave List") public R saveBat(@Valid @RequestBody List addList) { addList.forEach(one -> { @@ -317,6 +320,7 @@ public class RaiseHandController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 40) + @ApiLog("修改举手免责") @Operation(summary = "修改一条", description = "传入LiquidTankWave Obj") @Transactional public R update(@Valid @RequestBody RaiseHand updateOne) { @@ -341,6 +345,7 @@ public class RaiseHandController extends BladeController { @PostMapping("/updateBat") @ApiOperationSupport(order = 41) + @ApiLog("修改举手免责") @Operation(summary = "修改批量", description = "传入LiquidTankWave List") public R updateBat(@Valid @RequestBody List updateList) { return R.status(service.updateBatchById(updateList)); @@ -367,6 +372,7 @@ public class RaiseHandController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除举手免责") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.removeByIds(Func.toLongList(ids))); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RemindMsgController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RemindMsgController.java index 5672b76f3..160556065 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RemindMsgController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/RemindMsgController.java @@ -18,6 +18,7 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -25,7 +26,11 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.basic.excel.CoatingThicknessExcel; +import org.springblade.desk.basic.pojo.entity.CoatingThickness; import org.springblade.desk.basic.util.ExcelExtUtil; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.service.IDsPartService; import org.springblade.desk.quality.constant.QAModuleConst; import org.springblade.desk.quality.excel.RemindMsgExcel; import org.springblade.desk.quality.pojo.entity.RemindMsg; @@ -37,6 +42,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -59,6 +65,8 @@ public class RemindMsgController extends BladeController { @Resource private IRemindMsgService service; + @Resource + private IDsPartService dsPartService; /** * [提醒信息] 详情 @@ -83,11 +91,15 @@ public class RemindMsgController extends BladeController { public R> list(@Parameter(hidden = true) @RequestParam Map map, Query query) { RemindMsgSearch search = BeanUtil.toBean(map, RemindMsgSearch.class); + String partName = ""; if (map.containsKey("partName")) { - String partName = map.get("partName").toString(); + partName = map.get("partName").toString(); } QueryWrapper qw = Condition.getQueryWrapper(map, RemindMsg.class); - qw.like(map.containsKey("partName"), RemindMsg.PART_NAME, map.get("partName")); + if(!partName.isEmpty()){ + qw.like(RemindMsg.PART_NAME, partName); + } +// qw.like(map.containsKey("partName"), RemindMsg.PART_NAME, map.get("partName")); IPage pages = service.page(Condition.getPage(query), qw); IPage pagesVO = RemindMsgWrapper.build().pageVO(pages); pagesVO.getRecords() @@ -128,6 +140,7 @@ public class RemindMsgController extends BladeController { */ @PostMapping("/save") @ApiOperationSupport(order = 30) + @ApiLog("新增提醒信息") @Operation(summary = "新增一条", description = "传入RemindMsg Obj") public R save(@Valid @RequestBody RemindMsg addOne) { addOne.setId(null); @@ -139,6 +152,7 @@ public class RemindMsgController extends BladeController { */ @PostMapping("/saveBat") @ApiOperationSupport(order = 31) + @ApiLog("新增提醒信息") @Operation(summary = "新增批量", description = "传入RemindMsg List") public R saveBat(@Valid @RequestBody List addList) { addList.forEach(one -> { @@ -152,6 +166,7 @@ public class RemindMsgController extends BladeController { */ @PostMapping("/update") @ApiOperationSupport(order = 40) + @ApiLog("修改提醒信息") @Operation(summary = "修改一条", description = "传入RemindMsg Obj") public R update(@Valid @RequestBody RemindMsg updateOne) { return R.status(service.updateById(updateOne)); @@ -162,6 +177,7 @@ public class RemindMsgController extends BladeController { */ @PostMapping("/updateBat") @ApiOperationSupport(order = 41) + @ApiLog("修改提醒信息") @Operation(summary = "修改批量", description = "传入RemindMsg List") public R updateBat(@Valid @RequestBody List updateList) { return R.status(service.updateBatchById(updateList)); @@ -172,6 +188,7 @@ public class RemindMsgController extends BladeController { */ @PostMapping("/submit") @ApiOperationSupport(order = 50) + @ApiLog("新增或修改提醒信息") @Operation(summary = "新增或修改一条", description = "传入RemindMsg Obj") public R submit(@Valid @RequestBody RemindMsg mergeOne) { return R.status(service.saveOrUpdate(mergeOne)); @@ -192,6 +209,7 @@ public class RemindMsgController extends BladeController { */ @PostMapping("/remove") @ApiOperationSupport(order = 61) + @ApiLog("删除提醒信息") @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(service.deleteLogic(Func.toLongList(ids))); @@ -215,6 +233,18 @@ public class RemindMsgController extends BladeController { "[提醒信息]数据表", list, RemindMsgExcel.class); } + /** + * [提醒信息] 导出Excel + */ + @GetMapping("/downloadExcel") + @ApiOperationSupport(order = 70) + @Operation(summary = "导出Excel", description = "传入RemindMsg") + public void downloadExcel(HttpServletResponse response) { + List list = new ArrayList<>(); + ExcelUtil.export(response, "导入模版-消息提醒", + "消息提醒", list, RemindMsgExcel.class); + } + /** * [提醒信息] 下载Excel模板 */ @@ -223,8 +253,8 @@ public class RemindMsgController extends BladeController { @Operation(summary = "下载Excel模板", description = "") public ResponseEntity downloadExcelTemplate() { return ExcelExtUtil.downloadXlsTemplate( - "Excel/QA/ImportTemplate-CycleTestItem.xls", - "导入模版-周期试验项目.xls"); + "Excel/QA/消息提醒.xls", + "导入模版-消息提醒.xls"); } /** @@ -234,13 +264,30 @@ public class RemindMsgController extends BladeController { @ApiOperationSupport(order = 72) @Operation(summary = "导入Excel", description = "MultipartFile") public R importExcel(@RequestParam("file") MultipartFile file) { - R checkR = ExcelExtUtil.importExcelCheck(file); - if (checkR != null) { - return checkR; - } - List importList = ExcelUtil.read( - file, 0, 1, RemindMsg.class - ); - return R.status(service.saveBatch(importList)); + List noticeList = new ArrayList<>(); + List list = ExcelUtil.read(file, RemindMsgExcel.class); + list.forEach(noticeExcel -> { + RemindMsg notice = BeanUtil.copy(noticeExcel, RemindMsg.class); + String partCode = noticeExcel.getPartCode(); + String subPartCode = noticeExcel.getSubPartCode(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(DsPartEntity::getPartCode, partCode); + List parts = dsPartService.list(queryWrapper); + if(null != parts && parts.size() > 0){ + notice.setPartId(parts.get(0).getId()); + } + + QueryWrapper queryWrappersub = new QueryWrapper<>(); + queryWrappersub.lambda().eq(DsPartEntity::getPartCode, subPartCode); + List partsubs = dsPartService.list(queryWrappersub); + if(null != partsubs && partsubs.size() > 0){ + notice.setSubPartId(partsubs.get(0).getId()); + } + + + noticeList.add(notice); + }); + return R.data(service.saveBatch(noticeList)); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/RemindMsgExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/RemindMsgExcel.java index 33a30e930..79f4b04ce 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/RemindMsgExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/RemindMsgExcel.java @@ -33,20 +33,20 @@ public class RemindMsgExcel implements Serializable { /** * 编码 */ - @ColumnWidth(20) - @ExcelProperty("编码") +// @ColumnWidth(20) +// @ExcelProperty("编码") private String code; /** * 类型 */ - @ColumnWidth(20) - @ExcelProperty("类型") +// @ColumnWidth(20) +// @ExcelProperty("类型") private Long remindMsgType; /** * [零件]id */ - @ColumnWidth(20) - @ExcelProperty("[零件]id") +// @ColumnWidth(20) +// @ExcelProperty("[零件]id") private BigDecimal partId; /** * [零件]编码 @@ -58,13 +58,13 @@ public class RemindMsgExcel implements Serializable { * 是否热处理 */ @ColumnWidth(20) - @ExcelProperty("是否热处理") + @ExcelProperty("是否热处理1:是 0:否") private String isHeatTreatment; /** * 是否镀后检验 */ @ColumnWidth(20) - @ExcelProperty("是否镀后检验") + @ExcelProperty("是否镀后检验1:是 0:否") private String isAfterPlating; /** * 质量等级 @@ -75,14 +75,14 @@ public class RemindMsgExcel implements Serializable { /** * 镀金检测 */ - @ColumnWidth(20) - @ExcelProperty("镀金检测") +// @ColumnWidth(20) +// @ExcelProperty("镀金检测") private String testAu; /** * 镀银检测 */ - @ColumnWidth(20) - @ExcelProperty("镀银检测") +// @ColumnWidth(20) +// @ExcelProperty("镀银检测") private String testAg; /** * 提醒内容 @@ -93,20 +93,20 @@ public class RemindMsgExcel implements Serializable { /** * 排序 */ - @ColumnWidth(20) - @ExcelProperty("排序") +// @ColumnWidth(20) +// @ExcelProperty("排序") private Long sort; /** * 备注 */ - @ColumnWidth(20) - @ExcelProperty("备注") +// @ColumnWidth(20) +// @ExcelProperty("备注") private String remark; /** * 子[零件]id */ - @ColumnWidth(20) - @ExcelProperty("子[零件]id") +// @ColumnWidth(20) +// @ExcelProperty("子[零件]id") private BigDecimal subPartId; /** * 子[零件]编码 @@ -123,25 +123,25 @@ public class RemindMsgExcel implements Serializable { /** * 参数1 */ - @ColumnWidth(20) - @ExcelProperty("参数1") +// @ColumnWidth(20) +// @ExcelProperty("参数1") private String param1; /** * 参数2 */ - @ColumnWidth(20) - @ExcelProperty("参数2") +// @ColumnWidth(20) +// @ExcelProperty("参数2") private String param2; /** * 参数3 */ - @ColumnWidth(20) - @ExcelProperty("参数3") +// @ColumnWidth(20) +// @ExcelProperty("参数3") private String param3; /** * 参数4 */ - @ColumnWidth(20) - @ExcelProperty("参数4") +// @ColumnWidth(20) +// @ExcelProperty("参数4") private String param4; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java index c7da19543..d7102d610 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java @@ -19,6 +19,8 @@ import org.springblade.desk.basic.config.RoleConfig; import org.springblade.desk.basic.constant.BaseCol; import org.springblade.desk.basic.constant.BaseValue; import org.springblade.desk.basic.util.RoleUtil; +import org.springblade.desk.common.feign.IMesNotifyMessageClient; +import org.springblade.desk.common.pojo.entity.MesNotifyMessageEntity; import org.springblade.desk.quality.constant.CycleTestConst; import org.springblade.desk.quality.constant.CycleTestTaskConst; import org.springblade.desk.quality.constant.InspectionTaskConst; @@ -93,6 +95,8 @@ public class CycleTestTaskService2 { private IAttachClient attachClient; @Resource private RoleConfig roleConfig; + @Resource + private IMesNotifyMessageClient mesNotifyMessageClient; /** * list @@ -211,6 +215,11 @@ public class CycleTestTaskService2 { // 判断结果对象 Object objAdvance = JobExtUtil.isAdvanceTargetDay(je, ct.getGenBefore()); if (objAdvance != null) { + MesNotifyMessageEntity mesNotifyMessageEntity = new MesNotifyMessageEntity(); + mesNotifyMessageEntity.setContent("您有实验任务"); + mesNotifyMessageEntity.setReceiveUserId(ct.getProcessUserId()); + mesNotifyMessageClient.save(mesNotifyMessageEntity); + log.info("match je config = {}", objAdvance); // 试验时间 LocalDate testDate = LocalDate.now().plusDays(ct.getGenBefore()); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IInspectionTaskService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IInspectionTaskService.java index 71f1b9e8c..c521d7d4d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IInspectionTaskService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IInspectionTaskService.java @@ -11,9 +11,11 @@ import io.swagger.v3.oas.annotations.Parameter; import org.apache.ibatis.annotations.Param; import org.springblade.common.exception.BusinessException; import org.springblade.core.mp.base.BaseService; +import org.springblade.core.secure.BladeUser; import org.springblade.core.tool.api.R; import org.springblade.desk.produce.pojo.dto.PrintThicknessCraftCard; import org.springblade.desk.produce.pojo.entity.MesRbFilePreserveDetailEntity; +import org.springblade.desk.produce.pojo.entity.MesRbFilePreserveSlotEntity; import org.springblade.desk.quality.excel.InspectionTaskExcel; import org.springblade.desk.quality.pojo.entity.InspectionTask; import org.springblade.desk.quality.pojo.request.InspectionTaskSearch; @@ -128,4 +130,6 @@ public interface IInspectionTaskService extends BaseService { Object pagePrintSjEleFiles(Long woId, Integer yieldType,List planList, List moduleList); List printThicknessList(List idArr); List getByRfpsIdMesNew(Long rfpsId); + + public void saveOrEditMes(List submitList, List deleteIds, BladeUser curUserInfo,Long rfpId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java index 022694361..10f3cb6b7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java @@ -51,10 +51,7 @@ import org.springblade.desk.produce.mapper.WorkPlanMapper; import org.springblade.desk.produce.pojo.dto.*; import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; -import org.springblade.desk.produce.service.IMesEquipmentCardService; -import org.springblade.desk.produce.service.IMesRbFilePreserveSlotService; -import org.springblade.desk.produce.service.IWorkOrderService; -import org.springblade.desk.produce.service.IWorkPlanService; +import org.springblade.desk.produce.service.*; import org.springblade.desk.quality.constant.InspectionItemConst; import org.springblade.desk.quality.constant.InspectionTaskConst; import org.springblade.desk.quality.constant.ReviewSheetConst; @@ -70,6 +67,7 @@ import org.springblade.scheduling.pojo.entity.ProcessSetEntity; import org.springblade.system.feign.IDictClient; import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.User; +import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -142,6 +140,10 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl list = workPlanMapper.getByRfpsIdMesNew(id); return list; } + @Override + public void saveOrEditMes(List submitList, List deleteIds, BladeUser curUserInfo,Long rfpId){ + Map slotNameCountMap = submitList.stream() + // 按slotName分组,key=slotName,value=该名称的元素数量 + .collect(Collectors.groupingBy(MesRbFilePreserveSlotEntity::getSlotName, Collectors.counting())); + List duplicateSlotNames = slotNameCountMap.entrySet().stream().filter(entry -> entry.getValue() > 1).map(Map.Entry::getKey).collect(Collectors.toList()); + if (!duplicateSlotNames.isEmpty()) { + String errorMsg = String.format("以下槽位名称存在重复,不允许保存:%s", String.join(",", duplicateSlotNames)); + throw new RuntimeException(errorMsg); + } + + if (submitList.size() > 0) { + ProReTemplate dsRbFilePreserve = proReTemplateService.getById(rfpId); + for (MesRbFilePreserveSlotEntity dsRbFilePreserveSlot : submitList) { + dsRbFilePreserveSlot.setKeepTime(new Date()); + dsRbFilePreserveSlot.setKeepMan(curUserInfo.getNickName()); + dsRbFilePreserveSlot.setDsRbFilePreserve(dsRbFilePreserve); + dsRbFilePreserveSlot.setRfpId(rfpId); + if(StringUtils.isBlank(dsRbFilePreserveSlot.getSlotName())){ + throw new RuntimeException("请将槽号/工位填写完成"); + } + if (dsRbFilePreserveSlot.getRfpId() != null) { + mesRbFilePreserveSlotService.updateById(dsRbFilePreserveSlot); + } else { + mesRbFilePreserveSlotService.save(dsRbFilePreserveSlot); + } +// List subList = dsRbFilePreserveSlot.getChildrenList(); + List subList = dsRbFilePreserveSlot.getChildrenList(); + if (subList.size() > 0) { + for (MesRbFilePreserveDetailDTO dsRbFilePreserveDetail : subList) { +// dsRbFilePreserveDetail.setDsRbFilePreserveSlot(dsRbFilePreserveSlot); + dsRbFilePreserveDetail.setRfpsId(dsRbFilePreserveSlot.getId()); + if (dsRbFilePreserveDetail.getRfpsId() != null) { + MesRbFilePreserveDetailEntity dsRbFilePreserveDetailDao = new MesRbFilePreserveDetailEntity(); + BeanUtils.copyProperties(dsRbFilePreserveDetail, dsRbFilePreserveDetailDao); + mesRbFilePreserveDetailService.updateById(dsRbFilePreserveDetailDao); + } else { + mesRbFilePreserveDetailService.save(dsRbFilePreserveDetail); + } + } + } + + + if (deleteIds.size() > 0) { + for (Long rfpsId : deleteIds) { + // 删除槽号对应的明细 +// dsRbFilePreserveDetailDao.deleteByRfpsId(rfpsId); +// dsRbFilePreserveSlotDao.delete(rfpsId); + mesRbFilePreserveSlotService.removeById(rfpsId); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("rfps_id", rfpsId); + mesRbFilePreserveDetailService.remove(queryWrapper); + } + } + + } + } + } private JSONObject metalParts(Long woId) { JSONObject obj = new JSONObject(); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/JobExtUtil.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/JobExtUtil.java index b6750dbda..57b75e839 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/JobExtUtil.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/JobExtUtil.java @@ -158,8 +158,34 @@ public class JobExtUtil { } } else if (type == YEAR) { String config = je.getJobTypeYearValue(); + + // 获取当月最后一天 + LocalDate lastLD = LocalDate.of(today.getYear(), today.getMonth(), 1) + .with(TemporalAdjusters.lastDayOfMonth()); + log.info("当月最后一天:{}", lastLD); + // 当月最多多少天 + Integer maxDay = lastLD.getDayOfMonth(); + + + //如果超了就设置为最后一天 + List list = Arrays.asList(config.split(",")); + String str = ""; + for(String one : list){ + + String m = one.substring(0, 2); + String d = one.substring(2); + + int month = Integer.parseInt(one.substring(0, 2)); + int day = Integer.parseInt(one.substring(2)); + if(day>maxDay){ + day = maxDay; + d = day+""; + } + str = str+m+""+d+","; + } + str = str.substring(0,str.length()-1); // 解析配置为年度目标日期(MonthDay 仅存月+日,不关联年份) - Set targetMonthDays = Arrays.stream(config.split(",")) + Set targetMonthDays = Arrays.stream(str.split(",")) .map(String::trim) .map(dateStr -> { // 解析 0201 → 月=2,日=1;1020 → 月=10,日=20 @@ -176,6 +202,7 @@ public class JobExtUtil { if (targetMonthDays.contains(futureMonthDay)) { return futureMonthDay; } else { + MonthDay leapDay = MonthDay.of(2, 29); if (targetMonthDays.contains(leapDay)) { // 有配置0229 if (!Year.now().isLeap()) { // 不是闰年 特殊情况 diff --git a/blade-service/blade-desk/src/main/resources/Excel/QA/实验项目管理.xls b/blade-service/blade-desk/src/main/resources/Excel/QA/实验项目管理.xls new file mode 100644 index 000000000..7b7932e98 Binary files /dev/null and b/blade-service/blade-desk/src/main/resources/Excel/QA/实验项目管理.xls differ diff --git a/blade-service/blade-desk/src/main/resources/Excel/QA/消息提醒.xls b/blade-service/blade-desk/src/main/resources/Excel/QA/消息提醒.xls new file mode 100644 index 000000000..54354ccad Binary files /dev/null and b/blade-service/blade-desk/src/main/resources/Excel/QA/消息提醒.xls differ diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java index 0d084e8c8..c49dc3a43 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java @@ -56,4 +56,14 @@ public class ErpDataProduceClient implements IErpDataProduceClient { return R.data(erpDataProduceService.getCustodianByRecDept(partCode, recDept)); } + @Override + public R chkSjjd(String ypCode, String batchNo) { + return R.data(erpDataProduceService.chkSjjd(ypCode, batchNo)); + } + + @Override + public R chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo) { + return R.data(erpDataProduceService.chkShjh(woCode, ypCode, partCode, productIdent, makeQty, memo)); + } + } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java index 24d7c8f60..f0e5fbf66 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java @@ -24,4 +24,8 @@ public interface IErpDataProduceService { String getVersionByPartCode(String partCode); String getCustodianByRecDept(String partCode, String recDept); + + String chkSjjd(String ypCode, String batchNo); + + String chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java index c7b28bbc4..9483fcfcf 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java @@ -8,8 +8,14 @@ import org.springblade.erpdata.pojo.dto.ReworkProcessDTO; import org.springblade.erpdata.pojo.vo.QueryBatchVO; import org.springblade.erpdata.pojo.vo.ReworkProcessVO; import org.springblade.erpdata.service.IErpDataProduceService; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.SqlOutParameter; +import org.springframework.jdbc.core.SqlParameter; +import org.springframework.jdbc.core.simple.SimpleJdbcCall; import org.springframework.stereotype.Service; +import java.sql.Types; +import java.util.HashMap; import java.util.Map; /** @@ -21,29 +27,104 @@ import java.util.Map; @Service public class ErpDataProduceServiceImpl implements IErpDataProduceService { - private final ErpDataProduceMapper erpDataProduceMapper; - @Override - public QueryBatchVO queryBatch(String partCode) { - return erpDataProduceMapper.queryBatch(partCode); - } - - @Override - public IPage loadReworkOrder(IPage page, ReworkProcessDTO query) { - return page.setRecords(erpDataProduceMapper.loadReworkOrder(page, query)); - } - - @Override - public Map getProductAppareaByPartCode(String partCode) { - return erpDataProduceMapper.getProductAppareaByPartCode(partCode); - } - - @Override - public String getVersionByPartCode(String partCode) { - return erpDataProduceMapper.getVersionByPartCode(partCode); - } - - @Override - public String getCustodianByRecDept(String partCode, String recDept) { - return erpDataProduceMapper.getCustodianByRecDept(partCode, recDept); - } + private final ErpDataProduceMapper erpDataProduceMapper; + + private final JdbcTemplate jdbcTemplate; + + @Override + public QueryBatchVO queryBatch(String partCode) { + return erpDataProduceMapper.queryBatch(partCode); + } + + @Override + public IPage loadReworkOrder(IPage page, ReworkProcessDTO query) { + return page.setRecords(erpDataProduceMapper.loadReworkOrder(page, query)); + } + + @Override + public Map getProductAppareaByPartCode(String partCode) { + return erpDataProduceMapper.getProductAppareaByPartCode(partCode); + } + + @Override + public String getVersionByPartCode(String partCode) { + return erpDataProduceMapper.getVersionByPartCode(partCode); + } + + @Override + public String getCustodianByRecDept(String partCode, String recDept) { + return erpDataProduceMapper.getCustodianByRecDept(partCode, recDept); + } + + @Override + public String chkSjjd(String ypCode, String batchNo) { + SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) + // 指定存储过程名(包含 DB Link) + .withProcedureName("pro_rbchksjjd") + // 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题) + .withoutProcedureColumnMetaDataAccess() + // 显式声明参数 + .declareParameters( + new SqlParameter("v_wono", Types.VARCHAR), // IN + new SqlParameter("v_splcode", Types.VARCHAR), // IN + new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT + new SqlOutParameter("v_excflag", Types.VARCHAR) // OUT + ); + // 2. 封装输入参数 + Map inParams = new HashMap<>(); + inParams.put("v_wono", ypCode); + inParams.put("v_splcode", batchNo); + + // 3. 执行并获取结果 Map + Map resultMap = jdbcCall.execute(inParams); + + // 4. 提取输出参数 + String excflag = (String) resultMap.get("v_excflag"); + String excnote = (String) resultMap.get("v_excnote"); + return excflag; + } + + @Override + public String chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo) { + // 1. 配置 SimpleJdbcCall + SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) + // 指定存储过程名称 (包含 DB Link) + .withProcedureName("pro_inchk") + // 【关键】关闭元数据自动获取 + // 通过 DB Link 调用时,这能避免权限不足或性能问题,必须手动 declareParameters + .withoutProcedureColumnMetaDataAccess() + // 2. 显式声明所有参数 (顺序建议与存储过程定义一致) + .declareParameters( + // --- 输入参数 (IN) --- + new SqlParameter("v_sono", Types.VARCHAR), // 车间订单号 + new SqlParameter("v_wono", Types.VARCHAR), // 工作订单号 + new SqlParameter("v_prtno", Types.VARCHAR), // 零件号 + new SqlParameter("v_prtlotno", Types.VARCHAR), // 等级 + new SqlParameter("v_invysqty", Types.DOUBLE), // 维护数量 + new SqlParameter("v_prtsdept", Types.VARCHAR), // 维护车间 (固定值 "3400") + new SqlParameter("v_note", Types.VARCHAR), // 备注 + // --- 输出参数 (OUT) --- + new SqlOutParameter("v_excnote", Types.VARCHAR), // 异常信息 + new SqlOutParameter("v_excflag", Types.VARCHAR) // 异常标识 + ); + + // 3. 封装输入参数 Map + Map inParams = new HashMap<>(); + inParams.put("v_sono", woCode); + inParams.put("v_wono", ypCode); + inParams.put("v_prtno", partCode); + inParams.put("v_prtlotno", productIdent); + inParams.put("v_invysqty", makeQty); + inParams.put("v_prtsdept", "3400"); // 硬编码的固定值 + inParams.put("v_note", memo); + + // 4. 执行存储过程 + Map resultMap = jdbcCall.execute(inParams); + + // 5. 获取输出参数 (安全处理:避免 null.toString() 导致空指针异常 NPE) + String excflag = (String) resultMap.get("v_excflag"); + String excnote = (String) resultMap.get("v_excnote"); // 如需记录日志可打开 + + return excflag; + } }