From a47557adb5a23ad61527df8ddbbec6561e56da9b Mon Sep 17 00:00:00 2001 From: z Date: Thu, 13 Nov 2025 09:22:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=8D=95=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=B7=B2=E5=8F=91=E8=B4=A7=E9=A1=B9=E7=9B=AE=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/DeliverOrderSaveReqVO.java | 9 + .../DeliverOrderLogController.java | 95 ++ .../vo/DeliverOrderLogPageReqVO.java | 42 + .../vo/DeliverOrderLogRespVO.java | 48 + .../vo/DeliverOrderLogSaveReqVO.java | 38 + .../admin/orderys/vo/OrderYsRespVO.java | 2 + .../PlanSubDetailController.java | 10 + .../plansubdetail/vo/PlanSubDetailRespVO.java | 1 + .../vo/PlanSubDetailSaveReqVO.java | 3 +- .../admin/plantask/vo/PlanTaskPageReqVO.java | 1 + .../vo/PurchaseOrderMakeRespVO.java | 66 +- .../admin/storage/StorageController.java | 64 +- .../storagelog/StorageLogController.java | 4 + .../storagelog/vo/StorageLogPageReqVO.java | 3 +- .../deliverorderlog/DeliverOrderLogDO.java | 57 + .../dal/dataobject/orderys/OrderYsDO.java | 4 + .../plansubdetail/PlanSubDetailDO.java | 4 + .../DeliverOrderLogMapper.java | 32 + .../heli/dal/mysql/orderys/OrderYsMapper.java | 1 + .../plansubdetail/PlanSubDetailMapper.java | 1 + .../dal/mysql/plantask/PlanTaskMapper.java | 16 +- .../mysql/storagelog/StorageLogMapper.java | 6 +- .../deliverorder/DeliverOrderServiceImpl.java | 17 +- .../DeliverOrderLogService.java | 55 + .../DeliverOrderLogServiceImpl.java | 74 + .../plansubdetail/PlanSubDetailService.java | 4 + .../PlanSubDetailServiceImpl.java | 206 ++- .../processbom/ProcessBomServiceImpl.java | 1 + .../PurchaseOrderNoServiceImpl.java | 2 +- .../heli/service/storage/StorageService.java | 5 + .../service/storage/StorageServiceImpl.java | 347 +++++ .../StorageInventoryServiceImpl.java | 63 +- .../service/storagelog/StorageLogService.java | 3 + .../storagelog/StorageLogServiceImpl.java | 7 + .../deliverorderlog/DeliverOrderLogMapper.xml | 12 + .../src/api/heli/plansubdetail/index.ts | 6 + .../src/views/heli/deliverorder/detail.vue | 66 +- .../src/views/heli/interrupt/index.vue | 161 ++- .../src/views/heli/orderys/index.vue | 18 +- .../src/views/heli/plantask/index.vue | 9 +- .../heli/processdesign/printFinalDialog.vue | 2 +- .../views/heli/purchaseorderno/received.vue | 8 - .../views/heli/storage/StorageOutAudit.vue | 1231 +++++++++++++++++ .../src/views/heli/storage/StorageOutsp.vue | 2 - .../src/views/heli/storage/index.vue | 84 +- .../src/views/heli/storage/outdex.vue | 71 +- .../src/views/heli/storage/outdexsp.vue | 2 +- .../src/views/heli/storagelog/index.vue | 22 +- 48 files changed, 2838 insertions(+), 147 deletions(-) create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/DeliverOrderLogController.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogPageReqVO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogRespVO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogSaveReqVO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/deliverorderlog/DeliverOrderLogDO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/deliverorderlog/DeliverOrderLogMapper.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogService.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogServiceImpl.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/deliverorderlog/DeliverOrderLogMapper.xml create mode 100644 mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutAudit.vue diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java index 52e3aa13..e0c3ed19 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java @@ -1,5 +1,7 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -95,4 +97,11 @@ public class DeliverOrderSaveReqVO { @Valid @Schema(description = "发货订单子项列表") private List deliverOrderOtherSubs; + /** + * 最后更新时间 + */ + @Schema(description = "最后更新时间") + private LocalDateTime updateTime; + @Schema(description = "最后更新人") + private Integer updater; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/DeliverOrderLogController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/DeliverOrderLogController.java new file mode 100644 index 00000000..e9caf612 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/DeliverOrderLogController.java @@ -0,0 +1,95 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; +import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; + +import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; + +import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; +import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorderlog.DeliverOrderLogDO; +import com.chanko.yunxi.mes.module.heli.service.deliverorderlog.DeliverOrderLogService; + +@Tag(name = "管理后台 - 发货单日志") +@RestController +@RequestMapping("/heli/deliver-order-log") +@Validated +public class DeliverOrderLogController { + + @Resource + private DeliverOrderLogService deliverOrderLogService; + + @PostMapping("/create") + @Operation(summary = "创建发货单日志") + @PreAuthorize("@ss.hasPermission('heli:deliver-order-log:create')") + public CommonResult createDeliverOrderLog(@Valid @RequestBody DeliverOrderLogSaveReqVO createReqVO) { + return success(deliverOrderLogService.createDeliverOrderLog(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新发货单日志") + @PreAuthorize("@ss.hasPermission('heli:deliver-order-log:update')") + public CommonResult updateDeliverOrderLog(@Valid @RequestBody DeliverOrderLogSaveReqVO updateReqVO) { + deliverOrderLogService.updateDeliverOrderLog(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除发货单日志") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('heli:deliver-order-log:delete')") + public CommonResult deleteDeliverOrderLog(@RequestParam("id") Long id) { + deliverOrderLogService.deleteDeliverOrderLog(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得发货单日志") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('heli:deliver-order-log:query')") + public CommonResult getDeliverOrderLog(@RequestParam("id") Long id) { + DeliverOrderLogDO deliverOrderLog = deliverOrderLogService.getDeliverOrderLog(id); + return success(BeanUtils.toBean(deliverOrderLog, DeliverOrderLogRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得发货单日志分页") + @PreAuthorize("@ss.hasPermission('heli:deliver-order-log:query')") + public CommonResult> getDeliverOrderLogPage(@Valid DeliverOrderLogPageReqVO pageReqVO) { + PageResult pageResult = deliverOrderLogService.getDeliverOrderLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DeliverOrderLogRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出发货单日志 Excel") + @PreAuthorize("@ss.hasPermission('heli:deliver-order-log:export')") + @OperateLog(type = EXPORT) + public void exportDeliverOrderLogExcel(@Valid DeliverOrderLogPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = deliverOrderLogService.getDeliverOrderLogPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "发货单日志.xls", "数据", DeliverOrderLogRespVO.class, + BeanUtils.toBean(list, DeliverOrderLogRespVO.class)); + } + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogPageReqVO.java new file mode 100644 index 00000000..dfe0cf08 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogPageReqVO.java @@ -0,0 +1,42 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 发货单日志分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class DeliverOrderLogPageReqVO extends PageParam { + + @Schema(description = "发货单编号") + private String code; + + @Schema(description = "发货单id", example = "4655") + private String deliverOrderId; + + @Schema(description = "修改人id", example = "21838") + private Integer reviseId; + + @Schema(description = "当前操作人id", example = "18718") + private Integer oldReviseId; + + @Schema(description = "修改时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] reviseDate; + + @Schema(description = "当前操作修改时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] oldReviseDate; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogRespVO.java new file mode 100644 index 00000000..de10b237 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogRespVO.java @@ -0,0 +1,48 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 发货单日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class DeliverOrderLogRespVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "8362") + @ExcelProperty("自增字段,唯一") + private Long id; + + @Schema(description = "发货单编号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("发货单编号") + private String code; + + @Schema(description = "发货单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4655") + @ExcelProperty("发货单id") + private String deliverOrderId; + + @Schema(description = "修改人id", example = "21838") + @ExcelProperty("修改人id") + private Integer reviseId; + + @Schema(description = "当前操作人id", example = "18718") + @ExcelProperty("当前操作人id") + private Integer oldReviseId; + + @Schema(description = "修改时间") + @ExcelProperty("修改时间") + private LocalDateTime reviseDate; + + @Schema(description = "当前操作修改时间") + @ExcelProperty("当前操作修改时间") + private LocalDateTime oldReviseDate; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogSaveReqVO.java new file mode 100644 index 00000000..31917089 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorderlog/vo/DeliverOrderLogSaveReqVO.java @@ -0,0 +1,38 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 发货单日志新增/修改 Request VO") +@Data +public class DeliverOrderLogSaveReqVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "8362") + private Long id; + + @Schema(description = "发货单编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "发货单编号不能为空") + private String code; + + @Schema(description = "发货单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4655") + @NotEmpty(message = "发货单id不能为空") + private String deliverOrderId; + + @Schema(description = "修改人id", example = "21838") + private Integer reviseId; + + @Schema(description = "当前操作人id", example = "18718") + private Integer oldReviseId; + + @Schema(description = "修改时间") + private LocalDateTime reviseDate; + + @Schema(description = "当前操作修改时间") + private LocalDateTime oldReviseDate; + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java index 95ef7de7..d025a6f0 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java @@ -71,4 +71,6 @@ public class OrderYsRespVO { private Integer deliveryStatus; private Long projectId; private String projectCode; + private LocalDateTime projectStartTime; + private String contractNo; } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java index 788e4ca4..011ad361 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java @@ -112,6 +112,16 @@ public class PlanSubDetailController { public CommonResult modification(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { return planSubDetailService.modification(updateReqVO); } + @PostMapping("/Intersection") + @Operation(summary = "重叠判断是否有交集") + public CommonResult Intersection(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { + return planSubDetailService.Intersection(updateReqVO); + } + @PostMapping("/overlap") + @Operation(summary = "重叠") + public CommonResult overlap(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { + return planSubDetailService.overlap(updateReqVO); + } @GetMapping("/pageAddList") @Operation(summary = "获得生产计划子项目设计时间明细分页") @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:query')") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailRespVO.java index 47a9afb6..508ef4a0 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailRespVO.java @@ -82,4 +82,5 @@ public class PlanSubDetailRespVO { private String projectSubName ; private String projectNameSim ; private LocalDateTime time ; + private String isOverLab ; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailSaveReqVO.java index b4cb85d3..38d73cac 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailSaveReqVO.java @@ -60,5 +60,6 @@ public class PlanSubDetailSaveReqVO { private String isAdd; @Schema(description = "是否新增") private List list; - + @Schema(description = "是否重叠") + private String isOverLab; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/vo/PlanTaskPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/vo/PlanTaskPageReqVO.java index b06c1025..2a0554bd 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/vo/PlanTaskPageReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plantask/vo/PlanTaskPageReqVO.java @@ -64,5 +64,6 @@ public class PlanTaskPageReqVO extends PageParam { @Schema(description = "子项目名称") private String projectSubName; + private String flag; } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeRespVO.java index ce282d1b..5a5f7c70 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeRespVO.java @@ -20,28 +20,52 @@ public class PurchaseOrderMakeRespVO { @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "29741") // @ExcelProperty("自增字段,唯一") private Long id; - @ExcelProperty("送审日期") + @ExcelProperty("编号") + private String code; + @ExcelProperty("日期") private String time; - @ExcelProperty("子项目编码") + @Schema(description = "客户简称") + @ExcelProperty("客户名") + private String brief; + @ExcelProperty("模具名") private String projectSubCode; - @ExcelProperty("图号") + @ExcelProperty("件号") private String blueprintNo; @ExcelProperty("零件名称") private String boomName; - @ExcelProperty("规格") - private String boomSpec; @ExcelProperty("材料") private String composition; - @ExcelProperty("工序") - private String procedureName; - @ExcelProperty("需求数量") - private String boomAmount; - @ExcelProperty("采购数量") + @ExcelProperty("规格") + private String boomSpec; + @ExcelProperty("数量") private String purchaseAmount; - @ExcelProperty("供应商") - private String supplierName; @ExcelProperty("单价") private String unitPrice; + @Schema(description = "暂估价金额", example = "13902") + @ExcelProperty("总价格") + private BigDecimal estimatedPrice; + @ExcelProperty("要求日期") + private String requir; + @ExcelProperty("剩余流程") + private String residue; + @ExcelProperty("开始日期") + private String startTime; + @ExcelProperty("结束日期") + private String endTime; + @ExcelProperty(value = "到厂", converter = DictConvert.class) + @DictFormat("heli_receiving_status") + private String effectiveReceivingStatus; + @ExcelProperty("外协厂家") + private String supplierName; + @ExcelProperty("备注") + private String procedureName; + @ExcelProperty("字数") + private String words; + + @ExcelProperty("责任人") + private String duEmpName; +// @ExcelProperty("需求数量") + private String boomAmount; @Schema(description = "采购单号", requiredMode = Schema.RequiredMode.REQUIRED) @@ -67,16 +91,10 @@ public class PurchaseOrderMakeRespVO { // @ExcelProperty("税率") private Integer taxRatio; - @Schema(description = "暂估价金额", example = "13902") - @ExcelProperty("总价") - private BigDecimal estimatedPrice; - @ExcelProperty("责任人") - private String duEmpName; - @ExcelProperty(value = "收货状态", converter = DictConvert.class) - @DictFormat("heli_receiving_status") - private String effectiveReceivingStatus; - @ExcelProperty("要求到货日期") - private String requir; + + + + @Schema(description = "实际价金额", example = "14735") // @ExcelProperty("实际价金额") private BigDecimal actualPrice; @@ -121,9 +139,7 @@ public class PurchaseOrderMakeRespVO { // @ExcelProperty("客户id") private Long customerId; - @Schema(description = "客户简称") - @ExcelProperty("客户简称") - private String brief; + @Schema(description = "项目名称", example = "芋艿") // @ExcelProperty("项目名称") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java index 49769030..f52cd407 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java @@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.storage; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO; +import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO; @@ -21,6 +22,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper; import com.chanko.yunxi.mes.module.heli.service.storagelog.StorageLogService; import com.chanko.yunxi.mes.module.heli.service.storagemat.StorageMatService; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -33,8 +35,10 @@ import io.swagger.v3.oas.annotations.Operation; import javax.validation.constraints.*; import javax.validation.*; import javax.servlet.http.*; +import java.io.OutputStream; import java.math.BigDecimal; import java.math.RoundingMode; +import java.net.URLEncoder; import java.time.LocalDateTime; import java.util.*; import java.io.IOException; @@ -147,7 +151,7 @@ public class StorageController { } else if(updateReqVO.getStatus().equals(2) && updateReqVO.getStockType().equals(2)){ targetDo.setOutbound(updateReqVO.getOutbound()); targetDo.setOutboundTime(currTime); - }else{ + }else if(updateReqVO.getStatus().equals(3)){ targetDo.setCancel(updateReqVO.getCancel()); targetDo.setCancelTime(currTime); } @@ -182,13 +186,15 @@ public class StorageController { storageInventoryDO.setShortName(materialDO.getShortName()); storageInventoryDO.setBoomCode(materialDO.getCode()); } - storageInventoryDO.setPrice(storageMatDO.getPrice()); + storageInventoryDO.setPrice(ObjectUtil.isNotEmpty(storageMatDO.getPrice())?storageMatDO.getPrice():BigDecimal.ZERO); }else { BigDecimal totalNumber = storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty()); BigDecimal inventoryPrice = storageInventoryDO.getYardAmount().multiply(storageInventoryDO.getPrice()); - BigDecimal inPrice = storageMatDO.getStorageOkQty().multiply(storageMatDO.getPrice()); - BigDecimal sumPrice = inventoryPrice.add(inPrice); - storageInventoryDO.setPrice(sumPrice.divide(totalNumber,2, RoundingMode.HALF_UP)); + if (ObjectUtil.isNotEmpty(storageMatDO.getPrice())){ + BigDecimal inPrice = storageMatDO.getStorageOkQty().multiply(storageMatDO.getPrice()); + BigDecimal sumPrice = inventoryPrice.add(inPrice); + storageInventoryDO.setPrice(sumPrice.divide(totalNumber,2, RoundingMode.HALF_UP)); + } storageInventoryDO.setYardAmount(totalNumber); } storageInventoryMapper.insertOrUpdate(storageInventoryDO); @@ -260,7 +266,7 @@ public class StorageController { } else if(updateReqVO.getStatus().equals(2) && updateReqVO.getStockType().equals(2)){ targetDo.setOutbound(updateReqVO.getOutbound()); targetDo.setOutboundTime(currTime); - }else{ + }else if(updateReqVO.getStatus().equals(3)){ targetDo.setCancel(updateReqVO.getCancel()); targetDo.setCancelTime(currTime); } @@ -357,4 +363,50 @@ public class StorageController { return success(storageService.isPrint(id)); } + @GetMapping("/export-excel-new") + @Operation(summary = "导出入库单 Excel") + @OperateLog(type = EXPORT) + public void exportStorageExcelNew(StoragePageReqVO storagePageReqVO, HttpServletResponse response) throws IOException { + Workbook workbook = storageService.exportExcelNew(storagePageReqVO.getStockNo()); + // 2. 设置响应头 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + + // 3. 处理文件名,防止中文乱码 + String fileName = URLEncoder.encode("入库单", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + // 4. 将Excel写入响应输出流 + try (OutputStream outputStream = response.getOutputStream()) { + workbook.write(outputStream); + } finally { + // 5. 关闭工作簿,释放资源 + if (workbook != null) { + workbook.close(); + } + } + } + @GetMapping("/export-excel-out") + @Operation(summary = "导出库存信息 Excel") + @OperateLog(type = EXPORT) + public void exportStorageExcelOut(StoragePageReqVO storagePageReqVO, HttpServletResponse response) throws IOException { + Workbook workbook = storageService.exportExcelOut(storagePageReqVO.getStockNo()); + // 2. 设置响应头 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + + // 3. 处理文件名,防止中文乱码 + String fileName = URLEncoder.encode("出库单", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + // 4. 将Excel写入响应输出流 + try (OutputStream outputStream = response.getOutputStream()) { + workbook.write(outputStream); + } finally { + // 5. 关闭工作簿,释放资源 + if (workbook != null) { + workbook.close(); + } + } + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java index e9497c7a..2cc2beaa 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java @@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.storagelog; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -14,7 +15,9 @@ import io.swagger.v3.oas.annotations.Operation; import javax.validation.constraints.*; import javax.validation.*; import javax.servlet.http.*; +import java.io.OutputStream; import java.math.BigDecimal; +import java.net.URLEncoder; import java.util.*; import java.io.IOException; @@ -175,4 +178,5 @@ public class StorageLogController { PageResult pageResult = storageLogService.getSupplementPage(pageReqVO); return success(pageResult); } + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogPageReqVO.java index d421e4dd..2a2a1bdd 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogPageReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogPageReqVO.java @@ -50,6 +50,7 @@ public class StorageLogPageReqVO extends PageParam { private Long pnId; @Schema(description = "库位") private Long headerId; - + @Schema(description = "单据编号") + private String codeNo; } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/deliverorderlog/DeliverOrderLogDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/deliverorderlog/DeliverOrderLogDO.java new file mode 100644 index 00000000..fed4fb27 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/deliverorderlog/DeliverOrderLogDO.java @@ -0,0 +1,57 @@ +package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorderlog; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; + +/** + * 发货单日志 DO + * + * @author 管理员 + */ +@TableName("project_deliver_order_log") +@KeySequence("project_deliver_order_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeliverOrderLogDO extends BaseDO { + + /** + * 自增字段,唯一 + */ + @TableId + private Long id; + /** + * 发货单编号 + */ + private String code; + /** + * 发货单id + */ + private String deliverOrderId; + /** + * 修改人id + */ + private Integer reviseId; + /** + * 当前操作人id + */ + private Integer oldReviseId; + /** + * 修改时间 + */ + private LocalDateTime reviseDate; + /** + * 当前操作修改时间 + */ + private LocalDateTime oldReviseDate; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java index 5d193be0..c7ac15a3 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java @@ -67,6 +67,10 @@ public class OrderYsDO extends BaseDO { */ private String rem; @TableField(exist = false) + private LocalDateTime projectStartTime; + @TableField(exist = false) + private String contractNo; + @TableField(exist = false) private BigDecimal amount; @TableField(exist = false) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java index 73701b52..bc7cb3a9 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java @@ -85,6 +85,10 @@ public class PlanSubDetailDO extends BaseDO { * 子项目名称,唯一 */ private String isCha; + /** + * 是否重叠 + */ + private String isOverLab; @TableField(exist = false) private Integer flag; private Long projectPlanSubId; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/deliverorderlog/DeliverOrderLogMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/deliverorderlog/DeliverOrderLogMapper.java new file mode 100644 index 00000000..91431bc6 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/deliverorderlog/DeliverOrderLogMapper.java @@ -0,0 +1,32 @@ +package com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorderlog; + +import java.util.*; + +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorderlog.DeliverOrderLogDO; +import org.apache.ibatis.annotations.Mapper; +import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog.vo.*; + +/** + * 发货单日志 Mapper + * + * @author 管理员 + */ +@Mapper +public interface DeliverOrderLogMapper extends BaseMapperX { + + default PageResult selectPage(DeliverOrderLogPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(DeliverOrderLogDO::getCode, reqVO.getCode()) + .eqIfPresent(DeliverOrderLogDO::getDeliverOrderId, reqVO.getDeliverOrderId()) + .eqIfPresent(DeliverOrderLogDO::getReviseId, reqVO.getReviseId()) + .eqIfPresent(DeliverOrderLogDO::getOldReviseId, reqVO.getOldReviseId()) + .betweenIfPresent(DeliverOrderLogDO::getReviseDate, reqVO.getReviseDate()) + .betweenIfPresent(DeliverOrderLogDO::getOldReviseDate, reqVO.getOldReviseDate()) + .betweenIfPresent(DeliverOrderLogDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(DeliverOrderLogDO::getId)); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java index bbf0b8c6..dfddddce 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java @@ -36,6 +36,7 @@ public interface OrderYsMapper extends BaseMapperX { .select("sum(i.amount) as amount") .select("p.delivery_status as deliveryStatus") .select("p.id as projectId","p.code as projectCode") + .select("p.project_start_time as projectStartTime","p.contract_no as contractNo") .leftJoin( "finance_invoice i ON i.order_code = t.code AND i.deleted=0 and i.tenant_id=2 and i.business_type = 'FINANCE_MAKE_INVOICE' AND i.status !='3'") .leftJoin(ProjectOrderDO.class,"p", ProjectOrderDO::getCode, OrderYsDO::getCode) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansubdetail/PlanSubDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansubdetail/PlanSubDetailMapper.java index 399b3785..81d56161 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansubdetail/PlanSubDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansubdetail/PlanSubDetailMapper.java @@ -70,6 +70,7 @@ public interface PlanSubDetailMapper extends BaseMapperX { .leftJoin(PlanSubDO.class,"psub",PlanSubDO::getId,PlanSubDetailDO::getProjectPlanSubId) .leftJoin(AdminUserDO.class,"ad",AdminUserDO::getId,PlanSubDetailDO::getTwoDimOwner) .in(PlanSubDetailDO::getTwoDimOwner,ownerList) + .eq(PlanSubDetailDO::getIsOverLab,"N") .in(PlanSubDetailDO::getIsOverProcess,0,2); return selectList(query); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantask/PlanTaskMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantask/PlanTaskMapper.java index d3412c6f..0c8f4452 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantask/PlanTaskMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantask/PlanTaskMapper.java @@ -53,16 +53,18 @@ public interface PlanTaskMapper extends BaseMapperX { .like(!StringUtils.isEmpty(reqVO.getProjectSubCode()), "ps.project_sub_code", reqVO.getProjectSubCode()) .like(!StringUtils.isEmpty(reqVO.getProjectSubName()), "po.name", reqVO.getProjectSubName()); if (ObjectUtil.isNotEmpty(reqVO.getStatus())){ - if (reqVO.getStatus() == 4){ - query.eq(ProjectOrderDO::getDeliveryStatus, 3); - }else { +// if (reqVO.getStatus() == 4){ +// query.eq(ProjectOrderDO::getDeliveryStatus, 3); +// }else { query.eq(PlanTaskDO::getStatus, reqVO.getStatus()); - } +// } } - if (ObjectUtil.isEmpty(reqVO.getStatus())){ - query.ne(ProjectOrderDO::getDeliveryStatus, 3); +// if (ObjectUtil.isEmpty(reqVO.getStatus())){ +// query.ne(ProjectOrderDO::getDeliveryStatus, 3); +// } + if (ObjectUtil.isNotEmpty(reqVO.getFlag())&&"false".equals(reqVO.getFlag())){ + query.ne(ProjectOrderDO::getDeliveryStatus,3); } - return selectPage(reqVO, query); // return selectPage(reqVO, new LambdaQueryWrapperX() diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogMapper.java index 1d008b7a..3cee8e32 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogMapper.java @@ -30,7 +30,8 @@ public interface StorageLogMapper extends BaseMapperX { query.selectAll(StorageLogDO.class) .select( "mat.name as matName","mat.code as matCode","mat.unit as matUnit","wh.wh_name as whName","rg.rg_name as rgName","pn.pn_name as pnName") - .leftJoin(StorageDO.class, "st", StorageDO::getId, StorageLogDO::getStockId) + .select("mat.spec as matSpec") +// .leftJoin(StorageDO.class, "st", StorageDO::getId, StorageLogDO::getStockId) .leftJoin(MaterialDO.class,"mat", MaterialDO::getId,StorageLogDO::getMatId) .leftJoin(WarehouseDO.class,"wh", WarehouseDO::getId,StorageLogDO::getWhId) .leftJoin(RgDO.class,"rg", RgDO::getId,StorageLogDO::getRgId) @@ -41,6 +42,9 @@ public interface StorageLogMapper extends BaseMapperX { query .eq(reqVO.getStockType() != null,StorageLogDO::getStockType, reqVO.getStockType()) .like(!StringUtils.isEmpty(reqVO.getMatName()), MaterialDO::getName, reqVO.getMatName()) + .like(!StringUtils.isEmpty(reqVO.getCodeNo()), StorageLogDO::getCodeNo, reqVO.getCodeNo()) + .like(!StringUtils.isEmpty(reqVO.getMatSpec()), MaterialDO::getSpec, reqVO.getMatSpec()) + .eq(!ObjectUtil.isEmpty(reqVO.getWhId()), StorageLogDO::getWhId, reqVO.getWhId()); return selectPage(reqVO,query); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java index 8b813332..6f1b09a2 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java @@ -11,6 +11,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.Deliver import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorderlog.DeliverOrderLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; @@ -20,6 +21,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageI import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderSubMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorderlog.DeliverOrderLogMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper; @@ -83,6 +85,8 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { private MaterialMapper materialMapper; @Resource private AdminUserMapper adminUserMapper; + @Resource + private DeliverOrderLogMapper deliverOrderLogMapper; @Override @@ -143,7 +147,18 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { // if(!oldDO.canOperate(operateTypeEnum)){ // throw exception(INVALID_OPERATE); // } - +// if (!(updateReqVO.getUpdateTime().compareTo(oldDO.getUpdateTime()) == 0)){ +// DeliverOrderLogDO deliverOrderLogDO = new DeliverOrderLogDO(); +// deliverOrderLogDO.builder() +// .code(oldDO.getCode()) +// .deliverOrderId(String.valueOf(oldDO.getId())) +// .reviseId(Integer.valueOf(oldDO.getUpdater())) +// .oldReviseId(updateReqVO.getUpdater()) +// .reviseDate(oldDO.getUpdateTime()) +// .oldReviseDate(updateReqVO.getUpdateTime()); +// deliverOrderLogMapper.insert(deliverOrderLogDO); +// throw new RuntimeException("当前数据已更新,请退出重新进入"); +// } // 更新 DeliverOrderDO updateObj = BeanUtils.toBean(updateReqVO, DeliverOrderDO.class); updateObj.setDeliverStatus(DeliverOrderStatusEnum.valueOf(updateReqVO.getActive()).getCode()); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogService.java new file mode 100644 index 00000000..3f76c132 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogService.java @@ -0,0 +1,55 @@ +package com.chanko.yunxi.mes.module.heli.service.deliverorderlog; + +import java.util.*; +import javax.validation.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorderlog.DeliverOrderLogDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; + +/** + * 发货单日志 Service 接口 + * + * @author 管理员 + */ +public interface DeliverOrderLogService { + + /** + * 创建发货单日志 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDeliverOrderLog(@Valid DeliverOrderLogSaveReqVO createReqVO); + + /** + * 更新发货单日志 + * + * @param updateReqVO 更新信息 + */ + void updateDeliverOrderLog(@Valid DeliverOrderLogSaveReqVO updateReqVO); + + /** + * 删除发货单日志 + * + * @param id 编号 + */ + void deleteDeliverOrderLog(Long id); + + /** + * 获得发货单日志 + * + * @param id 编号 + * @return 发货单日志 + */ + DeliverOrderLogDO getDeliverOrderLog(Long id); + + /** + * 获得发货单日志分页 + * + * @param pageReqVO 分页查询 + * @return 发货单日志分页 + */ + PageResult getDeliverOrderLogPage(DeliverOrderLogPageReqVO pageReqVO); + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogServiceImpl.java new file mode 100644 index 00000000..581043e9 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorderlog/DeliverOrderLogServiceImpl.java @@ -0,0 +1,74 @@ +package com.chanko.yunxi.mes.module.heli.service.deliverorderlog; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorderlog.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorderlog.DeliverOrderLogDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; + +import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorderlog.DeliverOrderLogMapper; + +import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; + +/** + * 发货单日志 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class DeliverOrderLogServiceImpl implements DeliverOrderLogService { + + @Resource + private DeliverOrderLogMapper deliverOrderLogMapper; + + @Override + public Long createDeliverOrderLog(DeliverOrderLogSaveReqVO createReqVO) { + // 插入 + DeliverOrderLogDO deliverOrderLog = BeanUtils.toBean(createReqVO, DeliverOrderLogDO.class); + deliverOrderLogMapper.insert(deliverOrderLog); + // 返回 + return deliverOrderLog.getId(); + } + + @Override + public void updateDeliverOrderLog(DeliverOrderLogSaveReqVO updateReqVO) { + // 校验存在 + validateDeliverOrderLogExists(updateReqVO.getId()); + // 更新 + DeliverOrderLogDO updateObj = BeanUtils.toBean(updateReqVO, DeliverOrderLogDO.class); + deliverOrderLogMapper.updateById(updateObj); + } + + @Override + public void deleteDeliverOrderLog(Long id) { + // 校验存在 + validateDeliverOrderLogExists(id); + // 删除 + deliverOrderLogMapper.deleteById(id); + } + + private void validateDeliverOrderLogExists(Long id) { + if (deliverOrderLogMapper.selectById(id) == null) { +// throw exception(DELIVER_ORDER_LOG_NOT_EXISTS); + } + } + + @Override + public DeliverOrderLogDO getDeliverOrderLog(Long id) { + return deliverOrderLogMapper.selectById(id); + } + + @Override + public PageResult getDeliverOrderLogPage(DeliverOrderLogPageReqVO pageReqVO) { + return deliverOrderLogMapper.selectPage(pageReqVO); + } + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java index 42b6713e..4b2c24a5 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java @@ -64,4 +64,8 @@ public interface PlanSubDetailService { CommonResult modification(PlanSubDetailSaveReqVO updateReqVO); CommonResult operate(PlanSubDetailSaveReqVO updateReqVO); CommonResult insertWork(PlanSubDetailSaveReqVO updateReqVO); + + CommonResult Intersection(PlanSubDetailSaveReqVO updateReqVO); + + CommonResult overlap(PlanSubDetailSaveReqVO updateReqVO); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java index 32624705..1705aef2 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java @@ -98,6 +98,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { wrapper.eq(PlanSubDetailDO::getProjectSubId,planSubDetailDO.getProjectSubId()); wrapper.eq(PlanSubDetailDO::getSubType,planSubDetailDO.getSubType()); +// wrapper.eq(PlanSubDetailDO::getTwoDimOwner,planSubDetailDO.getTwoDimOwner()); // wrapper.gt(PlanSubDetailDO::getSeqNo,planSubDetailDO.getSeqNo()); //查所有的 List planSubDetailList = planSubDetailMapper.selectList(wrapper); @@ -179,6 +180,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { wrapper.eq(PlanSubDetailDO::getProjectSubId,planSubDetailDO.getProjectSubId()); wrapper.eq(PlanSubDetailDO::getSubType,planSubDetailDO.getSubType()); wrapper.gt(PlanSubDetailDO::getSeqNo,planSubDetailDO.getSeqNo()); +// wrapper.eq(PlanSubDetailDO::getTwoDimOwner,pageReqVO.getTwoDimOwner()); if (planSubDetailMapper.selectCount(wrapper)>0) { planSubDetailDO.setFlag(0); }else { @@ -307,6 +309,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { queryWrapper.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); queryWrapper.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); queryWrapper.eq(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); //注释原因,这样只考虑这个类型的了 + queryWrapper.eq(PlanSubDetailDO::getIsOverLab,"N"); if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ queryWrapper.ne(PlanSubDetailDO::getId,updateReqVO.getId()); } @@ -355,11 +358,25 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { lambdaQueryWrapper.in(PlanSubDetailDO::getIsOverProcess,0,2); lambdaQueryWrapper.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); lambdaQueryWrapper.ge(PlanSubDetailDO::getTwoDimDate,updateReqVO.getStartTwoDimDate()); + lambdaQueryWrapper.eq(PlanSubDetailDO::getIsOverLab,"N"); lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getStartTwoDimDate); -// if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ -// lambdaQueryWrapper.ne(PlanSubDetailDO::getId,updateReqVO.getId()); -// } + if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ + lambdaQueryWrapper.ne(PlanSubDetailDO::getId,updateReqVO.getId()); + } List list = planSubDetailMapper.selectList(lambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(list)){ + for (int i = 0; i < list.size()-1; i++) { + LocalDateTime reqStart = list.get(i).getStartTwoDimDate(); + LocalDateTime reqEnd = list.get(i).getTwoDimDate(); + LocalDateTime existStart = list.get(i+1).getStartTwoDimDate(); + LocalDateTime existEnd = list.get(i+1).getTwoDimDate(); + // 判断当前条开始日期与结束日期是否跟下一条有交集 + boolean hasOverlap = !(reqEnd.compareTo(existStart) < 0) && !(reqStart.compareTo(existEnd) > 0); + if (hasOverlap) { + return CommonResult.error(400,"当前开始日期的后续计划日期存在交集,不允许操作"); + } + } + } List noSelfList = new ArrayList<>(); for (PlanSubDetailDO planSubDetailDO : list) { if (!planSubDetailDO.getId().equals(updateReqVO.getId())){ @@ -377,7 +394,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { } } } - if (change || ObjectUtil.isEmpty(noSelfList) ||(noSelfList.get(0).getStartTwoDimDate().compareTo(updateReqVO.getTwoDimDate()) > 0 )){ + if (change || ObjectUtil.isEmpty(noSelfList) ||(noSelfList.get(0).getStartTwoDimDate().compareTo(updateReqVO.getTwoDimDate()) > 0 ) || "Y".equals(updateReqVO.getIsOverLab())){ List newList = new ArrayList<>(); newList.addAll(list); if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ @@ -404,13 +421,14 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { planSubDetailDO.setSeqNo(1L); planSubDetailDO.setDesignNum(updateReqVO.getDesignNum()); planSubDetailDO.setCode(updateReqVO.getCode()); + planSubDetailDO.setIsOverLab(updateReqVO.getIsOverLab()); newList.add(planSubDetailDO); // newList.sort(Comparator.comparing(PlanSubDetailDO::getStartTwoDimDate, Comparator.nullsLast(Comparator.naturalOrder()))); planSubDetailMapper.insertOrUpdateBatch(newList); LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); lambdaQueryWrapper1.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); lambdaQueryWrapper1.ge(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); - lambdaQueryWrapper1.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); +// lambdaQueryWrapper1.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); lambdaQueryWrapper1.orderByAsc(PlanSubDetailDO::getStartTwoDimDate); List planSubDetailDOS1 = planSubDetailMapper.selectList(lambdaQueryWrapper1); Map> collect = planSubDetailDOS1.stream().collect(Collectors.groupingBy(PlanSubDetailDO::getProjectSubId)); @@ -591,6 +609,9 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { } } } + if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ + deleteId.add(updateReqVO.getId()); + } // Map> collect1 = list.stream().collect(Collectors.groupingBy(PlanSubDetailDO::getProjectSubId)); // collect1.forEach((id,detailList) -> { // Map> collect2 = detailList.stream().collect(Collectors.groupingBy(PlanSubDetailDO::getSubType)); @@ -1557,6 +1578,181 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { updateReqVO.setList(sortedList); return CommonResult.success(updateReqVO); } + + @Override + public CommonResult Intersection(PlanSubDetailSaveReqVO updateReqVO) { +// if (ObjectUtil.isNotEmpty(updateReqVO.getIsAdd())&&"1".equals(updateReqVO.getIsAdd())){ +// LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); +// wrapper1.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); +// wrapper1.eq(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); +// wrapper1.eq(PlanSubDetailDO::getIsOverLab,"N"); +// List planSubDetailDOS1 = planSubDetailMapper.selectList(wrapper1); +// for (PlanSubDetailDO planSubDetailDO : planSubDetailDOS1) { +// LocalDateTime reqStart = updateReqVO.getStartTwoDimDate(); +// LocalDateTime reqEnd = updateReqVO.getTwoDimDate(); +// LocalDateTime existStart = planSubDetailDO.getStartTwoDimDate(); +// LocalDateTime existEnd = planSubDetailDO.getTwoDimDate(); +// // 判断请求时间段是否与已有时间段有重叠 +// boolean hasOverlap = !(reqEnd.compareTo(existStart) < 0) && !(reqStart.compareTo(existEnd) > 0); +// if (hasOverlap) { +// return CommonResult.success(true); +// } +// } +// } + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); + wrapper1.eq(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); + List planSubDetailDOS1 = planSubDetailMapper.selectList(wrapper1); + for (PlanSubDetailDO planSubDetailDO : planSubDetailDOS1) { + LocalDateTime reqStart = updateReqVO.getStartTwoDimDate(); + LocalDateTime reqEnd = updateReqVO.getTwoDimDate(); + LocalDateTime existStart = planSubDetailDO.getStartTwoDimDate(); + LocalDateTime existEnd = planSubDetailDO.getTwoDimDate(); + // 判断请求时间段是否与已有时间段有重叠 + boolean hasOverlap = !(reqEnd.compareTo(existStart) < 0) && !(reqStart.compareTo(existEnd) > 0); + if (hasOverlap) { + return CommonResult.error(400,"当前子项目,当前设计类型时间存在交集,请确认!"); + } + } + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(PlanSubDetailDO::getIsOverProcess,0,2); + lambdaQueryWrapper.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); + lambdaQueryWrapper.ge(PlanSubDetailDO::getTwoDimDate,updateReqVO.getStartTwoDimDate()); + lambdaQueryWrapper.eq(PlanSubDetailDO::getIsOverLab,"N"); + lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getStartTwoDimDate); +// if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ +// lambdaQueryWrapper.ne(PlanSubDetailDO::getId,updateReqVO.getId()); +// } + List list = planSubDetailMapper.selectList(lambdaQueryWrapper); + List noSelfList = new ArrayList<>(); + for (PlanSubDetailDO planSubDetailDO : list) { + if (!planSubDetailDO.getId().equals(updateReqVO.getId())){ + noSelfList.add(planSubDetailDO); + } + } + boolean change = false; + if (CollUtil.isNotEmpty(list)){ + if (list.size() == 1){ + PlanSubDetailDO planSubDetailDO = list.get(0); + if (planSubDetailDO.getId().equals(updateReqVO.getId())){ + if (updateReqVO.getStartTwoDimDate().compareTo(planSubDetailDO.getStartTwoDimDate()) == 0 || updateReqVO.getTwoDimDate().compareTo(planSubDetailDO.getTwoDimDate()) == 0){ + change = true; + } + } + } + } + if (change || ObjectUtil.isEmpty(noSelfList) ||(noSelfList.get(0).getStartTwoDimDate().compareTo(updateReqVO.getTwoDimDate()) > 0 )){ + + }else { + return CommonResult.success(true); + } + return CommonResult.success(false); + } + + @Override + public CommonResult overlap(PlanSubDetailSaveReqVO updateReqVO) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(PlanSubDetailDO::getIsOverProcess,0,2); + lambdaQueryWrapper.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); + lambdaQueryWrapper.ge(PlanSubDetailDO::getTwoDimDate,updateReqVO.getStartTwoDimDate()); + lambdaQueryWrapper.eq(PlanSubDetailDO::getIsOverLab,"N"); + lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getStartTwoDimDate); +// if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ +// lambdaQueryWrapper.ne(PlanSubDetailDO::getId,updateReqVO.getId()); +// } + List list = planSubDetailMapper.selectList(lambdaQueryWrapper); + + List newList = new ArrayList<>(); + newList.addAll(list); + if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ + newList.clear(); + planSubDetailMapper.delete(PlanSubDetailDO::getId,updateReqVO.getId()); + for (PlanSubDetailDO planSubDetailDO : list) { + if (!planSubDetailDO.getId().equals(updateReqVO.getId())){ + newList.add(planSubDetailDO); + } + } + } + PlanSubDetailDO planSubDetailDO = new PlanSubDetailDO(); + planSubDetailDO.setProjectPlanId(updateReqVO.getProjectPlanId()); + planSubDetailDO.setProjectId(updateReqVO.getProjectId()); + planSubDetailDO.setProjectSubId(updateReqVO.getProjectSubId()); + planSubDetailDO.setProjectSubCode(updateReqVO.getProjectSubCode()); + planSubDetailDO.setTwoDimDate(updateReqVO.getTwoDimDate()); + planSubDetailDO.setTwoDimOwner(updateReqVO.getTwoDimOwner()); + planSubDetailDO.setStartTwoDimDate(updateReqVO.getStartTwoDimDate()); + planSubDetailDO.setSubType(updateReqVO.getSubType()); + planSubDetailDO.setName(updateReqVO.getName()); + planSubDetailDO.setProjectPlanSubId(updateReqVO.getProjectPlanSubId()); + planSubDetailDO.setIsOverProcess(0); + planSubDetailDO.setSeqNo(1L); + planSubDetailDO.setDesignNum(updateReqVO.getDesignNum()); + planSubDetailDO.setCode(updateReqVO.getCode()); + planSubDetailDO.setIsOverLab("Y"); + newList.add(planSubDetailDO); + // newList.sort(Comparator.comparing(PlanSubDetailDO::getStartTwoDimDate, Comparator.nullsLast(Comparator.naturalOrder()))); + planSubDetailMapper.insertOrUpdateBatch(newList); + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); + lambdaQueryWrapper1.ge(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); + lambdaQueryWrapper1.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); + lambdaQueryWrapper1.orderByAsc(PlanSubDetailDO::getStartTwoDimDate); + List planSubDetailDOS1 = planSubDetailMapper.selectList(lambdaQueryWrapper1); + Map> collect = planSubDetailDOS1.stream().collect(Collectors.groupingBy(PlanSubDetailDO::getProjectSubId)); + collect.forEach((id,detailList) -> { + Map> collect2 = detailList.stream().collect(Collectors.groupingBy(PlanSubDetailDO::getSubType)); + collect2.forEach((type,list2) ->{ + int i = 1; + for (PlanSubDetailDO planSubDetailDO1 : list2) { + planSubDetailDO1.setSeqNo(Long.valueOf(i++)); + } + }); + }); + planSubDetailMapper.updateBatch(planSubDetailDOS1); + for (Map.Entry> entry : collect.entrySet()) { + Long subId = entry.getKey(); + List subList = entry.getValue(); + //再根据设计类型来 + Map> collect1 = subList.stream().collect(Collectors.groupingBy(PlanSubDetailDO::getSubType)); + for (Map.Entry> entry1 : collect1.entrySet()) { + String type = entry1.getKey(); + List subTypeList = entry1.getValue(); + List sortedList = subTypeList.stream() + .sorted(Comparator.comparing(PlanSubDetailDO::getSeqNo).reversed()) + .collect(Collectors.toList()); + Long num = 0L; + for (PlanSubDetailDO planSubDetailDO1 : sortedList) { + Long designNum = planSubDetailDO1.getDesignNum(); + num += designNum; + } + LambdaUpdateWrapper lambdaUpdateWrapper1 = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper1.eq(PlanSubDO::getProjectSubId,subId); + LocalDateTime startTwoDimDate = sortedList.get(subTypeList.size()-1).getStartTwoDimDate(); + LocalDateTime twoDimDate = sortedList.get(0).getTwoDimDate(); + //取最大值就是第一个 + if ("BLUEPRINT_WORKBLANK".equals(type)){ + lambdaUpdateWrapper1.set(PlanSubDO::getStartBlankDate,startTwoDimDate); + lambdaUpdateWrapper1.set(PlanSubDO::getBlankDate,twoDimDate); + lambdaUpdateWrapper1.set(PlanSubDO::getBlankOwner,sortedList.get(0).getTwoDimOwner()); + lambdaUpdateWrapper1.set(PlanSubDO::getBlankNum,num); + }else if ("BLUEPRINT_2D".equals(type)){ + lambdaUpdateWrapper1.set(PlanSubDO::getStartTwoDimDate,startTwoDimDate); + lambdaUpdateWrapper1.set(PlanSubDO::getTwoDimDate,twoDimDate); + lambdaUpdateWrapper1.set(PlanSubDO::getTwoDimOwner,sortedList.get(0).getTwoDimOwner()); + lambdaUpdateWrapper1.set(PlanSubDO::getTwoDimNum,num); + }else { + lambdaUpdateWrapper1.set(PlanSubDO::getStartThreeDimDate,startTwoDimDate); + lambdaUpdateWrapper1.set(PlanSubDO::getThreeDimDate,twoDimDate); + lambdaUpdateWrapper1.set(PlanSubDO::getThreeDimOwner,sortedList.get(0).getTwoDimOwner()); + lambdaUpdateWrapper1.set(PlanSubDO::getThreeDimNum,num); + } + planSubMapper.update(lambdaUpdateWrapper1); + } + return CommonResult.success(true); + } + return CommonResult.success(false); + } + public Integer getSearchRlTs(LocalDateTime startDateTime) { List shopCalendarDOS =shopCalendarMapper.getSearchRlTL(startDateTime); int a = shopCalendarDOS.size(); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java index 2df5237b..a66b3be5 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java @@ -782,6 +782,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { ShenheDO shenheDO = shenheDOS.get(0); updateObj.setShenheUser(shenheDO.getShenheUser()); }else{ + } } if(operateTypeEnum == OperateTypeEnum.AUDIT){ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseorderno/PurchaseOrderNoServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseorderno/PurchaseOrderNoServiceImpl.java index 2b1e35bb..61eb2ca1 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseorderno/PurchaseOrderNoServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseorderno/PurchaseOrderNoServiceImpl.java @@ -305,7 +305,7 @@ public class PurchaseOrderNoServiceImpl implements PurchaseOrderNoService { public CommonResult isPrint(Long id) { PurchaseOrderNoDO purchaseOrderNoDO = purchaseOrderNoMapper.selectById(id); if (ObjectUtil.isNotEmpty(purchaseOrderNoDO)){ - AdminUserDO user = adminUserService.getUser(getLoginUser().getId()); + AdminUserDO user = adminUserService.getUser(Long.valueOf(purchaseOrderNoDO.getCreator())); if (ObjectUtil.isNotEmpty(user)){ purchaseOrderNoDO.setUsername(user.getNickname()); purchaseOrderNoDO.setUserMobile(user.getMobile()); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java index efe93dbd..a887a8a4 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java @@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import org.apache.poi.ss.usermodel.Workbook; /** * 入/出库 Service 接口 @@ -78,4 +79,8 @@ public interface StorageService { CommonResult procurementAndStorage(StorageSaveReqVO createReqVO); StorageDO isPrint(Long id); + + Workbook exportExcelNew(String stockNo); + + Workbook exportExcelOut(String stockNo); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java index b733110c..2a3a22cb 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java @@ -16,6 +16,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestock.OutsourceStockDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestockboom.OutsourceStockBoomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestockmaterial.OutsourceStockMaterialDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; @@ -23,35 +24,50 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageI import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.composition.CompositionMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.master.MasterMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestock.OutsourceStockMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestockboom.OutsourceStockBoomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestockmaterial.OutsourceStockMaterialMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.pn.PnMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorder.PurchaseOrderMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.warehouse.WarehouseMapper; import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.CodeEnum; import com.chanko.yunxi.mes.module.heli.service.master.MasterService; import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService; import com.chanko.yunxi.mes.module.heli.service.storagelog.StorageLogService; +import com.chanko.yunxi.mes.module.heli.service.warehouse.WarehouseServiceImpl; +import com.chanko.yunxi.mes.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; +import com.chanko.yunxi.mes.module.system.dal.mysql.dict.DictDataMapper; import com.chanko.yunxi.mes.module.system.service.user.AdminUserService; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.data.redis.hash.ObjectHashMapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.io.FileInputStream; +import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; + import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; @@ -110,6 +126,12 @@ public class StorageServiceImpl implements StorageService { private AdminUserService adminUserService; @Resource private StorageLogMapper storageLogMapper; + @Resource + private WarehouseMapper warehouseMapper; + @Resource + private DictDataMapper dictDataMapper; + @Resource + private PnMapper pnMapper; @Resource private StorageLogService storageLogService; @@ -619,4 +641,329 @@ private StorageLogService storageLogService; return storageDO; } + @Override + public Workbook exportExcelNew(String stockNo) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StorageDO::getStockNo,stockNo); + wrapper.eq(StorageDO::getStockType,1); + StorageDO storageDO = storageMapper.selectOne(wrapper); + Workbook workbook = null; + if (ObjectUtil.isNotEmpty(storageDO)){ + try { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StorageMatDO::getStockId,storageDO.getId()); + List storageMatDOS = storageMatMapper.selectList(queryWrapper); + //获取单位字典 + HashMap unitDictData = getUnitDictData(); + InputStream inputStream = new FileInputStream("D:\\MES-HELI\\File\\入库单.xlsx"); + workbook = new XSSFWorkbook(inputStream); + //第一个sheet + Sheet sheet = workbook.getSheetAt(0); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 设置单元格样式(启用自动换行) + CellStyle style = workbook.createCellStyle(); + style.setWrapText(true); // 关键:启用自动换行 + // 设置水平和垂直居中 + style.setAlignment(HorizontalAlignment.LEFT); + style.setVerticalAlignment(VerticalAlignment.CENTER); + // 创建字体对象 + Font font = workbook.createFont(); + font.setFontName("宋体"); // 设置字体为宋体 + font.setFontHeightInPoints((short) 11); // 设置字号为11磅 + font.setBold(true); // 设置加粗 + // 将字体应用到样式 + style.setFont(font); + //第四行 + Row row3 = sheet.getRow(3); + //流水号 + Cell cellB4 = row3.createCell(1); + cellB4.setCellStyle(style); + cellB4.setCellValue(storageDO.getStockNo()); + //业务日期 + Cell cellE4 =row3.createCell(4); + cellE4.setCellStyle(style); + String formattedDate = storageDO.getCreateTime().format(formatter); + cellE4.setCellValue(formattedDate); + //仓库 + Cell celH4 = row3.createCell(7); + celH4.setCellStyle(style); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(WarehouseDO::getId,storageDO.getWhId()); + lambdaQueryWrapper.eq(WarehouseDO::getWhStatus,1); + WarehouseDO warehouseDO = warehouseMapper.selectOne(lambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(warehouseDO)){ + celH4.setCellValue(warehouseDO.getWhName()); + } + //第六行 + Row row5 = sheet.getRow(5); + Cell cellH6 = row5.createCell(7); + + cellH6.setCellStyle(style); + cellH6.setCellValue(storageDO.getHeaderNo()); + //第七行 + Row row6 = sheet.getRow(6); + Cell cellH7 = row6.createCell(7); + cellH7.setCellStyle(style); + AdminUserDO user = adminUserService.getUser(Long.valueOf(storageDO.getCreator())); + if (ObjectUtil.isNotEmpty(user)){ + cellH7.setCellValue(user.getNickname()); + } + //第九行 + Row row8 = sheet.getRow(8); + Cell cellH9 = row8.createCell(1); + cellH9.setCellStyle(style); + cellH9.setCellValue(storageDO.getDescription()); + int rowIndex = 11; + Map materialMap= new HashMap<>(); + Map PnDOMap = new HashMap<>(); + //拿到入库明细所有物料id + List collect = storageMatDOS.stream().map(StorageMatDO::getMatId).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(collect)){ + LambdaQueryWrapper doLambdaQueryWrapper = new LambdaQueryWrapper<>(); + doLambdaQueryWrapper.in(MaterialDO::getId,collect); + List materialDOList = materialMapper.selectList(doLambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(materialDOList)){ + //将物料集合转换成Map + materialMap = materialDOList.stream().collect(Collectors.toMap(MaterialDO::getId, material -> material)); + } + } + + //拿到入库明细所有库位 + List collect1 = storageMatDOS.stream().map(StorageMatDO::getPnId).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(collect1)){ + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.in(PnDO::getId,collect1); + List productLineDOList = pnMapper.selectList(lambdaQueryWrapper1); + if (ObjectUtil.isNotEmpty(productLineDOList)){ + //将库位集合转换成Map + PnDOMap = productLineDOList.stream().collect(Collectors.toMap(PnDO::getId, pnDO -> pnDO)); + } + } + for (int i = 0; i < storageMatDOS.size(); i++) { + Row newRow = sheet.createRow(rowIndex+i); + StorageMatDO storageMatDO = storageMatDOS.get(i); + MaterialDO materialDO = materialMap.get(storageMatDO.getMatId()); + if (ObjectUtil.isNotEmpty(materialDO)){ + //编码 + Cell cellA = newRow.createCell(0); + cellA.setCellStyle(style); + cellA.setCellValue(materialDO.getCode()); + //品名 + Cell cellB = newRow.createCell(1); + cellB.setCellStyle(style); + cellB.setCellValue(materialDO.getName()); + //规格 + Cell cellC = newRow.createCell(2); + cellC.setCellStyle(style); + cellC.setCellValue(materialDO.getSpec()); + //单位 + Cell cellE = newRow.createCell(4); + cellE.setCellStyle(style); + cellE.setCellValue(ObjectUtil.isNotEmpty(unitDictData.get(materialDO.getUnit()))?unitDictData.get(materialDO.getUnit()):""); + } + //库位 + Cell cellF = newRow.createCell(5); + cellF.setCellStyle(style); + cellF.setCellValue(ObjectUtil.isNotEmpty(PnDOMap.get(storageMatDO.getPnId()))?PnDOMap.get(storageMatDO.getPnId()).getPnName():""); + //数量/实收数量 + Cell cellG = newRow.createCell(6); + cellG.setCellStyle(style); + cellG.setCellValue(String.valueOf(storageMatDO.getStorageOkQty())); + //单价 + Cell cellH = newRow.createCell(7); + cellH.setCellStyle(style); + cellH.setCellValue(String.valueOf(storageMatDO.getPrice())); + //金额 + Cell cellI = newRow.createCell(8); + cellI.setCellStyle(style); + BigDecimal money = storageMatDO.getStorageOkQty().multiply(storageMatDO.getPrice()).setScale(2, RoundingMode.HALF_UP); ; + cellI.setCellValue(String.valueOf(money)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return workbook; + } + @Override + public Workbook exportExcelOut(String stockNo) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StorageDO::getStockNo,stockNo); + wrapper.eq(StorageDO::getStockType,2); + StorageDO storageDO = storageMapper.selectOne(wrapper); + Workbook workbook = null; + if (ObjectUtil.isNotEmpty(storageDO)){ + try { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StorageMatDO::getStockId,storageDO.getId()); + List storageMatDOS = storageMatMapper.selectList(queryWrapper); + //获取单位字典 + HashMap unitDictData = getUnitDictData(); + //获取领料车间 + HashMap pickcarDictData = getPickcarDictData(); + InputStream inputStream = new FileInputStream("D:\\MES-HELI\\File\\出库单.xlsx"); + workbook = new XSSFWorkbook(inputStream); + //第一个sheet + Sheet sheet = workbook.getSheetAt(0); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 设置单元格样式(启用自动换行) + CellStyle style = workbook.createCellStyle(); + style.setWrapText(true); // 关键:启用自动换行 + // 设置水平和垂直居中 + style.setAlignment(HorizontalAlignment.LEFT); + style.setVerticalAlignment(VerticalAlignment.CENTER); + // 创建字体对象 + Font font = workbook.createFont(); + font.setFontName("宋体"); // 设置字体为宋体 + font.setFontHeightInPoints((short) 11); // 设置字号为11磅 + font.setBold(true); // 设置加粗 + // 将字体应用到样式 + style.setFont(font); + //第四行 + Row row3 = sheet.getRow(3); + //单据号 + Cell cellB4 = row3.createCell(1); + cellB4.setCellStyle(style); + cellB4.setCellValue(storageDO.getStockNo()); + //业务日期 + Cell cellE4 =row3.createCell(4); + cellE4.setCellStyle(style); + String formattedDate = storageDO.getCreateTime().format(formatter); + cellE4.setCellValue(formattedDate); + //仓库 + Cell celH4 = row3.createCell(7); + celH4.setCellStyle(style); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(WarehouseDO::getId,storageDO.getWhId()); + lambdaQueryWrapper.eq(WarehouseDO::getWhStatus,1); + WarehouseDO warehouseDO = warehouseMapper.selectOne(lambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(warehouseDO)){ + celH4.setCellValue(warehouseDO.getWhName()); + } + //第五行 + Row row5 = sheet.getRow(4); + Cell cellH5 = row5.createCell(7); + cellH5.setCellStyle(style); + AdminUserDO user = adminUserService.getUser(Long.valueOf(storageDO.getCreator())); + if (ObjectUtil.isNotEmpty(user)){ + cellH5.setCellValue(user.getNickname()); + } + //第七行 + Row row7 = sheet.getRow(6); + Cell cellH9 = row7.createCell(1); + cellH9.setCellStyle(style); + cellH9.setCellValue(storageDO.getDescription()); + + Cell cellH7 = row7.createCell(7); + cellH7.setCellStyle(style); + cellH7.setCellValue(ObjectUtil.isNotEmpty(pickcarDictData.get(String.valueOf(storageDO.getPickcar())))?pickcarDictData.get(String.valueOf(storageDO.getPickcar())):""); + int rowIndex = 9; + Map materialMap= new HashMap<>(); + Map PnDOMap = new HashMap<>(); + //拿到出库明细所有物料id + List collect = storageMatDOS.stream().map(StorageMatDO::getMatId).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(collect)){ + LambdaQueryWrapper doLambdaQueryWrapper = new LambdaQueryWrapper<>(); + doLambdaQueryWrapper.in(MaterialDO::getId,collect); + List materialDOList = materialMapper.selectList(doLambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(materialDOList)){ + //将物料集合转换成Map + materialMap = materialDOList.stream().collect(Collectors.toMap(MaterialDO::getId, material -> material)); + } + } + + //拿到出库明细所有库位 + List collect1 = storageMatDOS.stream().map(StorageMatDO::getPnId).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(collect1)){ + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.in(PnDO::getId,collect1); + List productLineDOList = pnMapper.selectList(lambdaQueryWrapper1); + if (ObjectUtil.isNotEmpty(productLineDOList)){ + //将库位集合转换成Map + PnDOMap = productLineDOList.stream().collect(Collectors.toMap(PnDO::getId, pnDO -> pnDO)); + } + } + BigDecimal sum=BigDecimal.ZERO; + for (int i = 0; i < storageMatDOS.size(); i++) { + Row newRow = sheet.createRow(rowIndex+i); + StorageMatDO storageMatDO = storageMatDOS.get(i); + MaterialDO materialDO = materialMap.get(storageMatDO.getMatId()); + if (ObjectUtil.isNotEmpty(materialDO)){ + //编码 + Cell cellA = newRow.createCell(0); + cellA.setCellStyle(style); + cellA.setCellValue(materialDO.getCode()); + //品名 + Cell cellB = newRow.createCell(1); + cellB.setCellStyle(style); + cellB.setCellValue(materialDO.getName()); + //规格 + Cell cellC = newRow.createCell(2); + cellC.setCellStyle(style); + cellC.setCellValue(materialDO.getSpec()); + //单位 + Cell cellE = newRow.createCell(3); + cellE.setCellStyle(style); + cellE.setCellValue(ObjectUtil.isNotEmpty(unitDictData.get(materialDO.getUnit()))?unitDictData.get(materialDO.getUnit()):""); + } + //库位 + Cell cellF = newRow.createCell(4); + cellF.setCellStyle(style); + cellF.setCellValue(ObjectUtil.isNotEmpty(PnDOMap.get(storageMatDO.getPnId()))?PnDOMap.get(storageMatDO.getPnId()).getPnName():""); + //数量/实收数量 + Cell cellG = newRow.createCell(5); + cellG.setCellStyle(style); + cellG.setCellValue(String.valueOf(storageMatDO.getStorageOkQty())); + //单价 + Cell cellH = newRow.createCell(6); + cellH.setCellStyle(style); + cellH.setCellValue(String.valueOf(storageMatDO.getPrice())); + //金额 + Cell cellI = newRow.createCell(7); + cellI.setCellStyle(style); + BigDecimal money = storageMatDO.getStorageOkQty().multiply(storageMatDO.getPrice()).setScale(2, RoundingMode.HALF_UP); + sum = sum.add(money); + cellI.setCellValue(String.valueOf(money)); + } + Row row = sheet.createRow(rowIndex+storageMatDOS.size()); + //编码 + Cell cellA = row.createCell(0); + cellA.setCellStyle(style); + cellA.setCellValue("合计"); + //合计金额 + Cell cellI = row.createCell(7); + cellI.setCellStyle(style); + cellI.setCellValue(String.valueOf(sum)); + } catch (Exception e) { + e.printStackTrace(); + } + } + return workbook; + } + public HashMap getUnitDictData(){ + //获取单位字典 + DictDataPageReqVO dictDataPageReqVO = new DictDataPageReqVO(); + dictDataPageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + dictDataPageReqVO.setDictType("heli_material_unit"); + PageResult dictDataDOPageResult = dictDataMapper.selectPage(dictDataPageReqVO); + List dictList = dictDataDOPageResult.getList(); + HashMap unitMap = new HashMap<>(); + for (DictDataDO dictDataDO : dictList) { + unitMap.put(dictDataDO.getValue(),dictDataDO.getLabel()); + } + return unitMap; + } + public HashMap getPickcarDictData(){ + //获取单位字典 + DictDataPageReqVO dictDataPageReqVO = new DictDataPageReqVO(); + dictDataPageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + dictDataPageReqVO.setDictType("pickcar"); + PageResult dictDataDOPageResult = dictDataMapper.selectPage(dictDataPageReqVO); + List dictList = dictDataDOPageResult.getList(); + HashMap unitMap = new HashMap<>(); + for (DictDataDO dictDataDO : dictList) { + unitMap.put(dictDataDO.getValue(),dictDataDO.getLabel()); + } + return unitMap; + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java index eef8b748..31b62cea 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java @@ -17,15 +17,22 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.pn.PnMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.rg.RgMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.warehouse.WarehouseMapper; +import com.chanko.yunxi.mes.module.heli.enums.CodeEnum; import com.chanko.yunxi.mes.module.heli.service.composition.CompositionService; +import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService; import com.chanko.yunxi.mes.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO; import com.chanko.yunxi.mes.module.system.dal.mysql.dict.DictDataMapper; @@ -38,6 +45,7 @@ import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.rmi.RemoteException; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -52,6 +60,8 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInvent import org.springframework.web.multipart.MultipartFile; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; +import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN; import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; /** @@ -77,6 +87,12 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { private MaterialMapper materialMapper; @Resource private StorageLogMapper storageLogMapper; + @Resource + private SerialNumberService serialNumberService; + @Resource + private StorageMapper storageMapper; + @Resource + private StorageMatMapper storageMatMapper; @Override public Long createStorageInventory(StorageInventorySaveReqVO createReqVO) { // 插入 @@ -160,6 +176,14 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { } // 读取Excel文件并转换为VO对象列表 List list = ExcelUtils.read(file, StorageInventoryImportExcelVO.class); + boolean allSame = list.stream() + .map(StorageInventoryImportExcelVO::getWhName) // 获取 whName + .filter(Objects::nonNull) // 过滤掉 null 值 + .distinct() // 去重 + .count() <= 1; + if (!allSame) { + throw new RuntimeException("必须导入同一个仓库的库存数据"); + } List errorMessages = new ArrayList<>(); List errorMessages1 = new ArrayList<>(); List errorMessages2 = new ArrayList<>(); @@ -175,15 +199,31 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { HashMap TypeDictData = getTypeDictData(); HashMap OriginalDictData = getOriginalDictData(); List storageInventoryDOS = new ArrayList<>(); + List storageMatDOS = new ArrayList<>(); List dataList = new ArrayList<>(); // 新增:重复组合追踪器 Map duplicateTracker = new HashMap<>(); List logs = new ArrayList<>(); + StorageDO storageDO = new StorageDO(); + storageDO.setStockType(1); + storageDO.setStockInType(6); + storageDO.setStockMode(26); + // 月度流水号 + SerialNumberDO serialNumberDO1 = serialNumberService.getSerialNumber(STOCK_IN.name(), new SimpleDateFormat("yyyyMMdd").format(new Date())); + serialNumberDO1.setSerialNumber(serialNumberDO1.getSerialNumber()+1); + // 入库前缀 + storageDO.setStockNo(STOCK_IN.getCode(serialNumberDO1.getSerialNumber().toString())); + serialNumberService.updateSerialNumber(serialNumberDO1); + storageDO.setStatus(2); + storageDO.setKeeper(getLoginUser().getId()); + storageDO.setKeeperTime(LocalDateTime.now()); for (int i = 0; i < list.size(); i++) { StorageInventoryDO storageInventoryDO = new StorageInventoryDO(); + StorageMatDO storageMatDO = new StorageMatDO(); StorageLogDO logDO = new StorageLogDO(); logDO.setStockType(1); logDO.setGoodsType(1); + logDO.setStockMode(26); StorageInventoryImportExcelVO vo = list.get(i); String code = null; Long whId = null; @@ -195,6 +235,7 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { } else { storageInventoryDO.setYardAmount(new BigDecimal(vo.getYardAmount())); logDO.setStorageOkQty(new BigDecimal(vo.getYardAmount())); + storageMatDO.setStorageOkQty(new BigDecimal(vo.getYardAmount())); } } if (ObjectUtil.isNotEmpty(vo.getPrice())) { @@ -202,6 +243,7 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { errorMessages1.add("第" + (i + 1) + "行平均单价必须是数字"); } else { storageInventoryDO.setPrice(new BigDecimal(vo.getPrice()).setScale(2, RoundingMode.HALF_UP)); + storageMatDO.setPrice(new BigDecimal(vo.getPrice()).setScale(2, RoundingMode.HALF_UP)); } } if (ObjectUtil.isEmpty(vo.getCode())) { @@ -219,6 +261,7 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { dataList.add(vo); } } else { + storageMatDO.setMatId(materialDO.getId()); storageInventoryDO.setMaterialId(materialDO.getId()); logDO.setMatId(materialDO.getId()); storageInventoryDO.setBoomCode(vo.getCode()); @@ -263,7 +306,9 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { if (ObjectUtil.isEmpty(warehouseDO)) { errorMessages7.add("第" + (i + 1) + "行仓库" + vo.getWhName() + "不存在或未启用,请确认"); } else { + storageMatDO.setWhId(warehouseDO.getId()); logDO.setWhId(warehouseDO.getId()); + storageDO.setWhId(warehouseDO.getId()); whId = warehouseDO.getId(); storageInventoryDO.setWhId(warehouseDO.getId()); } @@ -283,6 +328,7 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { logDO.setRgId(rgDO.getId()); rgId = rgDO.getId(); storageInventoryDO.setRgId(rgDO.getId()); + storageMatDO.setRgId(rgDO.getId()); } } } @@ -303,6 +349,7 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { logDO.setPnId(pnDO.getId()); pnId = pnDO.getId(); storageInventoryDO.setPnId(pnDO.getId()); + storageMatDO.setPnId(pnDO.getId()); } } } @@ -332,6 +379,7 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { } else { duplicateTracker.put(compositeKey, vo.getCode()); } + storageMatDOS.add(storageMatDO); storageInventoryDOS.add(storageInventoryDO); logs.add(logDO); } @@ -395,8 +443,21 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { if (ObjectUtil.isNotEmpty(dataList)) { return CommonResult.success(dataList); } + storageMapper.insert(storageDO); + if (ObjectUtil.isNotEmpty(storageMatDOS)){ + storageMatDOS.forEach(storageMatDO -> { + storageMatDO.setStockId(storageDO.getId()); + }); + storageMatMapper.insertBatch(storageMatDOS); + } storageInventoryMapper.insertBatch(storageInventoryDOS); - storageLogMapper.insertBatch(logs); + if (ObjectUtil.isNotEmpty(logs)){ + logs.forEach(logDO -> { + logDO.setStockId(storageDO.getId()); + logDO.setCodeNo(storageDO.getStockNo()); + }); + storageLogMapper.insertBatch(logs); + } return CommonResult.success(null); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java index 18da4d17..1a347a59 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java @@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO; +import org.apache.poi.ss.usermodel.Workbook; /** * 入/出库日志 Service 接口 @@ -76,4 +77,6 @@ public interface StorageLogService { void updatePrice(StorageLogSaveReqVO updateReqVO); PageResult getSupplementPage(StorageLogPageReqVO pageReqVO); + + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java index 631323a9..a7185ff5 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java @@ -13,6 +13,9 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogAllMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageMaterialMapper; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -20,6 +23,8 @@ import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.io.FileInputStream; +import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -219,4 +224,6 @@ public class StorageLogServiceImpl implements StorageLogService { public PageResult getSupplementPage(StorageLogPageReqVO pageReqVO) { return storageLogNowMapper.getSupplementPage(pageReqVO); } + + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/deliverorderlog/DeliverOrderLogMapper.xml b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/deliverorderlog/DeliverOrderLogMapper.xml new file mode 100644 index 00000000..c24f23d8 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/deliverorderlog/DeliverOrderLogMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts index 80621f28..1a92f616 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts @@ -72,3 +72,9 @@ export const getSearchRlTsS = async (startDateTime: string ) => { export const getSearchRlT = async (data) => { return await request.post({ url: `/heli/plan-sub-detail/getSearchRlT`, data }) } +export const Intersection = async (data: PlanSubDetailVO) => { + return await request.post({ url: `/heli/plan-sub-detail/Intersection`, data }) +} +export const overlap = async (data: PlanSubDetailVO) => { + return await request.post({ url: `/heli/plan-sub-detail/overlap`, data }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue index dae371a7..37e8ab72 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue @@ -110,7 +110,8 @@ - + @@ -122,7 +123,7 @@ - + @@ -164,7 +165,7 @@ - + @@ -218,7 +219,7 @@ @@ -543,11 +544,11 @@ const otherSubFormRef = ref() // // return sum + weight; // }, 0); - let totalWeight = 0; - for (let i = 0; i < formData.value.deliverOrderSubs.length; i++) { - totalWeight += Number(formData.value.deliverOrderSubs[i].weight) || 0; - } - formData.value.transportWeight=parseFloat(totalWeight.toPrecision(12)) + // let totalWeight = 0; + // for (let i = 0; i < formData.value.deliverOrderSubs.length; i++) { + // totalWeight += Number(formData.value.deliverOrderSubs[i].weight) || 0; + // } + // formData.value.transportWeight=parseFloat(totalWeight.toPrecision(12)) if (formData.value.transportFreightCost && formData.value.transportFreightCost > 0) { //先将有重量和无重量的进行拆分 @@ -580,6 +581,51 @@ const otherSubFormRef = ref() } } + +const zhongliang = (event) => { + + // const totalWeight = formData.value.deliverOrderSubs.reduce((sum, item) => { + // const weight = item.weight != null ? Number(item.weight) : 0; + // + // return sum + weight; + // }, 0); + let totalWeight = 0; + for (let i = 0; i < formData.value.deliverOrderSubs.length; i++) { + totalWeight += Number(formData.value.deliverOrderSubs[i].weight) || 0; + } + formData.value.transportWeight=parseFloat(totalWeight.toPrecision(12)) + + if (formData.value.transportFreightCost && formData.value.transportFreightCost > 0) { + //先将有重量和无重量的进行拆分 + let numOne = 0 + let numWeight = 0; + let numTwo = 0 + for(var a=0;a0&&formData.value.deliverOrderSubs[a].weight){ + numOne = numOne+1 + numWeight = numWeight+Number(formData.value.deliverOrderSubs[a].weight) + }else{ + numTwo = numTwo+1 + } + } + if(numTwo>0){ + //大于0的情况下平摊运费 + pingt(); + }else{ + //否则按照重量平摊 + weight(numWeight); + } + + }else{ + for(var a=0;a { let sumMoney = new Big(0); @@ -996,6 +1042,8 @@ const queryData = async (type: string, id?: number) => { } const initCustomerInfo = async () => { + receivePersonOptions.value=[] + receivePersonAddressOptions.value=[] // 收货人信息 const customer = await getCustomer(formData.value.customerId) if (customer.contact1Name) { diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/interrupt/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/interrupt/index.vue index ae56c21f..37c4b522 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/interrupt/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/interrupt/index.vue @@ -167,11 +167,18 @@ {{ scope.row.isAdd == 1 ? '是' : '否' }} - + + + + @@ -571,11 +578,12 @@ const saveForm = async () => { loading.value = true for (var i = 0; i < list.value.length; i++) { var item = list.value[i] - if (item.isOverProcess) { - item.isOverProcess = 1 - } else { - item.isOverProcess = 0 - } + // if (item.isOverProcess) { + // item.isOverProcess = 1 + // } else { + // item.isOverProcess = 0 + // } + item.isOverProcess = (item.isOverProcess === true || item.isOverProcess === 1 || item.isOverProcess === '1' || item.isOverProcess === 'true') ? 1 : 0; if (!item.id) { console.log(item) var type = @@ -634,6 +642,7 @@ const getList = async () => { } // 添加弹窗相关变量 const dialogVisible = ref(false) +const id = ref(null) const dialogTitle = ref('插活前') const currentRow = ref(null) const insertList = ref([]) @@ -647,35 +656,115 @@ const modification = async (row) => { message.error('负责人不能为空') return } -beforeList.value = [] - var data = row as unknown as PlansubdetailApi.PlanSubDetailVO - const res = await PlansubdetailApi.modificationPlanSubDetail(data) - if (res.list) { - //弹框 - currentRow.value = row - res.list.forEach(item =>{ - beforeList.value.push(item) + if (row.isOverLab=='Y'){ + ElMessageBox.confirm("当前数据为重叠数据,请确认是否修改", '提示', { + confirmButtonText: '是', + cancelButtonText: '否', + type: 'warning' }) - insertList.value = res.list - dialogVisible.value = true - dialogTitle.value = '插活前' - } else { - getList() - message.success('修改成功') + .then( async () => { + beforeList.value = [] + var data = row as unknown as PlansubdetailApi.PlanSubDetailVO + const res = await PlansubdetailApi.modificationPlanSubDetail(data) + if (res.list) { + //弹框 + currentRow.value = row + res.list.forEach(item =>{ + beforeList.value.push(item) + }) + insertList.value = res.list + dialogVisible.value = true + dialogTitle.value = '插活前' + } else { + getList() + message.success('修改成功') + } + }) + .catch(() => { + // 用户点击否,不做任何操作 + }) + }else { + beforeList.value = [] + var data = row as unknown as PlansubdetailApi.PlanSubDetailVO + const res = await PlansubdetailApi.modificationPlanSubDetail(data) + if (res.list) { + //弹框 + currentRow.value = row + res.list.forEach(item =>{ + beforeList.value.push(item) + }) + insertList.value = res.list + dialogVisible.value = true + dialogTitle.value = '插活前' + } else { + getList() + message.success('修改成功') + } } -} +} +const overlap = async (row) => { + if (row.isAdd!=1){ + message.error('必须是新增的任务,才可以操作重叠,请确认!') + return + } + if (row.subType==null|| row.subType==''){ + message.error('设计类型不能为空') + return + } + if (row.twoDimOwner==null|| row.twoDimOwner==''){ + message.error('负责人不能为空') + return + } + if (row.startTwoDimDate==null|| row.startTwoDimDate==''){ + message.error('开始日期不能为空') + return + } + if (row.twoDimDate==null|| row.twoDimDate==''){ + message.error('结束日期不能为空') + return + } + var data = row as unknown as PlansubdetailApi.PlanSubDetailVO + const res = await PlansubdetailApi.Intersection(data) + let messagees=''; + console.log(res) + var userNickname = getUserNickname(row.twoDimOwner); + if (res){ + messagees="当前负责人"+userNickname+"任务时间存在交集,是否重叠!" + }else { + messagees="当前负责人"+userNickname+"任务时间不存在交集,是否重叠!" + } + ElMessageBox.confirm(messagees, '提示', { + confirmButtonText: '是', + cancelButtonText: '否', + type: 'warning' + }) + .then( async () => { + var newVar = await PlansubdetailApi.overlap(data); + if (newVar){ + getList() + message.success('重叠成功') + }else{ + message.error('重叠失败') + } + }) + .catch(() => { + // 用户点击否,不做任何操作 + }) +} // 新增行方法 const addItemRow = (row) => { if (row.id) { for (var i = 0; i < list.value.length; i++) { var item = list.value[i] - if (item.isOverProcess) { - item.isOverProcess = 1 - } else { - item.isOverProcess = 0 - } - if (!item.id) { + // if (item.isOverProcess) { + // item.isOverProcess = 1 + // } else { + // item.isOverProcess = 0 + // } + item.isOverProcess = (item.isOverProcess === true || item.isOverProcess === 1 || item.isOverProcess === '1' || item.isOverProcess === 'true') ? 1 : 0; + + if (!item.id) { var type = 'BLUEPRINT_WORKBLANK' == item.subType @@ -748,18 +837,21 @@ const handleInsert = async () => { // 这里可以添加插活后的逻辑 if (currentRow.value) { const newRow = { ...currentRow.value } + id.value=newRow.id; newRow.id = null // 设置id为空 insertList.value.push(newRow) insertList.value.forEach((item) => { - if (item.isOverProcess) { - item.isOverProcess = 1 - } else { - item.isOverProcess = 0 - } + // if (item.isOverProcess) { + // item.isOverProcess = 1 + // } else { + // item.isOverProcess = 0 + // } + item.isOverProcess = (item.isOverProcess === true || item.isOverProcess === 1 || item.isOverProcess === '1' || item.isOverProcess === 'true') ? 1 : 0; + }) try { const updateReqVO = { - list: insertList.value + list: insertList.value, } // 调用后端接口 const res = await PlansubdetailApi.chahuoPlanSubDetail(updateReqVO) @@ -784,7 +876,8 @@ const handleConfirm = async () => { try { loading2.value = true const updateReqVO = { - list: insertList.value + list: insertList.value, + id:id.value } // 调用后端接口 const res = await PlansubdetailApi.savechahuoPlanSubDetail(updateReqVO) diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/index.vue index 72d6c75f..ed8b7757 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/index.vue @@ -85,15 +85,17 @@ - + + + + - - - - - - - + + + 搜索 @@ -123,7 +129,8 @@ const queryParams = reactive({ projectSubCode: undefined, projectSubName: undefined, status: 1, - createTime: [] + createTime: [], + flag:undefined, }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/printFinalDialog.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/printFinalDialog.vue index 43a359f2..dd496554 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/printFinalDialog.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/printFinalDialog.vue @@ -200,7 +200,7 @@ const open = async (bomCode, vals) => { await Promise.all( printCodeName.value.map(async (item) => { - const qrCodeData = await QRCode.toDataURL(item.name,{ + const qrCodeData = await QRCode.toDataURL(item.code,{ errorCorrectionLevel: 'H' }) const qrCodeElement = document.getElementById('qrCodeContainer1') diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorderno/received.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorderno/received.vue index 673c264b..2ce7cbbc 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorderno/received.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorderno/received.vue @@ -45,14 +45,6 @@ 重置 - - 导出 - diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutAudit.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutAudit.vue new file mode 100644 index 00000000..078ab93d --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutAudit.vue @@ -0,0 +1,1231 @@ + + + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue index 013ec032..9ee8c470 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageOutsp.vue @@ -1067,7 +1067,6 @@ const initStatus = async (status) => { ctrSave.value = false ctrCancel.value = true ctrDelete.value = false - btnSave.value = true btnCancel.value = false break @@ -1108,7 +1107,6 @@ const initStatus = async (status) => { ctrDelete.value = true btnSave.value = false btnok.value=false - console.log('ss'+formData.value.status) // if(formData.value.status == 4){ // btnCancel.value = true // }else{ diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue index acd37ffb..9460c088 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue @@ -91,15 +91,14 @@ 新增 - + + 导出 + @@ -109,13 +108,13 @@ - - - + + + + + + +