diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/FormalController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/FormalController.java new file mode 100644 index 00000000..333211ad --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/FormalController.java @@ -0,0 +1,95 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.formal; + +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.formal.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.formal.FormalDO; +import com.chanko.yunxi.mes.module.heli.service.formal.FormalService; + +@Tag(name = "管理后台 - 重量计算公式维护") +@RestController +@RequestMapping("/heli/formal") +@Validated +public class FormalController { + + @Resource + private FormalService formalService; + + @PostMapping("/create") + @Operation(summary = "创建重量计算公式维护") + @PreAuthorize("@ss.hasPermission('heli:formal:create')") + public CommonResult createFormal(@Valid @RequestBody FormalSaveReqVO createReqVO) { + return success(formalService.createFormal(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新重量计算公式维护") + @PreAuthorize("@ss.hasPermission('heli:formal:update')") + public CommonResult updateFormal(@Valid @RequestBody FormalSaveReqVO updateReqVO) { + formalService.updateFormal(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除重量计算公式维护") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('heli:formal:delete')") + public CommonResult deleteFormal(@RequestParam("id") Long id) { + formalService.deleteFormal(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得重量计算公式维护") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('heli:formal:query')") + public CommonResult getFormal(@RequestParam("id") Long id) { + FormalDO formal = formalService.getFormal(id); + return success(BeanUtils.toBean(formal, FormalRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得重量计算公式维护分页") + @PreAuthorize("@ss.hasPermission('heli:formal:query')") + public CommonResult> getFormalPage(@Valid FormalPageReqVO pageReqVO) { + PageResult pageResult = formalService.getFormalPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, FormalRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出重量计算公式维护 Excel") + @PreAuthorize("@ss.hasPermission('heli:formal:export')") + @OperateLog(type = EXPORT) + public void exportFormalExcel(@Valid FormalPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = formalService.getFormalPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "重量计算公式维护.xls", "数据", FormalRespVO.class, + BeanUtils.toBean(list, FormalRespVO.class)); + } + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/vo/FormalPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/vo/FormalPageReqVO.java new file mode 100644 index 00000000..3eb979a4 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/vo/FormalPageReqVO.java @@ -0,0 +1,34 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.formal.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 FormalPageReqVO extends PageParam { + + @Schema(description = "物料类型(1、块料 2、棒料 3、方料)", example = "1") + private String matType; + + @Schema(description = "计算公式") + private String formal; + + @Schema(description = "描述", example = "你猜") + private String description; + + @Schema(description = "状态,1表示正常,2表示禁用", example = "1") + private Boolean status; + + @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/formal/vo/FormalRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/vo/FormalRespVO.java new file mode 100644 index 00000000..26e93dde --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/vo/FormalRespVO.java @@ -0,0 +1,40 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.formal.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 FormalRespVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "16843") + @ExcelProperty("自增字段,唯一") + private Long id; + + @Schema(description = "物料类型(1、块料 2、棒料 3、方料)", example = "1") + @ExcelProperty("物料类型(1、块料 2、棒料 3、方料)") + private String matType; + + @Schema(description = "计算公式", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("计算公式") + private String formal; + + @Schema(description = "描述", example = "你猜") + @ExcelProperty("描述") + private String description; + + @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("状态,1表示正常,2表示禁用") + private Boolean status; + + @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/formal/vo/FormalSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/vo/FormalSaveReqVO.java new file mode 100644 index 00000000..513d59b2 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/formal/vo/FormalSaveReqVO.java @@ -0,0 +1,30 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.formal.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; + +@Schema(description = "管理后台 - 重量计算公式维护新增/修改 Request VO") +@Data +public class FormalSaveReqVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "16843") + private Long id; + + @Schema(description = "物料类型(1、块料 2、棒料 3、方料)", example = "1") + private String matType; + + @Schema(description = "计算公式", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "计算公式不能为空") + private String formal; + + @Schema(description = "描述", example = "你猜") + private String description; + + @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态,1表示正常,2表示禁用不能为空") + private Boolean status; + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java index a26b9b66..e5418310 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java @@ -299,4 +299,23 @@ public class TaskDispatchController { PageResult pageResult = taskDispatchService.getTaskDispatchPageDetailXl(pageReqVO); return success(pageResult); } + @GetMapping("/task-dispatch-detail/getXl") + @Operation(summary = "获得派工明细分页") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')") + public CommonResult getXLTaskDetail(@Valid TaskDispatchDetailPageReqVO pageReqVO) { + TaskDispatchDetailDO pageResult = taskDispatchService.getXLTaskDetail(pageReqVO); + return success(pageResult); + } + @PostMapping("/task-dispatch-detail/verification") + @Operation(summary = "校验下料报工") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')") + public CommonResult verification(@RequestBody TaskDispatchDetailPageReqVO pageReqVO) { + return taskDispatchService.verification(pageReqVO); + } + @PostMapping("/task-dispatch-detail/productionCompleted") + @Operation(summary = "下料报工完成") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')") + public CommonResult productionCompleted(@RequestBody TaskDispatchDetailPageReqVO pageReqVO) { + return taskDispatchService.productionCompleted(pageReqVO); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchDetailPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchDetailPageReqVO.java index e9da92fe..3995f0d6 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchDetailPageReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchDetailPageReqVO.java @@ -37,9 +37,11 @@ public class TaskDispatchDetailPageReqVO extends PageParam { @Schema(description = "bom明细id") private Long bomDetailId; - @Schema(description = "项目或子项目id") + @Schema(description = "扫码查询") private String subOrDetailName; @Schema(description = "工序集合") Set procedureIds; + @Schema(description = "材质") + private String compositionName; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/TaskInReportController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/TaskInReportController.java index 8a63f025..5f6f7dc5 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/TaskInReportController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/TaskInReportController.java @@ -99,5 +99,18 @@ public class TaskInReportController { ExcelUtils.write(response, "下料报工.xls", "数据", TaskInReportRespVO.class, BeanUtils.toBean(list, TaskInReportRespVO.class)); } + @GetMapping("/getList") + @Operation(summary = "获得下料报工历史记录") + @PreAuthorize("@ss.hasPermission('heli:task-in-report:query')") + public CommonResult> getList(@Valid TaskInReportPageReqVO pageReqVO) { + List list = taskInReportService.getList(pageReqVO); + return success(list); + } + @PostMapping("/add") + @Operation(summary = "小程序下料报工") + @PreAuthorize("@ss.hasPermission('heli:task-in-report:create')") + public CommonResult addTaskInReport(@Valid @RequestBody TaskInReportSaveReqVO createReqVO) { + return success(taskInReportService.addTaskInReport(createReqVO)); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/vo/TaskInReportSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/vo/TaskInReportSaveReqVO.java index fd89bd0d..324d2672 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/vo/TaskInReportSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskinreport/vo/TaskInReportSaveReqVO.java @@ -21,9 +21,7 @@ public class TaskInReportSaveReqVO { private Long dispatchDetailId; @Schema(description = "负责人", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "负责人不能为空") private Long owner; - @Schema(description = "数量") private Integer amount; @@ -34,11 +32,9 @@ public class TaskInReportSaveReqVO { private BigDecimal length; @Schema(description = "是否已报工 0 默认否 1 是", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "是否已报工 0 默认否 1 是不能为空") private Boolean hasReport; @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "状态,1表示正常,2表示禁用不能为空") private Boolean status; @Schema(description = "报工类型(1、工时 2、价格)", example = "2") @@ -73,5 +69,6 @@ public class TaskInReportSaveReqVO { @Schema(description = "计算公式") private String calFormal; - + @Schema(description = "计算公式") + private String compositionName; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/formal/FormalDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/formal/FormalDO.java new file mode 100644 index 00000000..e343cb30 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/formal/FormalDO.java @@ -0,0 +1,47 @@ +package com.chanko.yunxi.mes.module.heli.dal.dataobject.formal; + +import lombok.*; +import java.util.*; +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("base_formal") +@KeySequence("base_formal_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FormalDO extends BaseDO { + + /** + * 自增字段,唯一 + */ + @TableId + private Long id; + /** + * 物料类型(1、块料 2、棒料 3、方料) + */ + private String matType; + /** + * 计算公式 + */ + private String formal; + /** + * 描述 + */ + private String description; + /** + * 状态,1表示正常,2表示禁用 + */ + private Boolean status; + +} \ 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/taskdispatch/TaskDispatchDetailDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java index e60129fa..18c9092f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java @@ -308,4 +308,10 @@ public class TaskDispatchDetailDO extends BaseDO { private BigDecimal weight; @TableField(exist = false) private BigDecimal purchaseAmounts; + @TableField(exist = false) + private Integer totalAmount; + @TableField(exist = false) + private BigDecimal reportPrice; + @TableField(exist = false) + private BigDecimal price; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/formal/FormalMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/formal/FormalMapper.java new file mode 100644 index 00000000..738d949c --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/formal/FormalMapper.java @@ -0,0 +1,30 @@ +package com.chanko.yunxi.mes.module.heli.dal.mysql.formal; + +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.formal.FormalDO; +import org.apache.ibatis.annotations.Mapper; +import com.chanko.yunxi.mes.module.heli.controller.admin.formal.vo.*; + +/** + * 重量计算公式维护 Mapper + * + * @author 管理员 + */ +@Mapper +public interface FormalMapper extends BaseMapperX { + + default PageResult selectPage(FormalPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(FormalDO::getMatType, reqVO.getMatType()) + .eqIfPresent(FormalDO::getFormal, reqVO.getFormal()) + .eqIfPresent(FormalDO::getDescription, reqVO.getDescription()) + .eqIfPresent(FormalDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(FormalDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FormalDO::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/taskdispatch/TaskDispatchDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java index acc787f6..a54b7e80 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java @@ -907,7 +907,7 @@ public interface TaskDispatchDetailMapper extends BaseMapperX query = new MPJLambdaWrapper<>(); + query.selectAll(TaskDispatchDetailDO.class) + .select("b.code as projectCode", "b.project_name as projectName", "c.name as projectSubName") + .select("d.material_name as materialName") + .select("e.name as procedureName") + .select("g.name as compositionName","g.density as density") + .select("g.price as price") + .selectSum(TaskInReportDO::getWeight, "weight") + .selectSum(TaskInReportDO::getReportPrice, "reportPrice") + .leftJoin(TaskDispatchDO.class, "a", TaskDispatchDO::getId, TaskDispatchDetailDO::getDispatchId) + .leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, TaskDispatchDO::getProjectId) + .leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId) + .leftJoin(ProcessBomDetailDO.class, "d", ProcessBomDetailDO::getId, TaskDispatchDO::getBomDetailId) + .leftJoin(ProcedureDO.class, "e", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId) + .leftJoin(TaskInReportDO.class, "f", TaskInReportDO::getDispatchDetailId, TaskDispatchDetailDO::getId) + .leftJoin(CompositionDO.class, "g", CompositionDO::getId, ProcessBomDetailDO::getCompositionId) + .groupBy(TaskDispatchDetailDO::getId) + .disableSubLogicDel(); + query.eq(TaskDispatchDetailDO::getId,reqVO.getId()); + return selectOne(query); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskinreport/TaskInReportMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskinreport/TaskInReportMapper.java index 1ef02753..0ce7558d 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskinreport/TaskInReportMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskinreport/TaskInReportMapper.java @@ -73,4 +73,14 @@ public interface TaskInReportMapper extends BaseMapperX { .ne(TaskInReportDO::getId, id) .disableSubLogicDel()); } + + default List getList(TaskInReportPageReqVO pageReqVO){ + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(TaskInReportDO.class) + .select("u1.nickname as ownerName") + .leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, TaskInReportDO::getOwner); + query.orderByDesc(TaskInReportDO::getCreateTime); + query.eq(TaskInReportDO::getDispatchDetailId, pageReqVO.getDispatchDetailId()); + return selectList(query); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/formal/FormalService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/formal/FormalService.java new file mode 100644 index 00000000..c977ccb8 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/formal/FormalService.java @@ -0,0 +1,55 @@ +package com.chanko.yunxi.mes.module.heli.service.formal; + +import java.util.*; +import javax.validation.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.formal.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.formal.FormalDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; + +/** + * 重量计算公式维护 Service 接口 + * + * @author 管理员 + */ +public interface FormalService { + + /** + * 创建重量计算公式维护 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFormal(@Valid FormalSaveReqVO createReqVO); + + /** + * 更新重量计算公式维护 + * + * @param updateReqVO 更新信息 + */ + void updateFormal(@Valid FormalSaveReqVO updateReqVO); + + /** + * 删除重量计算公式维护 + * + * @param id 编号 + */ + void deleteFormal(Long id); + + /** + * 获得重量计算公式维护 + * + * @param id 编号 + * @return 重量计算公式维护 + */ + FormalDO getFormal(Long id); + + /** + * 获得重量计算公式维护分页 + * + * @param pageReqVO 分页查询 + * @return 重量计算公式维护分页 + */ + PageResult getFormalPage(FormalPageReqVO pageReqVO); + +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/formal/FormalServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/formal/FormalServiceImpl.java new file mode 100644 index 00000000..e92b3289 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/formal/FormalServiceImpl.java @@ -0,0 +1,74 @@ +package com.chanko.yunxi.mes.module.heli.service.formal; + +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.formal.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.formal.FormalDO; +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.formal.FormalMapper; + +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 FormalServiceImpl implements FormalService { + + @Resource + private FormalMapper formalMapper; + + @Override + public Long createFormal(FormalSaveReqVO createReqVO) { + // 插入 + FormalDO formal = BeanUtils.toBean(createReqVO, FormalDO.class); + formalMapper.insert(formal); + // 返回 + return formal.getId(); + } + + @Override + public void updateFormal(FormalSaveReqVO updateReqVO) { + // 校验存在 + validateFormalExists(updateReqVO.getId()); + // 更新 + FormalDO updateObj = BeanUtils.toBean(updateReqVO, FormalDO.class); + formalMapper.updateById(updateObj); + } + + @Override + public void deleteFormal(Long id) { + // 校验存在 + validateFormalExists(id); + // 删除 + formalMapper.deleteById(id); + } + + private void validateFormalExists(Long id) { + if (formalMapper.selectById(id) == null) { +// throw exception(FORMAL_NOT_EXISTS); + } + } + + @Override + public FormalDO getFormal(Long id) { + return formalMapper.selectById(id); + } + + @Override + public PageResult getFormalPage(FormalPageReqVO pageReqVO) { + return formalMapper.selectPage(pageReqVO); + } + +} 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 548bff34..75aac526 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 @@ -2270,7 +2270,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { // 模拟 limit 1 的效果:取第一条记录 PgMasterLineDO pgMasterLineDO = pgMasterLines.get(0); - dispatchDetailDO.setEndTime(pgMasterLineDO.getEntTime()); + dispatchDetailDO.setReportTime(pgMasterLineDO.getEntTime()); if ("END".equals(pgMasterLineDO.getActive())) { dispatchDetailDO.setReport("已完成"); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java index 53ef8748..98d36111 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java @@ -1,5 +1,6 @@ package com.chanko.yunxi.mes.module.heli.service.taskdispatch; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.ygjx.vo.YgjxPageReqVO; @@ -114,4 +115,10 @@ public interface TaskDispatchService { PageResult taskBbPage(TaskPlanJDBaoBiaoPageReqVO pageReqVO); PageResult getTaskDispatchPageDetailXl(TaskDispatchDetailPageReqVO pageReqVO); + + TaskDispatchDetailDO getXLTaskDetail(TaskDispatchDetailPageReqVO pageReqVO); + + CommonResult verification(TaskDispatchDetailPageReqVO pageReqVO); + + CommonResult productionCompleted(TaskDispatchDetailPageReqVO pageReqVO); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java index beb527eb..fa6e7f69 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chanko.yunxi.mes.framework.common.exception.ErrorCode; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -14,6 +15,7 @@ import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.ygjx.vo.YgjxPageReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipManufactureDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.fpuserdetail.FpUserDetailDO; @@ -34,6 +36,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatch import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetailowner.TaskDispatchDetailOwnerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.composition.CompositionMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.customer.CustomerMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.equipmanufacture.EquipManufactureMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.fpuserdetail.FpUserDetailMapper; @@ -144,6 +147,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { private MaterialPlanMapper materialPlanMapper; @Resource private CustomerMapper customerMapper; + @Resource + private CompositionMapper compositionMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) { @@ -272,11 +277,11 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { } } }else{ -// if (taskDispatchDetailDO.getInReportProcess()!=0){ -// if (ObjectUtil.isNotEmpty(procedureDO)) { -// throw exception(new ErrorCode(400, "该工序" + procedureDO.getName() + "已做下料,不允许修改外协!")); -// } -// } + if (taskDispatchDetailDO.getInReportProcess()!=0){ + if (ObjectUtil.isNotEmpty(procedureDO)) { + throw exception(new ErrorCode(400, "该工序" + procedureDO.getName() + "已做下料,不允许修改外协!")); + } + } } // if (isDetailChanged(taskDispatchDetailDO, dispatchDetailDO)) { // if (taskDispatchDetailDO.getPlanStatus()==1){ @@ -694,9 +699,9 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { } } } -// if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&taskDispatchDetailDO.getReportProcess()!=0){ -// throw exception(new ErrorCode(400,"该工序已做下料报工,不允许删除")); -// } + if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&taskDispatchDetailDO.getInReportProcess()!=0){ + throw exception(new ErrorCode(400,"该工序已做下料报工,不允许删除")); + } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(TaskDispatchDO::getId, taskDispatchDetailDO.getDispatchId()); TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(queryWrapper); @@ -1596,6 +1601,37 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { return taskDispatchDetailMapper.selectPageXl(pageReqVO, postIds); } + @Override + public TaskDispatchDetailDO getXLTaskDetail(TaskDispatchDetailPageReqVO pageReqVO) { + return taskDispatchDetailMapper.getXLTaskDetail(pageReqVO); + } + + @Override + public CommonResult verification(TaskDispatchDetailPageReqVO pageReqVO) { + TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectOne(TaskDispatchDetailDO::getId, pageReqVO.getId()); + if (ObjectUtil.isEmpty(taskDispatchDetailDO)) return CommonResult.error(400,"当前数据不存在,请刷新界面"); + if (2==taskDispatchDetailDO.getInReportProcess()) return CommonResult.error(400,"当前数据已报工完成,请刷新界面"); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CompositionDO::getName, pageReqVO.getCompositionName()); + wrapper.last("limit 1"); + CompositionDO compositionDO = compositionMapper.selectOne(wrapper); + if (ObjectUtil.isNotEmpty(compositionDO)){ + if (ObjectUtil.isEmpty(compositionDO.getDensity())||BigDecimal.ZERO.compareTo(compositionDO.getDensity())==0) return CommonResult.error(400,"当前材质"+compositionDO.getName()+"没有密度,请维护。"); + if (ObjectUtil.isEmpty(compositionDO.getPrice())||BigDecimal.ZERO.compareTo(compositionDO.getPrice())==0) return CommonResult.error(400,"当前材质"+compositionDO.getName()+"没有单价,请维护。"); + } + return CommonResult.success( true); + } + + @Override + public CommonResult productionCompleted(TaskDispatchDetailPageReqVO pageReqVO) { + TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(pageReqVO.getId()); + if (ObjectUtil.isEmpty(taskDispatchDetailDO)) return CommonResult.error(400,"该派工单不存在,请退出刷新界面!"); + if (2==taskDispatchDetailDO.getInReportProcess()) return CommonResult.error(400,"该派工单已报工完成,请刷新界面!"); + taskDispatchDetailDO.setInReportProcess(2); + taskDispatchDetailMapper.updateById(taskDispatchDetailDO); + return CommonResult.success( true); + } + private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List list) { list.forEach(o -> o.setDispatchId(dispatchId)); @@ -1715,18 +1751,18 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { // 外协处理逻辑 item.setIsOutsourcing("Y"); item.setIsReport(0); -// if (ObjectUtil.isNotEmpty(procedureDO)) { -// if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) { -// item.setIsInProcess("N"); -// } -// } + if (ObjectUtil.isNotEmpty(procedureDO)) { + if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) { + item.setIsInProcess("N"); + } + } }else { item.setIsOutsourcing("N"); if (ObjectUtil.isNotEmpty(procedureDO)){ item.setIsReport(procedureDO.getIsReport()); -// if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) { -// item.setIsInProcess("Y"); -// } + if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) { + item.setIsInProcess("Y"); + } } } if ("true".equals(item.getIsFoam())) { diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportService.java index 07eb8d62..b2dd5617 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportService.java @@ -59,4 +59,7 @@ public interface TaskInReportService { */ PageResult getTaskInReportPage(TaskInReportPageReqVO pageReqVO); + List getList(TaskInReportPageReqVO pageReqVO); + + Long addTaskInReport(TaskInReportSaveReqVO createReqVO); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportServiceImpl.java index fb3bca25..a1d111f2 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskinreport/TaskInReportServiceImpl.java @@ -1,7 +1,15 @@ package com.chanko.yunxi.mes.module.heli.service.taskinreport; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.formal.FormalDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.composition.CompositionMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.formal.FormalMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper; +import com.chanko.yunxi.mes.module.heli.service.formal.FormalService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -16,9 +24,11 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskinreport.TaskInReportMapper; +import java.time.LocalDateTime; import java.util.List; 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.ErrorCodeConstants.*; /** @@ -35,6 +45,10 @@ public class TaskInReportServiceImpl implements TaskInReportService { @Resource private TaskDispatchDetailMapper taskDispatchDetailMapper; + @Resource + private CompositionMapper compositionMapper; + @Resource + private FormalMapper formalMapper; @Override public Long createTaskInReport(TaskInReportSaveReqVO createReqVO) { @@ -69,7 +83,6 @@ public class TaskInReportServiceImpl implements TaskInReportService { taskDispatchDetailDO.setReturnRemark(remark); taskDispatchDetailMapper.updateById(taskDispatchDetailDO); } - } @Override @@ -113,4 +126,39 @@ public class TaskInReportServiceImpl implements TaskInReportService { return taskInReportMapper.selectPage(pageReqVO); } + @Override + public List getList(TaskInReportPageReqVO pageReqVO) { + return taskInReportMapper.getList(pageReqVO); + } + + @Override + public Long addTaskInReport(TaskInReportSaveReqVO createReqVO) { + TaskInReportDO taskInReport = BeanUtils.toBean(createReqVO, TaskInReportDO.class); + taskInReport.setOwner(getLoginUser().getId()); + taskInReport.setReportTime(LocalDateTime.now()); + taskInReport.setHasReport(true); + taskInReport.setWorkType("2"); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CompositionDO::getName, createReqVO.getCompositionName()); + wrapper.last("limit 1"); + CompositionDO compositionDO = compositionMapper.selectOne(wrapper); + if (ObjectUtil.isNotEmpty(compositionDO)){ + taskInReport.setDensity(compositionDO.getDensity()); + taskInReport.setPrice(compositionDO.getPrice()); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(FormalDO::getMatType, taskInReport.getMatType()); + queryWrapper.last("limit 1"); + FormalDO formalDO = formalMapper.selectOne(queryWrapper); + if (ObjectUtil.isNotEmpty(formalDO)){ + taskInReport.setCalFormal(formalDO.getFormal()); + taskInReport.setFormalId(formalDO.getId()); + } + taskInReportMapper.insert(taskInReport); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(TaskDispatchDetailDO::getId, taskInReport.getDispatchDetailId()); + updateWrapper.set(TaskDispatchDetailDO::getInReportProcess, 1); + taskDispatchDetailMapper.update(updateWrapper); + return null; + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/formal/FormalMapper.xml b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/formal/FormalMapper.xml new file mode 100644 index 00000000..c3d2b6dd --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/formal/FormalMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/formal/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/formal/index.ts new file mode 100644 index 00000000..5834003c --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/formal/index.ts @@ -0,0 +1,39 @@ +import request from '@/config/axios' + +export interface FormalVO { + id: number + matType: string + formal: string + description: string + status: boolean +} + +// 查询重量计算公式维护分页 +export const getFormalPage = async (params) => { + return await request.get({ url: `/heli/formal/page`, params }) +} + +// 查询重量计算公式维护详情 +export const getFormal = async (id: number) => { + return await request.get({ url: `/heli/formal/get?id=` + id }) +} + +// 新增重量计算公式维护 +export const createFormal = async (data: FormalVO) => { + return await request.post({ url: `/heli/formal/create`, data }) +} + +// 修改重量计算公式维护 +export const updateFormal = async (data: FormalVO) => { + return await request.put({ url: `/heli/formal/update`, data }) +} + +// 删除重量计算公式维护 +export const deleteFormal = async (id: number) => { + return await request.delete({ url: `/heli/formal/delete?id=` + id }) +} + +// 导出重量计算公式维护 Excel +export const exportFormal = async (params) => { + return await request.download({ url: `/heli/formal/export-excel`, params }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/formal/FormalForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/formal/FormalForm.vue new file mode 100644 index 00000000..ec5bbcb4 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/formal/FormalForm.vue @@ -0,0 +1,109 @@ + + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/formal/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/formal/index.vue new file mode 100644 index 00000000..5f301ec5 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/formal/index.vue @@ -0,0 +1,212 @@ + + + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue index 8a00f215..839003a2 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue @@ -103,7 +103,7 @@ - + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/detailDialog.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/detailDialog.vue index 8a39a97a..e3c3b23a 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/detailDialog.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/detailDialog.vue @@ -267,8 +267,8 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form @@ -482,7 +482,7 @@ v-model="row.deviceModel" 删除 @@ -1398,9 +1398,9 @@ const queryData = async (id?: number) => { if(items.id == item.procedureId){ checkList.value.push(items.name) disabledLabels.value.push(items.name) - // if ((items.name=='下料1'||items.name=='下料2')&&item.inReportProcess!=0&& !item.isOutsourcing){ - // flag.value=true - // } + if ((items.name=='下料1'||items.name=='下料2')&&item.inReportProcess!=0&& !item.isOutsourcing){ + item.flag=true + } } }) dispatchListTemp.value.push(JSON.parse(JSON.stringify(item))); diff --git a/mes-ui/mini-app/src/pages/login/login.vue b/mes-ui/mini-app/src/pages/login/login.vue index 8cd1d29d..e4d89075 100644 --- a/mes-ui/mini-app/src/pages/login/login.vue +++ b/mes-ui/mini-app/src/pages/login/login.vue @@ -66,7 +66,7 @@ const loginSuccess = async (data: LoginResult) => { // 保存会员信息 loginStore.setInfo(data) const dictArr = [ - 'heli_inspection_type,system_operate_type,heli_business_file_type,heli_project_order_status,heli_delivery_status,heli_business_line,heli_currency,heli_project_property, heli_material_unit','heli_unqualified_notification_opinion'] + 'heli_inspection_type,system_operate_type,heli_business_file_type,heli_project_order_status,heli_delivery_status,heli_business_line,heli_currency,heli_project_property, heli_material_unit','heli_unqualified_notification_opinion','heli_materials_type'] const params = { dictTypeList: dictArr.join(','), } diff --git a/mes-ui/mini-app/src/pages/productionInReport/components/dataItem.vue b/mes-ui/mini-app/src/pages/productionInReport/components/dataItem.vue index 4a23ed2e..9ee39b3c 100644 --- a/mes-ui/mini-app/src/pages/productionInReport/components/dataItem.vue +++ b/mes-ui/mini-app/src/pages/productionInReport/components/dataItem.vue @@ -2,10 +2,11 @@ import {onMounted, computed, ref, onUnmounted} from "vue"; import { getListWxAPI, - getTaskDetailAPI, + getTaskDetailAPI, getXLWxAPI, } from "@/services/productionReport"; import { useLoginStore } from "@/stores/modules/login"; import { formatDate } from "@/utils/index"; +import {onShow} from "@dcloudio/uni-app"; const userStore = useLoginStore(); const userId = userStore.userInfo.userId; @@ -65,14 +66,19 @@ const getListData = async () => { } isLoading.value = true; // 发送请求 - const data = await getListWxAPI(queryParams); + const data = await getXLWxAPI(queryParams); isLoading.value = false; // 数组追加 dataList.value.push(...data.list); + data.list.forEach((e) => { + e.startTime = formatDate(e.startTime, "YYYY-MM-DD"); + e.endTime = formatDate(e.endTime, "YYYY-MM-DD"); + }); // 分页条件 if (queryParams.pageNo < data.total) { // 页码累加 queryParams.pageNo++; + isFinish.value = true; } else { // 分页已结束 isFinish.value = true; @@ -97,8 +103,7 @@ onMounted(async () => { const isScanning = ref(false) const handleDetail = async (item) => { - - const url = `/pages/productionReport/productionReport-detail?id=${item.id}`; + const url = `/pages/productionInReport/productionInReport-detail?id=${item.id}`; uni.navigateTo({ url }); }; @@ -258,7 +263,7 @@ const handleSearch = async (e) => { - 密度:{{ item.density }}t/m³ + 密度:{{ item.density }} t/m³ @@ -268,7 +273,7 @@ const handleSearch = async (e) => { - 报工重量:{{ item.weight }}Kg + 报工重量:{{ item.weight }} Kg diff --git a/mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue b/mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue index 11ee7b17..12978a1f 100644 --- a/mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue +++ b/mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue @@ -3,49 +3,39 @@ import { formatDate } from '@/utils/index' import { onLoad, onShow } from '@dcloudio/uni-app' import { useLoginStore } from '@/stores/modules/login' - import { getTaskRepotPageAPI, getTaskDetailAPI, postOperateAPI, getListWxAPI } from '@/services/productionReport' + import { + getTaskRepotPageAPI, + getTaskDetailAPI, + postOperateAPI, + getListWxAPI, + getXLTaskDetailAPI, getTaskInRepotPageAPI, verificationAPI, handleOkAPI, productionCompletedAPI + } from '@/services/productionReport' const popup = ref() const userStore = useLoginStore() const dictInfo = userStore?.dictInfo || [] - const unitDictData = dictInfo.filter(e => e.dictType == 'heli_material_unit') || [] - const userId = userStore.userInfo.userId + const unitDictData = dictInfo.filter(e => e.dictType == 'heli_materials_type') || [] + const unitDict = dictInfo.filter(e => e.dictType == 'heli_materials_type').map(item => ({ + value: item.value, + text: item.label + })) + const userId = userStore.userInfo.userId const isShowStart = ref(false) const isCancel = ref(true) const isShowEnd = ref(false) - // const isShowStart = computed(() => { - // let flag = true - // if (historyList.value.length) { - // const obj = historyList.value[0] - // if (!obj?.endTime) { - // flag = false - // } - // } - // // // 派工数量和总报工数量相等了就不展示开始生产 - // // if (detailInfo.value.amount == detailInfo.value.totalReportAmount) { - // // flag = false - // // } - // return flag - // }) - // const isShowEnd = computed(() => { - // let flag = true - // if (historyList.value.length) { - // const obj = historyList.value[0] - // if (obj?.endTime) { - // flag = false - // } - // } else { - // flag = false - // } - // return flag - // }) - const amount = ref('') - const workTime = ref('') + + const length = ref() + const widht = ref() + const hight = ref() + const weight = ref() + const reportPrice = ref() + const matType = ref('1') // 详情数据 const detailInfo = ref({}) - let isLoading = ref(false) + + let isLoading = ref(false) const historyList = ref([]) const formObj = ref({}) // 历史明细 @@ -53,69 +43,18 @@ // 发送请求 isLoading.value = true const params = { - pageNo: 1, - integerpageSize: 5, - owner: userId, dispatchDetailId: detailInfo.value.id, } - const data = await getTaskRepotPageAPI(params) - data.list.forEach((e) => { - e.startTimeStr = e.startTime && formatDate(e.startTime, 'YYYY-MM-DD HH:mm') - e.endTimeStr = e.endTime && formatDate(e.endTime, 'YYYY-MM-DD HH:mm') - // e.endTimeStr = '2025-01-13 00:00' - }) - if (data.list[0]) { - // 将字符串转换为Date对象 - formObj.value = data.list[0] - const endTime = new Date(formObj.value.endTimeStr); - const startTime = new Date(formObj.value.startTimeStr); - // 计算两个日期之间的毫秒差 - const timeDifferenceInMs = endTime - startTime; - - // 将毫秒差转换为小时 - const timeDifferenceInHours = timeDifferenceInMs / (3600 * 1000); - const roundedTimeDifference = parseFloat(timeDifferenceInHours.toFixed(2)); - if ("Y" == detailInfo.value.isOutsourcing) { - - } else { - workTime.value = roundedTimeDifference; - } - - } - historyList.value = data.list - isShowEnd.value = true; - isShowStart.value = true - if (historyList.value.length) { - const obj = historyList.value[0] - if (obj.amount !=null && obj.amount >= 0 ) { - isShowStart.value = true - }else{ - isShowStart.value = false - } - } - if (historyList.value.length) { - const obj = historyList.value[0] - if (obj.amount !=null && obj.amount >= 0 ) { - isShowEnd.value = false - }else{ - isShowEnd.value = true - } - } else { - isShowEnd.value = false - } - if (historyList.value != null && historyList.value.length > 0) { - var totalAmount = detailInfo.value.amount; - var beforeAmount = detailInfo.value.totalReportAmount - if (totalAmount >= beforeAmount) { - amount.value = totalAmount - beforeAmount - } else { - amount.value = 0 - } - - } + const data = await getTaskInRepotPageAPI(params) + data.forEach((e) => { + e.reportTimeStr = e.reportTime && formatDate(e.reportTime, 'YYYY-MM-DD') + // 类型枚举 + const lineObj = unitDictData.find((q) => q.value == e.matType) || {} + e.matType = lineObj.label + }) + historyList.value = data isLoading.value = false } - const isOverBeforeProcedure = ref(true) // 详情 const getDetailData = async (id) => { // 发送请求 @@ -123,20 +62,10 @@ const params = { id, } - const data = await getTaskDetailAPI(params) - // if (data.beforeProcedureStatus == 0) { - // //如果上一道工序没结束 - // isOverBeforeProcedure.value = true; - // } - if ("Y"==data.isOutsourcing){ - workTime.value=data.estimatedPrice - } + const data = await getXLTaskDetailAPI(params) + data.startTime = formatDate(data.startTime, 'YYYY-MM-DD') data.endTime = formatDate(data.endTime, 'YYYY-MM-DD') - // 单位枚举 - const lineObj = unitDictData.find((q) => q.value == data.unit) || {} - data.unit = lineObj.label - detailInfo.value = data || {} isLoading.value = false } @@ -155,10 +84,9 @@ isLoading.value = true; const params = { id: detailInfo.value?.id, - active: 'FINISH', } try { - const data = await postOperateAPI(params); + await productionCompletedAPI(params); } catch (error) { uni.showToast({ icon: 'none', @@ -166,90 +94,206 @@ title: error.data.msg, }) } finally { - await getDetailData(detailInfo.value.id) - await getData() - const obj = historyList.value[0] - // 最新的报工是否完成 - if (obj && obj?.workTime == null && obj.endTime) { - popupShow.value = true - } - isLoading.value = false; + await getDetailData(detailInfo.value.id) + await getData() } - // const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}` - // uni.redirectTo({ - // url, - // }) } // 提交报工 - const handleOk = async (active) => { + const handleOk = async () => { + if (length.value==null||length.value==''){ + uni.showToast({ + icon: 'none', + duration: 3000, + title: '请输入长度', + }) + return + } + if (widht.value==null||widht.value==''){ + uni.showToast({ + icon: 'none', + duration: 3000, + title: '请输入宽度', + }) + return + } + if (hight.value==null||hight.value==''){ + uni.showToast({ + icon: 'none', + duration: 3000, + title: '请输入高度', + }) + return + } + if (weight.value==null||weight.value==''){ + uni.showToast({ + icon: 'none', + duration: 3000, + title: '请输入重量', + }) + return + } + if (reportPrice.value==null||reportPrice.value==''){ + uni.showToast({ + icon: 'none', + duration: 3000, + title: '请输入总价', + }) + return + } + if (matType.value==null||matType.value==''){ + uni.showToast({ + icon: 'none', + duration: 3000, + title: '请选择物料类型', + }) + return + } const params = { - id: detailInfo.value?.id, - active: 'SUBMIT', - amount: amount.value, - workTime: workTime.value, - } - const data = await postOperateAPI(params) - const pages = getCurrentPages(); // 获取当前页面栈 - const currentPage = pages[pages.length - 1]; // 当前页面 - const url = `/${currentPage.route}?${Object.entries(currentPage.options).map(([key, val]) => `${key}=${val}`).join('&')}`; - uni.reLaunch({ url }); // 重新加载当前页面 + dispatchDetailId: detailInfo.value?.id, + length: length.value, + widht: widht.value, + hight: hight.value, + weight: weight.value, + reportPrice: reportPrice.value, + matType: matType.value, + compositionName:detailInfo.value?.compositionName, + } + const data = await handleOkAPI(params) - // const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}` - // uni.redirectTo({ - // url, - // }) + popup.value?.close() + length.value = '' + widht.value = '' + hight.value = '' + weight.value = '' + reportPrice.value = '' + matType.value = '1' + await getDetailData(detailInfo.value.id) + await getData() } - // 开始生产 const handleStart = async () => { const params = { id: detailInfo.value.id, - active: 'START', - ownerId: userId } - productionTitle.value = '生产中'; const data = await postOperateAPI(params) - const pages = getCurrentPages(); // 获取当前页面栈 - const currentPage = pages[pages.length - 1]; // 当前页面 - const url = `/${currentPage.route}?${Object.entries(currentPage.options).map(([key, val]) => `${key}=${val}`).join('&')}`; - uni.reLaunch({ url }); // 重新加载当前页面 - // const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}` - // uni.redirectTo({ - // url, - // }) + // const pages = getCurrentPages(); // 获取当前页面栈 + // const currentPage = pages[pages.length - 1]; // 当前页面 + // const url = `/${currentPage.route}?${Object.entries(currentPage.options).map(([key, val]) => `${key}=${val}`).join('&')}`; + // uni.reLaunch({ url }); // 重新加载当前页面 + } const popupShow = ref(false) - const productionTitle = ref('开始生产') const cancel = () => { isLoading.value = false; - const pages = getCurrentPages(); // 获取当前页面栈 - if (pages.length>1){ + // const pages = getCurrentPages(); // 获取当前页面栈 + // if (pages.length>1){ + // uni.navigateBack({ + // delta: 1 // 返回的页面数,这里1表示返回上一页 + // }); + // }else { + // const url = `/pages/productionInReport/productionInReport` + // uni.redirectTo({ + // url, + // }) + // } uni.navigateBack({ delta: 1 // 返回的页面数,这里1表示返回上一页 }); - }else { - const url = `/pages/productionReport/productionReport` - uni.redirectTo({ - url, - }) - } - } - - // 结束生产 - const handleStop = async () => { + const handleLengthChange =async (val) => { + console.log(val) + if (val) { + length.value = parseFloat(val).toFixed(2) + if (matType.value == '1' || matType.value == '3') { + if (widht.value > 0 && hight.value > 0) { + var rawResult = length.value * widht.value * hight.value * detailInfo.value.density / 1000000; + weight.value = rawResult.toFixed(2) + var price = weight.value * detailInfo.value.price; + reportPrice.value = price.toFixed(2) + } + } else { + if (hight.value > 0) { + const radius = length.value / 2; + const radiusSquared = radius * radius; + // 直接计算:π × r² × h × ρ ÷ 10⁶ + // 为了提高性能,可以预计算常数 + const CONSTANT_FACTOR = 3.14 / 1000000; + var rawResult = CONSTANT_FACTOR * radiusSquared * hight.value * detailInfo.value.density; + weight.value = rawResult.toFixed(2) + var price = weight.value * detailInfo.value.price; + reportPrice.value = price.toFixed(2) + } + } + }else { + weight.value=0.00 + reportPrice.value=0.00 + } + } + const handleWidhtChange =async (val) => { + widht.value=parseFloat(val).toFixed(2) + if (matType.value=='1'||matType.value=='3'){ + if (length.value>0&&hight.value>0){ + var rawResult = length.value*widht.value*hight.value*detailInfo.value.density/1000000; + weight.value= rawResult.toFixed(2) + var price = weight.value * detailInfo.value.price; + reportPrice.value= price.toFixed(2) + } + } + } + const handleHightChange =async (val) => { + hight.value=parseFloat(val).toFixed(2) + if (matType.value=='1'||matType.value=='3'){ + if (widht.value>0&&length.value>0){ + var rawResult = length.value*widht.value*hight.value*detailInfo.value.density/1000000; + weight.value= rawResult.toFixed(2) + var price = weight.value * detailInfo.value.price; + reportPrice.value= price.toFixed(2) + } + }else { + if (length.value>0){ + const radius = length.value / 2; + const radiusSquared = radius * radius; + // 直接计算:π × r² × h × ρ ÷ 10⁶ + // 为了提高性能,可以预计算常数 + const CONSTANT_FACTOR = 3.14 / 1000000; + var rawResult = CONSTANT_FACTOR * radiusSquared * hight.value * detailInfo.value.density; + weight.value= rawResult.toFixed(2) + var price = weight.value * detailInfo.value.price; + reportPrice.value= price.toFixed(2) + } + } + } + const handleWeightChange =async (val) => { + weight.value=parseFloat(val).toFixed(2) + var price = weight.value * detailInfo.value.price; + reportPrice.value= price.toFixed(2) + } + const onClear= async (type)=>{ + console.log(type) + uni.hideKeyboard() + weight.value=0.00 + reportPrice.value= 0.00 + } + // 新增 + const handleAdd = async () => { const params = { id: detailInfo.value?.id, - active: 'END', + compositionName:detailInfo.value?.compositionName, } - console.log(detailInfo.value) - const data = await postOperateAPI(params) - await getData() - // const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}` - // uni.redirectTo({ - // url, - // }) + await verificationAPI(params) popup.value?.open() } + const handleClose =async ()=>{ + // uni.hideKeyboard() // 如果有键盘,先隐藏键盘 + length.value = '' + widht.value = '' + hight.value = '' + weight.value = '' + reportPrice.value = '' + matType.value = '1' + popup.value?.close() + await getDetailData(detailInfo.value.id) + await getData() + }