v1.2.1 #3

Merged
Ghost merged 105 commits from tmp into master 8 months ago

@ -23,9 +23,9 @@ public interface GlobalErrorCodeConstants {
ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限");
ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到");
ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确");
ErrorCode REPEAT_DATA = new ErrorCode(406, "数据重复");
ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许
ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试");
// ========== 服务端错误段 ==========
ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");

@ -1,4 +1,4 @@
芋道源码 http://www.iocoder.cn
上海长江云息数字科技有限公司
Application Version: ${mes.info.version}
Spring Boot Version: ${spring-boot.version}

@ -61,6 +61,11 @@
<artifactId>jsoup</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
</dependencies>
</project>

@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.servlet.NoHandlerFoundException;
import org.springframework.dao.DuplicateKeyException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation;
@ -227,6 +228,11 @@ public class GlobalExceptionHandler {
return requestNotPermittedExceptionHandler(req, ex);
}
// 处理表数据相关异常
if (ex instanceof DuplicateKeyException){
return CommonResult.error(REPEAT_DATA);
}
// 情况三:处理异常
log.error("[defaultExceptionHandler]", ex);
// 插入异常日志

@ -40,7 +40,7 @@ public enum CodeEnum {
WAREHOUSE("仓库", "Wa", 4),
STOCK_IN("入库单", "WI", 4, "yyyyMMdd"),
STOCK_OUT("出库单", "WO", 4, "yyyyMMdd"),
STOCK_CHECK("盘点单据", "WC", 4, "yyyyMMdd"),
STOCK_CHECK("盘点单据", "WC", 3, "yyyyMM"),
PROJECT_ORDER("业务订单", 3, "yyyyMM"),
PROJECT_DELIVERY_ORDER("发货单", "HL", 3, "yyyyMM"),
;

@ -0,0 +1,21 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-01-18 01:19
*/
@Getter
public enum DeliverSubCategoryEnum {
DELIVER_LIST("发货清单"),
OTHER_LIST("其他清单")
;
private String description;
DeliverSubCategoryEnum(String description) {
this.description = description;
}
}

@ -16,6 +16,7 @@ import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
* 003
* 004
* 005
* 006
* 3
*/
public interface ErrorCodeConstants {
@ -31,6 +32,7 @@ public interface ErrorCodeConstants {
ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1_001_005, "供应商不存在");
ErrorCode PROCEDURE_NOT_EXISTS = new ErrorCode(1_001_006, "工序不存在");
ErrorCode SERIAL_NUMBER_NOT_EXISTS = new ErrorCode(1_001_007, "序列号记录不存在");
ErrorCode EQUIP_NOT_EXISTS = new ErrorCode(1_001_008, "设备信息不存在");
/*********组织架构************/
ErrorCode WORKSHOP_NOT_EXISTS = new ErrorCode(1_002_001, "车间不存在");
@ -49,8 +51,10 @@ public interface ErrorCodeConstants {
/************订单管理***********/
ErrorCode PROJECT_ORDER_NOT_EXISTS = new ErrorCode(1_004_001, "项目订单不存在");
/************发货管理***********/
ErrorCode DELIVER_ORDER_NOT_EXISTS = new ErrorCode(1_005_001, "发货订单不存在");
ErrorCode RELATION_PROJECT_ORDER_HAS_DONE = new ErrorCode(1_005_002, "关联项目订单已经发货完成");
ErrorCode DELIVER_AMOUNT_OVERFLOW = new ErrorCode(1_005_003, "超额发货");
/************工艺设计***********/
ErrorCode PROCESS_DESIGN_NOT_EXISTS = new ErrorCode(1_006_001, "工艺设计不存在");
}

@ -0,0 +1,27 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-02-01 04:42
*/
@Getter
public enum MaterialTypeEnum {
RAW("1", "原材料"),
ACCESSORY("2", "副资材"),
OFFICE("3", "办公/劳保"),
GIVING("4", "赠送物品"),
STANDARD("5", "标准件"),
VIRTUAL("6", "虚拟物料");
private String code;
private String description;
MaterialTypeEnum(String code, String description) {
this.code = code;
this.description = description;
}
}

@ -0,0 +1,24 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-01-18 01:19
*/
@Getter
public enum ProjectOrderDeliverStatusEnum {
NOT(1, "未发货"),
PART(2, "部分发货"),
ALL(3, "全部发货")
;
private int code;
private String description;
ProjectOrderDeliverStatusEnum(int code, String description) {
this.code = code;
this.description = description;
}
}

@ -0,0 +1,25 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-02-01 02:31
*/
@Getter
public enum StockOutTypeEnum {
RECEIVE(1, "领料出库"),
SALE(2, "销售出库"),
LOSS(3, "盘亏出库"),
OTHER(4, "其他出库");
private int code;
private String description;
StockOutTypeEnum(int code, String description) {
this.code = code;
this.description = description;
}
}

@ -0,0 +1,23 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-02-01 02:28
*/
@Getter
public enum StockTypeEnum {
IN(1, "入库"),
OUT(2, "出库");
private int code;
private String description;
StockTypeEnum(int code, String description) {
this.code = code;
this.description = description;
}
}

@ -0,0 +1,19 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
@Getter
public enum StorageStatusEnum {
SAVE(1, "保存"),
SUBMIT(2, "提交"),
INVALID(3, "作废");
private int code;
private String description;
StorageStatusEnum(int code, String description) {
this.code = code;
this.description = description;
}
}

@ -10,7 +10,7 @@ import lombok.Getter;
@Getter
public enum YesOrNoEnum {
YES(1), NO(0);
Y(1), N(0);
private int code;

@ -33,7 +33,7 @@ import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEn
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.service.deliverorder.DeliverOrderService;
@Tag(name = "管理后台 - 发货订单")

@ -80,7 +80,7 @@ public class DeliverOrderPageReqVO extends PageParam {
@Schema(description = "收货详细地址")
private String receiveAddress;
@Schema(description = "模具名称")
private String mouldName;
@Schema(description = "项目名称")
private String projectName;
}

@ -1,15 +1,13 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo;
import com.baomidou.mybatisplus.annotation.TableField;
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.*;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 发货订单 Response VO")
@Data
@ -106,9 +104,9 @@ public class DeliverOrderRespVO {
@ExcelProperty("合同号")
private String contractNo;
@Schema(description = "模具名称")
@ExcelProperty("模具名称")
private String mouldName;
@Schema(description = "项目名称")
@ExcelProperty("项目名称")
private String projectName;
@Schema(description = "性质")
@ExcelProperty("性质")
@ -118,4 +116,16 @@ public class DeliverOrderRespVO {
@ExcelProperty("客户名称")
private String customerName;
@Schema(description = "发货人姓名")
@ExcelProperty("发货人姓名")
private String deliverPersonName;
@Schema(description = "制单人姓名")
@ExcelProperty("制单人姓名")
private String creatorName;
@Schema(description = "业务员姓名")
@ExcelProperty("业务员姓名")
private String businessManName;
}

@ -1,13 +1,15 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
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 lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import java.util.List;
@Schema(description = "管理后台 - 发货订单新增/修改 Request VO")
@Data
@ -44,7 +46,6 @@ public class DeliverOrderSaveReqVO {
private String deliverPersonMobile;
@Schema(description = "发货方式", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "发货方式不能为空")
private String deliverMode;
@Schema(description = "收货人电话", requiredMode = Schema.RequiredMode.REQUIRED)
@ -85,7 +86,11 @@ public class DeliverOrderSaveReqVO {
@Schema(description = "操作意见")
private String activeOpinion;
@Valid
@Schema(description = "发货订单子项列表")
private List<DeliverOrderSubDO> deliverOrderSubs;
@Valid
@Schema(description = "发货订单子项列表")
private List<DeliverOrderSubDO> deliverOrderOtherSubs;
}

@ -0,0 +1,95 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.equip;
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.equip.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
import com.chanko.yunxi.mes.module.heli.service.equip.EquipService;
@Tag(name = "管理后台 - 设备信息")
@RestController
@RequestMapping("/heli/equip")
@Validated
public class EquipController {
@Resource
private EquipService equipService;
@PostMapping("/create")
@Operation(summary = "创建设备信息")
@PreAuthorize("@ss.hasPermission('heli:equip:create')")
public CommonResult<Long> createEquip(@Valid @RequestBody EquipSaveReqVO createReqVO) {
return success(equipService.createEquip(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新设备信息")
@PreAuthorize("@ss.hasPermission('heli:equip:update')")
public CommonResult<Boolean> updateEquip(@Valid @RequestBody EquipSaveReqVO updateReqVO) {
equipService.updateEquip(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除设备信息")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:equip:delete')")
public CommonResult<Boolean> deleteEquip(@RequestParam("id") Long id) {
equipService.deleteEquip(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得设备信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:equip:query')")
public CommonResult<EquipRespVO> getEquip(@RequestParam("id") Long id) {
EquipDO equip = equipService.getEquip(id);
return success(BeanUtils.toBean(equip, EquipRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得设备信息分页")
@PreAuthorize("@ss.hasPermission('heli:equip:query')")
public CommonResult<PageResult<EquipRespVO>> getEquipPage(@Valid EquipPageReqVO pageReqVO) {
PageResult<EquipDO> pageResult = equipService.getEquipPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, EquipRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出设备信息 Excel")
@PreAuthorize("@ss.hasPermission('heli:equip:export')")
@OperateLog(type = EXPORT)
public void exportEquipExcel(@Valid EquipPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<EquipDO> list = equipService.getEquipPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "设备信息.xls", "数据", EquipRespVO.class,
BeanUtils.toBean(list, EquipRespVO.class));
}
}

@ -0,0 +1,50 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.equip.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 EquipPageReqVO extends PageParam {
@Schema(description = "自增字段,唯一")
private Long id;
@Schema(description = "设备名称 唯一")
private String name;
@Schema(description = "模具类型id对应 base_mould_type 表中的id")
private Long mouldTypeId;
@Schema(description = "状态,1表示正常2表示禁用默认是1")
private Integer status;
@Schema(description = "创建者")
private String creator;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新者")
private String updater;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
@Schema(description = "是否删除")
private Boolean deleted;
@Schema(description = "租户编号")
private Long tenantId;
}

@ -0,0 +1,30 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.equip.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 设备信息 Response VO")
@Data
@ExcelIgnoreUnannotated
public class EquipRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("自增字段,唯一")
private Long id;
@Schema(description = "设备名称 唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("设备名称 唯一")
private String name;
@Schema(description = "模具类型id对应 base_mould_type 表中的id", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("模具类型id对应 base_mould_type 表中的id")
private Long mouldTypeId;
@Schema(description = "状态,1表示正常2表示禁用默认是1")
@ExcelProperty("状态,1表示正常2表示禁用默认是1")
private Integer status;
}

@ -0,0 +1,27 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.equip.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 EquipSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "设备名称 唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "设备名称 唯一不能为空")
private String name;
@Schema(description = "模具类型id对应 base_mould_type 表中的id", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "模具类型id对应 base_mould_type 表中的id不能为空")
private Long mouldTypeId;
@Schema(description = "状态,1表示正常2表示禁用默认是1")
private Integer status;
}

@ -1,95 +1,110 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.material;
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.material.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.service.material.MaterialService;
@Tag(name = "管理后台 - 物料")
@RestController
@RequestMapping("/heli/material")
@Validated
public class MaterialController {
@Resource
private MaterialService materialService;
@PostMapping("/create")
@Operation(summary = "创建物料")
@PreAuthorize("@ss.hasPermission('heli:material:create')")
public CommonResult<Long> createMaterial(@Valid @RequestBody MaterialSaveReqVO createReqVO) {
return success(materialService.createMaterial(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新物料")
@PreAuthorize("@ss.hasPermission('heli:material:update')")
public CommonResult<Boolean> updateMaterial(@Valid @RequestBody MaterialSaveReqVO updateReqVO) {
materialService.updateMaterial(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除物料")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:material:delete')")
public CommonResult<Boolean> deleteMaterial(@RequestParam("id") Long id) {
materialService.deleteMaterial(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得物料")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:material:query')")
public CommonResult<MaterialRespVO> getMaterial(@RequestParam("id") Long id) {
MaterialDO material = materialService.getMaterial(id);
return success(BeanUtils.toBean(material, MaterialRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得物料分页")
@PreAuthorize("@ss.hasPermission('heli:material:query')")
public CommonResult<PageResult<MaterialRespVO>> getMaterialPage(@Valid MaterialPageReqVO pageReqVO) {
PageResult<MaterialDO> pageResult = materialService.getMaterialPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MaterialRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出物料 Excel")
@PreAuthorize("@ss.hasPermission('heli:material:export')")
@OperateLog(type = EXPORT)
public void exportMaterialExcel(@Valid MaterialPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MaterialDO> list = materialService.getMaterialPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "物料.xls", "数据", MaterialRespVO.class,
BeanUtils.toBean(list, MaterialRespVO.class));
}
}
package com.chanko.yunxi.mes.module.heli.controller.admin.material;
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.material.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.service.material.MaterialService;
@Tag(name = "管理后台 - 物料")
@RestController
@RequestMapping("/heli/material")
@Validated
public class MaterialController {
@Resource
private MaterialService materialService;
@PostMapping("/create")
@Operation(summary = "创建物料")
@PreAuthorize("@ss.hasPermission('heli:material:create')")
public CommonResult<Long> createMaterial(@Valid @RequestBody MaterialSaveReqVO createReqVO) {
return success(materialService.createMaterial(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新物料")
@PreAuthorize("@ss.hasPermission('heli:material:update')")
public CommonResult<Boolean> updateMaterial(@Valid @RequestBody MaterialSaveReqVO updateReqVO) {
materialService.updateMaterial(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除物料")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:material:delete')")
public CommonResult<Boolean> deleteMaterial(@RequestParam("id") Long id) {
materialService.deleteMaterial(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得物料")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:material:query')")
public CommonResult<MaterialRespVO> getMaterial(@RequestParam("id") Long id) {
MaterialDO material = materialService.getMaterial(id);
return success(BeanUtils.toBean(material, MaterialRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得物料分页")
@PreAuthorize("@ss.hasPermission('heli:material:query')")
public CommonResult<PageResult<MaterialRespVO>> getMaterialPage(@Valid MaterialPageReqVO pageReqVO) {
PageResult<MaterialDO> pageResult = materialService.getMaterialPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MaterialRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出物料 Excel")
@PreAuthorize("@ss.hasPermission('heli:material:export')")
@OperateLog(type = EXPORT)
public void exportMaterialExcel(@Valid MaterialPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MaterialDO> list = materialService.getMaterialPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "物料.xls", "数据", MaterialRespVO.class,
BeanUtils.toBean(list, MaterialRespVO.class));
}
@GetMapping({"/all-simples"})
@Operation(summary = "TODO:获取物料精简信息列表", description = "只包含被开启的物料,主要用于前端的下拉选项")
public CommonResult<List<Map<String, Object>> > getSimpleList() {
List<Map<String, Object>> list = materialService.getSimpleList();
// 拼接数据
return success(list);
}
@GetMapping({"/all-simples-virtual"})
@Operation(summary = "TODO:获取物料精简信息列表", description = "只包含被开启的物料,主要用于前端的下拉选项")
public CommonResult<List<Map<String, Object>> > getSimpleVirtualList() {
List<Map<String, Object>> list = materialService.selectSimpleVirtualList();
// 拼接数据
return success(list);
}
}

@ -1,95 +1,102 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.mouldtype;
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.mouldtype.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.mouldtype.MouldTypeDO;
import com.chanko.yunxi.mes.module.heli.service.mouldtype.MouldTypeService;
@Tag(name = "管理后台 - 模具类型")
@RestController
@RequestMapping("/heli/mould-type")
@Validated
public class MouldTypeController {
@Resource
private MouldTypeService mouldTypeService;
@PostMapping("/create")
@Operation(summary = "创建模具类型")
@PreAuthorize("@ss.hasPermission('heli:mould-type:create')")
public CommonResult<Long> createMouldType(@Valid @RequestBody MouldTypeSaveReqVO createReqVO) {
return success(mouldTypeService.createMouldType(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新模具类型")
@PreAuthorize("@ss.hasPermission('heli:mould-type:update')")
public CommonResult<Boolean> updateMouldType(@Valid @RequestBody MouldTypeSaveReqVO updateReqVO) {
mouldTypeService.updateMouldType(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除模具类型")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:mould-type:delete')")
public CommonResult<Boolean> deleteMouldType(@RequestParam("id") Long id) {
mouldTypeService.deleteMouldType(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得模具类型")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:mould-type:query')")
public CommonResult<MouldTypeRespVO> getMouldType(@RequestParam("id") Long id) {
MouldTypeDO mouldType = mouldTypeService.getMouldType(id);
return success(BeanUtils.toBean(mouldType, MouldTypeRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得模具类型分页")
@PreAuthorize("@ss.hasPermission('heli:mould-type:query')")
public CommonResult<PageResult<MouldTypeRespVO>> getMouldTypePage(@Valid MouldTypePageReqVO pageReqVO) {
PageResult<MouldTypeDO> pageResult = mouldTypeService.getMouldTypePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MouldTypeRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出模具类型 Excel")
@PreAuthorize("@ss.hasPermission('heli:mould-type:export')")
@OperateLog(type = EXPORT)
public void exportMouldTypeExcel(@Valid MouldTypePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MouldTypeDO> list = mouldTypeService.getMouldTypePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "模具类型.xls", "数据", MouldTypeRespVO.class,
BeanUtils.toBean(list, MouldTypeRespVO.class));
}
}
package com.chanko.yunxi.mes.module.heli.controller.admin.mouldtype;
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.mouldtype.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.mouldtype.MouldTypeDO;
import com.chanko.yunxi.mes.module.heli.service.mouldtype.MouldTypeService;
@Tag(name = "管理后台 - 模具类型")
@RestController
@RequestMapping("/heli/mould-type")
@Validated
public class MouldTypeController {
@Resource
private MouldTypeService mouldTypeService;
@PostMapping("/create")
@Operation(summary = "创建模具类型")
@PreAuthorize("@ss.hasPermission('heli:mould-type:create')")
public CommonResult<Long> createMouldType(@Valid @RequestBody MouldTypeSaveReqVO createReqVO) {
return success(mouldTypeService.createMouldType(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新模具类型")
@PreAuthorize("@ss.hasPermission('heli:mould-type:update')")
public CommonResult<Boolean> updateMouldType(@Valid @RequestBody MouldTypeSaveReqVO updateReqVO) {
mouldTypeService.updateMouldType(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除模具类型")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:mould-type:delete')")
public CommonResult<Boolean> deleteMouldType(@RequestParam("id") Long id) {
mouldTypeService.deleteMouldType(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得模具类型")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:mould-type:query')")
public CommonResult<MouldTypeRespVO> getMouldType(@RequestParam("id") Long id) {
MouldTypeDO mouldType = mouldTypeService.getMouldType(id);
return success(BeanUtils.toBean(mouldType, MouldTypeRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得模具类型分页")
@PreAuthorize("@ss.hasPermission('heli:mould-type:query')")
public CommonResult<PageResult<MouldTypeRespVO>> getMouldTypePage(@Valid MouldTypePageReqVO pageReqVO) {
PageResult<MouldTypeDO> pageResult = mouldTypeService.getMouldTypePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MouldTypeRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出模具类型 Excel")
@PreAuthorize("@ss.hasPermission('heli:mould-type:export')")
@OperateLog(type = EXPORT)
public void exportMouldTypeExcel(@Valid MouldTypePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MouldTypeDO> list = mouldTypeService.getMouldTypePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "模具类型.xls", "数据", MouldTypeRespVO.class,
BeanUtils.toBean(list, MouldTypeRespVO.class));
}
@GetMapping({"/all-simples"})
@Operation(summary = "TODO:获取模块类型信息列表", description = "只包含被开启的模块类型,主要用于前端的下拉选项")
public CommonResult<List<Map<String, Object>> > getSimpleList() {
List<Map<String, Object>> list = mouldTypeService.getMouldTypeSimpleList();
// 拼接数据
return success(list);
}
}

@ -0,0 +1,106 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.processdesign;
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.processdesign.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO;
import com.chanko.yunxi.mes.module.heli.service.processdesign.ProcessDesignService;
@Tag(name = "管理后台 - 工艺设计")
@RestController
@RequestMapping("/heli/process-design")
@Validated
public class ProcessDesignController {
@Resource
private ProcessDesignService processDesignService;
@PostMapping("/create")
@Operation(summary = "创建工艺设计")
@PreAuthorize("@ss.hasPermission('heli:process-design:create')")
public CommonResult<Long> createProcessDesign(@Valid @RequestBody ProcessDesignSaveReqVO createReqVO) {
return success(processDesignService.createProcessDesign(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新工艺设计")
@PreAuthorize("@ss.hasPermission('heli:process-design:update')")
public CommonResult<Boolean> updateProcessDesign(@Valid @RequestBody ProcessDesignSaveReqVO updateReqVO) {
processDesignService.updateProcessDesign(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除工艺设计")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:process-design:delete')")
public CommonResult<Boolean> deleteProcessDesign(@RequestParam("id") Long id) {
processDesignService.deleteProcessDesign(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得工艺设计")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:process-design:query')")
public CommonResult<ProcessDesignRespVO> getProcessDesign(@RequestParam("id") Long id) {
ProcessDesignDO processDesign = processDesignService.getProcessDesign(id);
return success(BeanUtils.toBean(processDesign, ProcessDesignRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得工艺设计分页")
@PreAuthorize("@ss.hasPermission('heli:process-design:query')")
public CommonResult<PageResult<ProcessDesignRespVO>> getProcessDesignPage(@Valid ProcessDesignPageReqVO pageReqVO) {
PageResult<ProcessDesignDO> pageResult = processDesignService.getProcessDesignPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProcessDesignRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出工艺设计 Excel")
@PreAuthorize("@ss.hasPermission('heli:process-design:export')")
@OperateLog(type = EXPORT)
public void exportProcessDesignExcel(@Valid ProcessDesignPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ProcessDesignDO> list = processDesignService.getProcessDesignPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "工艺设计.xls", "数据", ProcessDesignRespVO.class,
BeanUtils.toBean(list, ProcessDesignRespVO.class));
}
// ==================== 子表(工艺设计进度) ====================
@GetMapping("/process-design-progress/list-by-process-design-id")
@Operation(summary = "获得工艺设计进度列表")
@Parameter(name = "processDesignId", description = "工艺设计id")
@PreAuthorize("@ss.hasPermission('heli:process-design:query')")
public CommonResult<List<ProcessDesignProgressDO>> getProcessDesignProgressListByProcessDesignId(@RequestParam("processDesignId") Long processDesignId) {
return success(processDesignService.getProcessDesignProgressListByProcessDesignId(processDesignId));
}
}

@ -0,0 +1,40 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.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 ProcessDesignPageReqVO extends PageParam {
@Schema(description = "生产计划id", example = "87")
private Long planId;
@Schema(description = "销售订单id", example = "27757")
private Long saleOrderId;
@Schema(description = "销售订单子项id", example = "7018")
private Long saleOrderSubId;
@Schema(description = "设计类型 铸造工艺|3D图纸|2D图纸|毛坯图纸 FOUNDRY_TECHNOLOGY_BLUEPRINT|3D_BLUEPRINT|2D_BLUEPRINT|WORKBLANK_BLUEPRINT", example = "1")
private String processDesignType;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "状态,1表示正常2表示禁用", example = "2")
private Integer status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,48 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.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 ProcessDesignRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "13152")
@ExcelProperty("自增字段,唯一")
private Long id;
@Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "87")
@ExcelProperty("生产计划id")
private Long planId;
@Schema(description = "销售订单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27757")
@ExcelProperty("销售订单id")
private Long saleOrderId;
@Schema(description = "销售订单子项id", example = "7018")
@ExcelProperty("销售订单子项id")
private Long saleOrderSubId;
@Schema(description = "设计类型 铸造工艺|3D图纸|2D图纸|毛坯图纸 FOUNDRY_TECHNOLOGY_BLUEPRINT|3D_BLUEPRINT|2D_BLUEPRINT|WORKBLANK_BLUEPRINT", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("设计类型 铸造工艺|3D图纸|2D图纸|毛坯图纸 FOUNDRY_TECHNOLOGY_BLUEPRINT|3D_BLUEPRINT|2D_BLUEPRINT|WORKBLANK_BLUEPRINT")
private String processDesignType;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
private String remark;
@Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty("状态,1表示正常2表示禁用")
private Integer status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,42 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO;
@Schema(description = "管理后台 - 工艺设计新增/修改 Request VO")
@Data
public class ProcessDesignSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "13152")
private Long id;
@Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "87")
@NotNull(message = "生产计划id不能为空")
private Long planId;
@Schema(description = "销售订单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27757")
@NotNull(message = "销售订单id不能为空")
private Long saleOrderId;
@Schema(description = "销售订单子项id", example = "7018")
private Long saleOrderSubId;
@Schema(description = "设计类型 铸造工艺|3D图纸|2D图纸|毛坯图纸 FOUNDRY_TECHNOLOGY_BLUEPRINT|3D_BLUEPRINT|2D_BLUEPRINT|WORKBLANK_BLUEPRINT", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotEmpty(message = "设计类型 铸造工艺|3D图纸|2D图纸|毛坯图纸 FOUNDRY_TECHNOLOGY_BLUEPRINT|3D_BLUEPRINT|2D_BLUEPRINT|WORKBLANK_BLUEPRINT不能为空")
private String processDesignType;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "状态,1表示正常2表示禁用不能为空")
private Integer status;
@Schema(description = "工艺设计进度列表")
private List<ProcessDesignProgressDO> processDesignProgresss;
}

@ -37,8 +37,8 @@ public class ProjectOrderPageReqVO extends PageParam {
@Schema(description = "客户id", example = "27214")
private Long customerId;
@Schema(description = "模具名称", example = "赵六")
private String mouldName;
@Schema(description = "项目名称", example = "赵六")
private String projectName;
@Schema(description = "业务线")
private String businessLine;

@ -48,9 +48,9 @@ public class ProjectOrderRespVO {
@ExcelProperty("客户")
private String customerName;
@Schema(description = "模具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("模具名称")
private String mouldName;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("项目名称")
private String projectName;
@Schema(description = "业务线", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty(value = "业务线", converter = DictConvert.class)

@ -37,9 +37,9 @@ public class ProjectOrderSaveReqVO {
@NotNull(message = "客户id不能为空")
private Long customerId;
@Schema(description = "模具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@NotEmpty(message = "模具名称不能为空")
private String mouldName;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@NotEmpty(message = "项目名称不能为空")
private String projectName;
@Schema(description = "业务线", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "业务线不能为空")

@ -94,6 +94,7 @@ public class StorageController {
List<StorageLogDO> logList = BeanUtils.toBean(matList,StorageLogDO.class);
// 同步库存单状态到日志,便于以后统计
for (StorageLogDO log : logList){
log.setId(null);
log.setStatus(targetDo.getStatus());
}
// 批量保存当前库存物料日志信息

@ -28,7 +28,7 @@ public class StoragePageReqVO extends PageParam {
private String stockNo;
@Schema(description = "上游单号")
private Long headerNo;
private String headerNo;
@Schema(description = "备注", example = "你说的对")
private String description;

@ -40,7 +40,7 @@ public class StorageRespVO {
@Schema(description = "上游单号")
@ExcelProperty("上游单号")
private Long headerNo;
private String headerNo;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")
@ -88,4 +88,8 @@ public class StorageRespVO {
@ExcelProperty("作废时间")
private LocalDateTime cancelTime;
@Schema(description = "需物料名称")
@ExcelProperty("虚物料名称")
private String vMatName;
}

@ -29,7 +29,7 @@ public class StorageSaveReqVO {
private String stockNo;
@Schema(description = "上游单号")
private Long headerNo;
private String headerNo;
@Schema(description = "备注", example = "你说的对")
private String description;

@ -1,7 +1,10 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck;
import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.StorageSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheckmat.vo.StorageCheckMatSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
@ -54,10 +57,32 @@ public class StorageCheckController {
return success(storageCheckService.createStorageCheck(createReqVO));
}
@PostMapping("/create-batch")
@Operation(summary = "批量创建盘点物料")
@PreAuthorize("@ss.hasPermission('heli:storage-mat:create')")
public CommonResult<Long> createStorageCheckMat(@Valid @RequestBody List<StorageCheckMatSaveReqVO> createReqVO, @RequestParam("checkId") Long checkId) {
storageCheckMatService.deleteCheckMatList(checkId);
for (StorageCheckMatSaveReqVO item : createReqVO) {
item.setId(null);
storageCheckMatService.createStorageCheckMat(item);
}
return success(1L);
}
@PutMapping("/update")
@Operation(summary = "更新入/出库盘点")
@PreAuthorize("@ss.hasPermission('heli:storage-check:update')")
public CommonResult<Boolean> updateStorageCheck(@Valid @RequestBody StorageCheckSaveReqVO updateReqVO) {
LocalDateTime currTime = LocalDateTime.now();
// 保存/删除按钮操作
if(updateReqVO.getStatus().equals(3)){
// 已删除时间更新
updateReqVO.setOutboundTime(currTime);
} else if(updateReqVO.getStatus().equals(2)) {
// 已提交时间更新
updateReqVO.setKeeperTime(currTime);
}
storageCheckService.updateStorageCheck(updateReqVO);
return success(true);
}
@ -65,25 +90,8 @@ public class StorageCheckController {
@PutMapping("/update-status")
@Operation(summary = "更新盘点状态")
@PreAuthorize("@ss.hasPermission('heli:storage:update')")
public CommonResult<Boolean> updateStorageCheckStatus(@Valid @RequestBody StorageCheckSaveReqVO updateReqVO) {
// 提交或者删除时记录相关操作人
LocalDateTime currTime = LocalDateTime.now();
if(updateReqVO.getStatus().equals(2)){
// 已提交时间更新
updateReqVO.setKeeperTime(currTime);
} else if(updateReqVO.getStatus().equals(3)){
// 已删除时间更新
updateReqVO.setCancelTime(currTime);
}
// 盘点信息保存
storageCheckService.updateStorageCheck(updateReqVO);
// TODO保存物料列表信息
// TODO生成入库/出库单据
return success(true);
public CommonResult<Boolean> updateStorageCheckStatus(@RequestParam("checkId") Long checkId) {
return success(storageCheckService.createStorageByCheckInfo(checkId));
}
@DeleteMapping("/delete")

@ -1,95 +1,102 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storagecheckmat;
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.storagecheckmat.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
@Tag(name = "管理后台 - 盘点物料")
@RestController
@RequestMapping("/heli/storage-check-mat")
@Validated
public class StorageCheckMatController {
@Resource
private StorageCheckMatService storageCheckMatService;
@PostMapping("/create")
@Operation(summary = "创建盘点物料")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:create')")
public CommonResult<Long> createStorageCheckMat(@Valid @RequestBody StorageCheckMatSaveReqVO createReqVO) {
return success(storageCheckMatService.createStorageCheckMat(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新盘点物料")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:update')")
public CommonResult<Boolean> updateStorageCheckMat(@Valid @RequestBody StorageCheckMatSaveReqVO updateReqVO) {
storageCheckMatService.updateStorageCheckMat(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除盘点物料")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:delete')")
public CommonResult<Boolean> deleteStorageCheckMat(@RequestParam("id") Long id) {
storageCheckMatService.deleteStorageCheckMat(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得盘点物料")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:query')")
public CommonResult<StorageCheckMatRespVO> getStorageCheckMat(@RequestParam("id") Long id) {
StorageCheckMatDO storageCheckMat = storageCheckMatService.getStorageCheckMat(id);
return success(BeanUtils.toBean(storageCheckMat, StorageCheckMatRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得盘点物料分页")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:query')")
public CommonResult<PageResult<StorageCheckMatRespVO>> getStorageCheckMatPage(@Valid StorageCheckMatPageReqVO pageReqVO) {
PageResult<StorageCheckMatDO> pageResult = storageCheckMatService.getStorageCheckMatPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StorageCheckMatRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出盘点物料 Excel")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:export')")
@OperateLog(type = EXPORT)
public void exportStorageCheckMatExcel(@Valid StorageCheckMatPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<StorageCheckMatDO> list = storageCheckMatService.getStorageCheckMatPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "盘点物料.xls", "数据", StorageCheckMatRespVO.class,
BeanUtils.toBean(list, StorageCheckMatRespVO.class));
}
}
package com.chanko.yunxi.mes.module.heli.controller.admin.storagecheckmat;
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.storagecheckmat.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
@Tag(name = "管理后台 - 盘点物料")
@RestController
@RequestMapping("/heli/storage-check-mat")
@Validated
public class StorageCheckMatController {
@Resource
private StorageCheckMatService storageCheckMatService;
@PostMapping("/create")
@Operation(summary = "创建盘点物料")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:create')")
public CommonResult<Long> createStorageCheckMat(@Valid @RequestBody StorageCheckMatSaveReqVO createReqVO) {
return success(storageCheckMatService.createStorageCheckMat(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新盘点物料")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:update')")
public CommonResult<Boolean> updateStorageCheckMat(@Valid @RequestBody StorageCheckMatSaveReqVO updateReqVO) {
storageCheckMatService.updateStorageCheckMat(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除盘点物料")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:delete')")
public CommonResult<Boolean> deleteStorageCheckMat(@RequestParam("id") Long id) {
storageCheckMatService.deleteStorageCheckMat(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得盘点物料")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:query')")
public CommonResult<StorageCheckMatRespVO> getStorageCheckMat(@RequestParam("id") Long id) {
StorageCheckMatDO storageCheckMat = storageCheckMatService.getStorageCheckMat(id);
return success(BeanUtils.toBean(storageCheckMat, StorageCheckMatRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得盘点物料分页")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:query')")
public CommonResult<PageResult<StorageCheckMatRespVO>> getStorageCheckMatPage(@Valid StorageCheckMatPageReqVO pageReqVO) {
PageResult<StorageCheckMatDO> pageResult = storageCheckMatService.getStorageCheckMatPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StorageCheckMatRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得盘点物料分页")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:query')")
public CommonResult<List<StorageCheckMatRespVO>> getStorageCheckMatListByCheckID(@RequestParam("checkId") Long checkId) {
List<StorageCheckMatDO> pageResult = storageCheckMatService.getStorageMatListByCheckId(checkId);
return success(BeanUtils.toBean(pageResult, StorageCheckMatRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出盘点物料 Excel")
@PreAuthorize("@ss.hasPermission('heli:storage-check-mat:export')")
@OperateLog(type = EXPORT)
public void exportStorageCheckMatExcel(@Valid StorageCheckMatPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<StorageCheckMatDO> list = storageCheckMatService.getStorageCheckMatPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "盘点物料.xls", "数据", StorageCheckMatRespVO.class,
BeanUtils.toBean(list, StorageCheckMatRespVO.class));
}
}

@ -13,6 +13,7 @@ import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.math.BigDecimal;
import java.util.*;
import java.io.IOException;
@ -89,6 +90,26 @@ public class StorageLogController {
return success(pageResult);
}
@GetMapping("/matRest")
@Operation(summary = "获得最新库存数量")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
public CommonResult<BigDecimal> getStorageNowPage(@RequestParam("matId") Long matId, @RequestParam("pnId") Long pnId) {
List<StorageLogNowDO> pageResult = storageLogService.selectNowByMatPnId(matId,pnId);
BigDecimal matRest = BigDecimal.valueOf(0);
for(StorageLogNowDO item : pageResult){
matRest = item.getStorageOkQty();
}
return success(matRest);
}
@GetMapping("/all")
@Operation(summary = "获得全部库存数据")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
public CommonResult<List<StorageLogNowDO>> getStorageNowList(@Valid StorageNowAllReqVO queryReqVO) {
List<StorageLogNowDO> pageResult = storageLogService.getStorageNowList(queryReqVO);
return success(pageResult);
}
@GetMapping("/export-excel")
@Operation(summary = "导出入/出库日志 Excel")
@PreAuthorize("@ss.hasPermission('heli:storage-log:export')")

@ -0,0 +1,27 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - 入/出库日志分页 Request VO")
@Data
public class StorageNowAllReqVO {
@Schema(description = "物料编码")
private String matCode;
@Schema(description = "物料类型")
private String matType;
@Schema(description = "是否排除库存为0的物料")
private Integer noZero;
@Schema(description = "仓库id")
private Integer whId;
}

@ -87,8 +87,8 @@ public class StorageMatController {
@GetMapping("/page")
@Operation(summary = "获得入/出库物料分页")
@PreAuthorize("@ss.hasPermission('heli:storage-mat:query')")
public CommonResult<PageResult<StorageMatRespVO>> getStorageMatPage(@Valid StorageMatPageReqVO pageReqVO) {
PageResult<StorageMatDO> pageResult = storageMatService.getStorageMatPage(pageReqVO);
public CommonResult<List<StorageMatRespVO>> getStorageMatPage(@Valid StorageMatPageReqVO pageReqVO) {
List<StorageMatDO> pageResult = storageMatService.getStorageMatPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, StorageMatRespVO.class));
}
@ -99,7 +99,7 @@ public class StorageMatController {
public void exportStorageMatExcel(@Valid StorageMatPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<StorageMatDO> list = storageMatService.getStorageMatPage(pageReqVO).getList();
List<StorageMatDO> list = storageMatService.getStorageMatPage(pageReqVO);
// 导出 Excel
ExcelUtils.write(response, "入/出库物料.xls", "数据", StorageMatRespVO.class,
BeanUtils.toBean(list, StorageMatRespVO.class));
@ -110,8 +110,8 @@ public class StorageMatController {
@Operation(summary = "获得入/出库物料")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:storage-mat:query')")
public CommonResult<List<StorageMatValidRespVO>> getStorageMatList() {
List<StorageMatValidRespVO> list = storageMatService.getStorageMatList();
public CommonResult<List<StorageMatValidRespVO>> getStorageMatList(@RequestParam("whId") Long whId) {
List<StorageMatValidRespVO> list = storageMatService.getStorageMatList(whId);
return success(BeanUtils.toBean(list, StorageMatValidRespVO.class));
}

@ -1,14 +1,15 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.DeliverOrderStatusEnum;
import lombok.*;
import java.util.*;
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
@ -114,7 +115,7 @@ public class DeliverOrderDO extends BaseDO {
private String contractNo;
@TableField(exist = false)
private String mouldName;
private String projectName;
@TableField(exist = false)
private String property;
@ -122,6 +123,15 @@ public class DeliverOrderDO extends BaseDO {
@TableField(exist = false)
private String customerName;
@TableField(exist = false)
private String deliverPersonName;
@TableField(exist = false)
private String creatorName;
@TableField(exist = false)
private String businessManName;
public boolean canDeliver() {
return DeliverOrderStatusEnum.SAVE.getCode() == this.deliverStatus.intValue();
}

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub;
package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder;
import lombok.*;
import java.util.*;
@ -7,6 +7,8 @@ import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import javax.validation.constraints.Min;
/**
* DO
*
@ -48,6 +50,7 @@ public class DeliverOrderSubDO extends BaseDO {
/**
*
*/
@Min(value = 1, message = "数量必须大于零")
private Integer amount;
/**
*

@ -0,0 +1,43 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.equip;
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_equip")
@KeySequence("base_equip_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EquipDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String name;
/**
* id base_mould_type id
*/
private Long mouldTypeId;
/**
* ,121
*/
private Integer status;
}

@ -0,0 +1,55 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign;
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("pro_process_design")
@KeySequence("pro_process_design_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProcessDesignDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
* id
*/
private Long planId;
/**
* id
*/
private Long saleOrderId;
/**
* id
*/
private Long saleOrderSubId;
/**
* |3D|2D| FOUNDRY_TECHNOLOGY_BLUEPRINT|3D_BLUEPRINT|2D_BLUEPRINT|WORKBLANK_BLUEPRINT
*/
private String processDesignType;
/**
*
*/
private String remark;
/**
* ,12
*/
private Integer status;
}

@ -0,0 +1,52 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress;
import lombok.*;
import java.util.*;
import java.math.BigDecimal;
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("pro_process_design_progress")
@KeySequence("pro_process_design_progress_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProcessDesignProgressDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
* id
*/
private Long processDesignId;
/**
* (%)
*/
private BigDecimal progress;
/**
*
*/
private String blueprintLink;
/**
*
*/
private String remark;
/**
* ,12
*/
private Integer status;
}

@ -59,9 +59,9 @@ public class ProjectOrderDO extends BaseDO {
*/
private Long customerId;
/**
*
*
*/
private String mouldName;
private String projectName;
/**
* 线
*
@ -243,7 +243,7 @@ public class ProjectOrderDO extends BaseDO {
}
public boolean canDelete(){
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SAVE.getCode() && this.hasAlter.intValue() == YesOrNoEnum.NO.getCode();
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SAVE.getCode() && this.hasAlter.intValue() == YesOrNoEnum.N.getCode();
}
public boolean canOperate(OperateTypeEnum operateTypeEnum){

@ -55,7 +55,7 @@ public class StorageDO extends BaseDO {
/**
*
*/
private Long headerNo;
private String headerNo;
/**
*
*/
@ -99,4 +99,6 @@ public class StorageDO extends BaseDO {
*/
private LocalDateTime createTime;
private String vMatName;
}

@ -6,6 +6,7 @@ import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* / DO
@ -27,20 +28,17 @@ public class StorageLogNowDO extends BaseDO {
@TableId
private Long id;
/**
*
*/
private BigDecimal storageOkQty;
/**
*
*/
private String lotNo;
private String matName;
private String shortName;
private String matCode;
private String matType;
private String matSpec;
private String matBrand;
private String matUnit;
private Long whId;
private String whName;
@ -51,9 +49,7 @@ public class StorageLogNowDO extends BaseDO {
private Long pnId;
private String pnName;
private String shortName;
private String matSpec;
private String matBrand;
private String matUnit;
}

@ -6,8 +6,6 @@ import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.DeliverOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.DeptDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
@ -25,8 +23,8 @@ public interface DeliverOrderMapper extends BaseMapperX<DeliverOrderDO> {
MPJLambdaWrapper<DeliverOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(DeliverOrderDO.class)
.select("u.nickname as deliverPersonName", "e.name as customerName")
.select("GROUP_CONCAT(distinct p.code) as saleOrderCode", "GROUP_CONCAT(distinct p.mould_name) as mouldName"
, "GROUP_CONCAT(distinct p.contract_no) as contractNo", "GROUP_CONCAT(distinct p.property) as property")
.select("GROUP_CONCAT(distinct p.code) as saleOrderCode", "GROUP_CONCAT(p.project_name) as projectName"
, "GROUP_CONCAT(p.contract_no) as contractNo", "GROUP_CONCAT(p.property) as property")
.leftJoin("project_sale_order p on FIND_IN_SET(p.id, t.sale_order_ids)")
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, DeliverOrderDO::getDeliverPerson)
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, DeliverOrderDO::getCustomerId)
@ -36,7 +34,7 @@ public interface DeliverOrderMapper extends BaseMapperX<DeliverOrderDO> {
query.like(!StringUtils.isEmpty(reqVO.getCode()), DeliverOrderDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getSaleOrderCode()), "p.code", reqVO.getSaleOrderCode())
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), "e.name", reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getMouldName()), "p.mould_name", reqVO.getMouldName())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), "p.project_name", reqVO.getProjectName())
.between(reqVO.getDeliverDate() != null && reqVO.getDeliverDate().length == 2,
DeliverOrderDO::getDeliverDate, ArrayUtils.get(reqVO.getDeliverDate(), 0), ArrayUtils.get(reqVO.getDeliverDate(), 1))
.eq(reqVO.getDeliverStatus() != null, DeliverOrderDO::getDeliverStatus, reqVO.getDeliverStatus());
@ -46,12 +44,14 @@ public interface DeliverOrderMapper extends BaseMapperX<DeliverOrderDO> {
default DeliverOrderDO selectById(Long id) {
MPJLambdaWrapper<DeliverOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(DeliverOrderDO.class)
.select("u.nickname as deliverPersonName", "e.name as customerName")
.select("GROUP_CONCAT(distinct p.code) as saleOrderCode", "GROUP_CONCAT(distinct p.mould_name) as mouldName"
, "GROUP_CONCAT(distinct p.contract_no) as contractNo", "GROUP_CONCAT(distinct p.property) as property")
.select("u.nickname as deliverPersonName", "e.name as customerName", "u1.nickname as creatorName", "u2.nickname as businessManName")
.select("GROUP_CONCAT(distinct p.code) as saleOrderCode", "GROUP_CONCAT(p.project_name) as projectName"
, "GROUP_CONCAT(p.contract_no) as contractNo", "GROUP_CONCAT(p.property) as property")
.leftJoin("project_sale_order p on FIND_IN_SET(p.id, t.sale_order_ids)")
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, DeliverOrderDO::getCustomerId)
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, DeliverOrderDO::getDeliverPerson)
.leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, DeliverOrderDO::getCreator)
.leftJoin("system_users u2 on u2.id = p.business_man")
.eq(DeliverOrderDO::getId, id)
.groupBy(DeliverOrderDO::getId)
.last("LIMIT 1")

@ -1,14 +1,11 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.deliverordersub;
package com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder;
import java.util.*;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
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.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* Mapper
*
@ -25,4 +22,4 @@ public interface DeliverOrderSubMapper extends BaseMapperX<DeliverOrderSubDO> {
return delete(DeliverOrderSubDO::getDeliveryOrderId, deliveryOrderId);
}
}
}

@ -0,0 +1,34 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.equip;
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.equip.EquipDO;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.equip.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface EquipMapper extends BaseMapperX<EquipDO> {
default PageResult<EquipDO> selectPage(EquipPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<EquipDO>()
.eqIfPresent(EquipDO::getId, reqVO.getId())
.likeIfPresent(EquipDO::getName, reqVO.getName())
.eqIfPresent(EquipDO::getMouldTypeId, reqVO.getMouldTypeId())
.eqIfPresent(EquipDO::getStatus, reqVO.getStatus())
.eqIfPresent(EquipDO::getCreator, reqVO.getCreator())
.betweenIfPresent(EquipDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(EquipDO::getUpdater, reqVO.getUpdater())
.betweenIfPresent(EquipDO::getUpdateTime, reqVO.getUpdateTime())
.eqIfPresent(EquipDO::getDeleted, reqVO.getDeleted())
.orderByDesc(EquipDO::getId));
}
}

@ -1,14 +1,20 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.material;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
/**
* Mapper
*
@ -27,9 +33,21 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
query.like(!StringUtils.isEmpty(reqVO.getName()), MaterialDO::getName, reqVO.getName())
.like(!StringUtils.isEmpty(reqVO.getCode()), MaterialDO::getCode, reqVO.getCode())
.eq(!StringUtils.isEmpty(reqVO.getMaterialType()), MaterialDO::getMaterialType, reqVO.getMaterialType())
.eq(reqVO.getStatus() != null, MaterialDO::getStatus, reqVO.getStatus());
.eq(reqVO.getStatus() != null, MaterialDO::getStatus, reqVO.getStatus())
.eq(true,MaterialDO::getVirtualPart, YesOrNoEnum.N.name())
.eq(!StringUtils.isEmpty(reqVO.getVirtualPart()), MaterialDO::getVirtualPart, reqVO.getVirtualPart());
return selectPage(reqVO, query);
}
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<MaterialDO>().select("id", "name","short_name","code","material_type","spec","unit","brand").eq("virtual_part", YesOrNoEnum.N.name()).lambda());
}
default List<Map<String, Object>> selectSimpleVirtualList() {
return selectMaps(new QueryWrapper<MaterialDO>().select("id", "name","short_name","code","material_type","spec","unit","brand").eq("virtual_part", YesOrNoEnum.Y.name()).lambda());
}
}

@ -2,10 +2,12 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.mouldtype;
import java.util.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.mouldtype.MouldTypeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.mouldtype.vo.*;
@ -24,5 +26,9 @@ public interface MouldTypeMapper extends BaseMapperX<MouldTypeDO> {
.betweenIfPresent(MouldTypeDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(MouldTypeDO::getId));
}
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<MouldTypeDO>().select("id", "name").eq("status","1").lambda());
}
}

@ -37,7 +37,7 @@ public interface PnMapper extends BaseMapperX<PnDO> {
}
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<PnDO>().select("id", "pn_name","rg_id").lambda());
return selectMaps(new QueryWrapper<PnDO>().select("id", "pn_name","rg_id","wh_id").eq("pn_status","1").lambda());
}
}

@ -0,0 +1,32 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign;
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.processdesign.ProcessDesignDO;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
default PageResult<ProcessDesignDO> selectPage(ProcessDesignPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProcessDesignDO>()
.eqIfPresent(ProcessDesignDO::getPlanId, reqVO.getPlanId())
.eqIfPresent(ProcessDesignDO::getSaleOrderId, reqVO.getSaleOrderId())
.eqIfPresent(ProcessDesignDO::getSaleOrderSubId, reqVO.getSaleOrderSubId())
.eqIfPresent(ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType())
.eqIfPresent(ProcessDesignDO::getRemark, reqVO.getRemark())
.eqIfPresent(ProcessDesignDO::getStatus, reqVO.getStatus())
.betweenIfPresent(ProcessDesignDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ProcessDesignDO::getId));
}
}

@ -0,0 +1,28 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.processdesignprogress;
import java.util.*;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
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.processdesignprogress.ProcessDesignProgressDO;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ProcessDesignProgressMapper extends BaseMapperX<ProcessDesignProgressDO> {
default List<ProcessDesignProgressDO> selectListByProcessDesignId(Long processDesignId) {
return selectList(ProcessDesignProgressDO::getProcessDesignId, processDesignId);
}
default int deleteByProcessDesignId(Long processDesignId) {
return delete(ProcessDesignProgressDO::getProcessDesignId, processDesignId);
}
}

@ -32,7 +32,7 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
query.like(!StringUtils.isEmpty(reqVO.getCode()), ProjectOrderDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), "e.name", reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getBusinessManName()), "u.nickname", reqVO.getBusinessManName())
.like(!StringUtils.isEmpty(reqVO.getMouldName()), ProjectOrderDO::getMouldName, reqVO.getMouldName())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getContractNo()), ProjectOrderDO::getContractNo, reqVO.getContractNo())
.eq(reqVO.getHasPrice() != null, ProjectOrderDO::getHasPrice, reqVO.getHasPrice())
.eq(reqVO.getOrderStatus() != null, ProjectOrderDO::getOrderStatus, reqVO.getOrderStatus())
@ -49,10 +49,11 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
default ProjectOrderDO selectById(Long id) {
MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderDO.class)
.select("u.nickname as businessManName", "d.name as businessDeptName", "u1.nickname as creatorName")
.select("u.nickname as businessManName", "d.name as businessDeptName", "u1.nickname as creatorName", "e.name as customerName")
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, ProjectOrderDO::getBusinessMan)
.leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, ProjectOrderDO::getCreator)
.leftJoin(DeptDO.class, "d", DeptDO::getId, ProjectOrderDO::getBusinessDeptId)
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.eq(ProjectOrderDO::getId, id)
.last("LIMIT 1")
.disableSubLogicDel();

@ -35,7 +35,7 @@ public interface RgMapper extends BaseMapperX<RgDO> {
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<RgDO>().select("id", "rg_name","wh_id").lambda());
return selectMaps(new QueryWrapper<RgDO>().select("id", "rg_name","wh_id").eq("rg_status","1").lambda());
}

@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.DeptDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;

@ -35,4 +35,10 @@ public interface StorageCheckMatMapper extends BaseMapperX<StorageCheckMatDO> {
.orderByDesc(StorageCheckMatDO::getId));
}
default List<StorageCheckMatDO> selectListByCheckID(Long checkId) {
return selectList(new LambdaQueryWrapperX<StorageCheckMatDO>()
.eqIfPresent(StorageCheckMatDO::getCheckId, checkId)
.orderByDesc(StorageCheckMatDO::getId));
}
}

@ -4,9 +4,15 @@ import com.alibaba.druid.util.StringUtils;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.hpsf.Decimal;
import java.math.BigDecimal;
import java.util.List;
/**
* / Mapper
@ -26,11 +32,20 @@ public interface StorageLogNowMapper extends BaseMapperX<StorageLogNowDO> {
.eq(reqVO.getWhId()!= null,StorageLogNowDO::getWhId, reqVO.getWhId())
.eq(reqVO.getRgId()!= null,StorageLogNowDO::getRgId, reqVO.getRgId())
.eq(reqVO.getPnId()!= null,StorageLogNowDO::getPnId, reqVO.getPnId())
.ne(true,StorageLogNowDO::getStorageOkQty,0)
.like(!StringUtils.isEmpty(reqVO.getMatName()), StorageLogNowDO::getMatName, reqVO.getMatName())
.like(!StringUtils.isEmpty(reqVO.getMatCode()), StorageLogNowDO::getMatCode, reqVO.getMatCode())
.like(!StringUtils.isEmpty(reqVO.getLotNo()),StorageLogNowDO::getLotNo, reqVO.getLotNo());
return selectPage(reqVO,query);
}
PageResult<StorageLogNowDO> selectAllPage(StorageLogPageReqVO reqVO);
List<StorageLogNowDO> selectNoZero(StorageNowAllReqVO reqVO);
List<StorageLogNowDO> selectNowList(StorageNowAllReqVO reqVO);
List<StorageLogNowDO> selectNowByMatPnId(@Param("matId")Long matId,@Param("pnId")Long pnId);
}

@ -42,9 +42,8 @@ public interface StorageMatMapper extends BaseMapperX<StorageMatDO> {
default List<StorageMatDO> selectMatByStorckID(Long stockId) {
MPJLambdaWrapper<StorageMatDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageMatDO.class)
.eq(StorageMatDO::getStockId, stockId);
query.selectAll(StorageMatDO.class).eq(stockId!= null && stockId!= 0,StorageMatDO::getStockId, stockId);
return selectList(query);
}
List<StorageMatValidRespVO> selectStorageMatValid();
List<StorageMatValidRespVO> selectStorageMatValid(Long whId);
}

@ -42,7 +42,7 @@ public interface WarehouseMapper extends BaseMapperX<WarehouseDO> {
default List<Map<String, Object>> selectSimpleList() {
return selectMaps(new QueryWrapper<WarehouseDO>().select("id", "wh_name").lambda());
return selectMaps(new QueryWrapper<WarehouseDO>().select("id", "wh_name").eq("wh_status","1").lambda());
}
}

@ -0,0 +1,194 @@
package com.chanko.yunxi.mes.module.heli.manager;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.DeliverOrderSaveReqVO;
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.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
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.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
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.enums.*;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN;
/**
*
*
* @author chenxi
* @date 2024-01-31 10:03
*/
@Component
public class CrossOrderManager {
@Resource
private ProjectOrderMapper projectOrderMapper;
@Resource
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private DeliverOrderSubMapper deliverOrderSubMapper;
@Resource
private StorageMapper storageMapper;
@Resource
private StorageMatMapper storageMatMapper;
@Resource
private StorageLogMapper storageLogMapper;
@Resource
private MaterialMapper materialMapper;
/**
*
* @param projectOrderIds
*/
@Transactional(rollbackFor = Exception.class)
public void refreshProjectOrderDeliverStatus(String... projectOrderIds) {
// 锁定订单
for (String projectOrderId : projectOrderIds) {
ProjectOrderDO projectOrderDO = projectOrderMapper.selectOne(new LambdaQueryWrapper<ProjectOrderDO>() {{
eq(ProjectOrderDO::getId, projectOrderId);
last("LIMIT 1 FOR UPDATE");
}});
// 查询关联子项
List<ProjectOrderSubDO> projectOrderSubDOList = projectOrderSubMapper.selectListByProjectOrderId(projectOrderDO.getId());
// 查询发货记录
MPJLambdaWrapper<DeliverOrderSubDO> historyDeliveredSubQuery = new MPJLambdaWrapper<>();
historyDeliveredSubQuery.selectAll(DeliverOrderSubDO.class)
.leftJoin(DeliverOrderDO.class, DeliverOrderDO::getId, DeliverOrderSubDO::getDeliveryOrderId)
.eq(DeliverOrderDO::getDeliverStatus, DeliverOrderStatusEnum.DELIVER.getCode())
.in(DeliverOrderSubDO::getSaleOrderSubId, projectOrderSubDOList.stream().map(ProjectOrderSubDO::getId).collect(Collectors.toSet()));
List<DeliverOrderSubDO> historyDeliveredSubList = deliverOrderSubMapper.selectList(historyDeliveredSubQuery);
if(historyDeliveredSubList.isEmpty()) return;
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
// 考虑变更订单情况 只需判断历史发货是否大于等于订单子项数量
boolean allDone = projectOrderSubDOList.stream().allMatch(projectOrderSubDO -> {
List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(projectOrderSubDO.getId());
int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
return historyDeliveredAmount >= projectOrderSubDO.getAmount();
});
if(allDone){
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.ALL.getCode());
}else{
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.PART.getCode());
}
projectOrderMapper.updateById(projectOrderDO);
}
}
/**
*
* @param updateReqVO
*/
@Transactional(rollbackFor = Exception.class)
public void generateStockOutOrder(DeliverOrderSaveReqVO updateReqVO) {
// 出库表处理
StorageDO storageDO = new StorageDO();
storageDO.setStockType(StockTypeEnum.OUT.getCode())
.setStockInType(StockOutTypeEnum.SALE.getCode())
.setStockNo(UUID.fastUUID().toString(true))
.setHeaderNo(updateReqVO.getCode())
.setStatus(StorageStatusEnum.SUBMIT.getCode())
.setCreateTime(updateReqVO.getDeliverDate())
.setVMatName(updateReqVO.getDeliverOrderSubs().stream().map(DeliverOrderSubDO::getName).collect(Collectors.joining(",")))
.setDescription(String.format("由发货单%s操作发货后自动生成", updateReqVO.getCode()));
storageMapper.insert(storageDO);
storageDO.setStockNo(STOCK_IN.getCode(storageDO.getId().toString()));
storageMapper.updateById(storageDO);
// 查询物料id
Set<String> materialCodeList = updateReqVO.getDeliverOrderSubs().stream().map(deliverOrderSubDO -> {
return String.format("%s-%s", deliverOrderSubDO.getSaleOrderCode(), deliverOrderSubDO.getName());
}).collect(Collectors.toSet());
List<MaterialDO> subMaterialDOList = materialMapper.selectList(new LambdaQueryWrapper<MaterialDO>() {{
in(MaterialDO::getCode, materialCodeList);
eq(MaterialDO::getVirtualPart, YesOrNoEnum.Y.name());
}});
Map<String, List<MaterialDO>> materialGroupByCode = subMaterialDOList.stream().collect(Collectors.groupingBy(MaterialDO::getCode));
// 出库物料明细
ArrayList<StorageMatDO> storageMatDOList = new ArrayList<>(16);
for (DeliverOrderSubDO deliverOrderSub : updateReqVO.getDeliverOrderSubs()) {
MaterialDO materialDO = materialGroupByCode.get(String.format("%s-%s", deliverOrderSub.getSaleOrderCode(), deliverOrderSub.getName())).get(0);
StorageMatDO storageMatDO = new StorageMatDO();
storageMatDO.setStockId(storageDO.getId())
.setMatId(materialDO.getId())
.setStorageOkQty(new BigDecimal(deliverOrderSub.getAmount()));
storageMatDOList.add(storageMatDO);
}
storageMatMapper.insertBatch(storageMatDOList);
// 将物料信息转化日志信息
List<StorageLogDO> logList = BeanUtils.toBean(storageMatDOList,StorageLogDO.class);
// 同步库存单状态到日志,便于以后统计
for (StorageLogDO log : logList){
log.setStatus(storageDO.getStatus());
}
// 批量保存当前库存物料日志信息
storageLogMapper.insertBatch(logList);
}
/**
*
* @author chenxi
* @date 2024-02-01 05:32
*/
@Transactional(rollbackFor = Exception.class)
public void generateVirtualMaterial(String projectOrderCode, List<ProjectOrderSubDO> projectOrderSubs) {
ArrayList<MaterialDO> pendingDOList = new ArrayList<>(16);
projectOrderSubs.forEach(projectOrderSubDO -> {
MaterialDO materialDO = new MaterialDO();
materialDO.setCode(String.format("%s-%s", projectOrderCode, projectOrderSubDO.getName()))
.setName(projectOrderSubDO.getName())
.setMaterialType(MaterialTypeEnum.VIRTUAL.getCode())
.setUnit(projectOrderSubDO.getUnit())
.setVirtualPart(YesOrNoEnum.Y.name());
pendingDOList.add(materialDO);
});
// 判断是否存在对应的编码 如存在则更新 不存在则插入
Map<String, List<MaterialDO>> historyGroupByCode = new HashMap<>(16);
List<MaterialDO> historyDOList = materialMapper.selectList(new LambdaQueryWrapper<MaterialDO>() {{
in(MaterialDO::getCode, pendingDOList.stream().map(MaterialDO::getCode).collect(Collectors.toSet()));
}});
if(historyDOList != null && !historyDOList.isEmpty()){
historyGroupByCode.putAll(historyDOList.stream().collect(Collectors.groupingBy(MaterialDO::getCode)));
}
pendingDOList.forEach(thisTimeMaterialDO -> {
List<MaterialDO> historyMaterialList = historyGroupByCode.get(thisTimeMaterialDO.getCode());
if(historyMaterialList != null && !historyMaterialList.isEmpty()){
MaterialDO historyMaterialDO = historyMaterialList.get(0);
thisTimeMaterialDO.setId(historyMaterialDO.getId()).setCreateTime(historyMaterialDO.getCreateTime());
materialMapper.updateById(thisTimeMaterialDO);
}else{
materialMapper.insert(thisTimeMaterialDO);
}
});
}
}

@ -4,7 +4,7 @@ import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;

@ -7,26 +7,35 @@ import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.DeliverOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.DeliverOrderSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverordersub.DeliverOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.DeliverOrderStatusEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProjectOrderDeliverStatusEnum;
import com.chanko.yunxi.mes.module.heli.manager.CrossOrderManager;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PROJECT_DELIVERY_ORDER;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.DELIVER_ORDER_NOT_EXISTS;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.INVALID_OPERATE;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* Service
@ -43,10 +52,22 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
private DeliverOrderSubMapper deliverOrderSubMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private ProjectOrderMapper projectOrderMapper;
@Resource
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private CrossOrderManager crossOrderManager;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createDeliverOrder(DeliverOrderSaveReqVO createReqVO) {
if(OperateTypeEnum.valueOf(createReqVO.getActive()) == OperateTypeEnum.DELIVER){
// 超额校验
overageDeliverValidate(createReqVO.getSaleOrderIds(), createReqVO.getDeliverOrderSubs());
}
// 插入
DeliverOrderDO deliverOrder = BeanUtils.toBean(createReqVO, DeliverOrderDO.class);
// 月度流水号
@ -60,9 +81,18 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
if(createReqVO.getDeliverOrderSubs() != null && !createReqVO.getDeliverOrderSubs().isEmpty()){
createDeliverOrderSubList(deliverOrder.getId(), createReqVO.getDeliverOrderSubs());
}
if(createReqVO.getDeliverOrderOtherSubs() != null && !createReqVO.getDeliverOrderOtherSubs().isEmpty()){
createDeliverOrderSubList(deliverOrder.getId(), createReqVO.getDeliverOrderOtherSubs());
}
createReqVO.setId(deliverOrder.getId()).setCode(deliverOrder.getCode());
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(createReqVO.getActive());
if(operateTypeEnum == OperateTypeEnum.DELIVER) {
crossOrderManager.refreshProjectOrderDeliverStatus(createReqVO.getSaleOrderIds().split(","));
}
// 返回
return deliverOrder.getId();
}
@ -72,9 +102,13 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
public void updateDeliverOrder(DeliverOrderSaveReqVO updateReqVO) {
// 校验存在
DeliverOrderDO oldDO = validateDeliverOrderExists(updateReqVO.getId());
if(!oldDO.canOperate(OperateTypeEnum.valueOf(updateReqVO.getActive()))){
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(updateReqVO.getActive());
if(!oldDO.canOperate(operateTypeEnum)){
throw exception(INVALID_OPERATE);
}
// 超额校验
overageDeliverValidate(updateReqVO.getSaleOrderIds(), updateReqVO.getDeliverOrderSubs());
// 更新
DeliverOrderDO updateObj = BeanUtils.toBean(updateReqVO, DeliverOrderDO.class);
updateObj.setDeliverStatus(DeliverOrderStatusEnum.valueOf(updateReqVO.getActive()).getCode());
@ -82,7 +116,56 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
updateReqVO.setDeliverStatus(updateObj.getDeliverStatus());
// 更新子表
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs());
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs(), updateReqVO.getDeliverOrderOtherSubs());
if(updateObj.getDeliverStatus().intValue() == DeliverOrderStatusEnum.DELIVER.getCode()) {
crossOrderManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","));
crossOrderManager.generateStockOutOrder(updateReqVO);
}
}
private void overageDeliverValidate(String saleOrderIds, List<DeliverOrderSubDO> thisTimeSubs) {
List<DeliverOrderSubDO> thisTimeRelaSubList = thisTimeSubs.stream().filter(deliverOrderSubDO -> deliverOrderSubDO.getSaleOrderSubId() != null).collect(Collectors.toList());
if(!thisTimeRelaSubList.isEmpty()){
// 锁定订单
LambdaQueryWrapper<ProjectOrderDO> projectQuery = new LambdaQueryWrapper<>();
projectQuery.in(ProjectOrderDO::getId, saleOrderIds.split(",")).last("FOR UPDATE");
List<ProjectOrderDO> projectOrderDOList = projectOrderMapper.selectList(projectQuery);
// 状态判断 已发货不容许操作
boolean anyoneDone = projectOrderDOList.stream().anyMatch(projectOrderDO -> {
return projectOrderDO.getOrderStatus().intValue() == ProjectOrderDeliverStatusEnum.ALL.getCode();
});
if(anyoneDone){
throw exception(RELATION_PROJECT_ORDER_HAS_DONE);
}
// 查询关联子项目信息判断额度
Map<Long, List<DeliverOrderSubDO>> thisTimeSubsGroupBySaleSubId = thisTimeRelaSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
List<ProjectOrderSubDO> relaProjectOrderSubList = projectOrderSubMapper.selectBatchIds(thisTimeSubsGroupBySaleSubId.keySet());
// 查询历史发货信息
MPJLambdaWrapper<DeliverOrderSubDO> historyDeliveredSubQuery = new MPJLambdaWrapper<>();
historyDeliveredSubQuery.selectAll(DeliverOrderSubDO.class)
.leftJoin(DeliverOrderDO.class, DeliverOrderDO::getId, DeliverOrderSubDO::getDeliveryOrderId)
.eq(DeliverOrderDO::getDeliverStatus, DeliverOrderStatusEnum.DELIVER.getCode())
.in(DeliverOrderSubDO::getSaleOrderSubId, thisTimeSubsGroupBySaleSubId.keySet());
List<DeliverOrderSubDO> historyDeliveredSubList = deliverOrderSubMapper.selectList(historyDeliveredSubQuery);
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
// 关联额度-历史发货额度-本次发货额度 >= 0 则可通过
boolean allDeliverable = relaProjectOrderSubList.stream().allMatch(relaSub -> {
int relaAmount = relaSub.getAmount();
List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(relaSub.getId());
int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
int thisTimeAmount = thisTimeSubsGroupBySaleSubId.get(relaSub.getId()).get(0).getAmount();
return relaAmount-historyDeliveredAmount-thisTimeAmount >= 0;
});
if(!allDeliverable){
throw exception(DELIVER_AMOUNT_OVERFLOW);
}
}
}
@Override
@ -140,10 +223,14 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
deliverOrderSubMapper.insertBatch(list);
}
private void updateDeliverOrderSubList(Long deliveryOrderId, List<DeliverOrderSubDO> list) {
private void updateDeliverOrderSubList(Long deliveryOrderId, List<DeliverOrderSubDO> list, @Valid List<DeliverOrderSubDO> deliverOrderOtherSubs) {
deleteDeliverOrderSubByDeliveryOrderId(deliveryOrderId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createDeliverOrderSubList(deliveryOrderId, list);
if(deliverOrderOtherSubs != null && !deliverOrderOtherSubs.isEmpty()){
deliverOrderOtherSubs.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createDeliverOrderSubList(deliveryOrderId, deliverOrderOtherSubs);
}
}
private void deleteDeliverOrderSubByDeliveryOrderId(Long deliveryOrderId) {

@ -0,0 +1,55 @@
package com.chanko.yunxi.mes.module.heli.service.equip;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.equip.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface EquipService {
/**
*
*
* @param createReqVO
* @return
*/
Long createEquip(@Valid EquipSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateEquip(@Valid EquipSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteEquip(Long id);
/**
*
*
* @param id
* @return
*/
EquipDO getEquip(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<EquipDO> getEquipPage(EquipPageReqVO pageReqVO);
}

@ -0,0 +1,74 @@
package com.chanko.yunxi.mes.module.heli.service.equip;
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.equip.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
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.equip.EquipMapper;
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 EquipServiceImpl implements EquipService {
@Resource
private EquipMapper equipMapper;
@Override
public Long createEquip(EquipSaveReqVO createReqVO) {
// 插入
EquipDO equip = BeanUtils.toBean(createReqVO, EquipDO.class);
equipMapper.insert(equip);
// 返回
return equip.getId();
}
@Override
public void updateEquip(EquipSaveReqVO updateReqVO) {
// 校验存在
validateEquipExists(updateReqVO.getId());
// 更新
EquipDO updateObj = BeanUtils.toBean(updateReqVO, EquipDO.class);
equipMapper.updateById(updateObj);
}
@Override
public void deleteEquip(Long id) {
// 校验存在
validateEquipExists(id);
// 删除
equipMapper.deleteById(id);
}
private void validateEquipExists(Long id) {
if (equipMapper.selectById(id) == null) {
throw exception(EQUIP_NOT_EXISTS);
}
}
@Override
public EquipDO getEquip(Long id) {
return equipMapper.selectById(id);
}
@Override
public PageResult<EquipDO> getEquipPage(EquipPageReqVO pageReqVO) {
return equipMapper.selectPage(pageReqVO);
}
}

@ -1,55 +1,58 @@
package com.chanko.yunxi.mes.module.heli.service.material;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface MaterialService {
/**
*
*
* @param createReqVO
* @return
*/
Long createMaterial(@Valid MaterialSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateMaterial(@Valid MaterialSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteMaterial(Long id);
/**
*
*
* @param id
* @return
*/
MaterialDO getMaterial(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<MaterialDO> getMaterialPage(MaterialPageReqVO pageReqVO);
}
package com.chanko.yunxi.mes.module.heli.service.material;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface MaterialService {
/**
*
*
* @param createReqVO
* @return
*/
Long createMaterial(@Valid MaterialSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateMaterial(@Valid MaterialSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteMaterial(Long id);
/**
*
*
* @param id
* @return
*/
MaterialDO getMaterial(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<MaterialDO> getMaterialPage(MaterialPageReqVO pageReqVO);
List<Map<String, Object>> getSimpleList();
List<Map<String, Object>> selectSimpleVirtualList();
}

@ -12,6 +12,9 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.CODE_REPEAT;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.MATERIAL_NOT_EXISTS;
@ -85,4 +88,13 @@ public class MaterialServiceImpl implements MaterialService {
return materialMapper.selectPage(pageReqVO);
}
@Override
public List<Map<String, Object>> getSimpleList() {
return materialMapper.selectSimpleList();
}
@Override
public List<Map<String, Object>> selectSimpleVirtualList() {
return materialMapper.selectSimpleVirtualList();
}
}

@ -1,55 +1,57 @@
package com.chanko.yunxi.mes.module.heli.service.mouldtype;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.mouldtype.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.mouldtype.MouldTypeDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface MouldTypeService {
/**
*
*
* @param createReqVO
* @return
*/
Long createMouldType(@Valid MouldTypeSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateMouldType(@Valid MouldTypeSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteMouldType(Long id);
/**
*
*
* @param id
* @return
*/
MouldTypeDO getMouldType(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<MouldTypeDO> getMouldTypePage(MouldTypePageReqVO pageReqVO);
}
package com.chanko.yunxi.mes.module.heli.service.mouldtype;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.mouldtype.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.mouldtype.MouldTypeDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface MouldTypeService {
/**
*
*
* @param createReqVO
* @return
*/
Long createMouldType(@Valid MouldTypeSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateMouldType(@Valid MouldTypeSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteMouldType(Long id);
/**
*
*
* @param id
* @return
*/
MouldTypeDO getMouldType(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<MouldTypeDO> getMouldTypePage(MouldTypePageReqVO pageReqVO);
List<Map<String, Object>> getMouldTypeSimpleList();
}

@ -1,74 +1,78 @@
package com.chanko.yunxi.mes.module.heli.service.mouldtype;
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.mouldtype.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.mouldtype.MouldTypeDO;
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.mouldtype.MouldTypeMapper;
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 MouldTypeServiceImpl implements MouldTypeService {
@Resource
private MouldTypeMapper mouldTypeMapper;
@Override
public Long createMouldType(MouldTypeSaveReqVO createReqVO) {
// 插入
MouldTypeDO mouldType = BeanUtils.toBean(createReqVO, MouldTypeDO.class);
mouldTypeMapper.insert(mouldType);
// 返回
return mouldType.getId();
}
@Override
public void updateMouldType(MouldTypeSaveReqVO updateReqVO) {
// 校验存在
validateMouldTypeExists(updateReqVO.getId());
// 更新
MouldTypeDO updateObj = BeanUtils.toBean(updateReqVO, MouldTypeDO.class);
mouldTypeMapper.updateById(updateObj);
}
@Override
public void deleteMouldType(Long id) {
// 校验存在
validateMouldTypeExists(id);
// 删除
mouldTypeMapper.deleteById(id);
}
private void validateMouldTypeExists(Long id) {
if (mouldTypeMapper.selectById(id) == null) {
throw exception(MOULD_TYPE_NOT_EXISTS);
}
}
@Override
public MouldTypeDO getMouldType(Long id) {
return mouldTypeMapper.selectById(id);
}
@Override
public PageResult<MouldTypeDO> getMouldTypePage(MouldTypePageReqVO pageReqVO) {
return mouldTypeMapper.selectPage(pageReqVO);
}
}
package com.chanko.yunxi.mes.module.heli.service.mouldtype;
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.mouldtype.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.mouldtype.MouldTypeDO;
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.mouldtype.MouldTypeMapper;
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 MouldTypeServiceImpl implements MouldTypeService {
@Resource
private MouldTypeMapper mouldTypeMapper;
@Override
public Long createMouldType(MouldTypeSaveReqVO createReqVO) {
// 插入
MouldTypeDO mouldType = BeanUtils.toBean(createReqVO, MouldTypeDO.class);
mouldTypeMapper.insert(mouldType);
// 返回
return mouldType.getId();
}
@Override
public void updateMouldType(MouldTypeSaveReqVO updateReqVO) {
// 校验存在
validateMouldTypeExists(updateReqVO.getId());
// 更新
MouldTypeDO updateObj = BeanUtils.toBean(updateReqVO, MouldTypeDO.class);
mouldTypeMapper.updateById(updateObj);
}
@Override
public void deleteMouldType(Long id) {
// 校验存在
validateMouldTypeExists(id);
// 删除
mouldTypeMapper.deleteById(id);
}
private void validateMouldTypeExists(Long id) {
if (mouldTypeMapper.selectById(id) == null) {
throw exception(MOULD_TYPE_NOT_EXISTS);
}
}
@Override
public MouldTypeDO getMouldType(Long id) {
return mouldTypeMapper.selectById(id);
}
@Override
public PageResult<MouldTypeDO> getMouldTypePage(MouldTypePageReqVO pageReqVO) {
return mouldTypeMapper.selectPage(pageReqVO);
}
@Override
public List<Map<String, Object>> getMouldTypeSimpleList(){
return mouldTypeMapper.selectSimpleList();
}
}

@ -0,0 +1,66 @@
package com.chanko.yunxi.mes.module.heli.service.processdesign;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface ProcessDesignService {
/**
*
*
* @param createReqVO
* @return
*/
Long createProcessDesign(@Valid ProcessDesignSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateProcessDesign(@Valid ProcessDesignSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteProcessDesign(Long id);
/**
*
*
* @param id
* @return
*/
ProcessDesignDO getProcessDesign(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<ProcessDesignDO> getProcessDesignPage(ProcessDesignPageReqVO pageReqVO);
// ==================== 子表(工艺设计进度) ====================
/**
*
*
* @param processDesignId id
* @return
*/
List<ProcessDesignProgressDO> getProcessDesignProgressListByProcessDesignId(Long processDesignId);
}

@ -0,0 +1,112 @@
package com.chanko.yunxi.mes.module.heli.service.processdesign;
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.processdesign.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO;
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.processdesign.ProcessDesignMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesignprogress.ProcessDesignProgressMapper;
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 ProcessDesignServiceImpl implements ProcessDesignService {
@Resource
private ProcessDesignMapper processDesignMapper;
@Resource
private ProcessDesignProgressMapper processDesignProgressMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createProcessDesign(ProcessDesignSaveReqVO createReqVO) {
// 插入
ProcessDesignDO processDesign = BeanUtils.toBean(createReqVO, ProcessDesignDO.class);
processDesignMapper.insert(processDesign);
// 插入子表
createProcessDesignProgressList(processDesign.getId(), createReqVO.getProcessDesignProgresss());
// 返回
return processDesign.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateProcessDesign(ProcessDesignSaveReqVO updateReqVO) {
// 校验存在
validateProcessDesignExists(updateReqVO.getId());
// 更新
ProcessDesignDO updateObj = BeanUtils.toBean(updateReqVO, ProcessDesignDO.class);
processDesignMapper.updateById(updateObj);
// 更新子表
updateProcessDesignProgressList(updateReqVO.getId(), updateReqVO.getProcessDesignProgresss());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteProcessDesign(Long id) {
// 校验存在
validateProcessDesignExists(id);
// 删除
processDesignMapper.deleteById(id);
// 删除子表
deleteProcessDesignProgressByProcessDesignId(id);
}
private void validateProcessDesignExists(Long id) {
if (processDesignMapper.selectById(id) == null) {
throw exception(PROCESS_DESIGN_NOT_EXISTS);
}
}
@Override
public ProcessDesignDO getProcessDesign(Long id) {
return processDesignMapper.selectById(id);
}
@Override
public PageResult<ProcessDesignDO> getProcessDesignPage(ProcessDesignPageReqVO pageReqVO) {
return processDesignMapper.selectPage(pageReqVO);
}
// ==================== 子表(工艺设计进度) ====================
@Override
public List<ProcessDesignProgressDO> getProcessDesignProgressListByProcessDesignId(Long processDesignId) {
return processDesignProgressMapper.selectListByProcessDesignId(processDesignId);
}
private void createProcessDesignProgressList(Long processDesignId, List<ProcessDesignProgressDO> list) {
list.forEach(o -> o.setProcessDesignId(processDesignId));
processDesignProgressMapper.insertBatch(list);
}
private void updateProcessDesignProgressList(Long processDesignId, List<ProcessDesignProgressDO> list) {
deleteProcessDesignProgressByProcessDesignId(processDesignId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createProcessDesignProgressList(processDesignId, list);
}
private void deleteProcessDesignProgressByProcessDesignId(Long processDesignId) {
processDesignProgressMapper.deleteByProcessDesignId(processDesignId);
}
}

@ -15,6 +15,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMa
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProjectOrderStatusEnum;
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
import com.chanko.yunxi.mes.module.heli.manager.CrossOrderManager;
import com.chanko.yunxi.mes.module.heli.service.customer.CustomerService;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.infra.controller.admin.file.vo.file.FilePageReqVO;
@ -30,7 +31,10 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -64,6 +68,9 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
@Resource
private FileService fileService;
@Resource
private CrossOrderManager crossOrderManager;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createProjectOrder(ProjectOrderSaveReqVO createReqVO) {
@ -97,7 +104,7 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
SerialNumberDO serialNumberDO = serialNumberService.getSerialNumber(BusinesTypeEnum.PROJECT_ORDER_SNAPSHOT.name(), projectOrder.getCode());
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
projectOrder.setId(null)
.setIsSnapshot(YesOrNoEnum.YES.getCode())
.setIsSnapshot(YesOrNoEnum.Y.getCode())
.setSnapshotId(createReqVO.getId())
.setSnapshotCode(createReqVO.getCode())
.setSnapshotOrderTime(createReqVO.getOrderTime())
@ -132,7 +139,8 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
public void updateProjectOrder(ProjectOrderSaveReqVO updateReqVO) {
// 校验存在
ProjectOrderDO oldDO = validateProjectOrderExists(updateReqVO.getId());
if(!oldDO.canOperate(OperateTypeEnum.valueOf(updateReqVO.getActive()))){
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(updateReqVO.getActive());
if(!oldDO.canOperate(operateTypeEnum)){
throw exception(INVALID_OPERATE);
}
// 更新
@ -143,6 +151,11 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
// 更新子表
updateProjectOrderSubList(updateReqVO.getId(), updateReqVO.getProjectOrderSubs());
// 如已启动 按子项目生成虚拟物料数据
if(updateObj.getOrderStatus().intValue() == ProjectOrderStatusEnum.APPROVE.getCode()){
crossOrderManager.generateVirtualMaterial(updateReqVO.getCode(), updateReqVO.getProjectOrderSubs());
}
}
@Override

@ -1,11 +1,16 @@
package com.chanko.yunxi.mes.module.heli.service.storage;
import cn.hutool.core.lang.UUID;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
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.serialnumber.SerialNumberService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
@ -16,8 +21,7 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.WAREHOUSE;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.*;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
@ -32,15 +36,36 @@ public class StorageServiceImpl implements StorageService {
@Resource
private StorageMapper storageMapper;
@Resource
private SerialNumberService serialNumberService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createStorage(StorageSaveReqVO createReqVO) {
// 插入
StorageDO storage = BeanUtils.toBean(createReqVO, StorageDO.class);
storage.setStockNo(UUID.fastUUID().toString(true));
storageMapper.insert(storage);
storage.setStockNo(STOCK_IN.getCode(storage.getId().toString()));
storageMapper.updateById(storage);
SerialNumberDO serialNumberDO = new SerialNumberDO();
if(createReqVO.getStockType().equals(1)) {
// 月度流水号
serialNumberDO = serialNumberService.getSerialNumber(CodeEnum.STOCK_IN.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 入库前缀
storage.setStockNo(STOCK_IN.getCode(serialNumberDO.getSerialNumber().toString()));
}else{
// 月度流水号
serialNumberDO = serialNumberService.getSerialNumber(CodeEnum.STOCK_OUT.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 出库前缀
storage.setStockNo(STOCK_OUT.getCode(serialNumberDO.getSerialNumber().toString()));
}
storageMapper.insert(storage);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
// 返回
return storage.getId();
}

@ -1,55 +1,58 @@
package com.chanko.yunxi.mes.module.heli.service.storagecheck;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheck.StorageCheckDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* / Service
*
* @author
*/
public interface StorageCheckService {
/**
* /
*
* @param createReqVO
* @return
*/
Long createStorageCheck(@Valid StorageCheckSaveReqVO createReqVO);
/**
* /
*
* @param updateReqVO
*/
void updateStorageCheck(@Valid StorageCheckSaveReqVO updateReqVO);
/**
* /
*
* @param id
*/
void deleteStorageCheck(Long id);
/**
* /
*
* @param id
* @return /
*/
StorageCheckDO getStorageCheck(Long id);
/**
* /
*
* @param pageReqVO
* @return /
*/
PageResult<StorageCheckDO> getStorageCheckPage(StorageCheckPageReqVO pageReqVO);
}
package com.chanko.yunxi.mes.module.heli.service.storagecheck;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheck.StorageCheckDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
/**
* / Service
*
* @author
*/
public interface StorageCheckService {
/**
* /
*
* @param createReqVO
* @return
*/
Long createStorageCheck(@Valid StorageCheckSaveReqVO createReqVO);
/**
* /
*
* @param updateReqVO
*/
void updateStorageCheck(@Valid StorageCheckSaveReqVO updateReqVO);
/**
* /
*
* @param id
*/
void deleteStorageCheck(Long id);
/**
* /
*
* @param id
* @return /
*/
StorageCheckDO getStorageCheck(Long id);
/**
* /
*
* @param pageReqVO
* @return /
*/
PageResult<StorageCheckDO> getStorageCheckPage(StorageCheckPageReqVO pageReqVO);
Boolean createStorageByCheckInfo(Long checkId);
}

@ -1,23 +1,38 @@
package com.chanko.yunxi.mes.module.heli.service.storagecheck;
import cn.hutool.core.lang.UUID;
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.storagecheckmat.StorageCheckMatDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagecheckmat.StorageCheckMatMapper;
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.enums.CodeEnum;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import javax.print.DocFlavor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheck.StorageCheckDO;
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.storagecheck.StorageCheckMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_CHECK;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.*;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
@ -29,18 +44,43 @@ import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
@Validated
public class StorageCheckServiceImpl implements StorageCheckService {
@Resource
private StorageLogMapper storageLogMapper;
@Resource
private StorageMapper storageMapper;
@Resource
private StorageMatMapper storageMatMapper;
@Resource
private StorageCheckMatMapper storageCheckMatMapper;
@Resource
private StorageCheckMapper storageCheckMapper;
@Resource
private StorageCheckMatService storageCheckMatService;
@Resource
private SerialNumberService serialNumberService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createStorageCheck(StorageCheckSaveReqVO createReqVO) {
// 插入
StorageCheckDO storageCheck = BeanUtils.toBean(createReqVO, StorageCheckDO.class);
storageCheck.setStockNo(UUID.fastUUID().toString(true));
// 月度流水号
SerialNumberDO serialNumberDO = serialNumberService.getSerialNumber(CodeEnum.STOCK_CHECK.name(), new SimpleDateFormat("yyyyMM").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
storageCheck.setStockNo(STOCK_CHECK.getCode(serialNumberDO.getSerialNumber().toString()));
storageCheckMapper.insert(storageCheck);
storageCheck.setStockNo(STOCK_CHECK.getCode(storageCheck.getId().toString()));
storageCheckMapper.updateById(storageCheck);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
// 返回
return storageCheck.getId();
}
@ -78,4 +118,91 @@ public class StorageCheckServiceImpl implements StorageCheckService {
return storageCheckMapper.selectPage(pageReqVO);
}
@Override
public Boolean createStorageByCheckInfo(Long checkId){
// 获取盘点单据信息
StorageCheckDO storageCheckDO = this.getStorageCheck(checkId);
// 获取盘点单据物料信息
List<StorageCheckMatDO> storageCheckMats = storageCheckMatService.getStorageMatListByCheckId(checkId);
long hasStockIn = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()>0).count();
long hasStockOut = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()<0).count();
if(hasStockIn>0){
// 库存类型为入库
saveStorage(storageCheckDO,1,2);
}
if(hasStockOut>0){
// 库存类型为出库
saveStorage(storageCheckDO,2,3);
}
return true;
}
private void saveStorage(StorageCheckDO storageCheckDO,Integer stockType,Integer stockInType){
LocalDateTime current = LocalDateTime.now();
// 库存类型为stockType
StorageDO storageDO = new StorageDO();
storageDO.setStockType(stockType);
storageDO.setStockInType(stockInType);
storageDO.setStockNo(UUID.fastUUID().toString(true));
storageDO.setHeaderNo(storageCheckDO.getStockNo());
storageDO.setStatus(2);
storageDO.setDescription(storageCheckDO.getDescription());
storageDO.setWhId(storageCheckDO.getWhId());
storageDO.setKeeper(storageCheckDO.getKeeper());
storageDO.setKeeperTime(current);
storageDO.setOutbound(storageCheckDO.getKeeper());
storageDO.setOutboundTime(current);
storageDO.setDescription("由盘点单号"+storageCheckDO.getStockNo()+"提交产生");
storageMapper.insert(storageDO);
storageDO.setStockNo(STOCK_IN.getCode(storageDO.getId().toString()));
storageMapper.updateById(storageDO);
saveStorageMat(storageCheckDO,storageDO.getId(),stockType);
}
private void saveStorageMat(StorageCheckDO storageCheckDO, Long stockId, Integer stockType){
List<StorageCheckMatDO> storageCheckMats = storageCheckMatMapper.selectListByCheckID(storageCheckDO.getId());
for(StorageCheckMatDO item : storageCheckMats){
StorageMatDO storageMatDO = new StorageMatDO();
storageMatDO.setStockId(stockId);
storageMatDO.setMatId(item.getMatId());
storageMatDO.setWhId(item.getWhId());
storageMatDO.setRgId(item.getRgId());
storageMatDO.setPnId(item.getPnId());
storageMatDO.setStorageOkQty(item.getStorageOkQty().subtract(item.getMatRest()).abs());
storageMatDO.setLotNo(item.getLotNo());
// 插入出入库物料表
if(stockType == 1 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()>0){
storageMatMapper.insert(storageMatDO);
saveStorageLog(storageMatDO);
}
if(stockType == 2 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()<0){
storageMatMapper.insert(storageMatDO);
saveStorageLog(storageMatDO);
}
}
}
private void saveStorageLog(StorageMatDO storageMatDO){
// 插入库存日志表
StorageLogDO storageLogDO = new StorageLogDO();
storageLogDO.setStockId(storageMatDO.getStockId());
storageLogDO.setMatId(storageMatDO.getMatId());
storageLogDO.setWhId(storageMatDO.getWhId());
storageLogDO.setRgId(storageMatDO.getRgId());
storageLogDO.setPnId(storageMatDO.getPnId());
storageLogDO.setStorageOkQty(storageMatDO.getStorageOkQty());
storageLogDO.setLotNo(storageMatDO.getLotNo());
storageLogDO.setStatus(2);
storageLogMapper.insert(storageLogDO);
}
}

@ -1,55 +1,59 @@
package com.chanko.yunxi.mes.module.heli.service.storagecheckmat;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheckmat.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface StorageCheckMatService {
/**
*
*
* @param createReqVO
* @return
*/
Long createStorageCheckMat(@Valid StorageCheckMatSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateStorageCheckMat(@Valid StorageCheckMatSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteStorageCheckMat(Long id);
/**
*
*
* @param id
* @return
*/
StorageCheckMatDO getStorageCheckMat(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<StorageCheckMatDO> getStorageCheckMatPage(StorageCheckMatPageReqVO pageReqVO);
}
package com.chanko.yunxi.mes.module.heli.service.storagecheckmat;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheckmat.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface StorageCheckMatService {
/**
*
*
* @param createReqVO
* @return
*/
Long createStorageCheckMat(@Valid StorageCheckMatSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateStorageCheckMat(@Valid StorageCheckMatSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteStorageCheckMat(Long id);
/**
*
*
* @param id
* @return
*/
StorageCheckMatDO getStorageCheckMat(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<StorageCheckMatDO> getStorageCheckMatPage(StorageCheckMatPageReqVO pageReqVO);
List<StorageCheckMatDO> getStorageMatListByCheckId(Long id);
Integer deleteCheckMatList(Long checkId);
}

@ -1,74 +1,88 @@
package com.chanko.yunxi.mes.module.heli.service.storagecheckmat;
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.storagecheckmat.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
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.storagecheckmat.StorageCheckMatMapper;
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 StorageCheckMatServiceImpl implements StorageCheckMatService {
@Resource
private StorageCheckMatMapper storageCheckMatMapper;
@Override
public Long createStorageCheckMat(StorageCheckMatSaveReqVO createReqVO) {
// 插入
StorageCheckMatDO storageCheckMat = BeanUtils.toBean(createReqVO, StorageCheckMatDO.class);
storageCheckMatMapper.insert(storageCheckMat);
// 返回
return storageCheckMat.getId();
}
@Override
public void updateStorageCheckMat(StorageCheckMatSaveReqVO updateReqVO) {
// 校验存在
validateStorageCheckMatExists(updateReqVO.getId());
// 更新
StorageCheckMatDO updateObj = BeanUtils.toBean(updateReqVO, StorageCheckMatDO.class);
storageCheckMatMapper.updateById(updateObj);
}
@Override
public void deleteStorageCheckMat(Long id) {
// 校验存在
validateStorageCheckMatExists(id);
// 删除
storageCheckMatMapper.deleteById(id);
}
private void validateStorageCheckMatExists(Long id) {
if (storageCheckMatMapper.selectById(id) == null) {
throw exception(STORAGE_CHECK_MAT_NOT_EXISTS);
}
}
@Override
public StorageCheckMatDO getStorageCheckMat(Long id) {
return storageCheckMatMapper.selectById(id);
}
@Override
public PageResult<StorageCheckMatDO> getStorageCheckMatPage(StorageCheckMatPageReqVO pageReqVO) {
return storageCheckMatMapper.selectPage(pageReqVO);
}
}
package com.chanko.yunxi.mes.module.heli.service.storagecheckmat;
import com.google.common.collect.Maps;
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.storagecheckmat.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
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.storagecheckmat.StorageCheckMatMapper;
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 StorageCheckMatServiceImpl implements StorageCheckMatService {
@Resource
private StorageCheckMatMapper storageCheckMatMapper;
@Override
public Long createStorageCheckMat(StorageCheckMatSaveReqVO createReqVO) {
// 插入
StorageCheckMatDO storageCheckMat = BeanUtils.toBean(createReqVO, StorageCheckMatDO.class);
storageCheckMatMapper.insert(storageCheckMat);
// 返回
return storageCheckMat.getId();
}
@Override
public void updateStorageCheckMat(StorageCheckMatSaveReqVO updateReqVO) {
// 校验存在
validateStorageCheckMatExists(updateReqVO.getId());
// 更新
StorageCheckMatDO updateObj = BeanUtils.toBean(updateReqVO, StorageCheckMatDO.class);
storageCheckMatMapper.updateById(updateObj);
}
@Override
public void deleteStorageCheckMat(Long id) {
// 校验存在
validateStorageCheckMatExists(id);
// 删除
storageCheckMatMapper.deleteById(id);
}
private void validateStorageCheckMatExists(Long id) {
if (storageCheckMatMapper.selectById(id) == null) {
throw exception(STORAGE_CHECK_MAT_NOT_EXISTS);
}
}
@Override
public StorageCheckMatDO getStorageCheckMat(Long id) {
return storageCheckMatMapper.selectById(id);
}
@Override
public PageResult<StorageCheckMatDO> getStorageCheckMatPage(StorageCheckMatPageReqVO pageReqVO) {
return storageCheckMatMapper.selectPage(pageReqVO);
}
@Override
public List<StorageCheckMatDO> getStorageMatListByCheckId(Long id){
return storageCheckMatMapper.selectListByCheckID(id);
}
@Override
public Integer deleteCheckMatList(Long checkId) {
//删除条件
Map<String, Object> columnMap = Maps.newHashMap();
columnMap.put("check_id", checkId);
return storageCheckMatMapper.deleteByMap(columnMap);
}
}

@ -57,6 +57,10 @@ public interface StorageLogService {
PageResult<StorageLogNowDO> getStorageNowPage(StorageLogPageReqVO pageReqVO);
List<StorageLogNowDO> selectNowByMatPnId(Long matId,Long pnId);
List<StorageLogNowDO> getStorageNowList(StorageNowAllReqVO queryReqVO);
void createStorageLogBatch(List<StorageLogDO> storageLogDOs);
}

@ -86,6 +86,23 @@ public class StorageLogServiceImpl implements StorageLogService {
return storageLogNowMapper.selectPage(pageReqVO);
}
@Override
public List<StorageLogNowDO> getStorageNowList(StorageNowAllReqVO queryReqVO) {
if(queryReqVO.getNoZero().equals(1)){
// 根据仓库id排除库存为o的物料
return storageLogNowMapper.selectNoZero(queryReqVO);
}else{
// 筛选全部的实时库存数据,包含未分配仓库的物料信息和已分配仓库的物料信息
return storageLogNowMapper.selectNowList(queryReqVO);
}
//
}
@Override
public List<StorageLogNowDO> selectNowByMatPnId(Long matId,Long pnId) {
return storageLogNowMapper.selectNowByMatPnId(matId,pnId);
}
@Override
public void createStorageLogBatch(List<StorageLogDO> storageLogDOs) {
for (StorageLogDO storageLogDo : storageLogDOs){

@ -50,16 +50,16 @@ public interface StorageMatService {
* @param pageReqVO
* @return /
*/
PageResult<StorageMatDO> getStorageMatPage(StorageMatPageReqVO pageReqVO);
List<StorageMatDO> getStorageMatPage(StorageMatPageReqVO pageReqVO);
/**
* /
*
* @return /
*/
List<StorageMatValidRespVO> getStorageMatList();
List<StorageMatValidRespVO> getStorageMatList(Long whId);
int deleteStorageMatList(Long stockId);
Integer deleteStorageMatList(Long stockId);
List<StorageMatDO> getStorageMatListByStockId(Long stockId);

@ -73,17 +73,17 @@ public class StorageMatServiceImpl implements StorageMatService {
}
@Override
public PageResult<StorageMatDO> getStorageMatPage(StorageMatPageReqVO pageReqVO) {
return storageMatMapper.selectPage(pageReqVO);
public List<StorageMatDO> getStorageMatPage(StorageMatPageReqVO pageReqVO) {
return storageMatMapper.selectMatByStorckID(pageReqVO.getStockId());
}
@Override
public List<StorageMatValidRespVO> getStorageMatList() {
return storageMatMapper.selectStorageMatValid();
public List<StorageMatValidRespVO> getStorageMatList(Long whId) {
return storageMatMapper.selectStorageMatValid(whId);
}
@Override
public int deleteStorageMatList(Long stockId) {
public Integer deleteStorageMatList(Long stockId) {
//删除条件
Map<String, Object> columnMap = Maps.newHashMap();
columnMap.put("stock_id", stockId);

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chanko.yunxi.mes.module.heli.dal.mysql.equip.EquipMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -55,4 +55,46 @@
</if>
</where>
</select>
<select id="selectNoZero"
parameterType="com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO"
resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO">
select * from v_storage_material_now where storage_ok_qty>0
<where>
<if test="matCode != null and matCode != ''">
AND (mat_code like concat('%', #{matCode}, '%') OR mat_name like concat('%', #{matCode}, '%'))
</if>
<if test="matType != null and matType != ''">
AND mat_type = #{matType}
</if>
<if test="whId != null and whId != ''">
AND wh_id = #{whId}
</if>
</where>
</select>
<select id="selectNowList"
parameterType="com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO"
resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO">
select * from (
select * from v_storage_material_now
union all
select deleted,id,creator,updater,create_time,update_time,tenant_id,code as mat_code,name as mat_name,
(select label from system_dict_data where dict_type='heli_material_type' and value= mat.material_type) as
mat_type,spec as mat_spec,
(select label from system_dict_data where dict_type='heli_material_unit' and value= mat.unit) as mat_unit,
brand as mat_brand,'' as wh_id, '' as wh_name,'' as rg_id,'' as rg_name,'' as pn_id,'' as pn_name,''
lot_no,short_name,0 as storage_ok_qty
from base_material as mat where not exists(select id from v_storage_material_now where id=mat.id)
) t;
<where>
<if test="matCode != null and matCode != ''">
AND (mat_code like concat('%', #{matCode}, '%') OR mat_name like concat('%', #{matCode}, '%'))
</if>
<if test="matType != null and matType != ''">
AND mat_type = #{matType}
</if>
<if test="whId != null and whId != ''">
AND wh_id = #{whId}
</if>
</where>
</select>
</mapper>

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<resultMap id="StorageLogAllDO" type="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO">
<result property="id" column="id"/>
<result property="stockId" column="stock_id"/>
<result property="matId" column="mat_id"/>
<result property="whId" column="wh_id"/>
<result property="rgId" column="rg_id"/>
<result property="pnId" column="pn_id"/>
<result property="storageOkQty" column="storage_ok_qty"/>
<result property="lotNo" column="lotNo"/>
<result property="stockNo" column="stock_no"/>
<result property="stockType" column="stock_type"/>
<result property="headerNo" column="header_no"/>
<result property="matName" column="mat_name"/>
<result property="matCode" column="mat_code"/>
<result property="matType" column="mat_type"/>
<result property="whName" column="wh_name"/>
<result property="rgName" column="rg_name"/>
<result property="pnName" column="pn_name"/>
</resultMap>
<select id="selectNoZero"
parameterType="com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO"
resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
select * from v_storage_material_now
<where>
storage_ok_qty>0
<if test="matCode != null and matCode != ''">
AND (mat_code like concat('%', #{matCode}, '%') OR mat_name like concat('%', #{matCode}, '%'))
</if>
<if test="matType != null and matType != ''">
AND mat_type = #{matType}
</if>
<if test="whId != null and whId != ''">
AND wh_id = #{whId}
</if>
</where>
order by mat_code
</select>
<select id="selectNowList"
parameterType="com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO"
resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
select * from (
select * from v_storage_material_now where wh_id=#{whId}
union all
select deleted,id,creator,updater,create_time,update_time,tenant_id,code as mat_code,name as mat_name,
(select label from system_dict_data where dict_type='heli_material_type' and value= mat.material_type) as
mat_type,spec as mat_spec,
(select label from system_dict_data where dict_type='heli_material_unit' and value= mat.unit) as mat_unit,
brand as mat_brand,'' as wh_id, '' as wh_name,'' as rg_id,'' as rg_name,'' as pn_id,'' as pn_name,''
lot_no,short_name,0 as storage_ok_qty
from base_material as mat where virtual_part='N' and mat.status=1 and not exists(select id from v_storage_material_now where wh_id=#{whId} and id=mat.id)
) t
<where>
<if test="matCode != null and matCode != ''">
AND (mat_code like concat('%', #{matCode}, '%') OR mat_name like concat('%', #{matCode}, '%'))
</if>
<if test="matType != null and matType != ''">
AND mat_type = #{matType}
</if>
</where>
order by t.mat_code
</select>
<select id="selectNowByMatPnId" resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
select * from v_storage_material_now where id=#{matId} and pn_id=#{pnId} order by mat_code
</select>
</mapper>

@ -22,7 +22,10 @@
<result property="matRest" column="mat_rest"/>
<result property="storageOkQty" column="storage_ok_qty"/>
</resultMap>
<select id="selectStorageMatValid" resultType="com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatValidRespVO">
<select id="selectStorageMatValid" resultType="com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatValidRespVO" parameterType="java.lang.Long">
select mat_id,mat_name,mat_code,mat_rest,material_type,wh_id,rg_id,pn_id,spec as mat_spec,unit as mat_unit,'' as lot_no,storage_ok_qty from v_storage_material_amount where mat_rest > 0
<if test="wh_id != null and wh_id != ''">
AND wh_id = #{wh_id}
</if>
</select>
</mapper>

@ -65,7 +65,7 @@ export default {
align: ["left", "left", "center", "center", "center", "left"],
},
configs: {
header: ["模具名称", "负责人", "进度", "交付时间"],
header: ["项目名称", "负责人", "进度", "交付时间"],
data: [
["JCGK-支架", "B组", "100%", "2023/12/2"],
["DYDJ-0871机壳", "B组", "90%", "2023/12/6"],

@ -0,0 +1,38 @@
import request from '@/config/axios'
export interface EquipVO {
id: number
name: string
mouldTypeId: number
status: number
}
// 查询设备信息分页
export const getEquipPage = async (params) => {
return await request.get({ url: `/heli/equip/page`, params })
}
// 查询设备信息详情
export const getEquip = async (id: number) => {
return await request.get({ url: `/heli/equip/get?id=` + id })
}
// 新增设备信息
export const createEquip = async (data: EquipVO) => {
return await request.post({ url: `/heli/equip/create`, data })
}
// 修改设备信息
export const updateEquip = async (data: EquipVO) => {
return await request.put({ url: `/heli/equip/update`, data })
}
// 删除设备信息
export const deleteEquip = async (id: number) => {
return await request.delete({ url: `/heli/equip/delete?id=` + id })
}
// 导出设备信息 Excel
export const exportEquip = async (params) => {
return await request.download({ url: `/heli/equip/export-excel`, params })
}

@ -28,6 +28,14 @@ export interface MaterialVO {
virtualPart: string
logo: string
}
// 查询物料
export const getSimpVirtualList = async () => {
return await request.get({ url: `/heli/material/all-simples-virtual` })
}
// 查询物料
export const getSimpList = async () => {
return await request.get({ url: `/heli/material/all-simples` })
}
// 查询物料分页
export const getMaterialPage = async (params) => {

@ -1,37 +1,42 @@
import request from '@/config/axios'
export interface MouldTypeVO {
id: number
name: string
status: number
}
// 查询模具类型分页
export const getMouldTypePage = async (params) => {
return await request.get({ url: `/heli/mould-type/page`, params })
}
// 查询模具类型详情
export const getMouldType = async (id: number) => {
return await request.get({ url: `/heli/mould-type/get?id=` + id })
}
// 新增模具类型
export const createMouldType = async (data: MouldTypeVO) => {
return await request.post({ url: `/heli/mould-type/create`, data })
}
// 修改模具类型
export const updateMouldType = async (data: MouldTypeVO) => {
return await request.put({ url: `/heli/mould-type/update`, data })
}
// 删除模具类型
export const deleteMouldType = async (id: number) => {
return await request.delete({ url: `/heli/mould-type/delete?id=` + id })
}
// 导出模具类型 Excel
export const exportMouldType = async (params) => {
return await request.download({ url: `/heli/mould-type/export-excel`, params })
}
import request from '@/config/axios'
export interface MouldTypeVO {
id: number
name: string
status: number
}
// 查询模具类型全页数据
export const getSimpList = async () => {
return await request.get({ url: `/heli/mould-type/all-simples` })
}
// 查询模具类型分页
export const getMouldTypePage = async (params) => {
return await request.get({ url: `/heli/mould-type/page`, params })
}
// 查询模具类型详情
export const getMouldType = async (id: number) => {
return await request.get({ url: `/heli/mould-type/get?id=` + id })
}
// 新增模具类型
export const createMouldType = async (data: MouldTypeVO) => {
return await request.post({ url: `/heli/mould-type/create`, data })
}
// 修改模具类型
export const updateMouldType = async (data: MouldTypeVO) => {
return await request.put({ url: `/heli/mould-type/update`, data })
}
// 删除模具类型
export const deleteMouldType = async (id: number) => {
return await request.delete({ url: `/heli/mould-type/delete?id=` + id })
}
// 导出模具类型 Excel
export const exportMouldType = async (params) => {
return await request.download({ url: `/heli/mould-type/export-excel`, params })
}

@ -0,0 +1,48 @@
import request from '@/config/axios'
export interface ProcessDesignVO {
id: number
planId: number
saleOrderId: number
saleOrderSubId: number
processDesignType: string
remark: string
status: number
}
// 查询工艺设计分页
export const getProcessDesignPage = async (params) => {
return await request.get({ url: `/heli/process-design/page`, params })
}
// 查询工艺设计详情
export const getProcessDesign = async (id: number) => {
return await request.get({ url: `/heli/process-design/get?id=` + id })
}
// 新增工艺设计
export const createProcessDesign = async (data: ProcessDesignVO) => {
return await request.post({ url: `/heli/process-design/create`, data })
}
// 修改工艺设计
export const updateProcessDesign = async (data: ProcessDesignVO) => {
return await request.put({ url: `/heli/process-design/update`, data })
}
// 删除工艺设计
export const deleteProcessDesign = async (id: number) => {
return await request.delete({ url: `/heli/process-design/delete?id=` + id })
}
// 导出工艺设计 Excel
export const exportProcessDesign = async (params) => {
return await request.download({ url: `/heli/process-design/export-excel`, params })
}
// ==================== 子表(工艺设计进度) ====================
// 获得工艺设计进度列表
export const getProcessDesignProgressListByProcessDesignId = async (processDesignId) => {
return await request.get({ url: `/heli/process-design/process-design-progress/list-by-process-design-id?processDesignId=` + processDesignId })
}

@ -17,6 +17,16 @@ export interface StorageCheckVO {
cancelTime: Date
}
// 查询入/出库实时分页
export const updateStorageCheckStatus = async (checkid:number) => {
return await request.put({ url: `/heli/storage-check/update-status?checkId=`+checkid })
}
// 查询入/出库实时分页
export const getStorageNowMatRest = async (matid:number,pnid:number) => {
return await request.get({ url: `/heli/storage-log/matRest?matId=`+matid+'&pnId='+pnid })
}
// 查询入/出库盘点分页
export const getStorageCheckPage = async (params) => {
return await request.get({ url: `/heli/storage-check/page`, params })

@ -1,43 +1,52 @@
import request from '@/config/axios'
export interface StorageCheckMatVO {
id: number
checkId: number
matId: number
whId: number
rgId: number
pnId: number
storageOkQty: number
matRest: number
lotNo: string
}
// 查询盘点物料分页
export const getStorageCheckMatPage = async (params) => {
return await request.get({ url: `/heli/storage-check-mat/page`, params })
}
// 查询盘点物料详情
export const getStorageCheckMat = async (id: number) => {
return await request.get({ url: `/heli/storage-check-mat/get?id=` + id })
}
// 新增盘点物料
export const createStorageCheckMat = async (data: StorageCheckMatVO) => {
return await request.post({ url: `/heli/storage-check-mat/create`, data })
}
// 修改盘点物料
export const updateStorageCheckMat = async (data: StorageCheckMatVO) => {
return await request.put({ url: `/heli/storage-check-mat/update`, data })
}
// 删除盘点物料
export const deleteStorageCheckMat = async (id: number) => {
return await request.delete({ url: `/heli/storage-check-mat/delete?id=` + id })
}
// 导出盘点物料 Excel
export const exportStorageCheckMat = async (params) => {
return await request.download({ url: `/heli/storage-check-mat/export-excel`, params })
}
import request from '@/config/axios'
export interface StorageCheckMatVO {
id: number
checkId: number
matId: number
whId: number
rgId: number
pnId: number
storageOkQty: number
matRest: number
lotNo: string
}
// 根据盘点ID查询物料列表
export const getStorageCheckListByCheckID = async (id:number) => {
return await request.get({ url: `/heli/storage-check-mat/list?checkId=`+id })
}
// 批量新增盘点物料
export const createCheckMatBatch = async (data: StorageCheckMatVO[],id:number) => {
return await request.post({ url: `/heli/storage-check/create-batch?checkId=`+id, data })
}
// 查询盘点物料分页
export const getStorageCheckMatPage = async (params) => {
return await request.get({ url: `/heli/storage-check-mat/page`, params })
}
// 查询盘点物料详情
export const getStorageCheckMat = async (id: number) => {
return await request.get({ url: `/heli/storage-check-mat/get?id=` + id })
}
// 新增盘点物料
export const createStorageCheckMat = async (data: StorageCheckMatVO) => {
return await request.post({ url: `/heli/storage-check-mat/create`, data })
}
// 修改盘点物料
export const updateStorageCheckMat = async (data: StorageCheckMatVO) => {
return await request.put({ url: `/heli/storage-check-mat/update`, data })
}
// 删除盘点物料
export const deleteStorageCheckMat = async (id: number) => {
return await request.delete({ url: `/heli/storage-check-mat/delete?id=` + id })
}
// 导出盘点物料 Excel
export const exportStorageCheckMat = async (params) => {
return await request.download({ url: `/heli/storage-check-mat/export-excel`, params })
}

@ -10,8 +10,18 @@ export interface StorageLogVO {
storageOkQty: number
lotNo: string
description: string
noZero: number
matCode: string
matType:string
}
// 查询入/出库实时分页
export const getStorageNowList = async (params) => {
return await request.get({ url: `/heli/storage-log/all`, params })
}
// 查询入/出库实时分页
export const getStorageNowPage = async (params) => {
return await request.get({ url: `/heli/storage-log/now`, params })

@ -14,8 +14,8 @@ export interface StorageMatVO {
}
// 查询入/出库物料详情
export const getStorageMatList = async () => {
return await request.get({ url: `/heli/storage-mat/get-materials`})
export const getStorageMatList = async (whId:number) => {
return await request.get({ url: `/heli/storage-mat/get-materials?whId=`+whId})
}
// 查询入/出库物料分页

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@ -0,0 +1,23 @@
import { defineStore } from 'pinia'
import { store } from '../index'
export interface CommonStoreState {
storeMap: object
}
export const useCommonStore = defineStore('commonStore', () => {
const storeMap = ref({})
const getStore = (key) => {
return storeMap.value[key]
}
const setStore = (key, value) => {
return storeMap.value[key] = value
}
return {getStore, setStore}
})
export const useCommonStateWithOut = () => {
return useCommonStore(store)
}

@ -1,16 +1,16 @@
<template>
<!-- 公共详情 -->
<el-card class="hl-card">
<el-card class="hl-card" style="position: relative">
<template #header>
<span><span v-html="dialogTitle"></span></span>
</template>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="140px"
v-loading="formLoading"
>
<div class="abstatus">
<div v-if="formData.deliverStatus == 2">
<img src="/src/assets/imgs/status/deliver.png" alt="" />
</div>
</div>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="140px" v-loading="formLoading">
<!-- 基础信息 横向布局 -->
<el-card class="hl-card-info">
<template #header>
@ -19,47 +19,41 @@
<el-row>
<el-col :span="6">
<el-form-item label="发货单号" prop="code">
<el-input disabled v-model="formData.code" placeholder="系统自动生成" />
<el-input disabled v-model="formData.code" placeholder="系统自动生成" class="!w-250px" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目编号" prop="saleOrderIds">
<el-input disabled v-model="formData.saleOrderCode" placeholder="请输入项目编号" >
<template #append><el-button :disabled="query.active != 'create'" @click="openProjectOrderDialog" :icon="Search" /></template>
<el-input disabled v-model="formData.saleOrderCode" placeholder="请输入项目编号" class="!w-250px">
<template #append><el-button :disabled="active != 'create'" @click="openProjectOrderDialog" :icon="Search" /></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="contractNo" label="合同号">
<el-input v-model="formData.contractNo" disabled/>
<el-input v-model="formData.contractNo" disabled class="!w-250px"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="property" label="性质">
<el-input v-model="formData.property" disabled/>
<el-input v-model="formData.property" disabled class="!w-250px" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="发货日期" prop="deliverDate">
<el-date-picker
:disabled="detailDisabled"
v-model="formData.deliverDate"
type="date"
value-format="x"
placeholder="选择发货日期"
/>
<el-date-picker :disabled="detailDisabled" v-model="formData.deliverDate" type="date" value-format="x" placeholder="选择发货日期" class="!w-250px" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="customerId" label="客户名称">
<el-input v-model="formData.customerName" disabled/>
<el-input v-model="formData.customerName" disabled class="!w-250px"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="mouldName" label="模具名称">
<el-input disabled v-model="formData.mouldName" />
<el-form-item prop="projectName" label="项目名称">
<el-input disabled v-model="formData.projectName" class="!w-250px"/>
</el-form-item>
</el-col>
<el-col :span="6">
@ -71,13 +65,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="发货备注" prop="remark">
<el-input
:disabled="detailDisabled"
type="textarea"
v-model="formData.remark"
show-word-limit
maxlength="200"
/>
<el-input :disabled="detailDisabled" type="textarea" v-model="formData.remark" show-word-limit maxlength="200" />
</el-form-item>
</el-col>
</el-row>
@ -89,78 +77,50 @@
<el-row>
<el-col :span="6">
<el-form-item label="发货人姓名" prop="deliverPerson">
<UserSelect :disabled="detailDisabled" v-model="formData.deliverPerson" @update:newValue="handleSelectedUser" />
<UserSelect :disabled="detailDisabled" v-model="formData.deliverPerson" @update:newValue="handleSelectedUser" class="!w-250px" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货人电话" prop="deliverPersonMobile">
<el-input :disabled="detailDisabled" v-model="formData.deliverPersonMobile" />
<el-input :disabled="detailDisabled" v-model="formData.deliverPersonMobile" class="!w-250px"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货方式" prop="deliverMode">
<el-select :disabled="detailDisabled" v-model="formData.deliverMode" placeholder="请选择发货方式">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MODE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-select :disabled="detailDisabled" v-model="formData.deliverMode" placeholder="请选择发货方式" class="!w-250px">
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MODE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货单位" prop="deliverCompany">
<el-input v-model="formData.deliverCompany" disabled />
<el-input v-model="formData.deliverCompany" disabled class="!w-250px" />
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">收货信息</span>
</template>
<el-row>
<el-col :span="6">
<el-form-item label="收货人姓名" prop="receivePersonName">
<el-select :disabled="detailDisabled" v-model="formData.receivePersonName"
filterable
allow-create
clearable
@change="receiveOnChange"
@blur="e => { if(e.target.value) formData.receivePersonName = e.target.value;}"
>
<el-option
v-for="dict in receivePersonOptions"
:key="dict.name"
:label="dict.name"
:value="dict.name"
/>
<el-select :disabled="detailDisabled" v-model="formData.receivePersonName" filterable allow-create clearable @change="receiveOnChange" @blur="e => { if(e.target.value) formData.receivePersonName = e.target.value;}">
<el-option v-for="dict in receivePersonOptions" :key="dict.name" :label="dict.name" :value="dict.name" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="收货人电话" prop="receivePersonMobile">
<el-input :disabled="detailDisabled" v-model="formData.receivePersonMobile" />
<el-input :disabled="detailDisabled" v-model="formData.receivePersonMobile" class="!w-250px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收货详细地址" prop="receiveAddress">
<el-select v-model="formData.receiveAddress"
filterable
allow-create
:disabled="detailDisabled"
@blur="e => { if(e.target.value) formData.receiveAddress = e.target.value;}"
clearable
style="width: 100%"
>
<el-option
v-for="dict in receivePersonAddressOptions"
:key="dict.address"
:label="dict.address"
:value="dict.address"
/>
<el-select v-model="formData.receiveAddress" filterable allow-create :disabled="detailDisabled" @blur="e => { if(e.target.value) formData.receiveAddress = e.target.value;}" clearable style="width: 100%;margin-right: 1.5%">
<el-option v-for="dict in receivePersonAddressOptions" :key="dict.address" :label="dict.address" :value="dict.address" />
</el-select>
</el-form-item>
</el-col>
@ -174,52 +134,43 @@
<el-row>
<el-col :span="6">
<el-form-item label="司机姓名" prop="transportDriverName">
<el-input :disabled="detailDisabled" v-model="formData.transportDriverName" />
<el-input :disabled="detailDisabled" v-model="formData.transportDriverName" class="!w-250px"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="司机电话" prop="transportDriverMobile">
<el-input :disabled="detailDisabled" v-model="formData.transportDriverMobile" />
<el-input :disabled="detailDisabled" v-model="formData.transportDriverMobile" class="!w-250px" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="车牌号" prop="transportBusNumber">
<el-input :disabled="detailDisabled" v-model="formData.transportBusNumber" />
<el-input :disabled="detailDisabled" v-model="formData.transportBusNumber" class="!w-250px"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="重量(T)" prop="transportWeight">
<el-input :disabled="detailDisabled" v-model="formData.transportWeight" />
<el-input :disabled="detailDisabled" v-model="formData.transportWeight" class="!w-250px"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="位置(米)" prop="transportSize">
<el-input :disabled="detailDisabled" v-model="formData.transportSize" />
<el-input :disabled="detailDisabled" v-model="formData.transportSize" class="!w-250px"/>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">发货清单</span>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-form
ref="subFormRef"
:model="formData.deliverOrderSubs"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0"
>
<el-table
:data="formData.deliverOrderSubs"
class="hl-table"
>
<el-form ref="subFormRef" :model="formData.deliverOrderSubs" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
<el-table :data="formData.deliverOrderSubs" class="hl-table">
<el-table-column label="序号" type="index" width="100" />
<el-table-column min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>子项目名称 </template>
@ -232,7 +183,7 @@
{{scope.row.saleOrderCode}}
</template>
</el-table-column>
<el-table-column label="子项目图号" min-width="150">
<el-table-column label="子项目图号" min-width="200" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.blueprintNo`" :rules="subFormRules.blueprintNo" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.blueprintNo" placeholder="请输入子项目图号" />
@ -243,54 +194,41 @@
<template #header> <span class="hl-table_header">*</span>本次发货数量 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-input-number
:disabled="detailDisabled"
v-model="row.amount"
placeholder="请输入本次发货数量"
style="width: 100%"
:min="1"
:precision="0"
/>
<el-input-number :disabled="detailDisabled" v-model="row.amount" placeholder="请输入本次发货数量" style="width: 100%" :min="1" :precision="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" width="80">
<el-table-column label="单位" width="80" >
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px! ml-10px" >
{{getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, row.unit)}}
</el-form-item>
</template>
</el-table-column>
<el-table-column label="重量(T)" min-width="150">
<el-table-column label="重量(T)" min-width="150" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.weight`" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.weight" placeholder="请输入重量(T)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="尺寸(米)" min-width="150">
<el-table-column label="尺寸(米)" min-width="150" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.size`" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.size" placeholder="请输入尺寸(米)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" min-width="180">
<el-table-column label="备注" min-width="180" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.remark" placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<el-table-column label="操作" align="center" min-width="100">
<template #default="scope">
<el-button
v-if="'update,create'.indexOf(query.active) > -1"
link
type="danger"
size="small"
@click.prevent="onDeleteItem(scope.$index)"
>
<el-button v-if="'update,create,deliver'.indexOf(active) > -1" link type="danger" size="small" @click.prevent="onDeleteItem(scope.$index)">
删除
</el-button>
</template>
@ -302,29 +240,18 @@
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">其他物料清单</span>
</template>
<el-row>
<el-col v-if="formType != 'detail'">
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem2"
>新增</el-button
>
<el-col v-if="active != 'detail'">
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem2"></el-button>
</el-col>
<el-col>
<el-card class="hl-incard">
<el-form
ref="otherSubFormRef"
:model="formData.deliverOrderOtherSubs"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0"
>
<el-table
:data="formData.deliverOrderOtherSubs"
class="hl-table"
>
<el-form ref="otherSubFormRef" :model="formData.deliverOrderOtherSubs" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
<el-table :data="formData.deliverOrderOtherSubs" class="hl-table">
<el-table-column label="序号" type="index" width="100" />
<el-table-column min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>名称 </template>
@ -334,50 +261,35 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="所属类型" min-width="150">
<el-table-column label="所属类型" min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>所属类型 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subType`" :rules="subFormRules.subType" class="mb-0px!">
<el-select :disabled="detailDisabled" v-model="row.subType" placeholder="请选择子项类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MATERIAL_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MATERIAL_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="本次发货数量" min-width="150">
<el-table-column label="本次发货数量" min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>本次发货数量 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-input-number
:disabled="detailDisabled"
v-model="row.amount"
placeholder="请输入本次发货数量"
style="width: 100%"
:min="1"
:precision="0"
/>
<el-input-number :disabled="detailDisabled" v-model="row.amount" placeholder="请输入本次发货数量" style="width: 100%" :min="1" :precision="0" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="150">
<el-table-column label="单位" min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>单位 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
<el-select :disabled="detailDisabled" v-model="row.unit" placeholder="请选择单位">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" min-width="150">
<el-table-column label="备注" min-width="150" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.remark" placeholder="请输入备注" />
@ -386,13 +298,7 @@
</el-table-column>
<el-table-column label="操作" align="center" width="240">
<template #default="scope">
<el-button
v-if="'update,create'.indexOf(query.active) > -1"
link
type="danger"
size="small"
@click.prevent="onDeleteItem2(scope.$index)"
>
<el-button v-if="'update,create,deliver'.indexOf(active) > -1" link type="danger" size="small" @click.prevent="onDeleteItem2(scope.$index)">
删除
</el-button>
</template>
@ -404,56 +310,29 @@
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">附件信息</span>
</template>
<el-row>
<el-col v-if="formType != 'detail'">
<el-upload
ref="attachmentUploadRef"
multiple
:limit="10"
:action="uploadUrl"
:headers="uploadHeaders"
name="files"
:show-file-list="false"
:auto-upload="false"
:data="uploadData"
:on-change="attachmentUploadChange"
class="upload-file-uploader"
>
<el-button type="primary"><Icon icon="ep:upload-filled" />上传</el-button>
<el-col v-if="active != 'detail'">
<el-upload ref="attachmentUploadRef" multiple :limit="10" :action="uploadUrl" :headers="uploadHeaders" name="files" :show-file-list="false" :auto-upload="false" :data="uploadData" :on-change="attachmentUploadChange" class="upload-file-uploader">
<el-button type="primary">
<Icon icon="ep:upload-filled" />上传
</el-button>
</el-upload>
</el-col>
<el-col>
<el-card class="hl-incard">
<el-table :data="formData.attachments" class="hl-table">
<el-table-column prop="name" label="文件名称" align="center" />
<el-table-column
prop="createTime"
align="center"
label="上传时间"
:formatter="dateFormatter"
/>
<el-table-column prop="createTime" align="center" label="上传时间" :formatter="dateFormatter" />
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
v-if="'update,create'.indexOf(query.active) > -1"
link
type="danger"
size="small"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)"
>
<el-button v-if="'update,create,deliver'.indexOf(active) > -1" link type="danger" size="small" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除
</el-button>
<el-button
v-if="!!scope.row.id"
link
type="primary"
size="small"
@click="downloadAttachment(scope.row.name, scope.row.url)"
>
<el-button v-if="!!scope.row.id" link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)">
下载
</el-button>
</template>
@ -464,7 +343,7 @@
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="query.active != 'create'">
<el-card class="hl-card-info" v-if="active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
</template>
@ -478,12 +357,7 @@
</template>
</el-table-column>
<el-table-column prop="userNickname" label="操作人" align="center" />
<el-table-column
label="操作时间"
align="center"
prop="startTime"
:formatter="dateFormatter"
/>
<el-table-column label="操作时间" align="center" prop="startTime" :formatter="dateFormatter" />
</el-table>
</el-card>
</el-col>
@ -492,39 +366,49 @@
</el-form>
<div class="text-center hl-footer">
<el-button @click="goback" size="large"> </el-button>
<el-button v-if="formType != 'detail' && formData.deliverStatus == 1" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"
> </el-button
>
<el-button v-if="formType != 'detail' && formData.deliverStatus == 1 && formData.id" @click="submitForm('DELIVER')" type="primary" :disabled="formLoading" size="large"
> </el-button
>
<el-button v-if="active != 'detail' && formData.deliverStatus == 1" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"> </el-button>
<el-button v-if="(((active != 'detail' && formData.id) || active == 'deliver') && formData.deliverStatus == 1)" @click="submitForm('DELIVER')" type="primary" :disabled="formLoading" size="large"> </el-button>
<el-button v-if="active == 'detail' && formData.deliverStatus == 2 && formData.id" type="primary" @click="printHandle" :disabled="formLoading" size="large"></el-button>
</div>
</el-card>
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
<!-- 打印发货单 - 弹框-->
<ShipmentsPrint ref="shipmentsPrintRef" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import type { UploadProps, UploadUserFile } from 'element-plus'
import {getStrDictOptions, DICT_TYPE, getIntDictOptions, getDictLabel} from '@/utils/dict'
import { getStrDictOptions, DICT_TYPE, getIntDictOptions, getDictLabel } from '@/utils/dict'
import * as DeliverOrderApi from '@/api/heli/deliverorder'
import {getOperateLogPage} from "@/api/system/operatelog";
import {deleteFileLogic, downloadFile, getFilePage} from "@/api/infra/file";
import {Search, Plus} from "@element-plus/icons-vue";
import UserSelect from "@/views/heli/hlvuestyle/userSelect.vue";
import {getAccessToken, getTenantId} from "@/utils/auth";
import {dateFormatter} from "@/utils/formatTime";
import download from "@/utils/download";
import { getOperateLogPage } from '@/api/system/operatelog'
import { deleteFileLogic, downloadFile, getFilePage } from '@/api/infra/file'
import { Search, Plus } from '@element-plus/icons-vue'
import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
import { getAccessToken, getTenantId } from '@/utils/auth'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { inject } from 'vue'
import {getProjectOrderSubListByProjectOrderId, ProjectOrderVO} from "@/api/heli/projectorder";
import {getCustomer} from "@/api/heli/customer";
import {
getProjectOrder,
getProjectOrderSubListByProjectOrderId,
ProjectOrderVO
} from '@/api/heli/projectorder'
import { getCustomer } from '@/api/heli/customer'
import ProjectOrderDialog from '@/views/heli/deliverorder/projectOrderDialog.vue'
import ShipmentsPrint from './shipmentsPrint.vue' //
defineOptions({ name: 'DeliverOrderDetail' })
const reload = inject('reload')
const { t } = useI18n() //
const message = useMessage() //
const router = useRouter()
const { query } = useRoute()
const active = toRef(query, 'active')
const activeId = toRef(query, 'id')
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
@ -539,7 +423,7 @@ const formData = ref({
property: undefined,
customerId: undefined,
customerName: undefined,
mouldName: undefined,
projectName: undefined,
deliverDate: undefined,
deliverStatus: 1,
deliverPerson: undefined,
@ -565,36 +449,35 @@ const formData = ref({
const formRules = reactive({
saleOrderIds: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }],
property: [{ required: true, message: '性质不能为空', trigger: 'blur' }],
mouldName: [{ required: true, message: '模具名称不能为空', trigger: 'blur' }],
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户id不能为空', trigger: 'blur' }],
deliverCompany: [{ required: true, message: '发货单位不能为空', trigger: 'blur' }],
deliverDate: [{ required: true, message: '发货日期不能为空', trigger: 'blur' }],
deliverStatus: [{ required: true, message: '发货单状态不能为空', trigger: 'change' }],
deliverStatus: [{ required: true, message: '发货单状态不能为空', trigger: 'blur' }],
deliverPerson: [{ required: true, message: '发货人不能为空', trigger: 'blur' }],
deliverPersonMobile: [{ required: true, message: '发货人电话不能为空', trigger: 'blur' }],
deliverMode: [{ required: true, message: '发货方式不能为空', trigger: 'change' }],
receivePersonMobile: [{ required: true, message: '收货人电话不能为空', trigger: 'blur' }],
receivePersonName: [{ required: true, message: '收货人姓名不能为空', trigger: 'blur' }],
receiveAddress: [{ required: true, message: '收货详细地址不能为空', trigger: 'blur' }],
receiveAddress: [{ required: true, message: '收货详细地址不能为空', trigger: 'blur' }]
})
const subFormLoading = ref(false) //
const subFormRules = reactive({
deliveryOrderId: [{ required: true, message: '订单id不能为空', trigger: 'blur' }],
subType: [{ required: true, message: '所属类型不能为空', trigger: 'change' }],
deliveryOrderId: [{ required: true, message: '订单不能为空', trigger: 'blur' }],
subType: [{ required: true, message: '所属类型不能为空', trigger: 'blur' }],
name: [{ required: true, message: '名称,唯一不能为空', trigger: 'blur' }],
amount: [{ required: true, message: '本次发货数量不能为空', trigger: 'blur' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'change' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
/** 子表的表单 */
const subFormRef = ref()
const otherSubFormRef = ref()
const submitForm = async (active) => {
const submitForm = async (operate) => {
//
formData.value.active = active
formData.value.active = operate
await formRef.value.validate()
//
if(formType.value != 'create'){
if (active.value != 'create') {
await subFormRef.value.validate()
await otherSubFormRef.value.validate()
}
@ -602,36 +485,32 @@ const submitForm = async (active) => {
formLoading.value = true
try {
//
formData.value.deliverOrderSubs?.forEach(item => {
formData.value.deliverOrderSubs?.forEach((item) => {
item.category = 'DELIVER_LIST'
item.status = 1
})
formData.value.deliverOrderOtherSubs?.forEach(item => {
formData.value.deliverOrderOtherSubs?.forEach((item) => {
item.category = 'OTHER_LIST'
item.status = 1
})
const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO
if(formData.value.deliverOrderOtherSubs){
data.deliverOrderSubs = data.deliverOrderSubs.concat(formData.value.deliverOrderOtherSubs)
}
const orderId = await DeliverOrderApi.operateDeliverOrder(data)
message.success(t('common.operationSuccess'))
//
if(attachmentUploadFiles.value.length > 0){
if (attachmentUploadFiles.value.length > 0) {
uploadData.value.businessId = orderId
attachmentUploadRef.value!.submit()
await attachmentUploadRef.value!.submit()
}
//
if (active != 'SAVE') {
goback()
} else {
//
query.active = 'update'
query.id = orderId
reload()
if (operate == 'SAVE') {
if (active.value != 'deliver') {
active.value = 'update'
}
} else if (operate == 'DELIVER') {
active.value = 'detail'
}
activeId.value = orderId
reload()
} finally {
formLoading.value = false
}
@ -650,7 +529,7 @@ const resetForm = () => {
property: undefined,
customerId: undefined,
customerName: undefined,
mouldName: undefined,
projectName: undefined,
deliverDate: undefined,
deliverStatus: 1,
deliverPerson: undefined,
@ -680,7 +559,7 @@ const onAddItem2 = () => {
const row = {
id: undefined,
deliveryOrderId: undefined,
category: "OTHER_LIST",
category: 'OTHER_LIST',
name: undefined,
blueprintNo: undefined,
amount: undefined,
@ -689,9 +568,12 @@ const onAddItem2 = () => {
size: undefined,
subType: undefined,
remark: undefined,
status: undefined,
status: undefined
}
row.deliveryOrderId = formData.value.id
if (!formData.value.deliverOrderOtherSubs) {
formData.value.deliverOrderOtherSubs = []
}
formData.value.deliverOrderOtherSubs.push(row)
}
@ -734,7 +616,7 @@ const attachmentUploadChange = (file, files) => {
/** 删除子项操作 */
const onDeleteItem = (index) => {
if(formData.value.deliverOrderSubs.length == 1){
if (formData.value.deliverOrderSubs.length == 1) {
message.warning('发货清单至少存在一条数据')
return
}
@ -770,33 +652,44 @@ const downloadAttachment = async (name, url) => {
/** 打开弹窗 */
const queryData = async (type: string, id?: number) => {
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
formLoading.value = true
formData.value.deliverDate = new Date().getTime()
try {
if (id) {
formData.value = await DeliverOrderApi.getDeliverOrder(id)
formData.value.deliverCompany = '杭州合立机械有限公司'
//
let properties = formData.value.property.split(',')
let property = ''
for (let i = 0; i < properties.length; i++) {
property += getDictLabel(DICT_TYPE.HELI_PROJECT_PROPERTY, properties[i]) + ','
}
formData.value.property = property.substring(0, property.length - 1)
//
const subArr = await DeliverOrderApi.getDeliverOrderSubListByDeliveryOrderId(id)
//
if(!subArr || subArr.length == 0){
formData.value.deliverOrderSubs = [];
let saleOrderIdArr = formData.value.saleOrderIds.split(",");
if (!subArr || subArr.length == 0) {
formData.value.deliverOrderSubs = []
let saleOrderIdArr = formData.value.saleOrderIds.split(',')
for (let i = 0; i < saleOrderIdArr.length; i++) {
formData.value.deliverOrderSubs = formData.value.deliverOrderSubs.concat(await getProjectOrderSubListByProjectOrderId(saleOrderIdArr[i]));
formData.value.deliverOrderSubs.forEach(sub => {
formData.value.deliverOrderSubs = formData.value.deliverOrderSubs.concat(
await getProjectOrderSubListByProjectOrderId(saleOrderIdArr[i])
)
formData.value.deliverOrderSubs.forEach((sub) => {
sub.remark = ''
sub.saleOrderSubId = sub.id
sub.id = ''
sub.saleOrderCode = sub.projectOrderCode
sub.amount = undefined
})
}
}else{
} else {
//
formData.value.deliverOrderSubs = subArr.filter(sub => sub.category == 'DELIVER_LIST');
formData.value.deliverOrderOtherSubs = subArr.filter(sub => sub.category == 'OTHER_LIST');
formData.value.deliverOrderSubs = subArr.filter((sub) => sub.category == 'DELIVER_LIST')
formData.value.deliverOrderOtherSubs = subArr.filter((sub) => sub.category == 'OTHER_LIST')
}
//
@ -817,69 +710,72 @@ const queryData = async (type: string, id?: number) => {
}
formData.value.attachments = (await getFilePage(attParams)).list
//
const customer = await getCustomer(formData.value.customerId)
if(customer.contact1Name){
receivePersonOptions.value.push({
"name": customer.contact1Name,
"mobile": customer.contact1Method
})
receivePersonAddressOptions.value.push({
"address": customer.contact1Addr
})
}
if(customer.contact2Name){
receivePersonOptions.value.push({
"name": customer.contact2Name,
"mobile": customer.contact2Method
})
receivePersonAddressOptions.value.push({
"address": customer.contact2Addr
})
}
if(customer.contact3Name){
receivePersonOptions.value.push({
"name": customer.contact3Name,
"mobile": customer.contact3Method
})
receivePersonAddressOptions.value.push({
"address": customer.contact3Addr
})
}
await initCustomerInfo()
}
} finally {
formLoading.value = false
}
}
const initCustomerInfo = async () => {
//
const customer = await getCustomer(formData.value.customerId)
if (customer.contact1Name) {
receivePersonOptions.value.push({
name: customer.contact1Name,
mobile: customer.contact1Method
})
receivePersonAddressOptions.value.push({
address: customer.contact1Addr
})
}
if (customer.contact2Name) {
receivePersonOptions.value.push({
name: customer.contact2Name,
mobile: customer.contact2Method
})
receivePersonAddressOptions.value.push({
address: customer.contact2Addr
})
}
if (customer.contact3Name) {
receivePersonOptions.value.push({
name: customer.contact3Name,
mobile: customer.contact3Method
})
receivePersonAddressOptions.value.push({
address: customer.contact3Addr
})
}
}
const projectOrderDialog = ref()
const openProjectOrderDialog = () => {
projectOrderDialog.value.open()
projectOrderDialog.value?.open()
}
const handleSelectedProjectOrder = (arr: ProjectOrderVO[]) => {
if(arr && arr.length > 0){
let saleOrderIds = "";
let saleOrderCode = "";
let contractNo = "";
let property = "";
let mouldName = "";
if (arr && arr.length > 0) {
let saleOrderIds = ''
let saleOrderCode = ''
let contractNo = ''
let property = ''
let projectName = ''
for (let i = 0; i < arr.length; i++) {
let order = arr[i];
saleOrderIds += order.id + ",";
saleOrderCode += order.code + ",";
contractNo += order.contractNo + ",";
property += getDictLabel(DICT_TYPE.HELI_PROJECT_PROPERTY, order.property) + ",";
mouldName += order.mouldName + ",";
let order = arr[i]
saleOrderIds += order.id + ','
saleOrderCode += order.code + ','
contractNo += (!order.contractNo ? '' : order.contractNo) + ','
property += getDictLabel(DICT_TYPE.HELI_PROJECT_PROPERTY, order.property) + ','
projectName += order.projectName + ','
}
formData.value.saleOrderIds = saleOrderIds.substring(0, saleOrderIds.length-1);
formData.value.saleOrderCode = saleOrderCode.substring(0, saleOrderCode.length-1);
formData.value.contractNo = contractNo.substring(0, contractNo.length-1);
formData.value.property = property.substring(0, property.length-1);
formData.value.mouldName = mouldName.substring(0, mouldName.length-1);
formData.value.customerId = arr[0].customerId;
formData.value.customerName = arr[0].customerName;
formData.value.saleOrderIds = saleOrderIds.substring(0, saleOrderIds.length - 1)
formData.value.saleOrderCode = saleOrderCode.substring(0, saleOrderCode.length - 1)
formData.value.contractNo = contractNo.substring(0, contractNo.length - 1)
formData.value.property = property.substring(0, property.length - 1)
formData.value.projectName = projectName.substring(0, projectName.length - 1)
formData.value.customerId = arr[0].customerId
formData.value.customerName = arr[0].customerName
}
}
@ -889,17 +785,53 @@ const receivePersonOptions = ref([])
const receivePersonAddressOptions = ref([])
const receiveOnChange = (val) => {
let matchedPerson = receivePersonOptions.value.find(p => p.name == val);
if(matchedPerson){
let matchedPerson = receivePersonOptions.value.find((p) => p.name == val)
if (matchedPerson) {
formData.value.receivePersonMobile = matchedPerson.mobile
}
}
const detailDisabled = ref(false)
onMounted(() => {
if('detail' == query.active){
//
const shipmentsPrintRef = ref() //
const printHandle = () => {
shipmentsPrintRef.value.open(formData.value.id)
}
const initDeliverData = async (projectOrderId) => {
let projectOrder = await getProjectOrder(projectOrderId)
handleSelectedProjectOrder([projectOrder])
formData.value.deliverOrderSubs = []
formData.value.deliverOrderSubs = formData.value.deliverOrderSubs.concat(
await getProjectOrderSubListByProjectOrderId(projectOrderId)
)
formData.value.deliverOrderSubs.forEach((sub) => {
sub.remark = ''
sub.saleOrderSubId = sub.id
sub.id = ''
sub.saleOrderCode = sub.projectOrderCode
sub.amount = undefined
})
await initCustomerInfo()
}
const initData = async () => {
resetForm()
if ('detail' == active.value) {
detailDisabled.value = true
}
queryData(query.active, query.id)
if ('deliver' == active.value && query.projectOrderId) {
await initDeliverData(query.projectOrderId)
}
await queryData(active.value, activeId.value)
}
const detailDisabled = ref(false)
onMounted(() => {
initData()
})
</script>
<style>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save