diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/PlanAssignSteerModify.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/PlanAssignSteerModify.java index addc348d5..bb8f94df5 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/PlanAssignSteerModify.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/PlanAssignSteerModify.java @@ -78,4 +78,7 @@ public class PlanAssignSteerModify extends BaseEntity { @Schema(description = "审批状态: 0-草稿, 1-一级审批中, 2-审批通过, 3-审批驳回, 4-二级审批中") private Integer approvalStatus = ApprovalStatus.DRAFT; + + @Schema(description = "附件") + private String attachment; } \ No newline at end of file diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/constant/BizTypeConstant.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/constant/BizTypeConstant.java index 0c15c836a..3e7da4827 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/constant/BizTypeConstant.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/constant/BizTypeConstant.java @@ -16,4 +16,6 @@ public interface BizTypeConstant { * 工艺任务转派 */ String CRAFT_TASK_REDEPLOY = "工艺任务转派"; + + String SET_SUITE_FLOW = "齐套流转"; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java index 6b794530a..1a5aba6e9 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java @@ -51,6 +51,12 @@ public class PriceSheetVO { @Schema(description = "阶梯价标识") private String stairflag; + /** + * 阶梯价标记key + */ + @Schema(description = "阶梯价标记key") + private String stairflagkey; + /** * 阶梯上限 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java index aaa753981..0f92fef5b 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java @@ -510,6 +510,9 @@ public class YieldOrder extends BaseEntity { @Schema(description = "责任部门") private String resDept; + @Schema(description = "原生产订单ID") + private Long oldYoId; + @JsonSerialize(nullsUsing = NullSerializer.class) private Double plateThickness1; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkOrderVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkOrderVO.java index a1e6d3e24..a1a7941cb 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkOrderVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkOrderVO.java @@ -88,6 +88,12 @@ public class WorkOrderVO extends WorkOrder { @Schema(description = "下序名称") private String ppsNameNext; + @Schema(description = "上序id") + private Long ppsIdUp; + + @Schema(description = "上序名称") + private String ppsNameUp; + @Schema(description = "下一班组id") private Long makeTeamNext; @@ -105,5 +111,4 @@ public class WorkOrderVO extends WorkOrder { @Schema(description = "优先级;1.正常,2.项目要求日期急件,3.合同急件,4.绩效零件,5.调度标注急件") private String priorityName; - } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java index 9dd0812d9..f070cf162 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java @@ -377,5 +377,7 @@ public class YieldOrderEntity extends TenantEntity { private String tjtNum; @Schema(description = "责任部门") private String resDept; + @Schema(description = "原生产订单ID") + private Long oldYoId; } diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java index 732370305..3386bd723 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java @@ -26,6 +26,8 @@ public interface WmsTaskClient { String BUY_ORDER_APPLY = API_PREFIX + "/buyOrderApply"; + String SAVE_SUB_ORDER_WAREHOUSING = API_PREFIX + "/saveSubOrderWarehousing"; + /** * 物料状态监控同步erp */ @@ -40,4 +42,12 @@ public interface WmsTaskClient { @RequestParam("buyDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date buyDate, @RequestParam("checkUserId")Long checkUserId, @RequestParam("checkDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date checkDate) throws Exception; -} + + /** + * 子件入库 + */ + @PostMapping(SAVE_SUB_ORDER_WAREHOUSING) + void saveSubOrderWarehousing(@RequestParam("goodsCode")String goodsCode, @RequestParam("batchNo")String batchNo, @RequestParam("quantity")Double quantity, + @RequestParam("shId")Long shId, @RequestParam("slId")Long slId, @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")Date date, + @RequestParam("userId")Long userId) throws Exception; + } diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/dto/StGraphiteMoldOutDTO.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/dto/StGraphiteMoldOutDTO.java new file mode 100644 index 000000000..8372d0bcc --- /dev/null +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/dto/StGraphiteMoldOutDTO.java @@ -0,0 +1,26 @@ +package org.springblade.wms.pojo.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.wms.pojo.entity.StGraphiteMoldOut; + +import java.io.Serial; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOutDTO + * @description: 石墨模出库 数据传输对象实体类 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ + +@Data +@EqualsAndHashCode(callSuper = true) +public class StGraphiteMoldOutDTO extends StGraphiteMoldOut { + @Serial + private static final long serialVersionUID = 1L; + + + +} diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoodsExt.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoodsExt.java index 4030e2d50..bfad6a1f3 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoodsExt.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGoodsExt.java @@ -32,7 +32,7 @@ public class StGoodsExt extends BaseEntity { * 季度月使用量均值 */ @Schema(description = "季度月使用量均值") - private Long useAverage; + private Double useAverage; /** * 一级库存 */ diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGraphiteMoldOut.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGraphiteMoldOut.java new file mode 100644 index 000000000..0b91e948b --- /dev/null +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StGraphiteMoldOut.java @@ -0,0 +1,151 @@ +package org.springblade.wms.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.tenant.mp.TenantEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOut + * @description: 石墨模出库 实体类 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ + +@Data +@TableName("ST_GRAPHITE_MOLD_OUT") +@Schema(description = "StGraphiteMoldOut对象") +@EqualsAndHashCode(callSuper = true) +public class StGraphiteMoldOut extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 出库凭证信息 + */ + @Schema(description = "出库凭证信息") + private Long sirId; + + /** + * 生产单号 + */ + @TableField(value = "YO_CODE") + private String yoCode; + + /** + * 批次号 + */ + @Schema(description = "批次号") + private String piNo; + + /** + * 流程卡号 + */ + @Schema(description = "流程卡号") + private String cardNo; + + /** + * 物料ID + */ + @Schema(description = "物料ID") + private Long goodsId; + + /** + * 物料编号 + */ + @Schema(description = "物料编号") + private String goodsCode; + + /** + * 物料名称 + */ + @Schema(description = "物料名称") + private String goodsName; + + /** + * 物料需求量 + */ + @Schema(description = "物料需求量") + private Double needQuantity; + + /** + * 库房ID + */ + @Schema(description = "库房ID") + private Long shId; + + /** + * 库房名称 + */ + @Schema(description = "库房名称") + private String shName; + + /** + * 库位ID + */ + @Schema(description = "库位ID") + private Long slId; + + /** + * 库位号 + */ + @Schema(description = "库位号") + private String location; + + /** + * 已出库数量 + */ + @Schema(description = "已出库数量") + private Double outedQuantity; + + /** + * 出库时间 + */ + @Schema(description = "出库时间") + private Date outTime; + + /** + * 出库人 + */ + @Schema(description = "出库人") + private Long outUser; + + /** + * 出库单号 + */ + @Schema(description = "出库单号") + private String outCode; + + /** + * 库存ID + */ + @Schema(description = "库存ID") + private Long rlsId; + + /** + * 状态 + */ + @Schema(description = "状态") + private Long curStatus; + + /** + * 可用库存数量 + */ + @TableField(exist = false) + private Double stockQty; + + /** + * 领料人ID + */ + @Schema(description = "领料人ID") + private Long picker; + +} diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StStockInoutRecord.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StStockInoutRecord.java index a9549dde8..14a8c721a 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StStockInoutRecord.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StStockInoutRecord.java @@ -180,6 +180,11 @@ public class StStockInoutRecord extends TenantEntity { */ @Schema(description = "单价") private Double unitPrice; + /** + * 流程卡号 + */ + @Schema(description = "流程卡号") + private String cardNo; /** * 是否印字 @@ -204,8 +209,8 @@ public class StStockInoutRecord extends TenantEntity { public static final Short IN_TYPE = 0; public static final Short OUT_TYPE = 1; - /*1:采购入库,2.生产入库,3:其他入库,4调拨入库,5erp转移入库,7生产退料 - 11:配额出库,12:其他出库,13:领料出库 15刀具出库*/ + /*1:采购入库,2.生产入库,3:其他入库,4调拨入库,5erp转移入库,7生产退料 + 11:配额出库,12:其他出库,13:领料出库 15刀具出库,16玻璃饼出库,17石墨模出库*/ public static final Short INOUT_SOURCE_PURCHASE_RECEIPT = 1; public static final Short INOUT_SOURCE_PRODUCE_PURCHASE_RECEIPT = 2; public static final Short INOUT_SOURCE_OTHER_PURCHASE_RECEIPT = 3; @@ -217,6 +222,7 @@ public class StStockInoutRecord extends TenantEntity { public static final Short INOUT_SOURCE_ASSIGN_OUT = 13; public static final Short INOUT_SOURCE_TOOl_OUT = 15; public static final Short INOUT_SOURCE_GLASS_CAKE_OUT = 16; + public static final Short INOUT_SOURCE_GRAPHITE_MOLD_OUT = 17; } diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StGraphiteMoldOutVO.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StGraphiteMoldOutVO.java new file mode 100644 index 000000000..81c79bc06 --- /dev/null +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StGraphiteMoldOutVO.java @@ -0,0 +1,35 @@ +package org.springblade.wms.pojo.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.wms.pojo.entity.StGraphiteMoldOut; + +import java.io.Serial; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOutVO + * @description: 石墨模出库 视图实体类 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ +@Data +@EqualsAndHashCode(callSuper = true) +public class StGraphiteMoldOutVO extends StGraphiteMoldOut { + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "创建人名称") + @TableField(exist = false) + private String createUserName; + @Schema(description = "出库人名称") + @TableField(exist = false) + private String outUserName; + @Schema(description = "领料人名称") + @TableField(exist = false) + private String pickerName; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerModifyServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerModifyServiceImpl.java index 7518e6e1f..4ba62fd1c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerModifyServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlanAssignSteerModifyServiceImpl.java @@ -4,6 +4,8 @@ package org.springblade.desk.basic.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -18,10 +20,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.desk.basic.mapper.PlanAssignSteerModifyApprovalMapper; import org.springblade.desk.basic.mapper.PlanAssignSteerModifyMapper; -import org.springblade.desk.basic.pojo.entity.PlanAssignSteer; -import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModify; -import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyApproval; -import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; +import org.springblade.desk.basic.pojo.entity.*; import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyDVO; import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyTimelineVO; import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyVO; @@ -67,6 +66,7 @@ public class PlanAssignSteerModifyServiceImpl extends BaseServiceImpl selectPlanAssignSteerModifyPage(IPage page, PlanAssignSteerModify planAssignSteerModify) { return page.setRecords(baseMapper.selectPlanAssignSteerModifyPage(page, planAssignSteerModify)); @@ -331,83 +331,100 @@ public class PlanAssignSteerModifyServiceImpl extends BaseServiceImpl modifyDLst = planAssignSteerModifyDMapper.findByPasmId(pasmId); - //if (modifyDLst == null || modifyDLst.isEmpty()) { - // return; - //} - // - //PlanAssignSteerModify modify = getById(pasmId); - //if (modify == null) { - // return; - //} - // - //for (PlanAssignSteerModifyD modifyD : modifyDLst) { - // // 根据工艺能力和外协厂商查找现有分派规则 - // QueryWrapper queryWrapper = new QueryWrapper<>(); - // queryWrapper.eq("CRAFT_ABILITY_ID", modifyD.getPlatingId()) - // .eq("OEM_ID", modifyD.getOemId()); - // BsAssignEntity assign = bsAssignService.getOne(queryWrapper); - // - // if (assign == null) { - // // 不存在则创建新记录 - // assign = new BsAssignEntity(); - // assign.setCraftAbilityId(modifyD.getPlatingId()); - // assign.setOemId(modifyD.getOemId()); - // log.warn("分派规则不存在,创建新记录:工艺能力ID={},外协厂商ID={}", - // modifyD.getPlatingId(), modifyD.getOemId()); - // } - // - // // 更新备注信息(记录来源) - // String remark = "分派控制调整单ID:" + pasmId; - // if (Func.isNotEmpty(assign.getRemark())) { - // remark = assign.getRemark() + "; " + remark; - // } - // assign.setRemark(remark); - // - // // 保存或更新 - // if (assign.getId() == null || assign.getId() == 0) { - // bsAssignService.save(assign); - // } else { - // bsAssignService.updateById(assign); - // } - //} - - } - - @Override - public PlanAssignSteerModifyVO getDetail(Long pasmId, Long caId) { - // 参数校验:pasmId为空直接返回null - if (pasmId == null) { - return null; + List modifyDLst = planAssignSteerModifyDService.findByPasmId(pasmId); + if (modifyDLst == null || modifyDLst.isEmpty()) { + return; } - // 查询主表信息 - List list = baseMapper.findByPasmId(pasmId); - if (list.isEmpty()) { - return null; + PlanAssignSteerModify modify = getById(pasmId); + if (modify == null) { + return; } - PlanAssignSteerModifyVO modifyVO = list.get(0); + for (PlanAssignSteerModifyD modifyD : modifyDLst) { + // 根据工艺能力和外协厂商查找现有分派规则 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("PLATING_ID", modifyD.getPlatingId()) + .eq("OEM_ID", modifyD.getOemId()); + List assignSteers = planAssignSteerService.list(queryWrapper); + BigDecimal assignScale = Objects.isNull(modifyD.getAssignScale()) ? BigDecimal.ZERO : modifyD.getAssignScale(); + if (CollUtil.isEmpty(assignSteers)) { + // 不存在则创建新记录 + PlanAssignSteer assignEntity = new PlanAssignSteer(); + assignEntity.setPlatingId(modifyD.getPlatingId()); + assignEntity.setOemId(modifyD.getOemId()); + assignEntity.setAssignScale(assignScale); + planAssignSteerService.save(assignEntity); + break; + } + assignSteers.forEach(assign -> { + assign.setAssignScale(assignScale); + }); + planAssignSteerService.updateBatchById(assignSteers); + } - // 判断是否需要查询明细:caId为空 或 caId与主表的platingId匹配 - // // TODO: 2026/5/22 caId根据工艺能力查询计划分派控制 - boolean shouldQueryDetail = caId == null || caId.equals(modifyVO.getPlatingId()); + } + @Override + public PlanAssignSteerModifyVO getDetail(Long pasmId, Long caId) { List modifyLst = null; - if (shouldQueryDetail) { - List detailList = planAssignSteerModifyDService.findByPasmId(pasmId); - if (!detailList.isEmpty()) { - modifyLst = detailList.stream() - .map(d -> { - PlanAssignSteerModifyDVO vo = new PlanAssignSteerModifyDVO(); - BeanUtil.copyProperties(d, vo); - return vo; - }) - .collect(Collectors.toList()); + PlanAssignSteerModifyVO modifyVO = null; + + Boolean initSteer = false; + if (pasmId != null) { + List entity = baseMapper.findByPasmId(pasmId); + List list = baseMapper.findByPasmId(pasmId); + if (list.isEmpty()) { + return null; + } + + modifyVO = list.get(0); + + if (caId == null || caId.equals(modifyVO.getPlatingId())) { + List detailList = planAssignSteerModifyDService.findByPasmId(pasmId); + if (!detailList.isEmpty()) { + modifyLst = detailList.stream() + .map(d -> { + PlanAssignSteerModifyDVO vo = new PlanAssignSteerModifyDVO(); + BeanUtil.copyProperties(d, vo); + return vo; + }) + .collect(Collectors.toList()); + } + } else { + initSteer = true; + } + } else { + if (caId == null) { + modifyVO = new PlanAssignSteerModifyVO(); + modifyVO.setPlatingId(null); + modifyVO.setCreateMan(AuthUtil.getUserId()); + modifyVO.setCreateTime(new Date()); + } else { + initSteer = true; } } + if (initSteer) { + modifyVO = null; + // 根据工艺能力和外协厂商查找现有分派规则 + List assignSteers = planAssignSteerService.list(Wrappers.lambdaQuery(PlanAssignSteer.class) + .eq(PlanAssignSteer::getPlatingId, caId)); + + modifyLst = assignSteers.stream() + .map(assign -> { + PlanAssignSteerModifyDVO modifyDVO = new PlanAssignSteerModifyDVO(); + modifyDVO.setPlatingId(assign.getPlatingId()); + modifyDVO.setOemId(assign.getOemId()); + modifyDVO.setAssignScale(assign.getAssignScale()); + modifyDVO.setPasId(assign.getId()); + return modifyDVO; + }) + .collect(Collectors.toList()); + } + modifyVO.setModifyLst(modifyLst); + return modifyVO; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyMonitorController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyMonitorController.java index ebbb8456d..99ec4406b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyMonitorController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyMonitorController.java @@ -104,16 +104,16 @@ public class BsEnergyMonitorController extends BladeController { if (exist != null && !exist.getId().equals(bsEnergyMonitor.getId())) { return R.fail(bsEnergyMonitor.getMonth() + "月份能源监控表已存在"); } - if(bsEnergyMonitor.getLastWater() != null && bsEnergyMonitor.getLastOutput() != null){ + if (bsEnergyMonitor.getLastWater() != null && bsEnergyMonitor.getLastOutput() != null) { bsEnergyMonitor.setLastWaterRate(bsEnergyMonitor.getLastWater().divide(bsEnergyMonitor.getLastOutput(), 6, RoundingMode.HALF_UP)); } - if(bsEnergyMonitor.getLastElectric() != null && bsEnergyMonitor.getLastOutput() != null){ + if (bsEnergyMonitor.getLastElectric() != null && bsEnergyMonitor.getLastOutput() != null) { bsEnergyMonitor.setLastElectricRate(bsEnergyMonitor.getLastElectric().divide(bsEnergyMonitor.getLastOutput(), 6, RoundingMode.HALF_UP)); } - if(bsEnergyMonitor.getCurrentWater() != null && bsEnergyMonitor.getCurrentOutput() != null){ + if (bsEnergyMonitor.getCurrentWater() != null && bsEnergyMonitor.getCurrentOutput() != null) { bsEnergyMonitor.setCurrentWaterRate(bsEnergyMonitor.getCurrentWater().divide(bsEnergyMonitor.getCurrentOutput(), 6, RoundingMode.HALF_UP)); } - if(bsEnergyMonitor.getCurrentElectric() != null && bsEnergyMonitor.getCurrentOutput() != null){ + if (bsEnergyMonitor.getCurrentElectric() != null && bsEnergyMonitor.getCurrentOutput() != null) { bsEnergyMonitor.setCurrentElectricRate(bsEnergyMonitor.getCurrentElectric().divide(bsEnergyMonitor.getCurrentOutput(), 6, RoundingMode.HALF_UP)); } } @@ -148,28 +148,17 @@ public class BsEnergyMonitorController extends BladeController { @GetMapping("/getLastYearDetail") @Operation(summary = "上年度详情", description = "传入bsEnergyMonitor") public R getLastYearDetail(BsEnergyMonitorEntity bsEnergyMonitor) { - YearMonth currentMonth = YearMonth.parse(bsEnergyMonitor.getMonth()); - String currentYear = String.valueOf(currentMonth.getYear()); - YearMonth lastYearMonth = currentMonth.minusYears(1); - String lastMonth = lastYearMonth.toString(); + YearMonth currentYearMonth = YearMonth.parse(bsEnergyMonitor.getMonth()); + String currentYear = String.valueOf(currentYearMonth.getYear()); + String month = String.format("%02d", currentYearMonth.getMonthValue()); + YearMonth lastYearMonth = currentYearMonth.minusYears(1); String lastYear = String.valueOf(lastYearMonth.getYear()); - String quarter = this.getQuarter(currentMonth.getMonth().getValue()); BsEnergyMonitorEntity detail = new BsEnergyMonitorEntity(); - BsEnergyMonitorEntity lastYearDetail = bsEnergyMonitorService.getOne(new LambdaQueryWrapper().eq(BsEnergyMonitorEntity::getMonth, lastMonth)); - BsEnergyTargetEntity lastYearWaterTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper(). - eq(BsEnergyTargetEntity::getYear, lastYear) - .eq(BsEnergyTargetEntity::getType, "1")); - BsEnergyTargetEntity currentYearWaterTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper(). - eq(BsEnergyTargetEntity::getYear, currentYear) - .eq(BsEnergyTargetEntity::getType, "1")); - BsEnergyTargetEntity lastYearElectricTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper(). - eq(BsEnergyTargetEntity::getYear, lastYear) - .eq(BsEnergyTargetEntity::getQuarter, quarter) - .eq(BsEnergyTargetEntity::getType, "2")); - BsEnergyTargetEntity currentYearElectricTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper(). - eq(BsEnergyTargetEntity::getYear, currentYear) - .eq(BsEnergyTargetEntity::getQuarter, quarter) - .eq(BsEnergyTargetEntity::getType, "2")); + BsEnergyMonitorEntity lastYearDetail = bsEnergyMonitorService.getOne(new LambdaQueryWrapper().eq(BsEnergyMonitorEntity::getMonth, lastYearMonth.toString())); + BsEnergyTargetEntity lastYearWaterTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper().eq(BsEnergyTargetEntity::getYear, lastYear).eq(BsEnergyTargetEntity::getMonth, month).eq(BsEnergyTargetEntity::getType, "1")); + BsEnergyTargetEntity currentYearWaterTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper().eq(BsEnergyTargetEntity::getYear, currentYear).eq(BsEnergyTargetEntity::getMonth, month).eq(BsEnergyTargetEntity::getType, "1")); + BsEnergyTargetEntity lastYearElectricTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper().eq(BsEnergyTargetEntity::getYear, lastYear).eq(BsEnergyTargetEntity::getMonth, month).eq(BsEnergyTargetEntity::getType, "2")); + BsEnergyTargetEntity currentYearElectricTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper().eq(BsEnergyTargetEntity::getYear, currentYear).eq(BsEnergyTargetEntity::getMonth, month).eq(BsEnergyTargetEntity::getType, "2")); if (lastYearDetail != null) { detail.setLastWater(lastYearDetail.getCurrentWater()); detail.setLastElectric(lastYearDetail.getCurrentElectric()); @@ -192,16 +181,4 @@ public class BsEnergyMonitorController extends BladeController { return R.data(detail); } - - public static String getQuarter(int month) { - if (month <= 3) { - return "1"; - } else if (month <= 6) { - return "2"; - } else if (month <= 9) { - return "3"; - } else { - return "4"; - } - } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyTargetController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyTargetController.java index c46dcb003..5af06a124 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyTargetController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyTargetController.java @@ -26,9 +26,10 @@ package org.springblade.desk.energy.controller; import cn.hutool.core.bean.BeanUtil; +import com.alibaba.excel.util.StringUtils; +import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -45,21 +46,19 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.desk.basic.util.ExcelExtUtil; -import org.springblade.desk.energy.excel.BsEnergyTargetElectricExcel; -import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel; +import org.springblade.desk.energy.excel.BsEnergyTargetExcel; import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity; import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO; import org.springblade.desk.energy.service.IBsEnergyTargetService; -import org.springblade.desk.energy.wrapper.BsEnergyTargetWrapper; -import org.springframework.beans.BeanUtils; import org.springframework.core.io.Resource; -import org.springframework.data.redis.hash.HashMapper; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.math.BigDecimal; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 能耗目标表 控制器 @@ -80,29 +79,16 @@ public class BsEnergyTargetController extends BladeController { */ @GetMapping("/detail") @Operation(summary = "详情", description = "传入bsEnergyTarget") - public R detail(BsEnergyTargetEntity bsEnergyTarget) { - BsEnergyTargetEntity detail = bsEnergyTargetService.getOne(Condition.getQueryWrapper(bsEnergyTarget)); - return R.data(BsEnergyTargetWrapper.build().entityVO(detail)); - } - - /** - * 能耗目标表 获取用水目标 - */ - @GetMapping("/detailByWater") - @Operation(summary = "根据月份获取用水目标", description = "获取用水目标") - public R getWaterTargetByMonth(String month) { - BigDecimal waterTarget = bsEnergyTargetService.getWaterTargetByMonth(month); - return R.data(waterTarget); - } - - /** - * 能耗目标表 获取用水目标 - */ - @GetMapping("/detailByElectric") - @Operation(summary = "根据月份获取用电目标", description = "获取用电目标") - public R getElectricTargetByMonth(String month) { - BigDecimal electricTarget = bsEnergyTargetService.getElectricTargetByMonth(month); - return R.data(electricTarget); + public R detail(BsEnergyTargetVO bsEnergyTarget) { + if (StringUtils.isEmpty(bsEnergyTarget.getYear()) || StringUtils.isEmpty(bsEnergyTarget.getType())) { + return R.fail("参数错误"); + } + List list = bsEnergyTargetService.selectBsEnergyTargetList(bsEnergyTarget); + if (CollectionUtils.isNotEmpty(list)) { + return R.data(list.get(0)); + } else { + return R.fail("能耗目标详情查询失败"); + } } /** @@ -119,21 +105,23 @@ public class BsEnergyTargetController extends BladeController { * 能耗目标表 新增或修改 */ @PostMapping("/submit") - @Operation(summary = "新增或修改", description = "传入bsEnergyTarget") - public R submit(@Valid @RequestBody BsEnergyTargetEntity bsEnergyTarget) { - BsEnergyTargetEntity bsEnergyTargetEntity = bsEnergyTargetService.getOne(new LambdaQueryWrapper(). - eq(BsEnergyTargetEntity::getYear, bsEnergyTarget.getYear()) - .eq(BsEnergyTargetEntity::getType, bsEnergyTarget.getType()) - .eq(bsEnergyTarget.getQuarter() != null, BsEnergyTargetEntity::getQuarter, bsEnergyTarget.getQuarter())); - if (bsEnergyTargetEntity != null && !bsEnergyTargetEntity.getId().equals(bsEnergyTarget.getId())) { - if ("1".equals(bsEnergyTarget.getType())) { - return R.fail("该年份能耗目标已存在"); - } - if ("2".equals(bsEnergyTarget.getType())) { - return R.fail("该季度能耗目标已存在"); + @Operation(summary = "新增或修改", description = "传入bsEnergyTargetList") + public R submit(@Valid @RequestBody List bsEnergyTargetList) { + List years = bsEnergyTargetList.stream().map(BsEnergyTargetVO::getYear).collect(Collectors.toList()); + List existList = bsEnergyTargetService.list(new LambdaQueryWrapper().in(BsEnergyTargetEntity::getYear, years)); + Map existMap = existList.stream().collect(Collectors.toMap(e -> e.getYear() + "-" + e.getMonth() + "-" + e.getType(), BsEnergyTargetEntity::getId, (oldValue, newValue) -> oldValue)); + List saves = new ArrayList<>(); + for (BsEnergyTargetVO bsEnergyTargetVO : bsEnergyTargetList) { + List bsEnergyTargetEntities = bsEnergyTargetVO.parseEntities(); + for (BsEnergyTargetEntity bsEnergyTarget : bsEnergyTargetEntities) { + String key = bsEnergyTarget.getYear() + "-" + bsEnergyTarget.getMonth() + "-" + bsEnergyTarget.getType(); + if (existMap.containsKey(key)) { + bsEnergyTarget.setId(existMap.get(key)); + } } + saves.addAll(bsEnergyTargetEntities); } - return R.status(bsEnergyTargetService.saveOrUpdate(bsEnergyTarget)); + return R.status(bsEnergyTargetService.saveOrUpdateBatch(saves)); } /** @@ -152,130 +140,40 @@ public class BsEnergyTargetController extends BladeController { @GetMapping("/export-bsEnergyTarget") @Operation(summary = "导出数据", description = "传入bsEnergyTarget") public void exportBsEnergyTarget(@Parameter(hidden = true) @RequestParam Map bsEnergyTarget, BladeUser bladeUser, HttpServletResponse response) { - Map conMap = new HashMap(); - conMap.put("type", bsEnergyTarget.get("type")); - conMap.put("isDeleted", 0); - List list = bsEnergyTargetService.listByMap(conMap); - if ("1".equals(bsEnergyTarget.get("type"))) { - List bsEnergyTargetWaterExcels = BeanUtil.copyToList(list, BsEnergyTargetWaterExcel.class); - ExcelUtil.export(response, "用水目标" + DateUtil.time(), "用水目标", bsEnergyTargetWaterExcels, BsEnergyTargetWaterExcel.class); - } else { - List bsEnergyTargetElectricExcels = BeanUtil.copyToList(list, BsEnergyTargetElectricExcel.class); - ExcelUtil.export(response, "用电目标" + DateUtil.time(), "用电目标", bsEnergyTargetElectricExcels, BsEnergyTargetElectricExcel.class); - } + BsEnergyTargetVO vo = new BsEnergyTargetVO(); + vo.setYear((String) bsEnergyTarget.get("year")); + vo.setType((String) bsEnergyTarget.get("type")); + List list = bsEnergyTargetService.selectBsEnergyTargetList(vo); + List bsEnergyTargetExcels = BeanUtil.copyToList(list, BsEnergyTargetExcel.class); + ExcelUtil.export(response, "能耗目标" + DateUtil.time(), "能耗目标", bsEnergyTargetExcels, BsEnergyTargetExcel.class); } @GetMapping("/water-download-excel-template") @Operation(summary = "下载Excel模板", description = "") public ResponseEntity waterDownloadExcelTemplate() { return ExcelExtUtil.downloadXlsTemplate( - "Excel/energy/用水目标.xls", - "导入模版-用水目标.xls"); + "Excel/energy/能耗目标.xls", + "导入模版-能耗目标.xls"); } @GetMapping("/electric-download-excel-template") @Operation(summary = "下载Excel模板", description = "") public ResponseEntity electricDownloadExcelTemplate() { return ExcelExtUtil.downloadXlsTemplate( - "Excel/energy/用电目标.xls", - "导入模版-用电目标.xls"); + "Excel/energy/能耗目标.xls", + "导入模版-能耗目标.xls"); } @PostMapping("/water-import-excel") @Operation(summary = "导入Excel", description = "MultipartFile") public R waterImportExcel(@RequestParam("file") MultipartFile file) { - R checkR = ExcelExtUtil.importExcelCheck(file); - if (checkR != null) { - return checkR; - } - List importList = ExcelUtil.read( - file, 0, 1, BsEnergyTargetWaterExcel.class - ); - boolean result = true; - Set existSet = new HashSet<>(); - StringBuffer msg = new StringBuffer(); - List list = new ArrayList<>(); - for (BsEnergyTargetWaterExcel excel : importList) { - if (existSet.contains(excel.getYear())) { - msg.append("Excel里【" + excel.getYear() + "】重复了\rn"); - result = false; - continue; - } - existSet.add(excel.getYear()); - BsEnergyTargetEntity exist = bsEnergyTargetService.getOne(new LambdaQueryWrapper(). - eq(BsEnergyTargetEntity::getYear, excel.getYear()) - .eq(BsEnergyTargetEntity::getType, "1")); - if (exist != null) { - msg.append(excel.getYear() + "能耗目标已存在\n"); - result = false; - continue; - } - BsEnergyTargetEntity bsEnergyTargetEntity = new BsEnergyTargetEntity(); - BeanUtils.copyProperties(excel, bsEnergyTargetEntity); - bsEnergyTargetEntity.setType("1"); - list.add(bsEnergyTargetEntity); - } - bsEnergyTargetService.saveBatch(list); - if (result) { - return R.success("导入成功"); - } else { - return R.fail(msg.toString()); - } + return bsEnergyTargetService.importExcelData(file, "1"); } @PostMapping("/electric-import-excel") @Operation(summary = "导入Excel", description = "MultipartFile") public R electricImportExcel(@RequestParam("file") MultipartFile file) { - R checkR = ExcelExtUtil.importExcelCheck(file); - if (checkR != null) { - return checkR; - } - List importList = ExcelUtil.read( - file, 0, 1, BsEnergyTargetElectricExcel.class - ); - boolean result = true; - Set existSet = new HashSet<>(); - StringBuffer msg = new StringBuffer(); - List list = new ArrayList<>(); - for (BsEnergyTargetElectricExcel excel : importList) { - String key = excel.getYear() + "-" + excel.getQuarter(); - if (existSet.contains(key)) { - msg.append("Excel里【" + key + "】重复了\rn"); - result = false; - continue; - } - existSet.add(key); - if("第一季度".equals(excel.getQuarter())){ - excel.setQuarter("1"); - } else if("第二季度".equals(excel.getQuarter())){ - excel.setQuarter("2"); - } else if("第三季度".equals(excel.getQuarter())){ - excel.setQuarter("3"); - } else if("第四季度".equals(excel.getQuarter())){ - excel.setQuarter("4"); - } - BsEnergyTargetEntity exist = bsEnergyTargetService.getOne(new LambdaQueryWrapper(). - eq(BsEnergyTargetEntity::getYear, excel.getYear()) - .eq(BsEnergyTargetEntity::getType, "2") - .eq(BsEnergyTargetEntity::getQuarter, excel.getQuarter())); - if (exist != null) { - msg.append(key + "能耗目标已存在\n"); - result = false; - continue; - } - BsEnergyTargetEntity bsEnergyTargetEntity = new BsEnergyTargetEntity(); - BeanUtils.copyProperties(excel, bsEnergyTargetEntity); - bsEnergyTargetEntity.setType("2"); - list.add(bsEnergyTargetEntity); - } - bsEnergyTargetService.saveBatch(list); - if (result) { - return R.success("导入成功"); - } else { - return R.fail(msg.toString()); - } + return bsEnergyTargetService.importExcelData(file, "2"); } - - } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetElectricExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetElectricExcel.java deleted file mode 100644 index 38a727d1e..000000000 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetElectricExcel.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * BladeX Commercial License Agreement - * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. - *

- * Use of this software is governed by the Commercial License Agreement - * obtained after purchasing a license from BladeX. - *

- * 1. This software is for development use only under a valid license - * from BladeX. - *

- * 2. Redistribution of this software's source code to any third party - * without a commercial license is strictly prohibited. - *

- * 3. Licensees may copyright their own code but cannot use segments - * from this software for such purposes. Copyright of this software - * remains with BladeX. - *

- * Using this software signifies agreement to this License, and the software - * must not be used for illegal purposes. - *

- * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is - * not liable for any claims arising from secondary or illegal development. - *

- * Author: Chill Zhuang (bladejava@qq.com) - */ -package org.springblade.desk.energy.excel; - - -import com.alibaba.excel.annotation.ExcelProperty; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.math.BigDecimal; - - -/** - * 能耗目标表 Excel实体类 - * - * @author BladeX - * @since 2026-03-02 - */ -@Data -@ColumnWidth(25) -@HeadRowHeight(20) -@ContentRowHeight(18) -public class BsEnergyTargetElectricExcel implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 年份 - */ - @ColumnWidth(50) - @ExcelProperty("年份") - private String year; - - /** - * 季度 - */ - @ColumnWidth(50) - @ExcelProperty("季度") - private String quarter; - - /** - * 用电目标(kWh/dm²) - */ - @ColumnWidth(50) - @ExcelProperty("用电目标(kWh/dm²)") - private BigDecimal target; - -} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetWaterExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetExcel.java similarity index 60% rename from blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetWaterExcel.java rename to blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetExcel.java index 19c4ebba8..993486b61 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetWaterExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetExcel.java @@ -49,7 +49,7 @@ import java.io.Serial; @ColumnWidth(25) @HeadRowHeight(20) @ContentRowHeight(18) -public class BsEnergyTargetWaterExcel implements Serializable { +public class BsEnergyTargetExcel implements Serializable { @Serial private static final long serialVersionUID = 1L; @@ -57,15 +57,56 @@ public class BsEnergyTargetWaterExcel implements Serializable { /** * 年份 */ - @ColumnWidth(50) + @ColumnWidth(20) @ExcelProperty("年份") private String year; - /** - * 用水目标(L/d㎡) - */ - @ColumnWidth(50) - @ExcelProperty("用水目标(L/d㎡)") - private BigDecimal target; + @ColumnWidth(20) + @ExcelProperty("1月") + private BigDecimal m01Target; + + @ColumnWidth(20) + @ExcelProperty("2月") + private BigDecimal m02Target; + + @ColumnWidth(20) + @ExcelProperty("3月") + private BigDecimal m03Target; + + @ColumnWidth(20) + @ExcelProperty("4月") + private BigDecimal m04Target; + + @ColumnWidth(20) + @ExcelProperty("5月") + private BigDecimal m05Target; + + @ColumnWidth(20) + @ExcelProperty("6月") + private BigDecimal m06Target; + + @ColumnWidth(20) + @ExcelProperty("7月") + private BigDecimal m07Target; + + @ColumnWidth(20) + @ExcelProperty("8月") + private BigDecimal m08Target; + + @ColumnWidth(20) + @ExcelProperty("9月") + private BigDecimal m09Target; + + @ColumnWidth(20) + @ExcelProperty("10月") + private BigDecimal m10Target; + + @ColumnWidth(20) + @ExcelProperty("11月") + private BigDecimal m11Target; + + @ColumnWidth(20) + @ExcelProperty("12月") + private BigDecimal m12Target; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyTargetMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyTargetMapper.java index d26c8c08c..792058043 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyTargetMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyTargetMapper.java @@ -27,11 +27,9 @@ package org.springblade.desk.energy.mapper; import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity; import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO; -import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import org.apache.ibatis.annotations.Param; + import java.util.List; import java.util.Map; @@ -43,29 +41,29 @@ import java.util.Map; */ public interface BsEnergyTargetMapper extends BaseMapper { - /** - * 自定义分页 - * - * @param page 分页参数 - * @param bsEnergyTarget 查询参数 - * @return List - */ - List selectBsEnergyTargetPage(IPage page, BsEnergyTargetVO bsEnergyTarget); - + /** + * 自定义分页 + * + * @param page 分页参数 + * @param bsEnergyTarget 查询参数 + * @return List + */ + List selectBsEnergyTargetPage(IPage page, BsEnergyTargetVO bsEnergyTarget); - /** - * 获取导出数据 - * - * @param queryWrapper 查询条件 - * @return List - */ - List exportBsEnergyTarget(@Param("ew") Wrapper queryWrapper); + /** + * 自定义查询 + * + * @param bsEnergyTarget + * @return + */ + List selectBsEnergyTargetList(BsEnergyTargetVO bsEnergyTarget); - /** - * 根据条件查询列表 - * @param conMap - * @return - */ - List listByMap(Map conMap); + /** + * 根据条件查询列表 + * + * @param conMap + * @return + */ + List listByMap(Map conMap); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyTargetMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyTargetMapper.xml index 88a1bd18c..99c757c6a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyTargetMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyTargetMapper.xml @@ -20,8 +20,24 @@ - + SELECT * FROM ( + SELECT + year, + TYPE, + MAX(CASE WHEN month = '01' THEN target ELSE NULL END ) AS m01Target, + MAX(CASE WHEN month = '02' THEN target ELSE NULL END ) AS m02Target, + MAX(CASE WHEN month = '03' THEN target ELSE NULL END ) AS m03Target, + MAX(CASE WHEN month = '04' THEN target ELSE NULL END ) AS m04Target, + MAX(CASE WHEN month = '05' THEN target ELSE NULL END ) AS m05Target, + MAX(CASE WHEN month = '06' THEN target ELSE NULL END ) AS m06Target, + MAX(CASE WHEN month = '07' THEN target ELSE NULL END ) AS m07Target, + MAX(CASE WHEN month = '08' THEN target ELSE NULL END ) AS m08Target, + MAX(CASE WHEN month = '09' THEN target ELSE NULL END ) AS m09Target, + MAX(CASE WHEN month = '10' THEN target ELSE NULL END ) AS m10Target, + MAX(CASE WHEN month = '11' THEN target ELSE NULL END ) AS m11Target, + MAX(CASE WHEN month = '12' THEN target ELSE NULL END ) AS m12Target + FROM BS_ENERGY_TARGET is_deleted = 0 @@ -30,13 +46,9 @@ and year = #{bsEnergyTarget.year} - - and quarter = #{bsEnergyTarget.quarter} - - - and status = #{bsEnergyTarget.status} - + GROUP BY year, type + ) ORDER BY ${bsEnergyTarget.orderByField} @@ -44,36 +56,40 @@ DESC - ORDER BY CREATE_TIME DESC + ORDER BY year DESC - - - + SELECT + year, + TYPE, + MAX(CASE WHEN month = '01' THEN target ELSE NULL END ) AS m01Target, + MAX(CASE WHEN month = '02' THEN target ELSE NULL END ) AS m02Target, + MAX(CASE WHEN month = '03' THEN target ELSE NULL END ) AS m03Target, + MAX(CASE WHEN month = '04' THEN target ELSE NULL END ) AS m04Target, + MAX(CASE WHEN month = '05' THEN target ELSE NULL END ) AS m05Target, + MAX(CASE WHEN month = '06' THEN target ELSE NULL END ) AS m06Target, + MAX(CASE WHEN month = '07' THEN target ELSE NULL END ) AS m07Target, + MAX(CASE WHEN month = '08' THEN target ELSE NULL END ) AS m08Target, + MAX(CASE WHEN month = '09' THEN target ELSE NULL END ) AS m09Target, + MAX(CASE WHEN month = '10' THEN target ELSE NULL END ) AS m10Target, + MAX(CASE WHEN month = '11' THEN target ELSE NULL END ) AS m11Target, + MAX(CASE WHEN month = '12' THEN target ELSE NULL END ) AS m12Target FROM BS_ENERGY_TARGET - - and YEAR = #{year} - - - and MONTH = #{month} - - - and QUARTER = #{quarter} - + is_deleted = 0 - and TYPE = #{type} + and type = #{type} - - and IS_DELETED = #{isDeleted} + + and year = #{year} + GROUP BY year, TYPE + ORDER BY year DESC diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/vo/BsEnergyTargetVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/vo/BsEnergyTargetVO.java index 39414a3b5..a1b7dd058 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/vo/BsEnergyTargetVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/vo/BsEnergyTargetVO.java @@ -25,10 +25,15 @@ */ package org.springblade.desk.energy.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity; import lombok.Data; import lombok.EqualsAndHashCode; + import java.io.Serial; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; /** * 能耗目标表 视图实体类 @@ -39,16 +44,102 @@ import java.io.Serial; @Data @EqualsAndHashCode(callSuper = true) public class BsEnergyTargetVO extends BsEnergyTargetEntity { - @Serial - private static final long serialVersionUID = 1L; - - /** - * 排序字段 - */ - private String orderByField; - /** - * true: 升序,false: 降序 - */ - private boolean isAsc; + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "1月") + private BigDecimal m01Target; + + @Schema(description = "2月") + private BigDecimal m02Target; + + @Schema(description = "3月") + private BigDecimal m03Target; + + @Schema(description = "4月") + private BigDecimal m04Target; + + @Schema(description = "5月") + private BigDecimal m05Target; + + @Schema(description = "6月") + private BigDecimal m06Target; + + @Schema(description = "7月") + private BigDecimal m07Target; + + @Schema(description = "8月") + private BigDecimal m08Target; + + @Schema(description = "9月") + private BigDecimal m09Target; + + @Schema(description = "10月") + private BigDecimal m10Target; + + @Schema(description = "11月") + private BigDecimal m11Target; + + @Schema(description = "12月") + private BigDecimal m12Target; + + /** + * 排序字段 + */ + private String orderByField; + /** + * true: 升序,false: 降序 + */ + private boolean isAsc; + + public List parseEntities() { + List list = new ArrayList<>(); + if (m01Target != null) { + list.add(buildEntity("01", m01Target)); + } + if (m02Target != null) { + list.add(buildEntity("02", m02Target)); + } + if (m03Target != null) { + list.add(buildEntity("03", m03Target)); + } + if (m04Target != null) { + list.add(buildEntity("04", m04Target)); + } + if (m05Target != null) { + list.add(buildEntity("05", m05Target)); + } + if (m06Target != null) { + list.add(buildEntity("06", m06Target)); + } + if (m07Target != null) { + list.add(buildEntity("07", m07Target)); + } + if (m08Target != null) { + list.add(buildEntity("08", m08Target)); + } + if (m09Target != null) { + list.add(buildEntity("09", m09Target)); + } + if (m10Target != null) { + list.add(buildEntity("10", m10Target)); + } + if (m11Target != null) { + list.add(buildEntity("11", m11Target)); + } + if (m12Target != null) { + list.add(buildEntity("12", m12Target)); + } + return list; + } + + private BsEnergyTargetEntity buildEntity(String month, BigDecimal target) { + BsEnergyTargetEntity entity = new BsEnergyTargetEntity(); + entity.setYear(super.getYear()); + entity.setMonth(month); + entity.setTarget(target); + entity.setType(super.getType()); + return entity; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyTargetService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyTargetService.java index 8247f41b3..d46a192f7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyTargetService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyTargetService.java @@ -25,16 +25,14 @@ */ package org.springblade.desk.energy.service; -import com.baomidou.mybatisplus.core.conditions.Wrapper; +import org.springblade.core.tool.api.R; import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity; import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO; -import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springframework.web.multipart.MultipartFile; -import java.math.BigDecimal; import java.util.List; -import java.util.Map; /** * 能耗目标表 服务类 @@ -52,36 +50,20 @@ public interface IBsEnergyTargetService extends BaseService selectBsEnergyTargetPage(IPage page, BsEnergyTargetVO bsEnergyTarget); - - /** - * 导出数据 - * - * @param queryWrapper 查询条件 - * @return List - */ - List exportBsEnergyTarget(Wrapper queryWrapper); - /** - * 根据月份获取用水目标 + * 自定义查询 * - * @param month 月份 - * @return 用水目标 - */ - BigDecimal getWaterTargetByMonth(String month); - - /** - * 根据月份获取用电目标 - * - * @param month 月份 - * @return 用电目标 + * @param bsEnergyTarget + * @return */ - BigDecimal getElectricTargetByMonth(String month); + List selectBsEnergyTargetList(BsEnergyTargetVO bsEnergyTarget); /** - * 根据条件查询列表 + * 数据导入 * - * @param conMap + * @param file + * @param type * @return */ - List listByMap(Map conMap); + R importExcelData(MultipartFile file, String type); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyTargetServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyTargetServiceImpl.java index b65eb467c..fb0c600b7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyTargetServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyTargetServiceImpl.java @@ -26,20 +26,24 @@ package org.springblade.desk.energy.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.springblade.desk.dashboard.utils.DateUtils; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.tool.api.R; +import org.springblade.desk.basic.util.ExcelExtUtil; +import org.springblade.desk.energy.excel.BsEnergyTargetExcel; import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity; import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO; -import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel; import org.springblade.desk.energy.mapper.BsEnergyTargetMapper; import org.springblade.desk.energy.service.IBsEnergyTargetService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.web.multipart.MultipartFile; -import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 能耗目标表 服务实现类 @@ -50,46 +54,49 @@ import java.util.Map; @Service public class BsEnergyTargetServiceImpl extends BaseServiceImpl implements IBsEnergyTargetService { - @Override - public IPage selectBsEnergyTargetPage(IPage page, BsEnergyTargetVO bsEnergyTarget) { - return page.setRecords(baseMapper.selectBsEnergyTargetPage(page, bsEnergyTarget)); - } + @Override + public IPage selectBsEnergyTargetPage(IPage page, BsEnergyTargetVO bsEnergyTarget) { + return page.setRecords(baseMapper.selectBsEnergyTargetPage(page, bsEnergyTarget)); + } + @Override + public List selectBsEnergyTargetList(BsEnergyTargetVO bsEnergyTarget) { + return baseMapper.selectBsEnergyTargetList(bsEnergyTarget); + } - @Override - public List exportBsEnergyTarget(Wrapper queryWrapper) { - List bsEnergyTargetList = baseMapper.exportBsEnergyTarget(queryWrapper); - //bsEnergyTargetList.forEach(bsEnergyTarget -> { - // bsEnergyTarget.setTypeName(DictCache.getValue(DictEnum.YES_NO, BsEnergyTarget.getType())); - //}); - return bsEnergyTargetList; - } + @Override + public R importExcelData(MultipartFile file, String type) { + R checkR = ExcelExtUtil.importExcelCheck(file); + if (checkR != null) { + return checkR; + } + List importList = ExcelUtil.read( + file, 0, 1, BsEnergyTargetExcel.class + ); + List voList = importList.stream() + .map(excel -> { + BsEnergyTargetVO vo = new BsEnergyTargetVO(); + BeanUtils.copyProperties(excel, vo); + vo.setType(type); + return vo; + }) + .collect(Collectors.toList()); + List years = importList.stream().map(BsEnergyTargetExcel::getYear).collect(Collectors.toList()); + List existList = this.list(new LambdaQueryWrapper().in(BsEnergyTargetEntity::getYear, years).eq(BsEnergyTargetEntity::getType, type)); + Map existMap = existList.stream().collect(Collectors.toMap(e -> e.getYear() + "-" + e.getMonth() + "-" + e.getType(), BsEnergyTargetEntity::getId, (oldValue, newValue) -> oldValue)); + List saves = new ArrayList<>(); + for (BsEnergyTargetVO bsEnergyTargetVO : voList) { + List bsEnergyTargetEntities = bsEnergyTargetVO.parseEntities(); + for (BsEnergyTargetEntity bsEnergyTarget : bsEnergyTargetEntities) { + String key = bsEnergyTarget.getYear() + "-" + bsEnergyTarget.getMonth() + "-" + bsEnergyTarget.getType(); + if (existMap.containsKey(key)) { + bsEnergyTarget.setId(existMap.get(key)); + } + } + saves.addAll(bsEnergyTargetEntities); + } + return R.status(this.saveOrUpdateBatch(saves)); + } - @Override - public BigDecimal getWaterTargetByMonth(String month) { - BsEnergyTargetEntity energyTargetEntity = this.getOne(new LambdaQueryWrapper() - .eq(BsEnergyTargetEntity::getMonth, month)); - if(energyTargetEntity != null){ - return energyTargetEntity.getTarget(); - } - return new BigDecimal(0); - } - @Override - public BigDecimal getElectricTargetByMonth(String month) { - String year = month.substring(0, 4); - int quarter = DateUtils.getQuarter(Integer.parseInt(month.substring(5, 7))); - BsEnergyTargetEntity energyTargetEntity = this.getOne(new LambdaQueryWrapper() - .eq(BsEnergyTargetEntity::getYear, year) - .eq(BsEnergyTargetEntity::getQuarter, quarter)); - if (energyTargetEntity != null) { - return energyTargetEntity.getTarget(); - } - return new BigDecimal(0); - } - - @Override - public List listByMap(Map conMap){ - return baseMapper.listByMap(conMap); - } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java index dcc2a1851..d23970155 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java @@ -2006,11 +2006,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl mwo.is_deleted = 0 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java index 31ed781d6..8d6869515 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java @@ -36,6 +36,8 @@ import org.springframework.transaction.annotation.Transactional; import java.text.DecimalFormat; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; @@ -348,7 +350,7 @@ public class MacToolUseServiceImpl extends BaseServiceImpl listByNoFinished() { - return this.list(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getFinished, 0).orderByAsc(MacToolUse::getMtnCode)); + return this.list(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getFinished, 0).ge(MacToolUse::getCreateTime, Date.from(LocalDateTime.now().minusDays(2).atZone(ZoneId.systemDefault()).toInstant())).orderByAsc(MacToolUse::getMtnCode)); } private Double setMaxHeat(Map eUMap, JSONObject jsonObject, Double heat) { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java index 276731934..f0683855a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java @@ -61,6 +61,7 @@ import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.Dict; import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.enums.DictEnum; +import org.springblade.wms.feign.WmsTaskClient; import org.springblade.wms.pojo.entity.StClassRequest; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -128,6 +129,9 @@ public class PdaSaveServiceImpl extends BaseServiceImpl inspectionItems = inspectionService.list(); for (DsProcessProjectVO project : projects) { + // 如果是耐蚀性检测,需要满足三个条件才允许生产对应的检测项目:1-工作订单备注包含HTBY,2-生产标识包含JHT,3-镀种含金或者Au + if ("耐蚀性检测".equals(project.getProjectName())) { + if (!yieldOrder.getYpMemo().contains("HTBY") || !yieldOrder.getProductIdent().contains("JHT") || + !(yieldOrder.getPlate().contains("金") || yieldOrder.getPlate().contains("Au") || yieldOrder.getPlate().contains("au"))) { + continue; + } + } workPlanItem = new WorkPlanItem(); workPlanItem.setWpId(workPlan.getId()); workPlanItem.setItemCode(project.getTrialNo()); @@ -2063,6 +2070,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl - AND to_date(#{query.inDateStart},'YYYY-MM-DD HH24:MI:SS'), = ]]> a.startdat + AND to_date(${query.inDateStart},'YYYY-MM-DD'), = ]]> a.startdat - AND to_date(#{query.inDateEnd},'YYYY-MM-DD HH24:MI:SS'), a.validdat + AND to_date(${query.inDateEnd},'YYYY-MM-DD'), a.validdat AND a.validflag IN diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java new file mode 100644 index 000000000..e2287665c --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java @@ -0,0 +1,234 @@ +package org.springblade.wms.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +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; +import org.springblade.core.secure.annotation.IsAdmin; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.wms.excel.StGraphiteMoldOutExcel; +import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO; +import org.springblade.wms.pojo.entity.StGraphiteMoldOut; +import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO; +import org.springblade.wms.pojo.vo.StStockInoutRecordVO; +import org.springblade.wms.service.IStGraphiteMoldOutService; +import org.springblade.wms.service.IStStockInoutRecordService; +import org.springblade.wms.wrapper.StGraphiteMoldOutWrapper; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOutController + * @description: 石墨模出库 控制器 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ + +@RestController +@AllArgsConstructor +@RequestMapping("/stGraphiteMoldOut") +@Tag(name = "石墨模出库", description = "石墨模出库接口") +public class StGraphiteMoldOutController extends BladeController { + + private final IStGraphiteMoldOutService stGraphiteMoldOutService; + private final IStStockInoutRecordService stStockInoutRecordService; + + /** + * 石墨模出库 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 1) + @ApiLog("石墨模出库 详情") + @Operation(summary = "详情", description = "传入stGraphiteMoldOut") + public R detail(StGraphiteMoldOut stGraphiteMoldOut) { + StGraphiteMoldOut detail = stGraphiteMoldOutService.getOne(Condition.getQueryWrapper(stGraphiteMoldOut)); + return R.data(StGraphiteMoldOutWrapper.build().entityVO(detail)); + } + + /** + * 石墨模出库 分页 + */ + @GetMapping("/list") + @ApiOperationSupport(order = 2) + @ApiLog("石墨模出库 分页") + @Operation(summary = "分页", description = "传入stGraphiteMoldOut") + public R> list(@Parameter(hidden = true) @RequestParam Map stGraphiteMoldOut, Query query) { + IPage pages = stGraphiteMoldOutService.page(Condition.getPage(query), Condition.getQueryWrapper(stGraphiteMoldOut, StGraphiteMoldOut.class)); + return R.data(StGraphiteMoldOutWrapper.build().pageVO(pages)); + } + + /** + * 石墨模出库 自定义分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 3) + @ApiLog("石墨模出库 自定义分页") + @Operation(summary = "分页", description = "传入stGraphiteMoldOut") + public R> page(StGraphiteMoldOutVO stGraphiteMoldOut, Query query) { + IPage pages = stGraphiteMoldOutService.selectStGraphiteMoldOutPage(Condition.getPage(query), stGraphiteMoldOut); + return R.data(pages); + } + + /** + * 石墨模出库 新增 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 4) + @ApiLog("石墨模出库 新增") + @Operation(summary = "新增", description = "传入stGraphiteMoldOut") + public R save(@Valid @RequestBody StGraphiteMoldOut stGraphiteMoldOut) { + return R.status(stGraphiteMoldOutService.save(stGraphiteMoldOut)); + } + + /** + * 石墨模出库 修改 + */ + @PostMapping("/update") + @ApiOperationSupport(order = 5) + @ApiLog("石墨模出库 修改") + @Operation(summary = "修改", description = "传入stGraphiteMoldOut") + public R update(@Valid @RequestBody StGraphiteMoldOut stGraphiteMoldOut) { + return R.status(stGraphiteMoldOutService.updateById(stGraphiteMoldOut)); + } + + /** + * 石墨模出库 新增或修改 + */ + @PostMapping("/submit") + @ApiOperationSupport(order = 6) + @ApiLog("石墨模出库 新增或修改") + @Operation(summary = "新增或修改", description = "传入stGraphiteMoldOut") + public R submit(@Valid @RequestBody StGraphiteMoldOut stGraphiteMoldOut) { + return R.status(stGraphiteMoldOutService.saveOrUpdate(stGraphiteMoldOut)); + } + + /** + * 石墨模出库 删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 7) + @ApiLog("石墨模出库 删除") + @Operation(summary = "逻辑删除", description = "传入ids") + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return R.status(stGraphiteMoldOutService.deleteLogic(Func.toLongList(ids))); + } + + /** + * 石墨模出库 生成出库单号 + */ + @GetMapping("/generateCode") + @ApiOperationSupport(order = 8) + @ApiLog("石墨模出库 生成出库单号") + @Operation(summary = "生成石墨模出库单号", description = "获取新单据号并返回空账单对象") + public R generateCode() { + // 1. 生成单号 + String sirCode = stStockInoutRecordService.generateCode(); + + // 2. 封装合表 VO + StStockInoutRecordVO vo = new StStockInoutRecordVO(); + vo.setSirCode(sirCode); + vo.setCreateUser(AuthUtil.getUserId()); + + return R.data(vo); + } + + /** + * 生成石墨模预出库单 + */ + @PostMapping("/generateOrder") + @ApiOperationSupport(order = 9) + @ApiLog("生成石墨模预出库单") + @Operation(summary = "生成石墨模预出库单", description = "按物料编号+规格等条件查库存,库存充足生成预出库单,不足返回指定提示") + public R> generatePreOutOrder( + @Parameter(description = "石墨模预出库信息", required = true) + @RequestBody StGraphiteMoldOutDTO dto + ) { + return R.data(stGraphiteMoldOutService.generatePreOutOrder(dto)); + } + + /** + * 批量生成石墨模预出库单 + */ + @PostMapping("/batchGenerateOrder") + @ApiOperationSupport(order = 10) + @ApiLog("批量生成石墨模预出库单") + @Operation(summary = "批量生成石墨模预出库单", description = "批量传入石墨模信息,逐条校验库存,成功生成预出库单,失败收集提示信息(一条失败不影响其他)") + public R> batchGeneratePreOutOrder( + @Parameter(description = "石墨模预出库信息集合", required = true) + @RequestBody List dtoList + ) { + Map result = stGraphiteMoldOutService.batchGeneratePreOutOrder(dtoList); + return R.data(result); + } + + /** + * 扫码查询/新增待出库数据 + */ + @GetMapping("/scanCard") + @ApiOperationSupport(order = 11) + @ApiLog("扫码查询/新增待出库数据") + @Operation(summary = "扫码处理石墨模出库", description = "传入流程卡号,查询/新增待出库数据") + public R> scanCard( + @Parameter(description = "流程卡号(扫码内容)", required = true) @RequestParam String cardNo) { + return R.data(stGraphiteMoldOutService.scanCardProcess(cardNo, AuthUtil.getUser())); + } + + /** + * 编辑出库数量后 提交确认出库 + */ + @PostMapping("/submitOutStock") + @ApiOperationSupport(order = 12) + @ApiLog("编辑出库数量后 提交确认出库") + @Operation(summary = "石墨模出库-提交确认出库", description = "填写出库数量后提交,写入出入库记录并扣减库存,变更为已出库状态") + public R submitOutStock(@RequestBody StGraphiteMoldOut stGraphiteMoldOut) { + BladeUser user = AuthUtil.getUser(); + StGraphiteMoldOut result = stGraphiteMoldOutService.submitOutStock(stGraphiteMoldOut, user); + return R.data(result); + } + + /** + * 编辑出库数量后 批量出库 + */ + @PostMapping("/batchSubmitOutStock") + @ApiOperationSupport(order = 13) + @ApiLog("编辑出库数量后 批量出库") + @Operation(summary = "石墨模出库-提交确认出库", description = "填写出库数量后提交,写入出入库记录并扣减库存,变更为已出库状态") + public R> batchSubmitOutStock(@RequestBody List paramList) { + BladeUser user = AuthUtil.getUser(); + List result = stGraphiteMoldOutService.batchSubmitOutStock(paramList, user); + return R.data(result); + } + + /** + * 导出数据 + */ + @IsAdmin + @GetMapping("/export-stGraphiteMoldOut") + @ApiOperationSupport(order = 14) + @ApiLog("导出数据") + @Operation(summary = "导出数据", description = "传入stGraphiteMoldOut") + public void exportStGraphiteMoldOut(@Parameter(hidden = true) @RequestParam Map stGraphiteMoldOut, BladeUser bladeUser, HttpServletResponse response) { + QueryWrapper queryWrapper = Condition.getQueryWrapper(stGraphiteMoldOut, StGraphiteMoldOut.class); + List list = stGraphiteMoldOutService.exportStGraphiteMoldOut(queryWrapper); + ExcelUtil.export(response, "石墨模出库数据" + DateUtil.time(), "石墨模出库数据表", list, StGraphiteMoldOutExcel.class); + } + +} diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/excel/StGraphiteMoldOutExcel.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/excel/StGraphiteMoldOutExcel.java new file mode 100644 index 000000000..69a60c470 --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/excel/StGraphiteMoldOutExcel.java @@ -0,0 +1,164 @@ +package org.springblade.wms.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOutExcel + * @description: 石墨模出库 Excel实体类 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ + +@Data +@ColumnWidth(25) +@HeadRowHeight(20) +@ContentRowHeight(18) +public class StGraphiteMoldOutExcel implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ColumnWidth(20) + @ExcelProperty("主键") + private Long id; + /** + * 租户ID + */ + @ColumnWidth(20) + @ExcelProperty("租户ID") + private String tenantId; + /** + * 是否已删除 + */ + @ColumnWidth(20) + @ExcelProperty("是否已删除") + private Long isDeleted; + /** + * 出库凭证信息 + */ + @ColumnWidth(20) + @ExcelProperty("出库凭证信息") + private Long sirId; + /** + * 车间订单号 + */ + @ColumnWidth(20) + @ExcelProperty("车间订单号") + private String woCode; + /** + * 生产单号 + */ + @ColumnWidth(20) + @ExcelProperty("生产单号") + private String yoCode; + /** + * 零件号 + */ + @ColumnWidth(20) + @ExcelProperty("零件号") + private String partCode; + /** + * 零件名称 + */ + @ColumnWidth(20) + @ExcelProperty("零件名称") + private String partName; + /** + * 批次号 + */ + @ColumnWidth(20) + @ExcelProperty("批次号") + private String piNo; + /** + * 流程卡号 + */ + @ColumnWidth(20) + @ExcelProperty("流程卡号") + private String cardNo; + /** + * 物料需求量 + */ + @ColumnWidth(20) + @ExcelProperty("物料需求量") + private Double needQuantity; + /** + * 已出库数量 + */ + @ColumnWidth(20) + @ExcelProperty("已出库数量") + private Double outedQuantity; + /** + * 状态 + */ + @ColumnWidth(20) + @ExcelProperty("状态") + private Long curStatus; + /** + * 出库时间 + */ + @ColumnWidth(20) + @ExcelProperty("出库时间") + private Date outTime; + /** + * 出库人 + */ + @ColumnWidth(20) + @ExcelProperty("出库人") + private Long outUser; + /** + * 物料ID + */ + @ColumnWidth(20) + @ExcelProperty("物料ID") + private Long goodsId; + /** + * 库位ID + */ + @ColumnWidth(20) + @ExcelProperty("库位ID") + private Long slId; + /** + * 库房ID + */ + @ColumnWidth(20) + @ExcelProperty("库房ID") + private Long shId; + /** + * 库存ID + */ + @ColumnWidth(20) + @ExcelProperty("库存ID") + private Long rlsId; + /** + * 出库单号 + */ + @ColumnWidth(20) + @ExcelProperty("出库单号") + private String outCode; + /** + * 备注 + */ + @ColumnWidth(20) + @ExcelProperty("备注") + private String memo; + /** + * 领料人ID + */ + @ColumnWidth(20) + @ExcelProperty("领料人ID") + private Long picker; + +} diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java index 01916a448..8466243d1 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.wms.service.IStBuyOrderService; import org.springblade.wms.service.IStGoodsExtService; +import org.springblade.wms.service.IStOtherReceiptRecordService; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @@ -29,6 +30,8 @@ public class WmsTaskClientImpl implements WmsTaskClient{ private final IStBuyOrderService stBuyOrderService; + private final IStOtherReceiptRecordService stOtherReceiptRecordService; + @Override public boolean executeGoodsStatusUpdate() { stGoodsExtService.executeGoodsStatusUpdate(); @@ -39,4 +42,9 @@ public class WmsTaskClientImpl implements WmsTaskClient{ public Long buyOrderApply(String goodsCode, Double buyQty, Long userId, Date buyDate, Long checkUserId, Date checkDate) throws Exception { return stBuyOrderService.buyOrderApplyFor(goodsCode, buyQty, userId, buyDate, checkUserId, checkDate); } + + @Override + public void saveSubOrderWarehousing(String goodsCode, String batchNo, Double quantity, Long shId, Long slId, Date date, Long userId) throws Exception { + stOtherReceiptRecordService.saveSubOrderWarehousing(goodsCode, batchNo, quantity, shId, slId, date, userId); + } } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.java index e8d218c3a..717e2b5fc 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.wms.excel.StGlassCakeOutExcel; @@ -53,5 +54,7 @@ public interface StGlassCakeOutMapper extends BaseMapper { YieldOrder getByYieldOrder(String yoCode); List getYieldOrderList(Long id, String yieldType); + + DsPartRelationEntity getPartQuota(String partCode, String goodsCode); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml index 1f9ca0823..12cff5949 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml @@ -225,4 +225,10 @@ AND YIELD_TYPE = #{yieldType} + + diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java index b7768eb0b..ad90261ae 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java @@ -43,5 +43,9 @@ public interface StGoodsExtMapper extends BaseMapper { IPage selectGoodsExtWithGoods(IPage page, @Param("ew") QueryWrapper queryWrapper); StGoodsExt getGoodsExt(Double invqty1j, Double planqty, Long goodsId); + + StGoodsExt selectWithAvgMonth(Long goodsId); + + Double getPlanQty(Long goodsId); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml index e4e87a68c..f5a0e96dd 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml @@ -118,5 +118,37 @@ SELECT * FROM ST_GOODS_EXT ${ew.customSqlSegment} + + + diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.java new file mode 100644 index 000000000..cc14e2d02 --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.java @@ -0,0 +1,52 @@ +package org.springblade.wms.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; +import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.produce.pojo.entity.WorkOrder; +import org.springblade.wms.excel.StGraphiteMoldOutExcel; +import org.springblade.wms.pojo.entity.StGraphiteMoldOut; +import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO; + +import java.util.List; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOutMapper + * @description: 石墨模出库 Mapper 接口 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ + +public interface StGraphiteMoldOutMapper extends BaseMapper { + + /** + * 自定义分页 + * + * @param page 分页参数 + * @param stGraphiteMoldOut 查询参数 + * @return List + */ + List selectStGraphiteMoldOutPage(IPage page, StGraphiteMoldOutVO stGraphiteMoldOut); + + /** + * 获取导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportStGraphiteMoldOut(@Param("ew") Wrapper queryWrapper); + + StGraphiteMoldOut getBySirId(Long sirId); + + WorkOrder getByWoCode(String cardNo); + + YieldOrder getByYoCode(String cardNo); + + YieldOrder getByYieldOrder(String yoCode); + + List getYieldOrderList(Long id, String yieldType); +} diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.xml new file mode 100644 index 000000000..d259f1ec9 --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGraphiteMoldOutMapper.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.java index c08316800..0cfce5f3e 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.java @@ -106,5 +106,9 @@ public interface StRealtimeStockMapper extends BaseMapper { List findStorehouseByGoodsCode(String goodsCode); StRealtimeStock getByGoodsCodeAndShIdAndSlId(String goodsCode, Long shId, Long slId); + +// Object[] queryByShIdAndSlId(String goodsCode, Double quantity, Long shId, Long slId); + + StRealtimeStock selectMaxUsableStockByMoldAttr(String goodsCode); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml index 371a82ce4..67ba2bda8 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml @@ -676,6 +676,20 @@ AND g.is_deleted = 0 + + diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGraphiteMoldOutService.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGraphiteMoldOutService.java new file mode 100644 index 000000000..64fcf136f --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGraphiteMoldOutService.java @@ -0,0 +1,51 @@ +package org.springblade.wms.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.secure.BladeUser; +import org.springblade.wms.excel.StGraphiteMoldOutExcel; +import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO; +import org.springblade.wms.pojo.entity.StGraphiteMoldOut; +import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO; + +import java.util.List; +import java.util.Map; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName IStGraphiteMoldOutService + * @description: 石墨模出库 服务类 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ +public interface IStGraphiteMoldOutService extends BaseService { + /** + * 自定义分页 + * + * @param page 分页参数 + * @param stGraphiteMoldOut 查询参数 + * @return IPage + */ + IPage selectStGraphiteMoldOutPage(IPage page, StGraphiteMoldOutVO stGraphiteMoldOut); + + + /** + * 导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportStGraphiteMoldOut(Wrapper queryWrapper); + + List scanCardProcess(String cardNo, BladeUser user); + + StGraphiteMoldOut submitOutStock(StGraphiteMoldOut stGraphiteMoldOut, BladeUser user); + + List generatePreOutOrder(StGraphiteMoldOutDTO dto); + + Map batchGeneratePreOutOrder(List dtoList); + + List batchSubmitOutStock(List paramList, BladeUser user); +} diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java index e1a8a6c85..15abf1792 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStOtherReceiptRecordService.java @@ -10,6 +10,7 @@ import org.springblade.wms.pojo.entity.StOtherReceiptRecord; import org.springblade.wms.pojo.entity.StStockInoutRecord; import org.springblade.wms.pojo.vo.StOtherReceiptRecordVO; +import java.util.Date; import java.util.List; /** @@ -45,5 +46,8 @@ public interface IStOtherReceiptRecordService extends BaseService { * @return */ StGoodStatisVO getGoodsByCode(String partCode); + +// Object[] queryByShIdAndSlId(String goodsCode, Double quantity, Long shId, Long slId); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java index 507f85c8a..4c4aaa096 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java @@ -10,6 +10,7 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; import org.springblade.desk.dashboard.feign.IPartClient; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.wms.excel.StGlassCakeOutExcel; import org.springblade.wms.mapper.StGlassCakeOutMapper; @@ -163,7 +164,8 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl public StGoods saveGoodsInfo(List prtnoList) throws Exception { StGoods goods = null; //查询物料信息 -// List pdmPartInfo = stHttpRequestService.getPdmPartInfo(prtnoList); - - List pdmPartInfo = new ArrayList<>(); - - StPdmPartDTO dto1 = new StPdmPartDTO(); - dto1.setPrtno("TEST-MAT-001"); - dto1.setReleaseno("V1.0"); - dto1.setDrwpartno("DWG-TEST-001"); - dto1.setPrtdesc("测试物料_环规"); - dto1.setMtlsgrt(7.85); - dto1.setPrttype("PART"); - dto1.setSource("自制"); - dto1.setMtlspcf("45#钢"); - dto1.setPrtum("PCS"); - dto1.setCavityno("1"); - dto1.setCplb("机械部件"); - dto1.setEcnno("ECN-TEST-001"); - dto1.setEnditem((short) 123); - dto1.setMtltmrk("45#钢"); - dto1.setPartLink("/pdm/part/TEST-MAT-001"); - dto1.setPriority("1"); - dto1.setPrtrevedit("Released"); - dto1.setPrtstd("GB/T 1234-2020"); - dto1.setPrtwt(0.5); - dto1.setRemark("测试物料"); - dto1.setTrademark("测试"); - dto1.setRcdchgdatd(new Date()); - - pdmPartInfo.add(dto1); + List pdmPartInfo = stHttpRequestService.getPdmPartInfo(prtnoList); log.debug("pdmPartInfo:{}", pdmPartInfo); if (CollectionUtils.isEmpty(pdmPartInfo)) { diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java new file mode 100644 index 000000000..988a70ca2 --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java @@ -0,0 +1,345 @@ +package org.springblade.wms.service.impl; + +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import jakarta.annotation.Resource; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.secure.BladeUser; +import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.wms.excel.StGraphiteMoldOutExcel; +import org.springblade.wms.mapper.StGraphiteMoldOutMapper; +import org.springblade.wms.mapper.StRealtimeStockMapper; +import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO; +import org.springblade.wms.pojo.entity.*; +import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO; +import org.springblade.wms.service.*; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOutServiceImpl + * @description: 石墨模出库 服务实现类 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ + +@Service +public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl implements IStGraphiteMoldOutService { + @Resource + StRealtimeStockMapper stRealtimeStockMapper; + @Resource + IStStockInoutRecordService stStockInoutRecordService; + @Resource + IStRealtimeStockService stRealtimeStockService; + @Resource + IStGoodsService stGoodsService; + @Resource + IStStorehouseService stStorehouseService; + @Resource + IStStorageLocationService stStorageLocationService; + + @Override + public IPage selectStGraphiteMoldOutPage(IPage page, StGraphiteMoldOutVO stGraphiteMoldOut) { + return page.setRecords(baseMapper.selectStGraphiteMoldOutPage(page, stGraphiteMoldOut)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List generatePreOutOrder(StGraphiteMoldOutDTO dto) { + if (dto == null) { + throw new ServiceException("石墨模信息不能为空,无法生成预出库单"); + } + Date now = new Date(); + + YieldOrder faYieldOrder = baseMapper.getByYoCode(dto.getCardNo()); + if (faYieldOrder == null) { + throw new RuntimeException("根据流程卡号【" + dto.getCardNo() + "】未查询到生产订单信息"); + } + + List preOutStockList = new ArrayList<>(); + + String goodsCode = faYieldOrder.getPartCode(); + Double requireQty = faYieldOrder.getYpQty(); + System.out.println("石墨模编码:" + goodsCode + ",总需求:" + requireQty); + + List candidateStockList = new ArrayList<>(); + double totalUsable = 0.0; + while (true) { + StRealtimeStock maxStock = stRealtimeStockMapper.selectMaxUsableStockByMoldAttr(goodsCode); + + if (maxStock == null) { + break; + } + + double occupyQty = Optional.ofNullable(maxStock.getOccupyQuantity()).orElse(0D); + double usableQty = maxStock.getQuantity() - occupyQty; + + if (usableQty <= 0) { + break; + } + + candidateStockList.add(maxStock); + totalUsable += usableQty; + + if (totalUsable >= requireQty) { + break; + } + } + + if (totalUsable < requireQty - 0.001) { + throw new ServiceException("石墨模【" + goodsCode + "】库存不足,无法生成!需求数量:" + requireQty + ",可用库存:" + totalUsable); + } + + double remainingQty = requireQty; + for (StRealtimeStock maxStock : candidateStockList) { + if (remainingQty <= 0.001) { + break; + } + + double occupyQty = Optional.ofNullable(maxStock.getOccupyQuantity()).orElse(0D); + double usableQty = maxStock.getQuantity() - occupyQty; + double actualTake = Math.min(usableQty, remainingQty); + + StGraphiteMoldOut preOutStock = new StGraphiteMoldOut(); + preOutStock.setYoCode(faYieldOrder.getYoCode()); + preOutStock.setCardNo(dto.getCardNo()); + + preOutStock.setOutCode(stStockInoutRecordService.generateCode()); + preOutStock.setNeedQuantity(requireQty); + preOutStock.setGoodsId(maxStock.getGoodsId()); + StGoods stGoods = stGoodsService.getById(maxStock.getGoodsId()); + preOutStock.setGoodsName(stGoods.getGoodsName()); + preOutStock.setGoodsCode(stGoods.getGoodsCode()); + preOutStock.setSlId(maxStock.getSlId()); + StStorageLocation location = stStorageLocationService.getById(maxStock.getSlId()); + preOutStock.setLocation(location.getLocation()); + preOutStock.setShId(maxStock.getShId()); + StStorehouse storehouse = stStorehouseService.getById(maxStock.getShId()); + preOutStock.setShName(storehouse.getShName()); + preOutStock.setRlsId(maxStock.getId()); + preOutStock.setPiNo(maxStock.getPiNo()); + + preOutStock.setCurStatus(0L); + preOutStock.setCreateTime(now); + preOutStock.setUpdateTime(now); + + preOutStockList.add(preOutStock); + System.out.println("石墨模[编码:" + goodsCode + "]库存充足,已构建预出库信息,库存ID:" + maxStock.getId()); + + double newOccupy = occupyQty + actualTake; + maxStock.setOccupyQuantity(newOccupy); + stRealtimeStockService.updateById(maxStock); + + StRealtimeStockLock lock = new StRealtimeStockLock(); + lock.setId(IdUtil.getSnowflake().nextId()); + lock.setRlsId(maxStock.getId()); + lock.setWoNo(preOutStock.getCardNo()); + lock.setOccupyQuantity(actualTake); + lock.setStatus(0); + stRealtimeStockMapper.insertStockLock(lock); + remainingQty -= actualTake; + } + System.out.println("石墨模[编码:" + goodsCode + "] 预出库全部完成!"); + + this.saveBatch(preOutStockList); + return preOutStockList; + } + + @Override + public Map batchGeneratePreOutOrder(List dtoList) { + Map resultMap = new HashMap<>(2); + List successList = new ArrayList<>(); + List failMsgList = new ArrayList<>(); + + if (CollectionUtils.isEmpty(dtoList)) { + failMsgList.add("批量生成失败:石墨模信息集合不能为空"); + resultMap.put("successList", successList); + resultMap.put("failMsgList", failMsgList); + return resultMap; + } + + for (int i = 0; i < dtoList.size(); i++) { + StGraphiteMoldOutDTO dto = dtoList.get(i); + try { + List preOutOrderList = this.generatePreOutOrder(dto); + for (StGraphiteMoldOut item : preOutOrderList) { + if (item != null) { + successList.add(item); + } + } + } catch (ServiceException e) { + failMsgList.add(String.format("第%s条:%s", i + 1, e.getMessage())); + } catch (Exception e) { + failMsgList.add(String.format("第%s条:生成失败,未知异常:%s", i + 1, e.getMessage())); + } + } + + resultMap.put("successList", successList); + resultMap.put("failMsgList", failMsgList); + return resultMap; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List scanCardProcess(String cardNo, BladeUser user) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("card_no", cardNo); + queryWrapper.eq("cur_status", 0L); + + List waitOutList = baseMapper.selectList(queryWrapper); + + if (!CollectionUtils.isEmpty(waitOutList)) { + for (StGraphiteMoldOut waitOut : waitOutList) { + StRealtimeStock stock = stRealtimeStockService.getById(waitOut.getRlsId()); + + if (stock != null) { + waitOut.setStockQty(stock.getQuantity() - stock.getOccupyQuantity()); + waitOut.setPiNo(stock.getPiNo()); + } + StGoods stGoods = stGoodsService.getById(waitOut.getGoodsId()); + waitOut.setGoodsCode(stGoods.getGoodsCode()); + waitOut.setGoodsName(stGoods.getGoodsName()); + StStorehouse storehouse = stStorehouseService.getById(waitOut.getShId()); + waitOut.setShName(storehouse.getShName()); + StStorageLocation location = stStorageLocationService.getById(waitOut.getSlId()); + waitOut.setLocation(location.getLocation()); + } + return waitOutList; + }else { + StGraphiteMoldOutDTO dto = new StGraphiteMoldOutDTO(); + dto.setCardNo(cardNo); + + List stGraphiteMoldOutList = this.generatePreOutOrder(dto); + if (!CollectionUtils.isEmpty(stGraphiteMoldOutList)) { + for (StGraphiteMoldOut waitOut : stGraphiteMoldOutList) { + StRealtimeStock stock = stRealtimeStockService.getById(waitOut.getRlsId()); + + if (stock != null) { + waitOut.setStockQty(stock.getQuantity() - stock.getOccupyQuantity()); + waitOut.setPiNo(stock.getPiNo()); + } + StGoods stGoods = stGoodsService.getById(waitOut.getGoodsId()); + waitOut.setGoodsCode(stGoods.getGoodsCode()); + waitOut.setGoodsName(stGoods.getGoodsName()); + StStorehouse storehouse = stStorehouseService.getById(waitOut.getShId()); + waitOut.setShName(storehouse.getShName()); + StStorageLocation location = stStorageLocationService.getById(waitOut.getSlId()); + waitOut.setLocation(location.getLocation()); + } + return stGraphiteMoldOutList; + } + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public StGraphiteMoldOut submitOutStock(StGraphiteMoldOut param, BladeUser user) { + List outList = new ArrayList<>(); + outList.add(param); + List resultList = this.batchSubmitOutStock(outList, user); + return resultList.isEmpty() ? null : resultList.get(0); + } + + @Transactional(rollbackFor = Exception.class) + public List batchSubmitOutStock(List paramList, BladeUser user) { + if (paramList == null || paramList.isEmpty()) { + throw new ServiceException("出库数据不能为空"); + } + Long userId = Long.valueOf(user.getUserId()); + Date nowDate = new Date(); + + List allInoutList = new ArrayList<>(); + List stockList = new ArrayList<>(); + List resultList = new ArrayList<>(); + + for (StGraphiteMoldOut param : paramList) { + if (param.getId() == null) { + throw new ServiceException("出库数据ID不能为空"); + } + if (param.getOutedQuantity() == null || param.getOutedQuantity() <= 0) { + throw new ServiceException("流程卡号【"+param.getCardNo()+"】请填写正确的出库数量,数量必须大于0"); + } + + StGraphiteMoldOut outEntity = this.getById(param.getId()); + if (outEntity == null) { + throw new ServiceException("主键ID【"+param.getId()+"】未查询到该待出库数据"); + } + if (outEntity.getCurStatus() != 0L) { + throw new ServiceException("流程卡号【"+outEntity.getCardNo()+"】非待出库状态,无法提交出库"); + } + + StRealtimeStock realtimeStock = stRealtimeStockService.getById(outEntity.getRlsId()); + if (realtimeStock != null) { + stockList.add(realtimeStock); + } + + if (param.getOutedQuantity() > realtimeStock.getQuantity()) { + throw new ServiceException("流程卡号【"+outEntity.getCardNo()+"】出库数量不能大于库存总数量,库存数量为:" + realtimeStock.getQuantity()); + } + + outEntity.setRlsId(param.getRlsId()); + outEntity.setGoodsId(param.getGoodsId()); + outEntity.setShId(param.getShId()); + outEntity.setSlId(param.getSlId()); + outEntity.setOutedQuantity(param.getOutedQuantity()); + outEntity.setOutUser(userId); + outEntity.setOutTime(nowDate); + outEntity.setCurStatus(1L); + outEntity.setUpdateUser(userId); + outEntity.setUpdateTime(nowDate); + outEntity.setPicker(param.getPicker()); + this.updateById(outEntity); + + StStockInoutRecord inoutRecord = new StStockInoutRecord(); + inoutRecord.setCheckNo(outEntity.getCardNo()); + inoutRecord.setSirCode(outEntity.getOutCode()); + inoutRecord.setSlId(outEntity.getSlId()); + inoutRecord.setRlsId(outEntity.getRlsId()); + inoutRecord.setShId(outEntity.getShId()); + inoutRecord.setGoodsId(outEntity.getGoodsId()); + inoutRecord.setPiNo(realtimeStock.getPiNo()); + inoutRecord.setStovePiNo(realtimeStock.getStovePiNo()); + inoutRecord.setQuantity(param.getOutedQuantity()); + inoutRecord.setUnitPrice(realtimeStock.getBalanceMoney()); + inoutRecord.setSirMoney(param.getOutedQuantity() * realtimeStock.getBalanceMoney()); + inoutRecord.setInOutType(StStockInoutRecord.OUT_TYPE); + + inoutRecord.setInOutSource(StStockInoutRecord.INOUT_SOURCE_GRAPHITE_MOLD_OUT); + inoutRecord.setInOutDate(nowDate); + + inoutRecord.setUserId(param.getPicker()); + inoutRecord.setCreateUser(userId); + inoutRecord.setCreateTime(nowDate); + inoutRecord.setUpdateUser(userId); + inoutRecord.setUpdateTime(nowDate); + + stStockInoutRecordService.save(inoutRecord); + allInoutList.add(inoutRecord); + + outEntity.setSirId(inoutRecord.getId()); + this.updateById(outEntity); + resultList.add(outEntity); + } + + if (!allInoutList.isEmpty() && !stockList.isEmpty()) { + stRealtimeStockService.reviseRealTimeStock(allInoutList, stockList, null); + } + + return resultList; + } + + @Override + public List exportStGraphiteMoldOut(Wrapper queryWrapper) { + List list = baseMapper.exportStGraphiteMoldOut(queryWrapper); + return list; + } +} diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java index 324654907..894cc75fc 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java @@ -7,13 +7,16 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.annotation.Resource; +import org.springblade.common.exception.BusinessException; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.desk.dashboard.feign.IPartClient; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.produce.pojo.entity.WorkOrder; +import org.springblade.system.feign.IUserClient; import org.springblade.wms.excel.StOtherReceiptRecordExcel; import org.springblade.wms.mapper.StOtherReceiptRecordMapper; import org.springblade.wms.pojo.dto.InitStockDTO; @@ -52,6 +55,8 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl inoutList = new ArrayList<>(); + StStockInoutRecord stockInoutRecord = new StStockInoutRecord(); + stockInoutRecord.setGoodsId(goods.getId()); + stockInoutRecord.setPiNo(batchNo); + stockInoutRecord.setQuantity(quantity); + stockInoutRecord.setShId(shId); + stockInoutRecord.setSlId(slId); + stockInoutRecord.setInOutDate(date); + stockInoutRecord.setCreateUser(userId); + inoutList.add(stockInoutRecord); + + otherReceiptRecord.setInoutList(inoutList); + + this.otherWarehousing(otherReceiptRecord, user); + } + @Override public List exportStOtherReceiptRecord(Wrapper queryWrapper) { List stOtherReceiptRecordList = baseMapper.exportStOtherReceiptRecord(queryWrapper); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java index 5edd0be9a..f80a26bb1 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java @@ -388,8 +388,8 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl= 0) { + String lockNo = StrUtil.isNotBlank(inout.getWoCode()) ? inout.getWoCode() : inout.getCardNo(); + if (StrUtil.isNotBlank(lockNo) && newOccupy >= 0) { db.setOccupyQuantity(newOccupy); - this.updateRealTimeLock(inout.getWoCode(), db.getId(), quantity); + this.updateRealTimeLock(lockNo, db.getId(), quantity); // NumberUtil.add( // BigDecimal.valueOf(newOccupy), // BigDecimal.valueOf(quantity) @@ -976,6 +1003,11 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl exportStRealtimeStock(Wrapper queryWrapper) { List stRealtimeStockList = baseMapper.exportStRealtimeStock(queryWrapper); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/wrapper/StGraphiteMoldOutWrapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/wrapper/StGraphiteMoldOutWrapper.java new file mode 100644 index 000000000..a11d31e9c --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/wrapper/StGraphiteMoldOutWrapper.java @@ -0,0 +1,36 @@ +package org.springblade.wms.wrapper; + +import org.springblade.core.mp.support.BaseEntityWrapper; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.wms.pojo.entity.StGraphiteMoldOut; +import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO; + +import java.util.Objects; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGraphiteMoldOutWrapper + * @description: 石墨模出库 包装类,返回视图层所需的字段 + * @autor: WuSiYu + * @create 2025-xx-xx xx:xx + **/ +public class StGraphiteMoldOutWrapper extends BaseEntityWrapper { + + public static StGraphiteMoldOutWrapper build() { + return new StGraphiteMoldOutWrapper(); + } + + @Override + public StGraphiteMoldOutVO entityVO(StGraphiteMoldOut stGraphiteMoldOut) { + StGraphiteMoldOutVO stGraphiteMoldOutVO = Objects.requireNonNull(BeanUtil.copyProperties(stGraphiteMoldOut, StGraphiteMoldOutVO.class)); + + //User createUser = UserCache.getUser(stGraphiteMoldOut.getCreateUser()); + //User updateUser = UserCache.getUser(stGraphiteMoldOut.getUpdateUser()); + //stGraphiteMoldOutVO.setCreateUserName(createUser.getName()); + //stGraphiteMoldOutVO.setUpdateUserName(updateUser.getName()); + + return stGraphiteMoldOutVO; + } + +}