This commit is contained in:
BinBin Song 2025-06-25 15:46:53 +08:00
commit fea38d7741
115 changed files with 5455 additions and 470 deletions

View File

@ -52,6 +52,7 @@ public enum CodeEnum {
TASK_DISPATCH_ASSEMBLE("装配任务派工单", "ATD", 3, "yyyyMMdd"),
TASK_DISPATCH_GCJYPG("过程检验派工单", "GCJ", 4, "yyyyMMdd"),
TASK_DISPATCH_ZJJYPG("终检检验派工单", "ZJ", 4, "yyyyMMdd"),
MAT_REQ("领料单", "LL", 4, "yyyyMMdd"),
UNQUALIFIED_NOTIFICATION("品质异常通知单", "RN", 4, "yyyyMMdd"),
MATERIAL("物料", 6),

View File

@ -99,6 +99,8 @@ public interface ErrorCodeConstants {
ErrorCode PURCHASE_ORDER_BOOM_NOT_EXISTS = new ErrorCode(1_008_006, "采购订单加工件明细不存在");
ErrorCode PURCHASE_ORDER_MAKE_NOT_EXISTS = new ErrorCode(1_008_007, "采购单主不存在");
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_NOT_EXISTS = new ErrorCode(1_008_008, "采购单明细不存在");
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_IS_EXISTS = new ErrorCode(1_008_009, "存在物料清单已生成采购订单,请刷新界面!");
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE = new ErrorCode(1_008_010, "存在物料清单已转库存,请刷新界面!");
/************生产管理***********/
ErrorCode TASK_DISPATCH_NOT_EXISTS = new ErrorCode(1_009_001, "派工单不存在");
ErrorCode TASK_REPORT_NOT_EXISTS = new ErrorCode(1_009_002, "任务报工不存在");
@ -147,5 +149,7 @@ public interface ErrorCodeConstants {
/************责任人管理***********/
ErrorCode OWNER_NOT_EXISTS = new ErrorCode(1_013_001, "人员配置主数据维护错误,请确认!");
ErrorCode TRACK_NOT_EXISTS = new ErrorCode(1_013_002, "生产进度跟踪不存在");
ErrorCode MAT_REQ_NOT_EXISTS = new ErrorCode(1_013_003, "领料单不存在");
ErrorCode MAT_REQ_DETAIL_NOT_EXISTS = new ErrorCode(1_013_004, "领料单明细不存在");
}

View File

@ -151,7 +151,7 @@ public class bdgzsomthingController {
BeanUtils.toBean(list, bdgzsomthingRespVO.class));
}
// @Scheduled(fixedRate = 10800000)
@Scheduled(fixedRate = 10800000)
public void scheduledTask() {
bdgzsomthingService.selectds();
}
@ -159,20 +159,20 @@ public class bdgzsomthingController {
//@Scheduled(cron = "0 2 0 * * ?") //每天十天执行一次
@PostConstruct
public void init() {
// selectHasPrice();
// selectSafeStorageAndDeliverOneYear();
selectHasPrice();
selectSafeStorageAndDeliverOneYear();
}
// @Scheduled(cron = "0 0 2 * * ?")
@Scheduled(cron = "0 0 2 * * ?")
public void selectHasPrice(){
bdgzsomthingService.selectHasPrice();
}
// @Scheduled(cron = "0 0 0 * * ?")
@Scheduled(cron = "0 0 0 * * ?")
public void selectSafeStorageAndDeliverOneYear(){bdgzsomthingService.selectSafeStorageAndDeliverOneYear();}
@PostMapping("/getMessage")
@Operation(summary = "小程序消息")
@PreAuthorize("@ss.hasPermission('heli:bdgzsomthing:query')")
public CommonResult<PageResult<bdgzsomthingDO>> getMessage(@Valid bdgzsomthingPageReqVO pageReqVO) {
public CommonResult<PageResult<bdgzsomthingDO>> getMessage(@Valid @RequestBody bdgzsomthingPageReqVO pageReqVO) {
PageResult<bdgzsomthingDO>pageResult = bdgzsomthingService.getMessage(pageReqVO);
return success(BeanUtils.toBean(pageResult, bdgzsomthingDO.class));
}

View File

@ -122,4 +122,11 @@ public class MaterialController {
materialService.importExcel(list, updateSupport);
return success(null);
}
@GetMapping({"/getbzjList"})
@Operation(summary = "TODO:获取物料标准件信息列表", description = "只包含被开启的物料,主要用于前端的下拉选项")
public CommonResult<List<Map<String, Object>> > getbzjList() {
List<Map<String, Object>> list = materialService.getbzjList();
// 拼接数据
return success(list);
}
}

View File

@ -27,6 +27,7 @@ public class MaterialPageReqVO extends PageParam {
@Schema(description = "物料名称", example = "李四")
private String codeAndName;
private String inventoryName;
@Schema(description = "品牌")
private String brand;

View File

@ -1,6 +1,8 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -154,4 +156,40 @@ public class MaterialPlanController {
MaterialPlanDO materialPlan = materialPlanService.getProjectMaterialPlanNo(code);
return success(BeanUtils.toBean(materialPlan, MaterialPlanRespVO.class));
}
@GetMapping("/getStandardPartsPages")
@Operation(summary = "获得标准件库存")
@PreAuthorize("@ss.hasPermission('heli:material-plan:query')")
public CommonResult<PageResult<MaterialPlanBoomDO>> getStandardPartsPages(@Valid MaterialPlanPageReqVO pageReqVO) {
PageResult<MaterialPlanBoomDO> pageResult = materialPlanService.getStandardPartsPages(pageReqVO);
return success(pageResult);
}
@GetMapping("/exportStandardParts")
@Operation(summary = "导出标准件库存")
@PreAuthorize("@ss.hasPermission('heli:material-plan:export')")
@OperateLog(type = EXPORT)
public void exportStandardParts(@Valid MaterialPlanPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MaterialPlanBoomDO> list = materialPlanService.getStandardPartsPages(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "标准件库存.xlsx", "数据", MaterialPlanBoomExcelVo.class,
BeanUtils.toBean(list, MaterialPlanBoomExcelVo.class));
}
@GetMapping("/operation")
@Operation(summary = "获得标准件库存")
@PreAuthorize("@ss.hasPermission('heli:material-plan:query')")
public CommonResult<Boolean> operation(@Valid MaterialPlanPageReqVO pageReqVO) {
return materialPlanService.operation(pageReqVO);
}
@PostMapping("/supplement")
@Operation(summary = "库存补充")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
public CommonResult<Boolean> supplement(@Valid @RequestBody List<StorageLogNowDO> list) {
return success(materialPlanService.supplement(list));
}
}

View File

@ -0,0 +1,45 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* Excel 导入 VO
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false避免BOM导入有问题
public class MaterialPlanBoomExcelVo {
@ExcelProperty("项目名称")
private String projectName;
@ExcelProperty("子项目名称")
private String projectSubName;
@ExcelProperty("物料编码")
private String materialName;
@ExcelProperty("物料名称")
private String matName;
@ExcelProperty("规格型号")
private String boomSpec;
@ExcelProperty("图号")
private String blueprintNo;
@ExcelProperty("需求数量")
private String boomAmount;
@ExcelProperty("系统单位")
@DictFormat("heli_material_unit")
private String boomUnit;
@ExcelProperty("要求完成日期")
private String boomArriveDates;
}

View File

@ -64,6 +64,7 @@ public class MaterialPlanPageReqVO extends PageParam {
private String projectCode;
@Schema(description = "需求计划类型")
private String matType;
@Schema(description = "类型")
private String type;
}

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -41,4 +42,6 @@ public class MaterialPlanSaveReqVO {
@Schema(description = "备注")
private String description;
private List<MaterialPlanBoomDO> boomDOList;
}

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom;
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService;
import org.springframework.web.bind.annotation.*;
@ -125,4 +126,12 @@ public class MaterialPlanBoomController {
return success(BeanUtils.toBean(pageResult, MaterialPlanBoomDO.class));
}
@GetMapping("/getStandardBuyPage")
@Operation(summary = "采购管理列表")
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')")
public CommonResult<PageResult<MaterialPlanBoomDO>> getStandardBuyPage(@Valid MaterialPlanBoomPageReqVO pageReqVO) {
PageResult<MaterialPlanBoomDO> pageResult = materialPlanBoomService.getStandardBuyPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MaterialPlanBoomDO.class));
}
}

View File

@ -60,4 +60,31 @@ public class MaterialPlanBoomPageReqVO extends PageParam {
private Long matType;
}
@Schema(description = "子项目名称", example = "张三")
private String projectSubName;
@Schema(description = "子项目编号")
private String projectName;
@Schema(description = "采购状态")
private Integer mplanStatus;
@Schema(description = "生产计划单号")
private String planCode;
@Schema(description = "项目编号")
private String projectCode;
@Schema(description = "客户名称")
private String customerName;
@Schema(description = "责任人")
private String ownerName;
@Schema(description = "物料需求单号")
private String projectMaterialPlanNo;
}

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -34,7 +35,18 @@ public class MaterialPlanBoomSaveReqVO {
@Schema(description = "需求到货日期")
private LocalDateTime boomArriveDate;
private Integer buyType;
@Schema(description = "备注")
private String description;
//采购数量
private BigDecimal purchaseAmount;
//暂估价格
private BigDecimal estimatedPrice;
//预估到时间
private LocalDateTime arriveTime;
//供应商id
private Long supplierId;
private BigDecimal matRest;
private List<MaterialPlanBoomDO> materialPlanBoomDOList;
}

View File

@ -0,0 +1,102 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreq;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
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.matreq.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq.MatReqDO;
import com.chanko.yunxi.mes.module.heli.service.matreq.MatReqService;
@Tag(name = "管理后台 - 领料单主")
@RestController
@RequestMapping("/heli/mat-req")
@Validated
public class MatReqController {
@Resource
private MatReqService matReqService;
@PostMapping("/create")
@Operation(summary = "创建领料单主")
@PreAuthorize("@ss.hasPermission('heli:mat-req:create')")
public CommonResult<Long> createMatReq(@Valid @RequestBody MatReqSaveReqVO createReqVO) {
return success(matReqService.createMatReq(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新领料单主")
@PreAuthorize("@ss.hasPermission('heli:mat-req:update')")
public CommonResult<Boolean> updateMatReq(@Valid @RequestBody MatReqSaveReqVO updateReqVO) {
matReqService.updateMatReq(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除领料单主")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:mat-req:delete')")
public CommonResult<Boolean> deleteMatReq(@RequestParam("id") Long id) {
matReqService.deleteMatReq(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得领料单主")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:mat-req:query')")
public CommonResult<MatReqRespVO> getMatReq(@RequestParam("id") Long id) {
MatReqDO matReq = matReqService.getMatReq(id);
return success(BeanUtils.toBean(matReq, MatReqRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得领料单主分页")
@PreAuthorize("@ss.hasPermission('heli:mat-req:query')")
public CommonResult<PageResult<MatReqRespVO>> getMatReqPage(@Valid MatReqPageReqVO pageReqVO) {
PageResult<MatReqDO> pageResult = matReqService.getMatReqPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MatReqRespVO.class));
}
@PostMapping("/generate")
@Operation(summary = "领料单生成")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
public CommonResult<Boolean> generate(@Valid @RequestBody List<MaterialPlanBoomDO> list) {
return matReqService.generate(list);
}
@GetMapping("/export-excel")
@Operation(summary = "导出领料单主 Excel")
@PreAuthorize("@ss.hasPermission('heli:mat-req:export')")
@OperateLog(type = EXPORT)
public void exportMatReqExcel(@Valid MatReqPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MatReqDO> list = matReqService.getMatReqPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "领料单主.xls", "数据", MatReqRespVO.class,
BeanUtils.toBean(list, MatReqRespVO.class));
}
}

View File

@ -0,0 +1,55 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreq.vo;
import lombok.*;
import java.time.LocalDate;
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 MatReqPageReqVO extends PageParam {
@Schema(description = "领料单单号")
private String matReqNo;
@Schema(description = "领料单类型1物料2加工件", example = "2")
private Integer goodsType;
@Schema(description = "单据状态,0 未领料1已领料 默认是0", example = "1")
private Integer status;
@Schema(description = "备注", example = "你说的对")
private String description;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "订单id", example = "31962")
private Long projectId;
@Schema(description = "生产计划id", example = "14788")
private Long projectPlanId;
@Schema(description = "客户id", example = "23800")
private Long customerId;
@Schema(description = "领料单日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDate[] reqDate;
@Schema(description = "项目名称", example = "李四")
private String projectName;
@Schema(description = "项目名称", example = "李四")
private String projectSubName;
@Schema(description = "物料名称", example = "李四")
private String materialName;
}

View File

@ -0,0 +1,62 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreq.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDate;
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 MatReqRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "15799")
@ExcelProperty("自增字段,唯一")
private Long id;
@Schema(description = "领料单单号", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("领料单单号")
private String matReqNo;
@Schema(description = "领料单类型1物料2加工件", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty("领料单类型1物料2加工件")
private Integer goodsType;
@Schema(description = "单据状态,0 未领料1已领料 默认是0", example = "1")
@ExcelProperty("单据状态,0 未领料1已领料 默认是0")
private Integer status;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")
private String description;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "订单id", example = "31962")
@ExcelProperty("订单id")
private Long projectId;
@Schema(description = "生产计划id", example = "14788")
@ExcelProperty("生产计划id")
private Long projectPlanId;
@Schema(description = "客户id", example = "23800")
@ExcelProperty("客户id")
private Long customerId;
@Schema(description = "领料单日期")
@ExcelProperty("领料单日期")
private Date reqDate;
@Schema(description = "项目名称", example = "李四")
@ExcelProperty("项目名称")
private String projectName;
}

View File

@ -0,0 +1,47 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreq.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDate;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
@Schema(description = "管理后台 - 领料单主新增/修改 Request VO")
@Data
public class MatReqSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "15799")
private Long id;
@Schema(description = "领料单单号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "领料单单号不能为空")
private String matReqNo;
@Schema(description = "领料单类型1物料2加工件", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "领料单类型1物料2加工件不能为空")
private Integer goodsType;
@Schema(description = "单据状态,0 未领料1已领料 默认是0", example = "1")
private Integer status;
@Schema(description = "备注", example = "你说的对")
private String description;
@Schema(description = "订单id", example = "31962")
private Long projectId;
@Schema(description = "生产计划id", example = "14788")
private Long projectPlanId;
@Schema(description = "客户id", example = "23800")
private Long customerId;
@Schema(description = "领料单日期")
private LocalDate reqDate;
@Schema(description = "项目名称", example = "李四")
private String projectName;
}

View File

@ -0,0 +1,95 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail;
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.matreqdetail.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.module.heli.service.matreqdetail.MatReqDetailService;
@Tag(name = "管理后台 - 领料单明细")
@RestController
@RequestMapping("/heli/mat-req-detail")
@Validated
public class MatReqDetailController {
@Resource
private MatReqDetailService matReqDetailService;
@PostMapping("/create")
@Operation(summary = "创建领料单明细")
@PreAuthorize("@ss.hasPermission('heli:mat-req-detail:create')")
public CommonResult<Long> createMatReqDetail(@Valid @RequestBody MatReqDetailSaveReqVO createReqVO) {
return success(matReqDetailService.createMatReqDetail(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新领料单明细")
@PreAuthorize("@ss.hasPermission('heli:mat-req-detail:update')")
public CommonResult<Boolean> updateMatReqDetail(@Valid @RequestBody MatReqDetailSaveReqVO updateReqVO) {
matReqDetailService.updateMatReqDetail(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除领料单明细")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:mat-req-detail:delete')")
public CommonResult<Boolean> deleteMatReqDetail(@RequestParam("id") Long id) {
matReqDetailService.deleteMatReqDetail(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得领料单明细")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:mat-req-detail:query')")
public CommonResult<MatReqDetailRespVO> getMatReqDetail(@RequestParam("id") Long id) {
MatReqDetailDO matReqDetail = matReqDetailService.getMatReqDetail(id);
return success(BeanUtils.toBean(matReqDetail, MatReqDetailRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得领料单明细分页")
@PreAuthorize("@ss.hasPermission('heli:mat-req-detail:query')")
public CommonResult<PageResult<MatReqDetailRespVO>> getMatReqDetailPage(@Valid MatReqDetailPageReqVO pageReqVO) {
PageResult<MatReqDetailDO> pageResult = matReqDetailService.getMatReqDetailPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MatReqDetailRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出领料单明细 Excel")
@PreAuthorize("@ss.hasPermission('heli:mat-req-detail:export')")
@OperateLog(type = EXPORT)
public void exportMatReqDetailExcel(@Valid MatReqDetailPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<MatReqDetailDO> list = matReqDetailService.getMatReqDetailPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "领料单明细.xls", "数据", MatReqDetailRespVO.class,
BeanUtils.toBean(list, MatReqDetailRespVO.class));
}
}

View File

@ -0,0 +1,72 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import java.math.BigDecimal;
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 MatReqDetailPageReqVO extends PageParam {
@Schema(description = "采购单id", example = "29474")
private Long matReqId;
@Schema(description = "加工件boom detail id", example = "3666")
private Long boomDetailId;
@Schema(description = "零件名称", example = "赵六")
private String boomName;
@Schema(description = "规格型号")
private String boomSpec;
@Schema(description = "系统单位")
private String boomUnit;
@Schema(description = "材质")
private String composition;
@Schema(description = "备注", example = "你猜")
private String description;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "需求数量")
private BigDecimal boomAmount;
@Schema(description = "需求到货日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] requireTime;
@Schema(description = "订单子项目id", example = "3875")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
private String name;
@Schema(description = "子项目简码")
private String nameSim;
@Schema(description = "子项目编码")
private String projectSubCode;
@Schema(description = "物料id", example = "32088")
private Long materialId;
@Schema(description = "物料需求计划主表id", example = "14306")
private Long projectMaterialPlanId;
@Schema(description = "物料需求计划子表id", example = "20125")
private Long projectMaterialPlanDetailId;
}

View File

@ -0,0 +1,96 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 领料单明细 Response VO")
@Data
@ExcelIgnoreUnannotated
public class MatReqDetailRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "1058")
@ExcelProperty("自增字段,唯一")
private Long id;
@Schema(description = "采购单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29474")
@ExcelProperty("采购单id")
private Long matReqId;
@Schema(description = "加工件boom detail id", example = "3666")
@ExcelProperty("加工件boom detail id")
private Long boomDetailId;
@Schema(description = "零件名称", example = "赵六")
@ExcelProperty("零件名称")
private String boomName;
@Schema(description = "规格型号")
@ExcelProperty("规格型号")
private String boomSpec;
@Schema(description = "系统单位")
@ExcelProperty("系统单位")
private String boomUnit;
@Schema(description = "材质")
@ExcelProperty("材质")
private String composition;
@Schema(description = "备注", example = "你猜")
@ExcelProperty("备注")
private String description;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "需求数量")
@ExcelProperty("需求数量")
private BigDecimal boomAmount;
@Schema(description = "需求到货日期")
@ExcelProperty("需求到货日期")
private LocalDateTime requireTime;
@Schema(description = "订单子项目id", example = "3875")
@ExcelProperty("订单子项目id")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
@ExcelProperty("子项目名称,唯一")
private String name;
@Schema(description = "子项目简码")
@ExcelProperty("子项目简码")
private String nameSim;
@Schema(description = "子项目编码")
@ExcelProperty("子项目编码")
private String projectSubCode;
@Schema(description = "物料id", example = "32088")
@ExcelProperty("物料id")
private Long materialId;
@Schema(description = "物料需求计划主表id", example = "14306")
@ExcelProperty("物料需求计划主表id")
private Long projectMaterialPlanId;
@Schema(description = "物料需求计划子表id", example = "20125")
@ExcelProperty("物料需求计划子表id")
private Long projectMaterialPlanDetailId;
/**
* 子项目编码
*/
@Schema(description = "物料编码", example = "32088")
private String materialCode;
}

View File

@ -0,0 +1,68 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 领料单明细新增/修改 Request VO")
@Data
public class MatReqDetailSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "1058")
private Long id;
@Schema(description = "采购单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29474")
@NotNull(message = "采购单id不能为空")
private Long matReqId;
@Schema(description = "加工件boom detail id", example = "3666")
private Long boomDetailId;
@Schema(description = "零件名称", example = "赵六")
private String boomName;
@Schema(description = "规格型号")
private String boomSpec;
@Schema(description = "系统单位")
private String boomUnit;
@Schema(description = "材质")
private String composition;
@Schema(description = "备注", example = "你猜")
private String description;
@Schema(description = "需求数量")
private BigDecimal boomAmount;
@Schema(description = "需求到货日期")
private LocalDateTime requireTime;
@Schema(description = "订单子项目id", example = "3875")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
private String name;
@Schema(description = "子项目简码")
private String nameSim;
@Schema(description = "子项目编码")
private String projectSubCode;
@Schema(description = "物料id", example = "32088")
private Long materialId;
@Schema(description = "物料需求计划主表id", example = "14306")
private Long projectMaterialPlanId;
@Schema(description = "物料需求计划子表id", example = "20125")
private Long projectMaterialPlanDetailId;
}

View File

@ -150,6 +150,13 @@ public class ProcessBomController {
PageResult<ProcessBomDO> pageResult = processBomService.getProcessBomPages(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProcessBomRespVO.class));
}
@GetMapping("/detailpages")
@Operation(summary = "获得工艺bom审核分页")
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')")
public CommonResult<PageResult<ProcessBomDetailDO>> getProcessBomDetailPages(@Valid ProcessBomPageReqVO pageReqVO) {
PageResult<ProcessBomDetailDO> pageResult = processBomService.getProcessBomPageNew(pageReqVO);
return success(pageResult);
}
@GetMapping("/export-excel")
@Operation(summary = "导出工艺bom Excel")
@ -240,6 +247,8 @@ public class ProcessBomController {
PageResult<ProcessBomDetailDO> pageResult = processBomService.getStandardPage(pageReqVO);
return success(pageResult);
}
@PostMapping("/submit")
@Operation(summary = "提交")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")

View File

@ -23,7 +23,8 @@ public class ProcessBomPageReqVO extends PageParam {
@Schema(description = "项目id", example = "32751")
private Long projectId;
private String inventoryCodes;
private String inventoryName;
@Schema(description = "子项目id", example = "12526")
private Long projectSubId;

View File

@ -107,4 +107,16 @@ public class PurchaseOrderMakeController {
return success(pageResult);
}
@PutMapping("/updatePartCheck")
@Operation(summary = "更新采购审批通过状态")
public CommonResult<Boolean> updatePartCheck(@RequestParam("id") Long id) {
return success(partPurchaseOrderService.updatePartCheckStatus(id));
}
@PutMapping("/updatePartCheckNo")
@Operation(summary = "更新采购审批驳回状态")
public CommonResult<Boolean> updatePartCheckNo(@Valid PurchaseOrderMakeSaveReqVO updateReqVO) {
return success(partPurchaseOrderService.updatePartCheckStatusNo(updateReqVO));
}
}

View File

@ -19,6 +19,9 @@ public class PartPurchaseOrderPageReqVO extends PageParam {
@Schema(description = "自增字段,唯一")
private Long id;
@Schema(description = "采购单id")
private Long purchaseOrderId;
@Schema(description = "物料计划单号")
private String projectMaterialPlanNo;
@ -68,4 +71,10 @@ public class PartPurchaseOrderPageReqVO extends PageParam {
private String ownerName;
@Schema(description = "供应商名称")
private String supplierName;
@Schema(description = "采购单号")
private String contractNo;
@Schema(description = "采购单类型1物料2加工件")
private Integer goodsType;
@Schema(description = "单据状态,0 待送审1已送审2已审核3已打回 默认是1")
private Integer documentStatus;
}

View File

@ -114,7 +114,7 @@ public class PartPurchaseOrderPageRespVO extends BaseDO {
/**
* 订单状态 未生成/已生成 1/2
*/
private Boolean orderStatus;
private Integer orderStatus;
/**
* 子项目编码
*/
@ -147,4 +147,28 @@ public class PartPurchaseOrderPageRespVO extends BaseDO {
* 工序名称
*/
private String procedureName;
/**
* 采购单号
*/
private String contractNo;
/**
* 采购单类型1物料2加工件
*/
private Integer goodsType;
/**
* 客户简码
*/
private String brief;
/**
* 项目名称
*/
private String projectName;
/**
* 项目名称简码
*/
private String projectNameSim;
/**
* 单据状态,0 待送审1已送审2已审核3已打回 默认是1
*/
private Integer status;
}

View File

@ -28,11 +28,11 @@ public class PurchaseOrderMakeRespVO {
@Schema(description = "采购单类型1按物料需求计划采购2备库采购", example = "1")
@ExcelProperty("采购单类型1按物料需求计划采购2备库采购")
private Boolean purchaseType;
private Integer purchaseType;
@Schema(description = "采购物类型1物料2加工件", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("采购物类型1物料2加工件")
private Boolean goodsType;
private Integer goodsType;
@Schema(description = "结算币种", example = "2")
@ExcelProperty("结算币种")
@ -52,7 +52,7 @@ public class PurchaseOrderMakeRespVO {
@Schema(description = "单据状态,0 待送审1已送审2已审核3已打回 默认是1", example = "2")
@ExcelProperty("单据状态,0 待送审1已送审2已审核3已打回 默认是1")
private Boolean status;
private Integer status;
@Schema(description = "送审人", example = "17514")
@ExcelProperty("送审人")

View File

@ -1,81 +1,82 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 采购单主新增/修改 Request VO")
@Data
public class PurchaseOrderMakeSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "29741")
private Long id;
@Schema(description = "采购单号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "采购单号不能为空")
private String purchaseNo;
@Schema(description = "采购合同号")
private String contractNo;
@Schema(description = "采购单类型1按物料需求计划采购2备库采购", example = "1")
private Boolean purchaseType;
@Schema(description = "采购物类型1物料2加工件", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "采购物类型1物料2加工件不能为空")
private Boolean goodsType;
@Schema(description = "结算币种", example = "2")
private Integer currencyType;
@Schema(description = "税率")
private Integer taxRatio;
@Schema(description = "暂估价金额", example = "13902")
private BigDecimal estimatedPrice;
@Schema(description = "实际价金额", example = "14735")
private BigDecimal actualPrice;
@Schema(description = "单据状态,0 待送审1已送审2已审核3已打回 默认是1", example = "2")
private Boolean status;
@Schema(description = "送审人", example = "17514")
private Long submitUserId;
@Schema(description = "送审时间")
private LocalDateTime submitTime;
@Schema(description = "审核人")
private Long auditor;
@Schema(description = "审核时间")
private LocalDateTime auditTime;
@Schema(description = "备注", example = "随便")
private String description;
@Schema(description = "订单id", example = "14178")
private Long projectId;
@Schema(description = "生产计划id", example = "707")
private Long projectPlanId;
@Schema(description = "客户id", example = "20356")
private Long customerId;
@Schema(description = "客户简称")
private String brief;
@Schema(description = "项目名称", example = "芋艿")
private String projectName;
@Schema(description = "项目名称简码")
private String projectNameSim;
}
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 采购单主新增/修改 Request VO")
@Data
public class PurchaseOrderMakeSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "29741")
private Long id;
@Schema(description = "采购单号", requiredMode = Schema.RequiredMode.REQUIRED)
private String purchaseNo;
@Schema(description = "采购合同号")
private String contractNo;
@Schema(description = "采购单类型1按物料需求计划采购2备库采购", example = "1")
private Boolean purchaseType;
@Schema(description = "采购物类型1物料2加工件", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Boolean goodsType;
@Schema(description = "结算币种", example = "2")
private Integer currencyType;
@Schema(description = "税率")
private Integer taxRatio;
@Schema(description = "暂估价金额", example = "13902")
private BigDecimal estimatedPrice;
@Schema(description = "实际价金额", example = "14735")
private BigDecimal actualPrice;
@Schema(description = "单据状态,0 待送审1已送审2已审核3已打回 默认是1", example = "2")
private Boolean status;
@Schema(description = "送审人", example = "17514")
private Long submitUserId;
@Schema(description = "送审时间")
private LocalDateTime submitTime;
@Schema(description = "审核人")
private Long auditor;
@Schema(description = "审核时间")
private LocalDateTime auditTime;
@Schema(description = "备注", example = "随便")
private String description;
@Schema(description = "订单id", example = "14178")
private Long projectId;
@Schema(description = "生产计划id", example = "707")
private Long projectPlanId;
@Schema(description = "客户id", example = "20356")
private Long customerId;
@Schema(description = "客户简称")
private String brief;
@Schema(description = "项目名称", example = "芋艿")
private String projectName;
@Schema(description = "项目名称简码")
private String projectNameSim;
@Schema(description = "驳回原因")
private String reason;
}

View File

@ -18,7 +18,7 @@ public class PurchaseOrderMakeDetailPageReqVO extends PageParam {
@Schema(description = "采购单id", example = "13340")
private Long purchaseOrderId;
private String projectSubName;
@Schema(description = "加工件boom detail id", example = "31132")
private Long boomDetailId;
@ -75,7 +75,10 @@ public class PurchaseOrderMakeDetailPageReqVO extends PageParam {
@Schema(description = "子项目名称,唯一", example = "张三")
private String name;
@Schema(description = "项目名称,唯一", example = "张三")
private String projectName;
@Schema(description = "项目编码,唯一", example = "张三")
private String projectCode;
@Schema(description = "子项目简码")
private String nameSim;
@ -86,13 +89,13 @@ public class PurchaseOrderMakeDetailPageReqVO extends PageParam {
private Long purchaseOrderNoDetailId;
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
private Boolean orderStatus;
private Integer orderStatus;
@Schema(description = "子项目编码")
private String projectSubCode;
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2")
private Boolean receivingStatus;
private Integer receivingStatus;
@Schema(description = "采购单号")
private String purchaseNo;
@ -106,4 +109,4 @@ public class PurchaseOrderMakeDetailPageReqVO extends PageParam {
@Schema(description = "责任人id", example = "25680")
private Long duEmpId;
}
}

View File

@ -26,6 +26,7 @@ public class PurchaseOrderMakeDetailRespVO {
@ExcelProperty("加工件boom detail id")
private Long boomDetailId;
private String boomCode;
@Schema(description = "零件名称", example = "芋艿")
@ExcelProperty("零件名称")
private String boomName;
@ -108,7 +109,7 @@ public class PurchaseOrderMakeDetailRespVO {
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
@ExcelProperty("订单状态 未生成/已生成 1/2")
private Boolean orderStatus;
private Integer orderStatus;
@Schema(description = "子项目编码")
@ExcelProperty("子项目编码")
@ -134,4 +135,4 @@ public class PurchaseOrderMakeDetailRespVO {
@ExcelProperty("责任人id")
private Long duEmpId;
}
}

View File

@ -1,104 +1,105 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 采购单明细新增/修改 Request VO")
@Data
public class PurchaseOrderMakeDetailSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "22882")
private Long id;
@Schema(description = "采购单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13340")
@NotNull(message = "采购单id不能为空")
private Long purchaseOrderId;
@Schema(description = "加工件boom detail id", example = "31132")
private Long boomDetailId;
@Schema(description = "零件名称", example = "芋艿")
private String boomName;
@Schema(description = "规格型号")
private String boomSpec;
@Schema(description = "系统单位")
private String boomUnit;
@Schema(description = "材质")
private String composition;
@Schema(description = "采购数量")
private BigDecimal purchaseAmount;
@Schema(description = "暂估价金额", example = "20986")
private BigDecimal estimatedPrice;
@Schema(description = "实际价金额", example = "683")
private BigDecimal actualPrice;
@Schema(description = "预计到货日期")
private LocalDateTime arriveTime;
@Schema(description = "备注", example = "你说的对")
private String description;
@Schema(description = "需求数量")
private BigDecimal boomAmount;
@Schema(description = "需求到货日期")
private LocalDateTime requireTime;
@Schema(description = "供应商id", example = "30352")
private Long supplierId;
@Schema(description = "物料需求计划id", example = "16465")
private Long projectMaterialPlanId;
@Schema(description = "物料需求计划子项目id", example = "11304")
private Long projectMaterialPlanBoomId;
@Schema(description = "订单子项目id", example = "28999")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
private String name;
@Schema(description = "子项目简码")
private String nameSim;
@Schema(description = "采购订单主表id", example = "18351")
private Long purchaseOrderNoId;
@Schema(description = "采购订单明细表id", example = "18566")
private Long purchaseOrderNoDetailId;
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
private Boolean orderStatus;
@Schema(description = "子项目编码")
private String projectSubCode;
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2")
private Boolean receivingStatus;
@Schema(description = "采购单号")
private String purchaseNo;
@Schema(description = "工序id", example = "21391")
private Long procedureId;
@Schema(description = "零件理论重量")
private BigDecimal theWeight;
@Schema(description = "责任人id", example = "25680")
private Long duEmpId;
}
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 采购单明细新增/修改 Request VO")
@Data
public class PurchaseOrderMakeDetailSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "22882")
private Long id;
@Schema(description = "采购单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13340")
@NotNull(message = "采购单id不能为空")
private Long purchaseOrderId;
@Schema(description = "加工件boom detail id", example = "31132")
private Long boomDetailId;
@Schema(description = "零件名称", example = "芋艿")
private String boomName;
@Schema(description = "规格型号")
private String boomSpec;
private Long materialId;
@Schema(description = "系统单位")
private String boomUnit;
@Schema(description = "材质")
private String composition;
@Schema(description = "采购数量")
private BigDecimal purchaseAmount;
@Schema(description = "暂估价金额", example = "20986")
private BigDecimal estimatedPrice;
@Schema(description = "实际价金额", example = "683")
private BigDecimal actualPrice;
@Schema(description = "预计到货日期")
private LocalDateTime arriveTime;
@Schema(description = "备注", example = "你说的对")
private String description;
@Schema(description = "需求数量")
private BigDecimal boomAmount;
@Schema(description = "需求到货日期")
private LocalDateTime requireTime;
@Schema(description = "供应商id", example = "30352")
private Long supplierId;
@Schema(description = "物料需求计划id", example = "16465")
private Long projectMaterialPlanId;
@Schema(description = "物料需求计划子项目id", example = "11304")
private Long projectMaterialPlanBoomId;
@Schema(description = "订单子项目id", example = "28999")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
private String name;
@Schema(description = "子项目简码")
private String nameSim;
@Schema(description = "采购订单主表id", example = "18351")
private Long purchaseOrderNoId;
@Schema(description = "采购订单明细表id", example = "18566")
private Long purchaseOrderNoDetailId;
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
private Boolean orderStatus;
@Schema(description = "子项目编码")
private String projectSubCode;
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2")
private Boolean receivingStatus;
@Schema(description = "采购单号")
private String purchaseNo;
@Schema(description = "工序id", example = "21391")
private Long procedureId;
@Schema(description = "零件理论重量")
private BigDecimal theWeight;
@Schema(description = "责任人id", example = "25680")
private Long duEmpId;
private List<PurchaseOrderMakeDetailDO> updateList;
}

View File

@ -75,7 +75,7 @@ public class PurchaseOrderNoPageReqVO extends PageParam {
private LocalDate[] ordDate;
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "1")
private Boolean receivingStatus;
private Integer receivingStatus;
@Schema(description = "结算币种", example = "2")
private Integer currencyType;

View File

@ -28,7 +28,7 @@ public class PurchaseOrderNoRespVO {
@Schema(description = "创建时间")
@ExcelProperty(value="单据日期", converter = TimestampToDateConvert.class)
private LocalDateTime createTime;
private Date createTime;
@Schema(description = "供应商id")
private Long supplierId;
@ -107,4 +107,6 @@ public class PurchaseOrderNoRespVO {
private String creator;
@Schema(description = "是否打印")
private String isPrint;
@Schema(description = "收货状态")
private Integer receivingStatus1;
}

View File

@ -98,7 +98,7 @@ public class PurchaseOrderNoDetailPageReqVO extends PageParam {
private Long materialId;
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2")
private Boolean receivingStatus;
private Integer receivingStatus;
@Schema(description = "入库单id", example = "28663")
private Long storageId;

View File

@ -168,4 +168,11 @@ public class StorageLogController {
BeanUtils.toBean(list, StorageLogRespVO.class));
}
@GetMapping("/getSupplementPage")
@Operation(summary = "获得库存补充")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
public CommonResult<PageResult<StorageLogNowDO>> getSupplementPage(@Valid StorageLogPageReqVO pageReqVO) {
PageResult<StorageLogNowDO> pageResult = storageLogService.getSupplementPage(pageReqVO);
return success(pageResult);
}
}

View File

@ -33,6 +33,8 @@ public class MaterialPlanBoomDO extends BaseDO {
* 物料需求计划id
*/
private Long projectMaterialPlanId;
@TableField(exist = false)
private Long projectId;
/**
* 工艺boom明细id零件类型加工件
*/
@ -112,6 +114,10 @@ public class MaterialPlanBoomDO extends BaseDO {
@TableField(exist = false)
private String boomUnit;
@TableField(exist = false)
private String projectName;
@TableField(exist = false)
private String projectSubName;
@TableField(exist = false)
private String compositionName;
@TableField(exist = false)
private String name;
@ -122,6 +128,8 @@ public class MaterialPlanBoomDO extends BaseDO {
@TableField(exist = false)
private String nickname;
@TableField(exist = false)
private String blueprintNo;
@TableField(exist = false)
private Long matId;
@TableField(exist = false)
private String matCode;
@ -132,6 +140,25 @@ public class MaterialPlanBoomDO extends BaseDO {
@TableField(exist = false)
private String matType;
@TableField(exist = false)
private String mplanStatusName;
@TableField(exist = false)
private BigDecimal matRest;
//采购数量
@TableField(exist = false)
private BigDecimal purchaseAmount;
@TableField(exist = false)
//暂估价格
private BigDecimal estimatedPrice;
@TableField(exist = false)
//预估到时间
private LocalDateTime arriveTime;
@TableField(exist = false)
//供应商id
private Long supplierId;
}
@TableField(exist = false)
//客户简称
private String customerBriefName;
@TableField(exist = false)
private String boomArriveDates;
}

View File

@ -78,4 +78,4 @@ public class MaterialPlanDetailDO extends BaseDO {
private String name;
private String creator;
}
}

View File

@ -0,0 +1,69 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq;
import lombok.*;
import java.time.LocalDate;
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("project_mat_req")
@KeySequence("project_mat_req_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MatReqDO extends BaseDO {
/**
* 自增字段唯一
*/
@TableId
private Long id;
/**
* 领料单单号
*/
private String matReqNo;
/**
* 领料单类型1物料2加工件
*/
private Integer goodsType;
/**
* 单据状态,0 未领料1已领料 默认是0
*/
private Integer status;
/**
* 备注
*/
private String description;
/**
* 订单id
*/
private Long projectId;
/**
* 生产计划id
*/
private Long projectPlanId;
/**
* 客户id
*/
private Long customerId;
/**
* 领料单日期
*/
private LocalDate reqDate;
/**
* 项目名称
*/
private String projectName;
}

View File

@ -0,0 +1,104 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
/**
* 领料单明细 DO
*
* @author 管理员
*/
@TableName("project_mat_req_detail")
@KeySequence("project_mat_req_detail_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MatReqDetailDO extends BaseDO {
/**
* 自增字段唯一
*/
@TableId
private Long id;
/**
* 采购单id
*/
private Long matReqId;
/**
* 加工件boom detail id
*/
private Long boomDetailId;
/**
* 零件名称
*/
private String boomName;
/**
* 规格型号
*/
private String boomSpec;
/**
* 系统单位
*/
private String boomUnit;
/**
* 材质
*/
private String composition;
/**
* 备注
*/
private String description;
/**
* 需求数量
*/
private BigDecimal boomAmount;
/**
* 需求到货日期
*/
private LocalDateTime requireTime;
/**
* 订单子项目id
*/
private Long projectPlanSubId;
/**
* 子项目名称唯一
*/
private String name;
/**
* 子项目简码
*/
private String nameSim;
/**
* 子项目编码
*/
private String projectSubCode;
/**
* 物料id
*/
private Long materialId;
/**
* 物料需求计划主表id
*/
private Long projectMaterialPlanId;
/**
* 物料需求计划子表id
*/
private Long projectMaterialPlanDetailId;
/**
* 子项目编码
*/
@TableField(exist = false)
private String materialCode;
}

View File

@ -58,6 +58,8 @@ public class ProcessBomDetailDO extends BaseDO {
* 材质id
*/
private Long compositionId;
@TableField(exist = false)
private String inventCode;
/**
* 规格
*/
@ -82,6 +84,7 @@ public class ProcessBomDetailDO extends BaseDO {
/**
* 其他件物料编码
*/
@TableField(exist = false)
private String otherMaterialCode;
/**
* 状态,1表示正常2表示禁用
@ -186,4 +189,6 @@ public class ProcessBomDetailDO extends BaseDO {
private String projectNameSim;
@TableField(exist = false)
private String nickname;
}

View File

@ -42,11 +42,11 @@ public class PurchaseOrderMakeDO extends BaseDO {
/**
* 采购单类型1按物料需求计划采购2备库采购
*/
private Boolean purchaseType;
private Integer purchaseType;
/**
* 采购物类型1物料2加工件
*/
private Boolean goodsType;
private Integer goodsType;
/**
* 结算币种
*/
@ -66,7 +66,7 @@ public class PurchaseOrderMakeDO extends BaseDO {
/**
* 单据状态,0 待送审1已送审2已审核3已打回 默认是1
*/
private Boolean status;
private Integer status;
/**
* 送审人
*/
@ -112,4 +112,4 @@ public class PurchaseOrderMakeDO extends BaseDO {
*/
private String projectNameSim;
}
}

View File

@ -46,6 +46,8 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
* 零件名称
*/
private String boomName;
@TableField(exist = false)
private String boomCode;
/**
* 规格型号
*/
@ -90,6 +92,8 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
* 供应商id
*/
private Long supplierId;
@TableField(exist = false)
private String supplierName;
/**
* 物料需求计划id
*/
@ -121,7 +125,8 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
/**
* 订单状态 未生成/已生成 1/2
*/
private Boolean orderStatus;
@TableField( "order_status")
private Integer orderStatus;
/**
* 子项目编码
*/
@ -129,7 +134,7 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
/**
* 收货状态 未收货/收货中/收货完成 1/2/3
*/
private Boolean receivingStatus;
private Integer receivingStatus;
/**
* 采购单号
*/
@ -146,5 +151,9 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
* 责任人id
*/
private Long duEmpId;
/**
* 物料id
*/
private Long materialId;
}
}

View File

@ -6,6 +6,7 @@ import lombok.*;
import java.time.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.*;
@ -141,6 +142,8 @@ public class PurchaseOrderNoDO extends BaseDO {
@TableField(exist = false)
private String contactMobile;
@TableField(exist = false)
private Integer receivingStatus1;
@TableField(exist = false)
private List<PurchaseOrderNoDetailDO> PurchaseOrderNoDetailList;
/**
* 是否打印
@ -153,5 +156,5 @@ public class PurchaseOrderNoDO extends BaseDO {
/**
* 订单日期
*/
private LocalDate ordDate;
private Date ordDate;
}

View File

@ -35,6 +35,8 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
*/
@TableId
private Long id;
@TableField(exist = false)
private Long makeDetailId;
/**
* 采购单id
*/
@ -163,6 +165,10 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
* 责任人id
*/
private Long duEmpId;
/**
* 工序id
*/
private Long procedureId;
@TableField(exist = false)
private Long matId;
@TableField(exist = false)
@ -188,4 +194,6 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
private BigDecimal purchaseRemAmounts;
@TableField(exist = false)
private String compositionName;
}
@TableField(exist = false)
private String procedureName;
}

View File

@ -60,6 +60,7 @@ public class StorageLogNowDO extends BaseDO {
private BigDecimal storageOkQtys;
@TableField(exist = false)
private Long matUnitId;
@TableField(exist = false)
private String invSafe;
private String creator;
}

View File

@ -128,19 +128,20 @@ public interface bdgzsomthingMapper extends BaseMapperX<bdgzsomthingDO> {
default PageResult<bdgzsomthingDO> getMessage(bdgzsomthingPageReqVO pageReqVO){
LambdaQueryWrapper<bdgzsomthingDO> query = new LambdaQueryWrapper<>();
query.eq(!StringUtils.isEmpty(pageReqVO.getStatus()),bdgzsomthingDO::getDeleted, pageReqVO.getStatus());
query.eq(bdgzsomthingDO::getDeleted, pageReqVO.getStatus());
query.eq(bdgzsomthingDO::getClick, pageReqVO.getClick());
query.eq(bdgzsomthingDO::getAttr13,"1");
query.isNotNull(bdgzsomthingDO::getAttr6);
Page<bdgzsomthingDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
Page<bdgzsomthingDO> result = this.selectPage(page, query);
return new PageResult<>(result.getRecords(), result.getTotal());
}
default Long unreadMessage(String name){
LambdaQueryWrapper<bdgzsomthingDO> query = new LambdaQueryWrapper<>();
query.eq(bdgzsomthingDO::getClick, name);
query.isNotNull(bdgzsomthingDO::getAttr6);
query.eq(bdgzsomthingDO::getAttr13,"1");
query.eq(bdgzsomthingDO::getDeleted,0);
return this.selectCount(query);

View File

@ -61,6 +61,13 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
.eq(true,MaterialDO::getVirtualPart, YesOrNoEnum.N.name())
.apply(!StringUtils.isEmpty(reqVO.getCodeAndName()), " (t.name like {0} or t.code like {0})", "%"+reqVO.getCodeAndName()+"%");
if (!StringUtils.isEmpty(reqVO.getInventoryName())) {
query.and(qw ->
qw.like("t.name", reqVO.getInventoryName())
.or()
.like("t.code", reqVO.getInventoryName())
);
}
// if(!StringUtils.isEmpty(reqVO.getCodeAndName())){
// query.like(MaterialDO::getName, reqVO.getCodeAndName()).or().like(MaterialDO::getCode, reqVO.getCodeAndName());
//
@ -80,4 +87,9 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
return selectMaps(new QueryWrapper<MaterialDO>().select("id", "name","short_name","code","material_type","spec","unit","brand").eq("virtual_part", YesOrNoEnum.Y.name()).lambda());
}
default List<Map<String, Object>> getbzjList(){
return selectMaps(new QueryWrapper<MaterialDO>().select("id", "name","short_name","code","material_type","spec","unit","brand").eq("material_type", 5));
}
}

View File

@ -3,17 +3,23 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom;
import java.util.*;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
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.controller.admin.materialplan.vo.MaterialPlanPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.MaterialPlanDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.enums.BoomDetailTypeEnum;
@ -33,6 +39,9 @@ import org.springframework.util.StringUtils;
@Mapper
public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO> {
Long hasPurchase(Map map);
Long hasPurYard(Map map);
default PageResult<MaterialPlanBoomDO> selectPage(MaterialPlanBoomPageReqVO reqVO) {
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
query.selectAll(MaterialPlanBoomDO.class)
@ -50,7 +59,51 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
return selectPage(reqVO,query);
}
default PageResult<MaterialPlanBoomDO> getStandardBuyPage(MaterialPlanBoomPageReqVO pageReqVO){
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
query.selectAll(MaterialPlanBoomDO.class)
// .select("mat.id as matId","mat.name as matName","mat.code as matCode","mat.spec as matSpec","mat.unit as matUnit","mat.material_type as matType")
.select("b.material_name as matName","b.material_code as matCode","b.spec as matSpec","b.unit as matUnit","b.blueprint_no as blueprintNo")
.select("bc.`name` as compositionName","b.`composition_id` as compositionId")
.select("ma.brief as customerBriefName,ma.project_name as projectName,ma.name as projectSubName,ma.project_id as projectId")
.leftJoin(MaterialPlanDO.class,"ma",MaterialPlanDO::getId, MaterialPlanBoomDO::getProjectMaterialPlanId)
// .leftJoin(StorageMaterialDO.class,"sm",StorageMaterialDO::getId, MaterialPlanDetailDO::getMaterialId)
.leftJoin(ProcessBomDetailDO.class, "b", ProcessBomDetailDO::getId, MaterialPlanBoomDO::getBoomDetailId)
.leftJoin(CompositionDO.class, "bc", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
.eq(MaterialPlanDO::getMatType,0)
.disableSubLogicDel()
.groupBy(MaterialPlanBoomDO::getId)
.orderByDesc(MaterialPlanBoomDO::getCreateTime);
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()),MaterialPlanDO::getName, pageReqVO.getProjectSubName());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getMaterialName()),MaterialPlanBoomDO::getMatName, pageReqVO.getMaterialName());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectCode()),ProjectOrderDO::getCode, pageReqVO.getProjectCode());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getOwnerName()),AdminUserDO::getNickname, pageReqVO.getOwnerName());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectMaterialPlanNo()),MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());
if (pageReqVO.getMplanStatus() == 0){
query.in(MaterialPlanBoomDO::getMplanStatus,Arrays
.asList(0,3,5));
}else{
query.eq(MaterialPlanBoomDO::getMplanStatus,1);
}
// query.like(ObjectUtil.isNotEmpty(pageReqVO.getMplanStatus()),ProjectOrderDO::getCode, pageReqVO.getProjectCode());
return selectPage(pageReqVO, query);
}
default int clearSuplier(MaterialPlanBoomDO updateObj){
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
if (updateObj.getSupplierId() == null){
updateWrapper.set("supplier_id",null); }
if (updateObj.getArriveTime() == null){
updateWrapper.set("arrive_time",null);
}
updateWrapper.eq("id",updateObj.getId());
return update(updateWrapper);
}
default PageResult<MaterialPlanBoomDO> selectSumPage(MaterialPlanBoomPageReqVO reqVO) {
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
query.selectAll(MaterialPlanBoomDO.class)
@ -110,6 +163,30 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
return selectPage(pageReqVO, query);
}
default PageResult<MaterialPlanBoomDO> getStandardPartsPages(MaterialPlanPageReqVO pageReqVO){
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
query.selectAll(MaterialPlanBoomDO.class)
.select("p.project_name as projectName","p.project_id as projectId","p.name as projectSubName","mat.material_id as matId","m.code as materialName")
.select("d.spec as boomSpec","d.blueprint_no as blueprintNo","d.unit as boomUnit","DATE_FORMAT(t.boom_arrive_date, '%Y-%m-%d') AS boomArriveDates")
.leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId)
.leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.leftJoin(ProcessBomDetailDO.class,"d",ProcessBomDetailDO::getId,MaterialPlanBoomDO::getBoomDetailId)
// .leftJoin(MatReqDetailDO.class,"mat",MatReqDetailDO::getProjectMaterialPlanDetailId,MaterialPlanBoomDO::getId)
.leftJoin("project_mat_req_detail mat on (t.id=mat.project_material_plan_detail_id and mat.deleted=0)")
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,MatReqDetailDO::getMaterialId)
.disableSubLogicDel()
.groupBy(MaterialPlanBoomDO::getId)
.orderByDesc(MaterialPlanBoomDO::getCreateTime);
query
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName())
.like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), MaterialPlanDO::getName, pageReqVO.getProjectSubName())
.like(!StringUtils.isEmpty(pageReqVO.getMaterialName()), MaterialPlanBoomDO::getMatName, pageReqVO.getMaterialName())
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.eq(!StringUtils.isEmpty(pageReqVO.getMatType()), MaterialPlanDO::getMatType, pageReqVO.getMatType())
.eq(!StringUtils.isEmpty(pageReqVO.getStatus()), MaterialPlanBoomDO::getIsPurYard, pageReqVO.getStatus());
return selectPage(pageReqVO, query);
}
// default PageResult<MaterialPlanBoomDO> selectPage(MaterialPlanBoomPageReqVO reqVO) {
// return selectPage(reqVO, new LambdaQueryWrapperX<MaterialPlanBoomDO>()
// .eqIfPresent(MaterialPlanBoomDO::getId, reqVO.getId())
@ -124,4 +201,5 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
// }
}
}

View File

@ -65,6 +65,22 @@ public interface MaterialPlanDetailMapper extends BaseMapperX<MaterialPlanDetail
return selectPage(reqVO, query);
}
default PageResult<MaterialPlanDetailDO> getStandardBuyPage(MaterialPlanDetailPageReqVO reqVO) {
MPJLambdaWrapper<MaterialPlanDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(MaterialPlanDetailDO.class)
.leftJoin(MaterialDO.class, "mat", MaterialDO::getId, MaterialPlanDetailDO::getMaterialId)
.disableSubLogicDel()
.groupBy(MaterialPlanDetailDO::getMaterialId)
.orderByDesc(MaterialPlanDetailDO::getCreateTime);
query.eq(reqVO.getProjectMaterialPlanId()!=null,MaterialPlanDetailDO::getProjectMaterialPlanId, reqVO.getProjectMaterialPlanId())
.like(!StringUtils.isEmpty(reqVO.getMatName()), "mat.name", reqVO.getMatName())
.like(!StringUtils.isEmpty(reqVO.getMatCode()), "mat.code", reqVO.getMatCode())
.eq(!StringUtils.isEmpty(reqVO.getMatType()), "mat.material_type", reqVO.getMatType())
.orderByAsc(MaterialPlanDetailDO::getCreateTime);
return selectPage(reqVO, query);
}
// default PageResult<MaterialPlanDetailDO> selectPage(MaterialPlanDetailPageReqVO reqVO) {
// return selectPage(reqVO, new LambdaQueryWrapperX<MaterialPlanDetailDO>()
// .eqIfPresent(MaterialPlanDetailDO::getId, reqVO.getId())
@ -81,4 +97,4 @@ public interface MaterialPlanDetailMapper extends BaseMapperX<MaterialPlanDetail
List<MaterialPlanDetailDO> selectafterten(@Param("id") Long id, @Param("evday") String evday);
List<MaterialPlanDetailDO> selectafterten1();
}
}

View File

@ -0,0 +1,44 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.matreq;
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.controller.admin.matreqdetail.MatReqDetailController;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq.MatReqDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.matreq.vo.*;
import org.springframework.util.StringUtils;
/**
* 领料单主 Mapper
*
* @author 管理员
*/
@Mapper
public interface MatReqMapper extends BaseMapperX<MatReqDO> {
default PageResult<MatReqDO> selectPage(MatReqPageReqVO reqVO) {
MPJLambdaWrapper<MatReqDO> query = new MPJLambdaWrapper<>();
query.selectAll(MatReqDO.class)
.leftJoin(MatReqDetailDO.class, "d", MatReqDetailDO::getMatReqId, MatReqDO::getId)
.leftJoin(MaterialDO.class, "m", MaterialDO::getId, MatReqDetailDO::getMaterialId)
.disableSubLogicDel()
.groupBy(MatReqDO::getId)
.orderByDesc(MatReqDO::getCreateTime);
query.like(!StringUtils.isEmpty(reqVO.getMatReqNo()), MatReqDO::getMatReqNo, reqVO.getMatReqNo())
.like(!StringUtils.isEmpty(reqVO.getProjectName()),MatReqDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), MatReqDetailDO::getName,reqVO.getProjectSubName())
.like(!StringUtils.isEmpty(reqVO.getMaterialName()), MaterialDO::getName, reqVO.getMaterialName())
.eq(!StringUtils.isEmpty(reqVO.getGoodsType()), MatReqDO::getGoodsType, reqVO.getGoodsType());
return selectPage(reqVO, query);
}
}

View File

@ -0,0 +1,39 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.matreqdetail;
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.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq.MatReqDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail.vo.*;
import org.springframework.util.StringUtils;
/**
* 领料单明细 Mapper
*
* @author 管理员
*/
@Mapper
public interface MatReqDetailMapper extends BaseMapperX<MatReqDetailDO> {
default PageResult<MatReqDetailDO> selectPage(MatReqDetailPageReqVO reqVO) {
MPJLambdaWrapper<MatReqDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(MatReqDetailDO.class)
.select("m.code as materialCode")
.leftJoin(MaterialDO.class, "m", MaterialDO::getId, MatReqDetailDO::getMaterialId)
.disableSubLogicDel()
.groupBy(MatReqDetailDO::getId)
.orderByDesc(MatReqDetailDO::getCreateTime);
query.eq(!StringUtils.isEmpty(reqVO.getMatReqId()), MatReqDetailDO::getMatReqId, reqVO.getMatReqId());
return selectPage(reqVO, query);
}
}

View File

@ -48,12 +48,17 @@ public interface PlanSubMapper extends BaseMapperX<PlanSubDO> {
query.selectAll(PlanSubDO.class)
.select("b.project_name_sim as projectNameSim")
.select("a.brief as customerName")
.select("s.name as projectSubName")
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, PlanSubDO::getProjectId)
.leftJoin(ProjectOrderSubDO.class,"s",ProjectOrderSubDO::getId,PlanSubDO::getProjectSubId)
.leftJoin(CustomerDO.class,"a",CustomerDO::getId,ProjectOrderDO::getCustomerId)
.eq(PlanSubDO::getId, id);
return selectOne(query);
}
default List<PlanSubDO> searchOwnerThrees(Long planId,String name,String dateOne,String dateTwo,String id,long projectPlanid) {
MPJLambdaWrapper<PlanSubDO> query = new MPJLambdaWrapper<>();
query.selectAll(PlanSubDO.class)

View File

@ -100,6 +100,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
.select("concat('BOM-', e.project_sub_code) as bomCode", "e.project_sub_code as projectSubCode")
.select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName")
.select("d.name as projectSubName,f.name as compositionName")
.leftJoin(ProcessBomDO.class,"g",ProcessBomDO::getId,ProcessBomDetailDO::getBomId)
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId)
.leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId)
@ -117,6 +118,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
.eq(reqVO.getBomStatus() != null, ProcessBomDO::getBomStatus, reqVO.getBomStatus())
;

View File

@ -38,7 +38,14 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
return selectOne(query);
}
default ProjectOrderSubDO selectById(Long id) {
MPJLambdaWrapper<ProjectOrderSubDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderSubDO.class)
.select("pb.project_sub_code as projectSubCode")
.leftJoin(PlanSubDO.class,"pb",PlanSubDO::getProjectSubId,ProjectOrderSubDO::getId)
.eq(ProjectOrderSubDO::getId, id);
return selectOne(query);
}
default List<ProjectOrderSubDO> selectListByProjectOrderId(Long projectOrderId) {
MPJLambdaWrapper<ProjectOrderSubDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderSubDO.class)

View File

@ -2,14 +2,21 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail;
import java.util.*;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.util.StringUtils;
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.controller.admin.materialplanboom.vo.MaterialPlanBoomPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
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.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
@ -28,42 +35,47 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail
public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrderMakeDetailDO> {
default PageResult<PurchaseOrderMakeDetailDO> selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<PurchaseOrderMakeDetailDO>()
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseOrderId, reqVO.getPurchaseOrderId())
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomDetailId, reqVO.getBoomDetailId())
.likeIfPresent(PurchaseOrderMakeDetailDO::getBoomName, reqVO.getBoomName())
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomSpec, reqVO.getBoomSpec())
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomUnit, reqVO.getBoomUnit())
.eqIfPresent(PurchaseOrderMakeDetailDO::getComposition, reqVO.getComposition())
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseAmount, reqVO.getPurchaseAmount())
.eqIfPresent(PurchaseOrderMakeDetailDO::getEstimatedPrice, reqVO.getEstimatedPrice())
.eqIfPresent(PurchaseOrderMakeDetailDO::getActualPrice, reqVO.getActualPrice())
.betweenIfPresent(PurchaseOrderMakeDetailDO::getArriveTime, reqVO.getArriveTime())
.eqIfPresent(PurchaseOrderMakeDetailDO::getDescription, reqVO.getDescription())
.betweenIfPresent(PurchaseOrderMakeDetailDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomAmount, reqVO.getBoomAmount())
.betweenIfPresent(PurchaseOrderMakeDetailDO::getRequireTime, reqVO.getRequireTime())
.eqIfPresent(PurchaseOrderMakeDetailDO::getSupplierId, reqVO.getSupplierId())
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectMaterialPlanId, reqVO.getProjectMaterialPlanId())
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectMaterialPlanBoomId, reqVO.getProjectMaterialPlanBoomId())
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectPlanSubId, reqVO.getProjectPlanSubId())
.likeIfPresent(PurchaseOrderMakeDetailDO::getName, reqVO.getName())
.eqIfPresent(PurchaseOrderMakeDetailDO::getNameSim, reqVO.getNameSim())
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseOrderNoId, reqVO.getPurchaseOrderNoId())
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseOrderNoDetailId, reqVO.getPurchaseOrderNoDetailId())
.eqIfPresent(PurchaseOrderMakeDetailDO::getOrderStatus, reqVO.getOrderStatus())
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectSubCode, reqVO.getProjectSubCode())
.eqIfPresent(PurchaseOrderMakeDetailDO::getReceivingStatus, reqVO.getReceivingStatus())
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseNo, reqVO.getPurchaseNo())
.eqIfPresent(PurchaseOrderMakeDetailDO::getProcedureId, reqVO.getProcedureId())
.eqIfPresent(PurchaseOrderMakeDetailDO::getTheWeight, reqVO.getTheWeight())
.eqIfPresent(PurchaseOrderMakeDetailDO::getDuEmpId, reqVO.getDuEmpId())
.orderByDesc(PurchaseOrderMakeDetailDO::getId));
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)
.select("b.material_name as boomName","m.code as boomCode","b.spec as boomSpec","b.unit as boomUnit")
.select("pom.purchase_no as purchaseNo")
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId)
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
.eq(PurchaseOrderMakeDO::getGoodsType,1)
.disableSubLogicDel();
if (!StringUtils.isEmpty(reqVO.getProjectName())){
query.like(ProjectOrderDO::getProjectName, reqVO.getProjectName());
}
if (!StringUtils.isEmpty(reqVO.getProjectCode())){
query.like(ProjectOrderDO::getCode, reqVO.getProjectCode());
}
if (!StringUtils.isEmpty(reqVO.getBoomName())){
query.like(ProcessBomDetailDO::getMaterialName, reqVO.getBoomName());
}
if (!StringUtils.isEmpty(reqVO.getProjectSubName())){
query.like(ProjectOrderSubDO::getName, reqVO.getProjectSubName());
}
if (reqVO.getOrderStatus() != null){
query.eq(PurchaseOrderMakeDetailDO::getOrderStatus, reqVO.getOrderStatus());
}
return selectPage(reqVO, query);
}
default PageResult<PartPurchaseOrderPageRespVO> selectPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)
.select(PurchaseOrderMakeDO::getContractNo,
PurchaseOrderMakeDO::getGoodsType,
PurchaseOrderMakeDO::getBrief,
PurchaseOrderMakeDO::getProjectName,
PurchaseOrderMakeDO::getProjectNameSim,
PurchaseOrderMakeDO::getStatus)
.select("c.nickname as duEmpName")
.select("d.name as supplierName")
.select("e.name as procedureName")
@ -75,6 +87,9 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.disableLogicDel()
.disableSubLogicDel()
.eq(PurchaseOrderMakeDO::getGoodsType, 2)
.eq(Objects.nonNull(pageReqVO.getPurchaseOrderId()), PurchaseOrderMakeDO::getId, pageReqVO.getPurchaseOrderId())
.eq(StringUtils.isNotBlank(pageReqVO.getContractNo()), PurchaseOrderMakeDO::getContractNo, pageReqVO.getContractNo())
.eq(Objects.nonNull(pageReqVO.getDocumentStatus()), PurchaseOrderMakeDO::getStatus, pageReqVO.getDocumentStatus())
.like(StringUtils.isNotBlank(pageReqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, pageReqVO.getProjectName())
.like(StringUtils.isNotBlank(pageReqVO.getProjectSubName()), PurchaseOrderMakeDetailDO::getName, pageReqVO.getProjectSubName())
.like(StringUtils.isNotBlank(pageReqVO.getMaterialName()), PurchaseOrderMakeDetailDO::getBoomName, pageReqVO.getMaterialName())
@ -83,10 +98,10 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.like(Objects.nonNull(pageReqVO.getOwnerName()), AdminUserDO::getNickname, pageReqVO.getOwnerName())
.like(Objects.nonNull(pageReqVO.getSupplierName()), SupplierDO::getName, pageReqVO.getSupplierName());
System.out.println(query.getTargetSql());
String sqlStr= query.getTargetSql();
PageResult<PartPurchaseOrderPageRespVO> pageResult = selectJoinPage(pageReqVO, PartPurchaseOrderPageRespVO.class, query);
return pageResult;
}
}
}

View File

@ -33,6 +33,12 @@ public interface PurchaseOrderNoMapper extends BaseMapperX<PurchaseOrderNoDO> {
query.selectAll(PurchaseOrderNoDO.class)
.select("s.name as supplierName","m.project_material_plan_no as materialPlanNo")
.select("CASE " +
" WHEN COUNT(d.id) = 0 THEN 1 " + // 无子记录
" WHEN SUM(CASE d.receiving_status WHEN 3 THEN 0 ELSE 1 END) = 0 THEN 3 " + // 全部为3
" WHEN SUM(CASE d.receiving_status WHEN 1 THEN 1 ELSE 0 END) = COUNT(d.id) THEN 1 " + // 全部为1
" ELSE 2 " + // 其他情况
"END AS receivingStatus1")
.leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)
.leftJoin(PurchaseOrderNoDetailDO.class,"d", PurchaseOrderNoDetailDO::getPurchaseOrderId, PurchaseOrderNoDO::getId)
.leftJoin(MaterialPlanDO.class, "m", MaterialPlanDO::getId, PurchaseOrderNoDO::getProjectMaterialPlanId)
@ -45,13 +51,13 @@ public interface PurchaseOrderNoMapper extends BaseMapperX<PurchaseOrderNoDO> {
.like(!StringUtils.isEmpty(reqVO.getMaterialPlanNo()), "m.project_material_plan_no", reqVO.getMaterialPlanNo())
.apply(!StringUtils.isEmpty(reqVO.getCreateTime()), "DATE_FORMAT(t.create_time,'%Y-%m-%d') = {0}", reqVO.getCreateTime())
.eq(reqVO.getStatus() != null, PurchaseOrderNoDO::getStatus, reqVO.getStatus())
.eq(reqVO.getReceivingStatus() != null, PurchaseOrderNoDO::getReceivingStatus, reqVO.getReceivingStatus())
// .eq(reqVO.getReceivingStatus() != null, PurchaseOrderNoDO::getReceivingStatus, reqVO.getReceivingStatus())
.eq(reqVO.getPurchaseType() != null, PurchaseOrderNoDO::getPurchaseType, reqVO.getPurchaseType())
.eq(reqVO.getGoodsType() != null, PurchaseOrderNoDO::getGoodsType, reqVO.getGoodsType())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), PurchaseOrderNoDetailDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), PurchaseOrderNoDetailDO::getName, reqVO.getProjectSubName())
.like(!StringUtils.isEmpty(reqVO.getUsername()), AdminUserDO::getNickname, reqVO.getUsername())
.having(reqVO.getReceivingStatus() != null,"receivingStatus1 = {0}", reqVO.getReceivingStatus())
.in(reqVO.getIds() != null && !reqVO.getIds().isEmpty(),PurchaseOrderNoDO::getId,reqVO.getIds());
return selectPage(reqVO, query);

View File

@ -5,10 +5,14 @@ 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.controller.admin.materialplanboom.vo.ProcessBoomPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermaterial.vo.PurchaseOrderMaterialPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.MaterialPlanDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderboom.PurchaseOrderBoomDO;
@ -19,6 +23,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMate
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo.*;
import org.springframework.beans.PropertyValues;
/**
* 采购订单明细 Mapper
@ -53,8 +58,11 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderNoDetailDO.class)
.select("com.name as compositionName","t.purchase_rem_amount as purchaseRemAmounts","mat.code as matCode")
.select("com.name as compositionName","t.purchase_rem_amount as purchaseRemAmounts","mat.code as matCode","pro.name as procedureName")
.leftJoin(PurchaseOrderNoDO.class, "pb", PurchaseOrderNoDO::getId, PurchaseOrderBoomDO::getPurchaseOrderId)
.leftJoin(ProcessBomDetailDO.class,"bom", ProcessBomDetailDO::getId, PurchaseOrderNoDetailDO::getBoomDetailId)
.leftJoin(MaterialPlanBoomDO.class,"plan", MaterialPlanBoomDO::getId, PurchaseOrderNoDetailDO::getProjectMaterialPlanBoomId)
.leftJoin(ProcedureDO.class,"pro", ProcedureDO::getId, MaterialPlanBoomDO::getProcedureId)
.leftJoin(CompositionDO.class, "com", CompositionDO::getId, PurchaseOrderNoDetailDO::getComposition)
.leftJoin(ProjectOrderSubDO.class,"sub",ProjectOrderSubDO::getId, PurchaseOrderNoDetailDO::getProjectPlanSubId)
.leftJoin(MaterialDO.class,"mat",MaterialDO::getId,PurchaseOrderNoDetailDO::getMaterialId)
@ -64,4 +72,12 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
.orderByDesc(PurchaseOrderMaterialDO::getCreateTime);
return selectList(query);
}
default List<PurchaseOrderNoDetailDO> listStatusByOrderIds(List<Long> orderIds){
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderNoDetailDO.class);
query.in(PurchaseOrderNoDetailDO::getPurchaseOrderId, orderIds);
query.eq(PurchaseOrderNoDetailDO::getDeleted, 0);
return selectList(query);
}
}

View File

@ -17,6 +17,7 @@ import org.apache.poi.hpsf.Decimal;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* /出库日志 Mapper
@ -124,4 +125,82 @@ public interface StorageLogNowMapper extends BaseMapperX<StorageLogNowDO> {
return selectPage(reqVO,query);
}
default PageResult<StorageLogNowDO> getSupplementPage(StorageLogPageReqVO pageReqVO){
// MPJLambdaWrapper<StorageLogNowDO> query = new MPJLambdaWrapper<>()
//// 选择所有字段 + 安全库存字段
// query.selectAll(StorageLogNowDO.class)
// .select("SUM(storage_ok_qty) as storageOkQtys","m.inv_safe as invSafe")
// .select(MaterialDO::getInvSafe) // 添加安全库存字段
// .leftJoin(MaterialDO.class,"m", MaterialDO::getCode, StorageLogNowDO::getMatCode)
// .orderByDesc(StorageLogNowDO::getMatCode);
//
//// 原有条件
// query.like(!StringUtils.isEmpty(pageReqVO.getMatType()), StorageLogNowDO::getMatType, pageReqVO.getMatType())
// .like(!StringUtils.isEmpty(pageReqVO.getMatSpec()), StorageLogNowDO::getMatSpec, pageReqVO.getMatSpec())
// .eq(pageReqVO.getWhId() != null, StorageLogNowDO::getWhId, pageReqVO.getWhId())
// .eq(pageReqVO.getRgId() != null, StorageLogNowDO::getRgId, pageReqVO.getRgId())
// .eq(pageReqVO.getPnId() != null, StorageLogNowDO::getPnId, pageReqVO.getPnId())
// .ne(true, StorageLogNowDO::getStorageOkQty, 0)
// .like(!StringUtils.isEmpty(pageReqVO.getMatName()), StorageLogNowDO::getMatName, pageReqVO.getMatName())
// .like(!StringUtils.isEmpty(pageReqVO.getMatCode()), StorageLogNowDO::getMatCode, pageReqVO.getMatCode())
// .like(!StringUtils.isEmpty(pageReqVO.getLotNo()), StorageLogNowDO::getLotNo, pageReqVO.getLotNo());
//
//// 添加分组和筛选条件
// query.groupBy(StorageLogNowDO::getMatCode)
// .having("SUM(storageOkQtys) < COALESCE(invSafe, 0)");
//
//
// return selectPage(pageReqVO, query);
// 步骤1创建子查询获取符合条件的matCode列表
MPJLambdaWrapper<StorageLogNowDO> subQuery = new MPJLambdaWrapper<>();
subQuery.select(StorageLogNowDO::getMatCode)
.leftJoin(MaterialDO.class, "m", MaterialDO::getCode, StorageLogNowDO::getMatCode)
.groupBy(StorageLogNowDO::getMatCode)
.having("SUM(storage_ok_qty) < COALESCE(MAX(m.inv_safe), 0)");
// .like(!StringUtils.isEmpty(pageReqVO.getMatType()), StorageLogNowDO::getMatType, pageReqVO.getMatType())
// .like(!StringUtils.isEmpty(pageReqVO.getMatSpec()), StorageLogNowDO::getMatSpec, pageReqVO.getMatSpec())
// .eq(pageReqVO.getWhId() != null, StorageLogNowDO::getWhId, pageReqVO.getWhId())
// .eq(pageReqVO.getRgId() != null, StorageLogNowDO::getRgId, pageReqVO.getRgId())
// .eq(pageReqVO.getPnId() != null, StorageLogNowDO::getPnId, pageReqVO.getPnId())
// .ne(true, StorageLogNowDO::getStorageOkQty, 0)
// .like(!StringUtils.isEmpty(pageReqVO.getMatName()), StorageLogNowDO::getMatName, pageReqVO.getMatName())
// .like(!StringUtils.isEmpty(pageReqVO.getMatCode()), StorageLogNowDO::getMatCode, pageReqVO.getMatCode())
// .like(!StringUtils.isEmpty(pageReqVO.getLotNo()), StorageLogNowDO::getLotNo, pageReqVO.getLotNo());
// 执行子查询获取符合条件的matCode
List<String> qualifiedMatCodes = this.selectList(subQuery)
.stream()
.map(StorageLogNowDO::getMatCode)
.distinct()
.collect(Collectors.toList());
// 步骤2主查询返回原始记录
MPJLambdaWrapper<StorageLogNowDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageLogNowDO.class)
.select("ROUND(m.inv_safe, 2) as invSafe") // 添加安全库存字段
.leftJoin(MaterialDO.class, "m", MaterialDO::getCode, StorageLogNowDO::getMatCode)
.orderByDesc(StorageLogNowDO::getMatCode);
// 复制原有条件
query.like(!StringUtils.isEmpty(pageReqVO.getMatType()), StorageLogNowDO::getMatType, pageReqVO.getMatType())
.like(!StringUtils.isEmpty(pageReqVO.getMatSpec()), StorageLogNowDO::getMatSpec, pageReqVO.getMatSpec())
.eq(pageReqVO.getWhId() != null, StorageLogNowDO::getWhId, pageReqVO.getWhId())
.eq(pageReqVO.getRgId() != null, StorageLogNowDO::getRgId, pageReqVO.getRgId())
.eq(pageReqVO.getPnId() != null, StorageLogNowDO::getPnId, pageReqVO.getPnId())
.ne(true, StorageLogNowDO::getStorageOkQty, 0)
.like(!StringUtils.isEmpty(pageReqVO.getMatName()), StorageLogNowDO::getMatName, pageReqVO.getMatName())
.like(!StringUtils.isEmpty(pageReqVO.getMatCode()), StorageLogNowDO::getMatCode, pageReqVO.getMatCode())
.like(!StringUtils.isEmpty(pageReqVO.getLotNo()), StorageLogNowDO::getLotNo, pageReqVO.getLotNo())
.isNotNull(MaterialDO::getInvSafe);
// 添加筛选条件只返回符合条件的matCode组中的记录
if (!qualifiedMatCodes.isEmpty()) {
query.in(StorageLogNowDO::getMatCode, qualifiedMatCodes);
} else {
// 如果没有符合条件的matCode返回空结果
query.apply("1 = 0");
}
return selectPage(pageReqVO, query);
}
}

View File

@ -58,4 +58,6 @@ public interface MaterialService {
List<Map<String, Object>> selectSimpleVirtualList();
void importExcel(List<MaterialExcelVO> materialExcelVOList, Boolean updateSupport);
List<Map<String, Object>> getbzjList();
}

View File

@ -204,6 +204,10 @@ public class MaterialServiceImpl implements MaterialService {
}));
}
@Override
public List<Map<String, Object>> getbzjList() {
return materialMapper.getbzjList(); }
private void checkData(List<MaterialExcelVO> materialExcelVOList) {
// 基础校验
Set<ConstraintViolation<List<MaterialExcelVO>>> validate = validator.validate(materialExcelVOList, MaterialExcelVO.class);

View File

@ -9,7 +9,9 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.TaskDispat
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
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.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
/**
@ -70,4 +72,10 @@ public interface MaterialPlanService {
PageResult<MaterialPlanDO> getBeiKuPage(MaterialPlanPageReqVO pageReqVO);
MaterialPlanDO getProjectMaterialPlanNo(String code);
PageResult<MaterialPlanBoomDO> getStandardPartsPages(MaterialPlanPageReqVO pageReqVO);
CommonResult<Boolean> operation(MaterialPlanPageReqVO pageReqVO);
Boolean supplement(List<StorageLogNowDO> list);
}

View File

@ -8,11 +8,14 @@ import com.chanko.yunxi.mes.framework.common.util.object.ObjectUtils;
import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.attentiontodo.AttentiontodoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
@ -77,6 +80,8 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
private ProcessBomDetailMapper processBomDetailMapper;
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Resource
private MaterialMapper materialMapper;
@Override
public Long createMaterialPlan(MaterialPlanSaveReqVO createReqVO) {
// 插入
@ -339,4 +344,67 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
return materialPlanMapper.selectOne(queryWrapper);
}
@Override
public PageResult<MaterialPlanBoomDO> getStandardPartsPages(MaterialPlanPageReqVO pageReqVO) {
return materialPlanBoomMapper.getStandardPartsPages(pageReqVO);
}
@Override
public CommonResult<Boolean> operation(MaterialPlanPageReqVO pageReqVO) {
MaterialPlanBoomDO boomDO = materialPlanBoomMapper.selectById(pageReqVO.getId());
if (ObjectUtil.isNotEmpty(boomDO)){
switch (pageReqVO.getType()){
case "del":
if (boomDO.getIsPurYard()!=5||boomDO.getIsPurYard()!=2) return CommonResult.error(400,"该物料信息状态非确认状态,请刷新界面!");
boomDO.setIsPurYard(1);
break;
case "queren":
if (boomDO.getIsPurYard()!=1) return CommonResult.error(400,"该物料信息状态非库存状态,请刷新界面!");
boomDO.setIsPurYard(2);
break;
case "bucong":
if (boomDO.getIsPurYard()!=1) return CommonResult.error(400,"该物料信息状态非库存状态,请刷新界面!");
boomDO.setIsPurYard(4);
break;
case "caigou":
if (boomDO.getIsPurYard()!=1) return CommonResult.error(400,"该物料信息状态非库存状态,请刷新界面!");
boomDO.setIsPurYard(5);
break;
}
materialPlanBoomMapper.updateById(boomDO);
}
return CommonResult.success(true);
}
@Override
public Boolean supplement(List<StorageLogNowDO> list) {
MaterialPlanDO planDO = new MaterialPlanDO();
SerialNumberDO serialNumberDO = new SerialNumberDO();
serialNumberDO = serialNumberService.getSerialNumber(MATERIAL_PLAN.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
planDO.setProjectMaterialPlanNo(MATERIAL_PLAN.getCode(serialNumberDO.getSerialNumber().toString()));
planDO.setMatType(2);
planDO.setMatPlanDate(new Date());
materialPlanMapper.insert(planDO);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
List<MaterialPlanBoomDO> materialPlanBoomDOList = new ArrayList<>();
for (StorageLogNowDO nowDO : list) {
MaterialPlanBoomDO boomDO = new MaterialPlanBoomDO();
boomDO.setProjectMaterialPlanId(planDO.getId());
boomDO.setBoomAmount(nowDO.getStorageOkQtys());
boomDO.setMplanStatus(0);
LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MaterialDO::getCode, nowDO.getMatCode());
MaterialDO materialDO = materialMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(materialDO)){
boomDO.setMatName(materialDO.getName());
boomDO.setMaterialId(materialDO.getId());
}
materialPlanBoomDOList.add(boomDO);
}
materialPlanBoomMapper.insertOrUpdateBatch(materialPlanBoomDOList);
return true;
}
}

View File

@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.service.materialplanboom;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
@ -60,4 +61,6 @@ public interface MaterialPlanBoomService {
PageResult<MaterialPlanBoomDO> getMaterialPlanBoomPages(ProcessBoomPageReqVO pageReqVO);
PageResult<MaterialPlanBoomDO> getProjectMaterialPlanId(MaterialPlanBoomPageReqVO pageReqVO);
PageResult<MaterialPlanBoomDO> getStandardBuyPage(MaterialPlanBoomPageReqVO pageReqVO);
}

View File

@ -1,7 +1,19 @@
package com.chanko.yunxi.mes.module.heli.service.materialplanboom;
import cn.binarywang.wx.miniapp.bean.cloud.WxCloudDatabaseQueryResult;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.BoomDetailRespVOMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
@ -9,12 +21,21 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMap
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
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.purchaseorder.PurchaseOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import org.apache.catalina.security.SecurityUtil;
import org.apache.ibatis.jdbc.Null;
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.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -27,6 +48,7 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.*;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
@ -46,6 +68,18 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
@Resource
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private MaterialPlanMapper materialPlanMapper;
@Resource
private PlanSubMapper planSubMapper;
@Resource
private PurchaseOrderMakeMapper purchaseOrderMakeMapper;
@Resource
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
@Override
public Long createMaterialPlanBoom(MaterialPlanBoomSaveReqVO createReqVO) {
@ -58,11 +92,157 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
@Override
public void updateMaterialPlanBoom(MaterialPlanBoomSaveReqVO updateReqVO) {
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
// 校验存在
validateMaterialPlanBoomExists(updateReqVO.getId());
// 更新
MaterialPlanBoomDO updateObj = BeanUtils.toBean(updateReqVO, MaterialPlanBoomDO.class);
materialPlanBoomMapper.updateById(updateObj);
if (CollUtil.isEmpty(updateReqVO.getMaterialPlanBoomDOList())){
MaterialPlanBoomDO updateObj = BeanUtils.toBean(updateReqVO, MaterialPlanBoomDO.class);
materialPlanBoomMapper.updateById(updateObj);
if (updateObj.getSupplierId() == null || updateObj.getArriveTime() == null
) {
materialPlanBoomMapper.clearSuplier(updateObj);
}
}else{
if (updateReqVO.getBuyType() == 0){
List<MaterialPlanBoomDO> materialPlanBoomDOList = updateReqVO.getMaterialPlanBoomDOList();
List<Long> ids = new ArrayList<>();
Map map = new HashMap();
List<PurchaseOrderMakeDetailDO> makeDetailDOList = new ArrayList<>();
HashMap<Long, ProjectOrderSubDO> hashMap = new HashMap<>();
HashMap<Long, PlanSubDO> planSubMap = new HashMap<>();
for (MaterialPlanBoomDO dp : materialPlanBoomDOList) {
PurchaseOrderMakeDetailDO makeDetailDO = new PurchaseOrderMakeDetailDO();
makeDetailDO.setBoomDetailId(dp.getBoomDetailId());
makeDetailDO.setBoomName(dp.getMatName());
makeDetailDO.setBoomSpec(dp.getMatSpec());
makeDetailDO.setBoomUnit(dp.getMatUnit());
makeDetailDO.setComposition(dp.getCompositionName());
makeDetailDO.setPurchaseAmount(dp.getPurchaseAmount());
makeDetailDO.setEstimatedPrice(dp.getEstimatedPrice());
makeDetailDO.setArriveTime(dp.getArriveTime());
makeDetailDO.setBoomAmount(dp.getBoomAmount());
makeDetailDO.setRequireTime(dp.getBoomArriveDate());
makeDetailDO.setSupplierId(dp.getSupplierId());
makeDetailDO.setProjectMaterialPlanId(dp.getProjectMaterialPlanId());
makeDetailDO.setProjectMaterialPlanBoomId(dp.getId());
makeDetailDO.setName(dp.getProjectName());
ProjectOrderSubDO subDO = new ProjectOrderSubDO();
if (hashMap.get(dp.getProjectPlanSubId()) != null) {
subDO = hashMap.get(dp.getProjectPlanSubId());
}else{
ProjectOrderSubDO projectOrderSubDO = projectOrderSubMapper.selectById(dp.getProjectPlanSubId());
hashMap.put(dp.getProjectPlanSubId(), projectOrderSubDO);
subDO = hashMap.get(dp.getProjectPlanSubId());
}
if (subDO != null){
PlanSubDO planSubDO = new PlanSubDO();
if (planSubMap.get(dp.getProjectPlanSubId()) != null) {
planSubDO = planSubMap.get(dp.getProjectPlanSubId());
}else{
List<PlanSubDO> planSubDOS = planSubMapper.selectList(new LambdaQueryWrapperX<PlanSubDO>().eq(PlanSubDO::getProjectSubId, subDO.getId()));
if (CollUtil.isEmpty(planSubDOS)){
planSubMap.put(dp.getProjectPlanSubId(), planSubDOS.get(0));
planSubDO = planSubDOS.get(0);
}
}
if (planSubDO != null){
makeDetailDO.setProjectSubCode(planSubDO.getProjectSubCode());
}
makeDetailDO.setName(subDO.getProjectSubName());
makeDetailDO.setProjectPlanSubId(subDO.getId());
makeDetailDO.setNameSim(subDO.getNameSim());
makeDetailDO.setProjectSubCode(subDO.getProjectSubCode());
}
makeDetailDO.setOrderStatus(1);
makeDetailDOList.add(makeDetailDO);
ids.add(dp.getId());
}
map.put("ids", ids);
Long l1 = materialPlanBoomMapper.hasPurchase(map);
if (l1 != null && l1 > 0L) {
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_EXISTS);
}
Long l = materialPlanBoomMapper.hasPurYard(map);
if (l != null && l> 0L){
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE);
}
//插入make表
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
SerialNumberDO serialNumberDO = new SerialNumberDO();
// 月度流水号
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 入库前缀
purchaseOrderMakeDO.setPurchaseNo(PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()));
purchaseOrderMakeDO.setGoodsType(1);
purchaseOrderMakeDO.setStatus(1);
purchaseOrderMakeDO.setSubmitUserId(loginUserId);
purchaseOrderMakeDO.setSubmitTime(LocalDateTime.now());
purchaseOrderMakeDO.setProjectId(materialPlanBoomDOList.get(0).getProjectId());
MaterialPlanDO materialPlanDO = materialPlanMapper.selectOne(new LambdaQueryWrapperX<MaterialPlanDO>().eq(MaterialPlanDO::getId, materialPlanBoomDOList.get(0).getProjectMaterialPlanId()));
if (materialPlanDO != null){
purchaseOrderMakeDO.setProjectPlanId(materialPlanDO.getProjectPlanId());
purchaseOrderMakeDO.setCustomerId(materialPlanDO.getCustomerId());
purchaseOrderMakeDO.setBrief(materialPlanDO.getBrief());
purchaseOrderMakeDO.setProjectName(materialPlanDO.getProjectName());
purchaseOrderMakeDO.setProjectNameSim(materialPlanDO.getProjectNameSim());
purchaseOrderMakeMapper.insert(purchaseOrderMakeDO);
//******* 插入明细****//
for (PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO : makeDetailDOList) {
purchaseOrderMakeDetailDO.setPurchaseOrderId(purchaseOrderMakeDO.getId());
}
purchaseOrderMakeDetailMapper.insertBatch(makeDetailDOList);
for (MaterialPlanBoomDO dp : materialPlanBoomDOList) {
for (PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO : makeDetailDOList){
if (dp.getId().equals(purchaseOrderMakeDetailDO.getProjectMaterialPlanBoomId())) {
dp.setMplanStatus(1);
dp.setProjectPurchaseOrderMakeId(purchaseOrderMakeDO.getId());
dp.setProjectPurchaseOrderMakeDetailId(purchaseOrderMakeDetailDO.getId());
dp.setPurchaseNo(purchaseOrderMakeDO.getPurchaseNo());
}
}
}
materialPlanBoomMapper.updateBatch(materialPlanBoomDOList);
serialNumberService.updateSerialNumber(serialNumberDO);
}else {
throw exception(MATERIAL_PLAN_NOT_EXISTS);
}
}else{
List<MaterialPlanBoomDO> materialPlanBoomDOList = updateReqVO.getMaterialPlanBoomDOList();
List<Long> ids = new ArrayList<>();
Map map = new HashMap();
HashMap<Long, ProjectOrderSubDO> hashMap = new HashMap<>();
for (MaterialPlanBoomDO dp : materialPlanBoomDOList) {
dp.setIsPurYard(1);
ids.add(dp.getId());
}
map.put("ids", ids);
Long l1 = materialPlanBoomMapper.hasPurchase(map);
if (l1 != null && l1 > 0L) {
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_EXISTS);
}
Long l = materialPlanBoomMapper.hasPurYard(map);
if (l != null && l> 0L){
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE);
}
materialPlanBoomMapper.updateBatch(materialPlanBoomDOList);
}
// purchaseOrderMakeDO.setCustomerId(materialPlanBoomDOList.get(0).getCustomerBriefName())
}
}
@Override
@ -164,4 +344,17 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
return materialPlanBoomMapper.getProjectMaterialPlanId(pageReqVO);
}
@Override
public PageResult<MaterialPlanBoomDO> getStandardBuyPage(MaterialPlanBoomPageReqVO pageReqVO) {
PageResult<MaterialPlanBoomDO> standardBuyPage = materialPlanBoomMapper.getStandardBuyPage(pageReqVO);
// if (standardBuyPage.getTotal() > 0){
// for (MaterialPlanBoomDO materialPlanBoomDO : standardBuyPage.getList()) {
// if (materialPlanBoomDO.getPurchaseAmount() == null){
// materialPlanBoomDO.setPurchaseAmount(materialPlanBoomDO.getBoomAmount());
// }
// }
// }
return standardBuyPage;
}
}

View File

@ -0,0 +1,59 @@
package com.chanko.yunxi.mes.module.heli.service.matreq;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.module.heli.controller.admin.matreq.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq.MatReqDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* 领料单主 Service 接口
*
* @author 管理员
*/
public interface MatReqService {
/**
* 创建领料单主
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createMatReq(@Valid MatReqSaveReqVO createReqVO);
/**
* 更新领料单主
*
* @param updateReqVO 更新信息
*/
void updateMatReq(@Valid MatReqSaveReqVO updateReqVO);
/**
* 删除领料单主
*
* @param id 编号
*/
void deleteMatReq(Long id);
/**
* 获得领料单主
*
* @param id 编号
* @return 领料单主
*/
MatReqDO getMatReq(Long id);
/**
* 获得领料单主分页
*
* @param pageReqVO 分页查询
* @return 领料单主分页
*/
PageResult<MatReqDO> getMatReqPage(MatReqPageReqVO pageReqVO);
CommonResult<Boolean> generate(List<MaterialPlanBoomDO> list);
}

View File

@ -0,0 +1,174 @@
package com.chanko.yunxi.mes.module.heli.service.matreq;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.matreqdetail.MatReqDetailMapper;
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.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import com.chanko.yunxi.mes.module.heli.controller.admin.matreq.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq.MatReqDO;
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.matreq.MatReqMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.MAT_REQ;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* 领料单主 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class MatReqServiceImpl implements MatReqService {
@Resource
private MatReqMapper matReqMapper;
@Resource
private MaterialPlanBoomMapper materialPlanBoomMapper;
@Resource
private MaterialPlanMapper materialPlanMapper;
@Resource
private MatReqDetailMapper matReqDetailMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private MaterialMapper materialMapper;
@Override
public Long createMatReq(MatReqSaveReqVO createReqVO) {
// 插入
MatReqDO matReq = BeanUtils.toBean(createReqVO, MatReqDO.class);
matReqMapper.insert(matReq);
// 返回
return matReq.getId();
}
@Override
public void updateMatReq(MatReqSaveReqVO updateReqVO) {
// 校验存在
validateMatReqExists(updateReqVO.getId());
// 更新
MatReqDO updateObj = BeanUtils.toBean(updateReqVO, MatReqDO.class);
matReqMapper.updateById(updateObj);
}
@Override
public void deleteMatReq(Long id) {
// 校验存在
validateMatReqExists(id);
MatReqDO matReqDO = matReqMapper.selectById(id);
LambdaQueryWrapper<MatReqDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MatReqDetailDO::getMatReqId,id);
List<MatReqDetailDO> matReqDetailDOS = matReqDetailMapper.selectList(wrapper);
List<Long> detailIds = matReqDetailDOS.stream()
.map(MatReqDetailDO::getProjectMaterialPlanDetailId)
.collect(Collectors.toList());
LambdaUpdateWrapper<MaterialPlanBoomDO> wrapper1 = new LambdaUpdateWrapper<>();
wrapper1.in(MaterialPlanBoomDO::getId,detailIds);
wrapper1.set(MaterialPlanBoomDO::getIsPurYard,1);
materialPlanBoomMapper.update(wrapper1);
LambdaUpdateWrapper<MatReqDetailDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(MatReqDetailDO::getMatReqId,id);
matReqDetailMapper.delete(updateWrapper);
// 删除
matReqMapper.deleteById(id);
}
private void validateMatReqExists(Long id) {
if (matReqMapper.selectById(id) == null) {
throw exception(MAT_REQ_NOT_EXISTS);
}
}
@Override
public MatReqDO getMatReq(Long id) {
return matReqMapper.selectById(id);
}
@Override
public PageResult<MatReqDO> getMatReqPage(MatReqPageReqVO pageReqVO) {
return matReqMapper.selectPage(pageReqVO);
}
@Override
public CommonResult<Boolean> generate(List<MaterialPlanBoomDO> list) {
List<Long> ids = list.stream()
.map(MaterialPlanBoomDO::getId)
.collect(Collectors.toList());
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(MaterialPlanBoomDO::getId,ids);
queryWrapper.ne(MaterialPlanBoomDO::getIsPurYard,1);
List<MaterialPlanBoomDO> materialPlanBoomDOS = materialPlanBoomMapper.selectList(queryWrapper);
if (ObjectUtil.isNotEmpty(materialPlanBoomDOS)) return CommonResult.error(400,"该物料信息状态非库存状态,请刷新界面!");
MatReqDO matReqDO = new MatReqDO();
SerialNumberDO serialNumberDO = new SerialNumberDO();
serialNumberDO = serialNumberService.getSerialNumber(MAT_REQ.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
matReqDO.setMatReqNo(MAT_REQ.getCode(serialNumberDO.getSerialNumber().toString()));
matReqDO.setGoodsType(1);
matReqDO.setStatus(0);
MaterialPlanDO planDO = materialPlanMapper.selectById(list.get(0).getProjectMaterialPlanId());
matReqDO.setProjectId(planDO.getProjectId());
matReqDO.setProjectName(planDO.getProjectName());
matReqDO.setCustomerId(planDO.getCustomerId());
matReqDO.setReqDate(LocalDate.now());
matReqMapper.insert(matReqDO);
List<MatReqDetailDO> matReqDetailDOS = new ArrayList<>();
for (MaterialPlanBoomDO materialPlanBoomDO : list) {
MaterialPlanBoomDO boomDO = materialPlanBoomMapper.selectById(materialPlanBoomDO.getId());
if (ObjectUtil.isNotEmpty(boomDO)){
MaterialPlanDO plan = materialPlanMapper.selectById(boomDO.getProjectMaterialPlanId());
MatReqDetailDO matReqDetailDO = new MatReqDetailDO();
matReqDetailDO.setMatReqId(matReqDO.getId());
matReqDetailDO.setBoomDetailId(boomDO.getBoomDetailId());
MaterialDO materialDO = materialMapper.selectById(materialPlanBoomDO.getMatId());
if (ObjectUtil.isNotEmpty(materialDO)){
matReqDetailDO.setBoomName(materialDO.getName());
matReqDetailDO.setBoomSpec(materialDO.getSpec());
matReqDetailDO.setBoomUnit(materialDO.getUnit());
}
matReqDetailDO.setBoomAmount(boomDO.getBoomAmount());
matReqDetailDO.setRequireTime(boomDO.getBoomArriveDate());
matReqDetailDO.setProjectPlanSubId(plan.getProjectPlanSubId());
matReqDetailDO.setName(plan.getName());
matReqDetailDO.setNameSim(plan.getNameSim());
matReqDetailDO.setMaterialId(materialPlanBoomDO.getMatId());
matReqDetailDO.setProjectMaterialPlanDetailId(boomDO.getId());
matReqDetailDO.setProjectMaterialPlanId(boomDO.getProjectMaterialPlanId());
matReqDetailDOS.add(matReqDetailDO);
boomDO.setIsPurYard(3);
materialPlanBoomMapper.updateById(boomDO);
}
}
matReqDetailMapper.insertOrUpdateBatch(matReqDetailDOS);
return CommonResult.success(true);
}
}

View File

@ -0,0 +1,55 @@
package com.chanko.yunxi.mes.module.heli.service.matreqdetail;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* 领料单明细 Service 接口
*
* @author 管理员
*/
public interface MatReqDetailService {
/**
* 创建领料单明细
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createMatReqDetail(@Valid MatReqDetailSaveReqVO createReqVO);
/**
* 更新领料单明细
*
* @param updateReqVO 更新信息
*/
void updateMatReqDetail(@Valid MatReqDetailSaveReqVO updateReqVO);
/**
* 删除领料单明细
*
* @param id 编号
*/
void deleteMatReqDetail(Long id);
/**
* 获得领料单明细
*
* @param id 编号
* @return 领料单明细
*/
MatReqDetailDO getMatReqDetail(Long id);
/**
* 获得领料单明细分页
*
* @param pageReqVO 分页查询
* @return 领料单明细分页
*/
PageResult<MatReqDetailDO> getMatReqDetailPage(MatReqDetailPageReqVO pageReqVO);
}

View File

@ -0,0 +1,74 @@
package com.chanko.yunxi.mes.module.heli.service.matreqdetail;
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.matreqdetail.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
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.matreqdetail.MatReqDetailMapper;
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 MatReqDetailServiceImpl implements MatReqDetailService {
@Resource
private MatReqDetailMapper matReqDetailMapper;
@Override
public Long createMatReqDetail(MatReqDetailSaveReqVO createReqVO) {
// 插入
MatReqDetailDO matReqDetail = BeanUtils.toBean(createReqVO, MatReqDetailDO.class);
matReqDetailMapper.insert(matReqDetail);
// 返回
return matReqDetail.getId();
}
@Override
public void updateMatReqDetail(MatReqDetailSaveReqVO updateReqVO) {
// 校验存在
validateMatReqDetailExists(updateReqVO.getId());
// 更新
MatReqDetailDO updateObj = BeanUtils.toBean(updateReqVO, MatReqDetailDO.class);
matReqDetailMapper.updateById(updateObj);
}
@Override
public void deleteMatReqDetail(Long id) {
// 校验存在
validateMatReqDetailExists(id);
// 删除
matReqDetailMapper.deleteById(id);
}
private void validateMatReqDetailExists(Long id) {
if (matReqDetailMapper.selectById(id) == null) {
throw exception(MAT_REQ_DETAIL_NOT_EXISTS);
}
}
@Override
public MatReqDetailDO getMatReqDetail(Long id) {
return matReqDetailMapper.selectById(id);
}
@Override
public PageResult<MatReqDetailDO> getMatReqDetailPage(MatReqDetailPageReqVO pageReqVO) {
return matReqDetailMapper.selectPage(pageReqVO);
}
}

View File

@ -4,6 +4,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakePageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
@ -31,4 +32,28 @@ public interface PartPurchaseOrderService {
* @return 零件采购订单生成信息提交
*/
boolean submit(List<PartPurchaseOrderPageRespVO> list);
/**
* 获得零件采购单审批分页
*
* @param pageReqVO 分页查询
* @return 零件采购单审批分页
*/
PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderCheckPage(PartPurchaseOrderPageReqVO pageReqVO);
/**
* 更新采购单审批状态为通过
*
* @param id
* @return 更新采购单审批状态
*/
boolean updatePartCheckStatus(Long id);
/**
* 更新采购单审批状态为驳回
*
* @param updateReqVO
* @return 更新采购单审批状态
*/
boolean updatePartCheckStatusNo(PurchaseOrderMakeSaveReqVO updateReqVO);
}

View File

@ -1,14 +1,20 @@
package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.framework.mybatis.core.query.QueryWrapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
@ -39,6 +45,8 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private MaterialPlanBoomMapper materialPlanBoomMapper;
@Override
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
@ -62,7 +70,7 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
purchaseOrderNoDO.setPurchaseType(1);
purchaseOrderNoDO.setGoodsType(2);
purchaseOrderNoDO.setSupplierId(detailDO.getSupplierId());
purchaseOrderNoDO.setOrdDate(LocalDate.now());
purchaseOrderNoDO.setOrdDate(new Date());
purchaseOrderNoMapper.insert(purchaseOrderNoDO);
long purchaseOrderId = purchaseOrderNoDO.getId();
@ -74,6 +82,8 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
// purchaseOrderNoDetailDO.setBoomSpec(detailDO.getBoomSpec());
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = BeanUtils.toBean(detailDO, PurchaseOrderNoDetailDO.class);
purchaseOrderNoDetailDO.setId(null);
purchaseOrderNoDetailDO.setCreateTime(null);
purchaseOrderNoDetailDO.setUpdateTime(null);
purchaseOrderNoDetailDO.setPurchaseOrderId(purchaseOrderId);
purchaseOrderNoDetailDO.setPurchaseRemAmount(detailDO.getPurchaseAmount());
purchaseOrderNoDetailMapper.insert(purchaseOrderNoDetailDO);
@ -81,7 +91,7 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO = new PurchaseOrderMakeDetailDO();
purchaseOrderMakeDetailDO.setId(detailDO.getId());
purchaseOrderMakeDetailDO.setOrderStatus(true);
purchaseOrderMakeDetailDO.setOrderStatus(2);
purchaseOrderMakeDetailDO.setPurchaseOrderNoId(purchaseOrderId);
purchaseOrderMakeDetailDO.setPurchaseOrderNoDetailId(purchaseOrderDetailId);
purchaseOrderMakeDetailMapper.updateById(purchaseOrderMakeDetailDO);
@ -90,4 +100,54 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
return true;
}
@Override
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderCheckPage(PartPurchaseOrderPageReqVO pageReqVO) {
return null;
}
@Override
public boolean updatePartCheckStatus(Long id) {
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
purchaseOrderMakeDO.setId(id);
purchaseOrderMakeDO.setStatus(2);
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", id);
materialPlanBoomDOs.forEach(materialPlanBoomDO -> {
MaterialPlanBoomDO materialPlanBoom = new MaterialPlanBoomDO();
materialPlanBoom.setId(materialPlanBoomDO.getId());
materialPlanBoom.setMplanStatus(2);
materialPlanBoomMapper.updateById(materialPlanBoom);
});
return true;
}
@Override
public boolean updatePartCheckStatusNo(PurchaseOrderMakeSaveReqVO updateReqVO) {
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
purchaseOrderMakeDO.setId(updateReqVO.getId());
purchaseOrderMakeDO.setStatus(3);
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
purchaseOrderMakeMapper.deleteById(purchaseOrderMakeDO);
List<PurchaseOrderMakeDetailDO> list= purchaseOrderMakeDetailMapper.selectList("purchase_order_id", updateReqVO.getId());
list.forEach(detailDO -> {
purchaseOrderNoDetailMapper.deleteById(detailDO.getId());
});
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", updateReqVO.getId());
materialPlanBoomDOs.forEach(materialPlanBoom -> {
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", materialPlanBoom.getId())
.set("mplan_status", 3)
.set("project_purchase_order_make_id", null)
.set("purchase_no", null)
.set("project_purchase_order_make_detail_id", null)
.set("rej_remark", updateReqVO.getReason());
materialPlanBoomMapper.update(updateWrapper);
});
return true;
}
}

View File

@ -94,7 +94,6 @@ public interface ProcessBomService {
void updateProcessBomDetail(ProcessBomDetailDO processBomDetailDO);
PageResult<ProcessBomDetailDO> getStandardPage(ProcessBomPageReqVO pageReqVO);
Boolean submit(List<ProcessBomDetailDO> list);
CommonResult<Boolean> withdraw(String code);

View File

@ -195,11 +195,12 @@ public class ProcessBomServiceImpl implements ProcessBomService {
materialNameList.forEach((materialName, listTemp2) -> {
if (listTemp2.size() > 1) {
throw new RuntimeException("非标准件物料名称:" + materialName + "重复!");
}else{
if(listTemp2.get(0).getSpec() == null){
throw new RuntimeException("非标准件:" + materialName + "规格为空!");
}
}
// else{
// if(listTemp2.get(0).getSpec() == null){
// throw new RuntimeException("非标准件:" + materialName + "规格为空!");
// }
// }
});
});
List<ProcessBomDetailDO> processBomDetailDOList = new ArrayList<>();
@ -243,10 +244,10 @@ public class ProcessBomServiceImpl implements ProcessBomService {
if (o.getType().equals("")){
standard = true;
type = "1";
materialDO = materialService.getMaterialId(o.getMaterialCode());
if (materialDO == null) {
throw new RuntimeException("物料编码为:"+o.getMaterialCode() + "物料不存在");
}
// materialDO = materialService.getMaterialId(o.getMaterialCode());
// if (materialDO == null) {
// throw new RuntimeException("物料编码为:"+o.getMaterialCode() + "物料不存在");
// }
}
else if (o.getType().equals("")){
@ -292,16 +293,28 @@ public class ProcessBomServiceImpl implements ProcessBomService {
processBomDetailDO.setBomId(processBomDO.getId());//BomId
//BOM最新需求在这个地方更改
processBomDetailDO.setType(type);//是否标准件
if (o.getMaterialName() == null || o.getMaterialName().trim().equals("")){
throw new RuntimeException("物料名称不能为空!");
}
processBomDetailDO.setMaterialName(o.getMaterialName());
if (type.equals("1")) {
processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
processBomDetailDO.setMaterialName(materialDO.getName());//物料名称
// processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
// processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
// processBomDetailDO.setMaterialName(materialDO.getName());//物料名称
}else{
processBomDetailDO.setMaterialName(o.getMaterialName());
}
processBomDetailDO.setSpec(o.getSpec());//规格
if (o.getSpec() == null || o.getSpec().trim().equals("") ){
if (!type.equals("1")){
processBomDetailDO.setSpec("A");//规格
}
}else {
processBomDetailDO.setSpec(o.getSpec());
}
processBomDetailDO.setUnit(o.getUnit());//单位
processBomDetailDO.setBlueprintNo(o.getBlueprintNo());//图号
try {
@ -743,7 +756,15 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
@Override
public PageResult<ProcessBomDetailDO> getProcessBomPageNew(ProcessBomPageReqVO pageReqVO) {
return processBomDetailMapper.selectPageNew(pageReqVO);
PageResult<ProcessBomDetailDO> processBomDetailDOPageResult = processBomDetailMapper.selectPageNew(pageReqVO);
if (processBomDetailDOPageResult.getTotal() > 0){
for (ProcessBomDetailDO processBomDetailDO : processBomDetailDOPageResult.getList()) {
if (processBomDetailDO.getMaterialCode() != null && !processBomDetailDO.getMaterialCode().equals("")){
processBomDetailDO.setInventCode(processBomDetailDO.getMaterialCode());
}
}
}
return processBomDetailDOPageResult;
}
@Override
public PageResult<ProcessBomDO> getProcessBomPages(ProcessBomPageReqVO pageReqVO) {

View File

@ -394,6 +394,7 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
BdgzsomthingDO.setAttr7(processDesignDO.getProjectName());
BdgzsomthingDO.setAttr8(processDesignDO.getProjectSubName());
BdgzsomthingDO.setAttr9(processDesignProgressDO.getRemark());
BdgzsomthingDO.setAttr13("1");
bdgzsomthingMapper.insert(BdgzsomthingDO);
}
}

View File

@ -1,74 +1,175 @@
package com.chanko.yunxi.mes.module.heli.service.purchaseordermakedetail;
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.purchaseordermakedetail.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
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.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
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 PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDetailService {
@Resource
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
@Override
public Long createPurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO createReqVO) {
// 插入
PurchaseOrderMakeDetailDO purchaseOrderMakeDetail = BeanUtils.toBean(createReqVO, PurchaseOrderMakeDetailDO.class);
purchaseOrderMakeDetailMapper.insert(purchaseOrderMakeDetail);
// 返回
return purchaseOrderMakeDetail.getId();
}
@Override
public void updatePurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO updateReqVO) {
// 校验存在
validatePurchaseOrderMakeDetailExists(updateReqVO.getId());
// 更新
PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class);
purchaseOrderMakeDetailMapper.updateById(updateObj);
}
@Override
public void deletePurchaseOrderMakeDetail(Long id) {
// 校验存在
validatePurchaseOrderMakeDetailExists(id);
// 删除
purchaseOrderMakeDetailMapper.deleteById(id);
}
private void validatePurchaseOrderMakeDetailExists(Long id) {
if (purchaseOrderMakeDetailMapper.selectById(id) == null) {
throw exception(PURCHASE_ORDER_MAKE_DETAIL_NOT_EXISTS);
}
}
@Override
public PurchaseOrderMakeDetailDO getPurchaseOrderMakeDetail(Long id) {
return purchaseOrderMakeDetailMapper.selectById(id);
}
@Override
public PageResult<PurchaseOrderMakeDetailDO> getPurchaseOrderMakeDetailPage(PurchaseOrderMakeDetailPageReqVO pageReqVO) {
return purchaseOrderMakeDetailMapper.selectPage(pageReqVO);
}
}
package com.chanko.yunxi.mes.module.heli.service.purchaseordermakedetail;
import cn.hutool.core.collection.CollUtil;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import org.checkerframework.checker.units.qual.A;
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.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
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.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* 采购单明细 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDetailService {
@Resource
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private PurchaseOrderNoMapper purchaseOrderNoMapper;
@Resource
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private PurchaseOrderMakeMapper purchaseOrderMakeMapper;
@Override
public Long createPurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO createReqVO) {
// 插入
PurchaseOrderMakeDetailDO purchaseOrderMakeDetail = BeanUtils.toBean(createReqVO, PurchaseOrderMakeDetailDO.class);
purchaseOrderMakeDetailMapper.insert(purchaseOrderMakeDetail);
// 返回
return purchaseOrderMakeDetail.getId();
}
@Override
public void updatePurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO updateReqVO) {
if (CollUtil.isNotEmpty(updateReqVO.getUpdateList())){
List<PurchaseOrderMakeDetailDO> updateList = updateReqVO.getUpdateList();
//插入make表
PurchaseOrderNoDO purchaseOrderNoDO = new PurchaseOrderNoDO();
SerialNumberDO serialNumberDO = new SerialNumberDO();
// 月度流水号
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 入库前缀
purchaseOrderNoDO.setPurchaseNo(PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()));
serialNumberService.updateSerialNumber(serialNumberDO);
purchaseOrderNoDO.setGoodsType(1);
purchaseOrderNoDO.setPurchaseType(1);
purchaseOrderNoDO.setSupplierId(updateList.get(0).getSupplierId());
purchaseOrderNoDO.setOrdDate(new Date());
purchaseOrderNoMapper.insert(purchaseOrderNoDO);
List<PurchaseOrderNoDetailDO> insertList =new ArrayList<>();
HashMap<Long,PurchaseOrderMakeDO> insertMap = new HashMap<>();
for (PurchaseOrderMakeDetailDO pmd : updateList) {
PurchaseOrderNoDetailDO pd = new PurchaseOrderNoDetailDO();
pd.setMakeDetailId(pmd.getId());
pd.setPurchaseOrderId(purchaseOrderNoDO.getId());
pd.setBoomDetailId(pmd.getBoomDetailId());
pd.setBoomName(pmd.getBoomName());
pd.setBoomSpec(pmd.getBoomSpec());
pd.setBoomUnit(pmd.getBoomUnit());
pd.setComposition(pmd.getComposition());
pd.setPurchaseAmount(pmd.getPurchaseAmount());
pd.setEstimatedPrice(pmd.getEstimatedPrice());
pd.setArriveTime(pmd.getArriveTime());
pd.setBoomAmount(pmd.getBoomAmount());
pd.setRequireTime(pmd.getRequireTime());
pd.setProjectMaterialPlanId(pmd.getProjectMaterialPlanId());
pd.setProjectMaterialPlanBoomId(pmd.getProjectMaterialPlanBoomId());
pd.setProjectPlanSubId(pmd.getProjectPlanSubId());
pd.setName(pmd.getName());
pd.setNameSim(pmd.getNameSim());
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
if (insertMap.get(pmd.getPurchaseOrderId()) != null) {
purchaseOrderMakeDO = insertMap.get(pmd.getPurchaseOrderId());
}else{
purchaseOrderMakeDO = purchaseOrderMakeMapper.selectById(pmd.getPurchaseOrderId());
insertMap.put(pmd.getPurchaseOrderId(),purchaseOrderMakeDO);
}
if (purchaseOrderMakeDO != null) {
pd.setProjectId(purchaseOrderMakeDO.getProjectId());
pd.setProjectPlanId(purchaseOrderMakeDO.getProjectPlanId());
pd.setCustomerId(purchaseOrderMakeDO.getCustomerId());
pd.setBrief(purchaseOrderMakeDO.getBrief());
pd.setProjectName(purchaseOrderMakeDO.getProjectName());
pd.setProjectNameSim(purchaseOrderMakeDO.getProjectNameSim());
}
pd.setPurchaseRemAmount(pmd.getPurchaseAmount());
pd.setProjectSubCode(pmd.getProjectSubCode());
insertList.add(pd);
}
if (CollUtil.isNotEmpty(insertList)) {
purchaseOrderNoDetailMapper.insertBatch(insertList);
for (PurchaseOrderMakeDetailDO pmd : updateList) {
for (PurchaseOrderNoDetailDO pd : insertList) {
if (pmd.getId().equals(pd.getMakeDetailId())){
pmd.setPurchaseOrderNoId(purchaseOrderNoDO.getId());
pmd.setPurchaseOrderNoDetailId(pd.getId());
pmd.setOrderStatus(2);
break;
}
}
}
purchaseOrderMakeDetailMapper.updateBatch(updateList);
}
}else {
// 校验存在
validatePurchaseOrderMakeDetailExists(updateReqVO.getId());
// 更新
PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class);
purchaseOrderMakeDetailMapper.updateById(updateObj);
}
}
@Override
public void deletePurchaseOrderMakeDetail(Long id) {
// 校验存在
validatePurchaseOrderMakeDetailExists(id);
// 删除
purchaseOrderMakeDetailMapper.deleteById(id);
}
private void validatePurchaseOrderMakeDetailExists(Long id) {
if (purchaseOrderMakeDetailMapper.selectById(id) == null) {
throw exception(PURCHASE_ORDER_MAKE_DETAIL_NOT_EXISTS);
}
}
@Override
public PurchaseOrderMakeDetailDO getPurchaseOrderMakeDetail(Long id) {
return purchaseOrderMakeDetailMapper.selectById(id);
}
@Override
public PageResult<PurchaseOrderMakeDetailDO> getPurchaseOrderMakeDetailPage(PurchaseOrderMakeDetailPageReqVO pageReqVO) {
return purchaseOrderMakeDetailMapper.selectPage(pageReqVO);
}
}

View File

@ -42,6 +42,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -245,6 +247,39 @@ public class PurchaseOrderNoServiceImpl implements PurchaseOrderNoService {
@Override
public PageResult<PurchaseOrderNoDO> getPurchaseOrderNoPage(PurchaseOrderNoPageReqVO pageReqVO) {
// PageResult<PurchaseOrderNoDO> orderNoDOPageResult =
// // 获取分页结果中的主订单列表
// List<PurchaseOrderNoDO> orderList = orderNoDOPageResult.getList();
//
//// 提取所有主订单ID
// List<Long> orderIds = orderList.stream()
// .map(PurchaseOrderNoDO::getId)
// .collect(Collectors.toList());
//
//// 批量查询子表收货状态orderId -> 状态列表
// Map<Long, List<Integer>> statusMap = orderIds.isEmpty()
// ? Collections.emptyMap()
// : purchaseOrderNoDetailMapper.listStatusByOrderIds(orderIds).stream()
// .collect(Collectors.groupingBy(
// PurchaseOrderNoDetailDO::getPurchaseOrderId,
// Collectors.mapping(PurchaseOrderNoDetailDO::getReceivingStatus, Collectors.toList())
// ));
//
//// 遍历主订单并设置收货状态
// orderList.forEach(order -> {
// List<Integer> subStatuses = statusMap.getOrDefault(order.getId(), Collections.emptyList());
//
// if (subStatuses.isEmpty()) {
// order.setReceivingStatus(1); // 无子记录视为未收货
// } else if (subStatuses.stream().allMatch(status -> status == 3)) {
// order.setReceivingStatus(3); // 全部为3收货完成
// } else if (subStatuses.stream().allMatch(status -> status == 1)) {
// order.setReceivingStatus(1); // 全部为1未收货
// } else {
// order.setReceivingStatus(2); // 其他情况收货中
// }
// });
// orderNoDOPageResult.setList(orderList);
return purchaseOrderNoMapper.selectPage(pageReqVO);
}
@ -280,8 +315,12 @@ public class PurchaseOrderNoServiceImpl implements PurchaseOrderNoService {
@Override
public CommonResult<Boolean> deleteForm(Long id) {
PurchaseOrderNoDO purchaseOrderNoDO = purchaseOrderNoMapper.selectById(id);
if (purchaseOrderNoDO.getReceivingStatus()!=1) {
LambdaQueryWrapper<PurchaseOrderNoDetailDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PurchaseOrderNoDetailDO::getPurchaseOrderId, id);
queryWrapper.eq(PurchaseOrderNoDetailDO::getDeleted,0);
queryWrapper.ne(PurchaseOrderNoDetailDO::getReceivingStatus, 1);
List<PurchaseOrderNoDetailDO> noDetailDOS = purchaseOrderNoDetailMapper.selectList(queryWrapper);
if (ObjectUtil.isNotEmpty(noDetailDOS)) {
return CommonResult.error(400,"该订单已收货,请确认!");
}
LambdaQueryWrapper<PurchaseOrderNoDetailDO> queryWrapper1 = new LambdaQueryWrapper<>();

View File

@ -1,6 +1,7 @@
package com.chanko.yunxi.mes.module.heli.service.purchaseordernodetail;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
@ -110,7 +111,7 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
PurchaseOrderNoDetailDO byId = purchaseOrderNoDetailMapper.selectById(purchaseOrderNoDetailDO.getId());
if (ObjectUtil.isNotEmpty(byId)){
if (BigDecimal.ZERO.compareTo(byId.getPurchaseRemAmount())>=0) throw exception(new ErrorCode(1_006_9999,"该订单零件名称"+byId.getBoomName()+"剩余数量等于0请确认"));
if (byId.getReceivingStatus()!=1) throw exception(new ErrorCode(1_006_9999,"该订单零件名称"+byId.getBoomName()+"已收货,请确认!"));
if (byId.getReceivingStatus()==3) throw exception(new ErrorCode(1_006_9999,"该订单零件名称"+byId.getBoomName()+"已收货,请确认!"));
if (byId.getPurchaseRemAmount().compareTo(purchaseOrderNoDetailDO.getPurchaseRemAmounts())<0) {
throw exception(new ErrorCode(1_006_9999,"该订单零件名称"+byId.getBoomName()+"入库数量"+purchaseOrderNoDetailDO.getPurchaseRemAmounts()+"大于剩余数量"+byId.getPurchaseRemAmount()+"请确认!"));
}
@ -120,6 +121,7 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
}
@Override
@Transactional
public CommonResult<Boolean> receiveGoods(List<PurchaseOrderNoDetailDO> list) {
List<MaterialDO> materialDOList=new ArrayList<MaterialDO>();
for (PurchaseOrderNoDetailDO detailDO : list) {
@ -143,22 +145,34 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
materialDO.setName(bomDetailDO.getMaterialName());
ProcessBomDO processBomDO = pocessBomMapper.selectById(bomDetailDO.getBomId());
if (ObjectUtil.isNotEmpty(processBomDO)){
bomCode=processBomDO.getCode();
if (ObjectUtil.isNotEmpty(processBomDO.getCode())){
bomCode=processBomDO.getCode();
}
}
if (ObjectUtil.isNotEmpty(bomDetailDO.getBlueprintNo())){
blueprintNo=bomDetailDO.getBlueprintNo();
if (ObjectUtil.isNotEmpty(processBomDO.getBlueprintNo())){
blueprintNo=bomDetailDO.getBlueprintNo();
}
}
MaterialPlanBoomDO boomDO = materialPlanBoomMapper.selectById(detailDO.getProjectMaterialPlanBoomId());
if (ObjectUtil.isNotEmpty(boomDO)){
ProcedureDO procedure = procedureService.getProcedure(boomDO.getProcedureId());
if (ObjectUtil.isNotEmpty(procedure)){
ProcedureName=procedure.getName();
if (ObjectUtil.isNotEmpty(procedure.getName())){
ProcedureName=procedure.getName();
}
}
}
materialDO.setCode(bomCode+blueprintNo+ProcedureName);
String code=bomCode+blueprintNo+ProcedureName;
materialDO.setCode(code);
materialDO.setCompositionId(bomDetailDO.getCompositionId());
materialDO.setMaterialType("1");
materialDOList.add(materialDO);
materialDO.setVirtualPart("Y");
MaterialDO material = materialMapper.selectMaterial(code);
if (ObjectUtil.isEmpty(material)){
materialDOList.add(materialDO);
}
}
}
}

View File

@ -74,4 +74,6 @@ public interface StorageLogService {
PageResult<StorageLogNowDO> getStorageNowPricePage(StorageLogPageReqVO pageReqVO);
void updatePrice(StorageLogSaveReqVO updateReqVO);
PageResult<StorageLogNowDO> getSupplementPage(StorageLogPageReqVO pageReqVO);
}

View File

@ -214,4 +214,8 @@ public class StorageLogServiceImpl implements StorageLogService {
materialMapper.update(wrapper);
}
@Override
public PageResult<StorageLogNowDO> getSupplementPage(StorageLogPageReqVO pageReqVO) {
return storageLogNowMapper.getSupplementPage(pageReqVO); }
}

View File

@ -29,4 +29,25 @@
group by project_material_plan_no
</select>
</mapper>
<select id="hasPurchase"
parameterType="java.util.Map"
resultType="Long">
select count(*) from project_material_plan_boom where project_purchase_order_make_id is not null and deleted = 0 and tenant_id = 2 and
id in
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<select id="hasPurYard"
parameterType="java.util.Map"
resultType="Long">
select count(*) from project_material_plan_boom where is_pur_yard = 1 and deleted = 0 and tenant_id = 2 and
id in
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>

View File

@ -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.matreq.MatReqMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@ -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.matreqdetail.MatReqDetailMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@ -86,7 +86,7 @@
"source.fixAll.eslint": "explicit"
},
"[vue]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
"editor.defaultFormatter": "stylelint.vscode-stylelint"
},
"i18n-ally.localesPaths": ["src/locales"],
"i18n-ally.keystyle": "nested",

View File

@ -67,3 +67,6 @@ export const deleteMaterial = async (id: number) => {
export const exportMaterial = async (params) => {
return await request.download({ url: `/heli/material/export-excel`, params })
}
export const getbzjList = async () => {
return await request.get({ url: `/heli/material/getbzjList` })
}

View File

@ -75,3 +75,18 @@ export const getBeiKuPage = async (params) => {
export const getProjectMaterialPlanNo = async (code:string) => {
return await request.get({ url: `/heli/material-plan/getProjectMaterialPlanNo?code=` + code })
}
// 查询标准件库存
export const getStandardPartsPages = async (params) => {
return await request.get({ url: `/heli/material-plan/getStandardPartsPages`, params })
}
export const operation = async (params) => {
return await request.get({ url: `/heli/material-plan/operation`, params })
}
// 导出物料需求计划 Excel
export const exportStandardParts = async (params) => {
return await request.download({ url: `/heli/material-plan/exportStandardParts`, params })
}
export const supplement = async (data) => {
return await request.post({ url: `/heli/material-plan/supplement`, data })
}

View File

@ -8,6 +8,11 @@ export interface MaterialPlanBoomVO {
boomAmount: number
boomArriveDate: Date
description: string
purchaseAmount:number
estimatedPrice:number
arriveTime:Date
supplierId:number
materialPlanBoomDOList:Array<MaterialPlanBoomVO>
}
// 查询物料需求计划加工件明细详情
@ -54,3 +59,9 @@ export const getMaterialPlanBoomPages = async (params) => {
export const getProjectMaterialPlanId = async (params) => {
return await request.get({ url: `/heli/material-plan-boom/getProjectMaterialPlanId`, params })
}
// 查询物料需求计划加工件明细分页
export const getStandardBuyPage = async (params) => {
return await request.get({ url: `/heli/material-plan-boom/getStandardBuyPage`, params })
}

View File

@ -0,0 +1,48 @@
import request from '@/config/axios'
export interface MatReqVO {
id: number
matReqNo: string
goodsType: boolean
status: boolean
description: string
projectId: number
projectPlanId: number
customerId: number
reqDate: localdate
projectName: string
}
// 查询领料单主分页
export const getMatReqPage = async (params) => {
return await request.get({ url: `/heli/mat-req/page`, params })
}
// 查询领料单主详情
export const getMatReq = async (id: number) => {
return await request.get({ url: `/heli/mat-req/get?id=` + id })
}
// 新增领料单主
export const createMatReq = async (data: MatReqVO) => {
return await request.post({ url: `/heli/mat-req/create`, data })
}
// 修改领料单主
export const updateMatReq = async (data: MatReqVO) => {
return await request.put({ url: `/heli/mat-req/update`, data })
}
// 删除领料单主
export const deleteMatReq = async (id: number) => {
return await request.delete({ url: `/heli/mat-req/delete?id=` + id })
}
// 导出领料单主 Excel
export const exportMatReq = async (params) => {
return await request.download({ url: `/heli/mat-req/export-excel`, params })
}
// 新增领料单主
export const generate = async (data) => {
return await request.post({ url: `/heli/mat-req/generate`, data })
}

View File

@ -0,0 +1,51 @@
import request from '@/config/axios'
export interface MatReqDetailVO {
id: number
matReqId: number
boomDetailId: number
boomName: string
boomSpec: string
boomUnit: string
composition: string
description: string
boomAmount: number
requireTime: Date
projectPlanSubId: number
name: string
nameSim: string
projectSubCode: string
materialId: number
projectMaterialPlanId: number
projectMaterialPlanDetailId: number
}
// 查询领料单明细分页
export const getMatReqDetailPage = async (params) => {
return await request.get({ url: `/heli/mat-req-detail/page`, params })
}
// 查询领料单明细详情
export const getMatReqDetail = async (id: number) => {
return await request.get({ url: `/heli/mat-req-detail/get?id=` + id })
}
// 新增领料单明细
export const createMatReqDetail = async (data: MatReqDetailVO) => {
return await request.post({ url: `/heli/mat-req-detail/create`, data })
}
// 修改领料单明细
export const updateMatReqDetail = async (data: MatReqDetailVO) => {
return await request.put({ url: `/heli/mat-req-detail/update`, data })
}
// 删除领料单明细
export const deleteMatReqDetail = async (id: number) => {
return await request.delete({ url: `/heli/mat-req-detail/delete?id=` + id })
}
// 导出领料单明细 Excel
export const exportMatReqDetail = async (params) => {
return await request.download({ url: `/heli/mat-req-detail/export-excel`, params })
}

View File

@ -16,7 +16,7 @@ export interface PartPurchaseOrderVO {
description: string
}
// 查询零件采购订单计划分页
// 获取零件采购订单生成分页
export const getPartPage = async (params) => {
return await request.get({ url: `/heli/purchase-order-make/getPartPurchaseOrderPage`, params })
}
@ -24,3 +24,24 @@ export const getPartPage = async (params) => {
export const submitForm = async (data) => {
return await request.post({ url: `/heli/purchase-order-no/submit`, data })
}
// 获取零件采购单审批分页
export const getPartCheckPage = async (params) => {
return await request.get({ url: `/heli/purchase-order-make/page`, params })
}
// 查询采购单主
export const getPurchaseOrderMake = async (id: number) => {
return await request.get({ url: `/heli/purchase-order-make/get?id=` + id })
}
// 更新采购单主批准
export const updatePurchaseOrderMake = async (id: number) => {
return await request.put({ url: `/heli/purchase-order-make/updatePartCheck?id=` + id })
}
// 更新采购单主驳回
export const updatePurchaseOrderMakeNo = async (params) => {
return await request.put({ url: `/heli/purchase-order-make/updatePartCheckNo`, params })
}

View File

@ -20,7 +20,9 @@ export interface ProcessBomVO {
export const getProcessBomPage = async (params) => {
return await request.get({ url: `/heli/process-bom/page`, params })
}
export const detailpages = async (params) => {
return await request.get({ url: `/heli/process-bom/detailpages`, params })
}
// 查询工艺bom审核分页
export const getProcessBomPages = async (params) => {
return await request.get({ url: `/heli/process-bom/pages`, params })

View File

@ -0,0 +1,24 @@
import request from '@/config/axios'
export interface PuchaseOrderMakeDetail {
id: number
projectMaterialPlanId: number
boomDetailId: number
projectSubId: number
boomAmount: number
boomArriveDate: Date
description: string
purchaseAmount:number
estimatedPrice:number
arriveTime:Date
supplierId:number
materialPlanBoomDOList:Array<PuchaseOrderMakeDetail>
}
// 查询物料需求计划加工件明细分页
export const page = async (params) => {
return await request.get({ url: `/heli/purchase-order-make-detail/page`, params })
}
export const updatePurchaseOrderDetail= async (data: PuchaseOrderMakeDetail) => {
return await request.put({ url: `/heli/purchase-order-make-detail/update`, data })
}

View File

@ -3,11 +3,11 @@ import request from '@/config/axios'
export interface PurchaseOrderNoVO {
id: number
purchaseNo: string
purchaseType: boolean
goodsType: boolean
purchaseType: number
goodsType: number
estimatedPrice: number
actualPrice: number
status: boolean
status: number
submitUserId: number
submitTime: Date
auditor: number
@ -17,7 +17,7 @@ export interface PurchaseOrderNoVO {
isPrint: string
printDtime: Date
ordDate: Date
receivingStatus: boolean
receivingStatus: number
currencyType: number
taxRatio: number
}

View File

@ -27,7 +27,7 @@ export interface PurchaseOrderNoDetailVO {
projectName: string
projectNameSim: string
materialId: number
receivingStatus: boolean
receivingStatus: number
storageId: number
storageMatId: number
purchaseRemAmount: number

View File

@ -85,3 +85,8 @@ export const deleteStorageLog = async (id: number) => {
export const exportStorageLog = async (params) => {
return await request.download({ url: `/heli/storage-log/export-excel`, params })
}
// 查询入/出库实时分页
export const getSupplementPage = async (params) => {
return await request.get({ url: `/heli/storage-log/getSupplementPage`, params })
}

View File

@ -242,6 +242,8 @@ export enum DICT_TYPE {
HELI_DELIVER_MATERIAL_TYPE = 'heli_deliver_material_type', // 发货物料类型
HELI_PROJECT_PLAN_STATUS = 'heli_project_plan_status',//生产计划状态
HELI_CRAFT = 'heli_craft',//工艺流程
HELI_STANDARD_BUY_TYPE = 'heli_standard_buy_type',//工艺流程
HELI_PURCHASE_STATUS = 'heli_purchase_status',//工艺流程
HELI_PROJECT_MATERIAL_PLAN_STATUS = 'heli_project_material_plan_status',//物料需求计划状态
HELI_BOM_STATUS = 'heli_bom_status', //bom状态
HELI_BOM_MATERIAL_TYPE = 'heli_bom_material_type', //bom物料类型
@ -284,5 +286,10 @@ export enum DICT_TYPE {
HELI_MAT_TYPE = 'heli_mat_type',//物料需求计划类型
HELI_PROJECT_MATERIAL_PLAN_BOOM_STATUS='heli_project_material_plan_boom_status',//物料需求计划Boon状态
PART_PURCHASE_STATUS='part_purchase_status',
HELI_IS_PRINT='heli_is_print'
HELI_IS_PRINT='heli_is_print',
HELI_PART_PURCHASE_ORDER_TYPE='heli_part_purchase_order_type',
HELI_MAT_REQ_TYPE='heli_mat_req_type',
HELI_MAT_REQ_STATUS='heli_mat_req_status',
HELI_MATERIAL_STATUS='heli_material_status',
HELI_DOCUMENT_STATUS='heli_document_status'
}

View File

@ -7,24 +7,29 @@
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="130px">
<el-form-item label="物料计划单号" prop="projectMaterialPlanNo">
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="物料计划单号" clearable @keyup.enter="handleQuery"
<el-input
v-model="queryParams.projectMaterialPlanNo" placeholder="物料计划单号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="单据日期" prop="createTime">
<el-date-picker class="!w-240px" v-model="queryParams.createTime" type="date" value-format="x"
<el-date-picker
class="!w-240px" v-model="queryParams.createTime" type="date" value-format="x"
placeholder="单据日期" />
</el-form-item>
<el-form-item label="生产计划单号" prop="planNo">
<el-input v-model="queryParams.planNo" placeholder="生产计划单号" clearable @keyup.enter="handleQuery"
<el-input
v-model="queryParams.planNo" placeholder="生产计划单号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="项目名称" clearable @keyup.enter="handleQuery"
<el-input
v-model="queryParams.projectName" placeholder="项目名称" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="单据状态" prop="status">
<el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" :key="dict.value"
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
@ -100,7 +105,8 @@
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
<Pagination
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
@ -116,7 +122,7 @@ import { dateFormatter, formatDate } from '@/utils/formatTime'
import download from '@/utils/download'
import * as MaterialPlanApi from '@/api/heli/materialplan'
import * as UserApi from '@/api/system/user'
import { useRoute } from 'vue-router';
defineOptions({ name: 'MaterialPlan' })
const router = useRouter()
const message = useMessage() //
@ -217,8 +223,13 @@ const handleExport = async () => {
}
const userInit = ref()
const route = useRoute();
/** 初始化 **/
onMounted(async () => {
const flushParam = route.query.flush;
if(flushParam){
getList()
}
//
userInit.value = await UserApi.getSimpleUserList()
getList()

View File

@ -118,9 +118,6 @@
</el-col>
</el-row>
</el-card>
<div class="hl-footer text-center">
</div>
</el-card>
</template>

View File

@ -0,0 +1,486 @@
<template>
<el-card class="hl-card">
<template #header>
<span>标准件物料需求计划</span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="子项目名称" prop="projectSubName">
<el-input v-model="queryParams.projectSubName" placeholder="请输入子项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="零件名称" prop="boomName">
<el-input v-model="queryParams.boomName" placeholder="请输入零件名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="项目编码" prop="projectCode">
<el-input v-model="queryParams.projectCode" placeholder="请输入项目编号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="采购状态" prop="orderStatus">
<el-select v-model="queryParams.orderStatus" placeholder="请选择标准件状态" class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item style="margin-left:30px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
<el-button
type="success"
plain
@click="handleExportDetail"
:loading="exportLoading"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">采购单明细</span>
<el-button style="margin-left: 20px" @click="opearteForm(0)" type="success" size="large">订单生成</el-button>
<el-button style="margin-left: 20px" @click="opearteForm(1)" type="warning" size="large">采购订单管理</el-button>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-form ref="subFormRef" :model="list" v-loading="formLoading" label-width="0" >
<el-table
:row-key="getRowKeys" ref="multipleTable"
@selection-change="handleSelectionChange" v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table">
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column label="序号" align="center" type="index" width="60" />
<el-table-column label="子项目编码" align="center" prop="projectSubCode" min-width="150" />
<el-table-column label="物料编码" align="center" min-width="180" >
<template #default="scope">
<el-select
v-model="scope.row.boomCode"
placeholder="请输入物料编码或名称"
:remote-method="e => remoteMethod(e,scope.row)"
remote-show-suffix
remote
:disabled="scope.row.orderStatus == 2"
clearable
reserve-keyword
filterable
@change="e => changeSupp(e,scope.row)"
:loading="meterialLoading"
class="!w-150px"
>
<el-option
v-for="item in scope.row.materialSelectList"
:key="item.code"
:label="item.code"
:value="item"
>
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.code }}</span>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="标准件名称" align="center" prop="boomName" min-width="150" />
<el-table-column label="规格型号" align="center" prop="boomSpec" min-width="150" />
<el-table-column label="需求数量" align="center" prop="boomAmount" min-width="100" />
<el-table-column label="采购数量" align="center" prop="purchaseAmount" min-width="180" />
<el-table-column label="需求完成时间" align="center" prop="requireTime" :formatter="dateFormatter2" min-width="180" />
<el-table-column label="计划到货日期" align="center" prop="arriveTime" :formatter="dateFormatter2" min-width="180" />
<el-table-column label="供应商" align="center" prop="supplierName" min-width="180" >
<template #default="scope">
<el-select
v-model="scope.row.supplierId"
size="large"
disabled
style="width: 165 px"
>
<el-option
v-for="item in supplierList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="价格" align="center" prop="estimatedPrice" min-width="120" />
<el-table-column label="状态" align="center" prop="orderStatus" min-width="80" >
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_STATUS" :value="scope.row.orderStatus" />
</template>
</el-table-column>
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="180" />
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
<div class="hl-footer text-center">
</div>
</el-card>
<matLog ref="matLogRef" @success="getMat" />
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import download from '@/utils/download'
import * as purchaseOrderMakeDetailApi from '@/api/heli/purchaseordermakedetail'
import { useCommonStateWithOut } from '@/store/modules/common'
import * as matApi from '@/api/heli/material'
import { useUserStore } from '@/store/modules/user'
import matLog from './storageLog.vue'
import * as supplierApi from '@/api/heli/supplier'
import UserSelect from "@/views/heli/materialplan/userSelectNew.vue";
import {inject, ref} from "vue";
import { update } from 'lodash-es'
import { Hash } from 'crypto'
const formLoading = ref(false) // 12
const userStore = useUserStore()
const username = userStore.getUser.nickname
defineOptions({ name: 'Standard' })
const reload: any = inject('reload')
const commonStore = useCommonStateWithOut()
const message = useMessage() //
const { t } = useI18n() //
const router = useRouter()
import {
dateFormatter,
formatDate, dateFormatter2
} from "@/utils/formatTime";
const meterialLoading = ref(false)
const matLogRef = ref()
const loading = ref(true) //
const list = ref([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
planCode: undefined,
projectCode: undefined,
customerName: undefined,
boomName:undefined,
projectName: undefined,
projectSubName: undefined,
version: undefined,
bomStatus: undefined,
remark: undefined,
orderStatus: 1,
createTime: [],
ownerName:username,
materialName:undefined,
projectMaterialPlanNo:undefined
})
const queryParams1 = reactive({
pageNo: 1,
pageSize: 999,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await purchaseOrderMakeDetailApi.page(queryParams)
list.value = data.list
for (const row of list.value ) {
// boomCoderemoteMethod
if (row.boomCode) {
await remoteMethod(row.boomCode, row);
}
}
total.value = data.total
} finally {
loading.value = false
}
}
const ids = ref([])
const multipleTable=ref()
const getRowKeys=(row)=>{
return row.id;
}
const materialSelectList = ref([])
const queryMaterialParams = {
pageNo: 1,
pageSize: 40,
inventoryCodes: undefined,
inventoryName: undefined,
}
const remoteMethod = async (query, row) => {
meterialLoading.value = true;
try {
if (query) {
//
queryMaterialParams.inventoryName = query;
// API
const data = await matApi.getMaterialPage(queryMaterialParams);
//
row.materialSelectList = data.list;
} else {
//
row.materialSelectList = [];
}
} catch (error) {
console.error("查询物料失败:", error);
//
row.materialSelectList = [];
} finally {
meterialLoading.value = false;
}
};
const getMateriallist = async(row) =>{
const data = await matApi.getMaterialPage(queryMaterialParams)
row.materialSelectList = data.list
}
const handleSelectionChange = (selection) => {
ids.value = selection;
}
/** 导出按钮操作 */
const handleExportDetail = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await materialPlanBoomApi.exportMaterialPlanBoom(queryParams)
download.excel(data, '标准件物料需求计划.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
const getMat = async (rowids,amount,ids) => {
//formData.value.boomItemDOList = arrBoom
for(var i = 0 ; i < list.value.length ; i ++){
if(list.value[i].id == rowids){
list.value[i].matRest = amount
list.value[i].materialId = ids
await updateRow(2,list.value[i]);
break;
}
}
}
const changeSupp = async(e,row) => {
if(e){
row.materialId = e.id
row.boomCode = e.code
// row.boomName = e.materialName;
// row.boomSpec = e.spec;
// row.boomUnit = e.unit
await updateRows(row)
}
}
const updateRows = async(row) =>{
await purchaseOrderMakeDetailApi.updatePurchaseOrderDetail(row);
}
const changeDate = async(e,row) => {
if(e){
await updateRow(5,row)
}
}
const serachLog = (row) => {
matLogRef.value.open(row.id,row.matCode)
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
const opearteForm = async(type) =>{
loading.value = true;
if(type == 1){
router.push({ path: '/purchase/PurchaseOrder', query: { flush: 1 } })
return;
}
if(ids.value != null && ids.value.length > 0){
if(type == 0){
//
var isError = false;
var sets = new Set();
for(var i = 0 ; i<ids.value.length ;i++){
var row = ids.value[i];
if(row.orderStatus == 2){
message.error('已生成采购订单!')
loading.value = false
return
}
if(!row.boomDetailId){
message.error('零件编码不能为空!')
loading.value = false
return
}
if( !sets.has(row.supplierId) || sets == null ){
sets.add(row.supplierId)
}
}
if(sets != null && sets.size > 1){
message.error('不同供应商,不能生成一个订单,请确认!');
loading.value = false
return
}
var form = {
id:1,
purchaseOrderId:1,
boomDetailId:1,
projectPlanSubId:1,
updateList:ids.value,
buyType:0
}
await purchaseOrderMakeDetailApi.updatePurchaseOrderDetail(form);
loading.value = false
message.success("生成成功")
await getList();
}
}else{
message.error("至少选择一项后进行操作!")
return ;
}
}
const updateRow = async(type,row) =>{
if(type == 1){
if(row.purchaseAmount != null){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 2){
if(row.matRest != null){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 3){
if(row.estimatedPrice != null){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 4){
if(row.supplierId){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 5){
if(row.arriveTime){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}
}
const supplierList = ref([])
const supplier = async() =>{
var data = await supplierApi.getSupplierPage(queryParams1);
supplierList.value =data.list
//console.log(supplierList/)
}
const handleSelectedUser = (currentIndex, newValue: any) => {
list.value[currentIndex].duEmpId = newValue?.id
}
const submitForm = async () => {
const filteredList = list.value.filter(item => item.duEmpId !== null && item.duEmpId !== undefined);
if (filteredList.length <= 0) {
message.error("提交明细不能为空,请确认");
return;
}
const firstProjectSubId = filteredList[0].projectSubId;
for (let i = 1; i < filteredList.length; i++) {
if (filteredList[i].projectSubId !== firstProjectSubId) {
message.error("标准件明细不属于同一个子项目,请确认");
return;
}
}
for (let i = 0; i < filteredList.length; i++) {
if (filteredList[i].projectMaterialPlanNo!=null){
message.error("零件"+filteredList[i].materialName+"已生成物料需求计划,请确认")
return
}
if (filteredList[i].boomArriveDate==null){
message.error("零件"+filteredList[i].materialName+"要求完成日期为空,请确认")
return
}
if (filteredList[i].duEmpId==null){
message.error("零件"+filteredList[i].materialName+"责任人为空,请确认")
return
}
}
formLoading.value = true
try {
await ProcessBomApi.submitForm(filteredList)
message.success("提交成功")
//
getList()
emit('success')
} finally {
formLoading.value = false
}
}
const withdraw = async () => {
if (queryParams.projectMaterialPlanNo==null){
message.error("物料需求单号为空,不允许撤回")
return
}
await ProcessBomApi.withdraw(queryParams.projectMaterialPlanNo)
message.success("撤回成功")
//
getList()
emit('success')
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProcessBomApi.exportProcessBom(queryParams)
download.excel(data, '工艺bom.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted( async() => {
await supplier()
await getList()
})
</script>
<style>
/* 占位样式 */
</style>

View File

@ -0,0 +1,488 @@
<template>
<el-card class="hl-card">
<template #header>
<span>标准件物料需求计划</span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="子项目名称" prop="projectSubName">
<el-input v-model="queryParams.projectSubName" placeholder="请输入子项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="零件名称" prop="materialName">
<el-input v-model="queryParams.materialName" placeholder="请输入零件名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="项目编码" prop="projectCode">
<el-input v-model="queryParams.projectCode" placeholder="请输入项目编号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="责任人" prop="ownerName">
<el-input
v-model="queryParams.ownerName"
placeholder="请输入责任人"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="采购状态" prop="mplanStatus">
<el-select v-model="queryParams.mplanStatus" placeholder="请选择标准件状态" class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STANDARD_BUY_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="物料需求单号" prop="projectMaterialPlanNo">
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="请输入物料需求单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item style="margin-left:30px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
<el-button
type="success"
plain
@click="handleExportDetail"
:loading="exportLoading"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">标准件明细</span>
<el-button style="margin-left: 20px" @click="opearteForm(0)" type="success" size="large"> </el-button>
<el-button style="margin-left: 20px" @click="opearteForm(1)" type="warning" size="large">去库存</el-button>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-form ref="subFormRef" :model="list" v-loading="formLoading" label-width="0" >
<el-table
:row-key="getRowKeys" ref="multipleTable"
@selection-change="handleSelectionChange" v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table">
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column fixed label="序号" align="center" type="index" width="60" />
<el-table-column label="客户简称" align="center" prop="customerBriefName" min-width="120" fixed/>
<el-table-column label="项目名称" align="center" prop="projectName" min-width="150" fixed/>
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="150" fixed/>
<el-table-column label="零件名称" align="center" prop="matName" min-width="150" />
<el-table-column label="材质" align="center" prop="compositionName" min-width="150" />
<el-table-column label="规格型号" align="center" prop="matSpec" min-width="150" />
<el-table-column label="图号" align="center" prop="blueprintNo" min-width="80" />
<el-table-column label="需求数量" align="center" prop="boomAmount" min-width="100" />
<el-table-column label="单位" align="center" prop="matUnit" min-width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" />
</template>
</el-table-column>
<el-table-column label="采购数量" align="center" prop="purchaseAmount" min-width="180" >
<template #default="scope">
<el-input-number @blur="updateRow(1,scope.row)" v-model="scope.row.purchaseAmount" :precision="2" :step="0.01" />
</template>
</el-table-column>
<el-table-column label="物料编码" align="center" prop="matCode" min-width="180" >
<template #default="scope">
<el-input v-model="scope.row.matCode" disabled>
<template #suffix>
<Icon @click="serachLog(scope.row)" icon="ep:search" color="primary"/>
</template>
</el-input>
</template>
</el-table-column>
<el-table-column label="库存量" align="center" prop="matRest" min-width="120" />
<el-table-column label="供应商" align="center" prop="supplierId" min-width="180" >
<template #default="scope">
<el-select
v-model="scope.row.supplierId"
size="large"
clearable
@change="e => changeSupp(e,scope.row)"
style="width: 165 px"
>
<el-option
v-for="item in supplierList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="预估总价" align="center" prop="estimatedPrice" min-width="180" >
<template #default="scope">
<el-input-number @blur="updateRow(3,scope.row)" v-model="scope.row.estimatedPrice" :precision="2" :step="0.01" />
</template>
</el-table-column>
<el-table-column min-width="200px" align="center" fixed="right">
<template #header><span class="hl-table_header">*</span>预计到货日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.arriveTime`" class="mb-0px!" >
<el-date-picker @change="e => changeDate(e,row)" class="!w-265px" v-model="row.arriveTime" type="date" value-format="x" placeholder="预计到货日期" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="mplanStatusName" min-width="80" />
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="180" fixed="right"/>
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
<div class="hl-footer text-center">
</div>
</el-card>
<matLog ref="matLogRef" @success="getMat" />
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import download from '@/utils/download'
import * as materialPlanBoomApi from '@/api/heli/materialPlanBoom'
import { useCommonStateWithOut } from '@/store/modules/common'
import { useUserStore } from '@/store/modules/user'
import matLog from './storageLog.vue'
import * as supplierApi from '@/api/heli/supplier'
import UserSelect from "@/views/heli/materialplan/userSelectNew.vue";
import {inject, ref} from "vue";
import { update } from 'lodash-es'
import { Hash } from 'crypto'
const formLoading = ref(false) // 12
const userStore = useUserStore()
const username = userStore.getUser.nickname
defineOptions({ name: 'Standard' })
const reload: any = inject('reload')
const commonStore = useCommonStateWithOut()
const message = useMessage() //
const { t } = useI18n() //
const router = useRouter()
const matLogRef = ref()
const loading = ref(true) //
const list = ref([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
planCode: undefined,
projectCode: undefined,
customerName: undefined,
projectName: undefined,
projectSubName: undefined,
version: undefined,
bomStatus: undefined,
remark: undefined,
mplanStatus: 0,
createTime: [],
ownerName:username,
materialName:undefined,
projectMaterialPlanNo:undefined
})
const queryParams1 = reactive({
pageNo: 1,
pageSize: 999,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await materialPlanBoomApi.getStandardBuyPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
const ids = ref([])
const multipleTable=ref()
const getRowKeys=(row)=>{
return row.id;
}
const handleSelectionChange = (selection) => {
ids.value = selection;
console.log(ids.value)
}
/** 导出按钮操作 */
const handleExportDetail = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await materialPlanBoomApi.exportMaterialPlanBoom(queryParams)
download.excel(data, '标准件物料需求计划.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
const getMat = async (rowids,amount,ids) => {
//formData.value.boomItemDOList = arrBoom
for(var i = 0 ; i < list.value.length ; i ++){
if(list.value[i].id == rowids){
list.value[i].matRest = amount
list.value[i].materialId = ids
await updateRow(2,list.value[i]);
break;
}
}
}
const changeSupp = async(e,row) => {
if(e){
await updateRow(4,row)
}
}
const changeDate = async(e,row) => {
if(e){
await updateRow(5,row)
}
}
const serachLog = (row) => {
matLogRef.value.open(row.id,row.matName)
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
const opearteForm = async(type) =>{
if(ids.value != null && ids.value.length > 0){
loading.value = true
if(type == 0){
//
var isError = false;
var sets = new Set();
for(var i = 0 ; i<ids.value.length ;i++){
var row = ids.value[i];
if(!row.purchaseAmount && row.purchaseAmount != 0){
message.error('零件:'+row.matName+ '采购数量不能为空!')
loading.value = false
return
} else if( row.purchaseAmount == 0){
message.error('零件:'+row.matName+ '采购数量不能为0')
loading.value = false
return
} else if(!row.supplierId){
message.error('零件:'+row.matName+ '供应商不能为空!')
loading.value = false
return
} else if(!row.estimatedPrice && row.estimatedPrice != 0){
message.error('零件:'+row.matName+ '预估总价不能为空')
loading.value = false
return
} else if( row.estimatedPrice == 0){
message.error('零件:'+row.matName+ '预估总价不能为0')
loading.value = false
return
} else if(!row.arriveTime ){
message.error('零件:'+row.matName+ '预计到货日期不能为空')
loading.value = false
return
}
if( !sets.has(row.projectId) || sets == null ){
sets.add(row.projectId)
}
}
if(sets != null && sets.size > 1){
message.error('不通项目不能同时生成采购单');
loading.value = false
return
}
var form = {
id:1,
projectMaterialPlanId:1,
boomDetailId:1,
projectPlanSubId:1,
materialPlanBoomDOList:ids.value,
buyType:0
}
try{
await materialPlanBoomApi.updateMaterialPlanBoom(form);
message.success("送审成功")
await getList()
}catch(e){
loading.value = false
}finally{
loading.value = false
}
}else{
//
for(var i = 0 ; i<ids.value.length ;i++){
var row = ids.value[i];
if(!row.materialId){
message.error('请先查询库存量后进行操作')
loading.value = false
return
}
}
var form = {
id:1,
projectMaterialPlanId:1,
boomDetailId:1,
projectPlanSubId:1,
materialPlanBoomDOList:ids.value,
buyType:2
}
await materialPlanBoomApi.updateMaterialPlanBoom(form);
message.success("去库存成功")
await getList()
loading.value = false
}
}else{
message.error("至少选择一项后进行操作!")
loading.value = false
return ;
}
}
const updateRow = async(type,row) =>{
if(type == 1){
if(row.purchaseAmount != null){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 2){
if(row.matRest != null){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 3){
if(row.estimatedPrice != null){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 4){
if(row.supplierId){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}else if(type == 5){
if(row.arriveTime){
await materialPlanBoomApi.updateMaterialPlanBoom(row)
}
}
}
const supplierList = ref([])
const supplier = async() =>{
var data = await supplierApi.getSupplierPage(queryParams1);
supplierList.value =data.list
//console.log(supplierList/)
}
const handleSelectedUser = (currentIndex, newValue: any) => {
list.value[currentIndex].duEmpId = newValue?.id
}
const submitForm = async () => {
const filteredList = list.value.filter(item => item.duEmpId !== null && item.duEmpId !== undefined);
if (filteredList.length <= 0) {
message.error("提交明细不能为空,请确认");
return;
}
const firstProjectSubId = filteredList[0].projectSubId;
for (let i = 1; i < filteredList.length; i++) {
if (filteredList[i].projectSubId !== firstProjectSubId) {
message.error("标准件明细不属于同一个子项目,请确认");
return;
}
}
for (let i = 0; i < filteredList.length; i++) {
if (filteredList[i].projectMaterialPlanNo!=null){
message.error("零件"+filteredList[i].materialName+"已生成物料需求计划,请确认")
return
}
if (filteredList[i].boomArriveDate==null){
message.error("零件"+filteredList[i].materialName+"要求完成日期为空,请确认")
return
}
if (filteredList[i].duEmpId==null){
message.error("零件"+filteredList[i].materialName+"责任人为空,请确认")
return
}
}
formLoading.value = true
try {
await ProcessBomApi.submitForm(filteredList)
message.success("提交成功")
//
getList()
emit('success')
} finally {
formLoading.value = false
}
}
const withdraw = async () => {
if (queryParams.projectMaterialPlanNo==null){
message.error("物料需求单号为空,不允许撤回")
return
}
await ProcessBomApi.withdraw(queryParams.projectMaterialPlanNo)
message.success("撤回成功")
//
getList()
emit('success')
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProcessBomApi.exportProcessBom(queryParams)
download.excel(data, '工艺bom.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted( async() => {
await supplier()
await getList()
})
</script>
<style>
/* 占位样式 */
</style>

View File

@ -0,0 +1,213 @@
<template>
<Dialog v-model="dialogVisible" width="80%">
<el-card class="hl-card">
<template #header>
<span>实时库存</span>
</template>
<ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="批次号" prop="lotNo" v-if="false">
<el-input v-model="queryParams.lotNo" placeholder="批次号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="仓库" prop="whId">
<el-select v-model="queryParams.whId" placeholder="下拉选择" clearable class="!w-240px" @change="handleWh">
<el-option
v-for="dict in whList" :key="dict.id" :label="dict.wh_name"
:value="dict.id" />
</el-select>
</el-form-item>
<el-form-item label="库区" prop="rgId">
<el-select v-model="queryParams.rgId" placeholder="下拉选择" clearable class="!w-240px" @change="handleRg">
<el-option
v-for="dict in rgCurrentList" :key="dict.id" :label="dict.rg_name"
:value="dict.id" />
</el-select>
</el-form-item>
<el-form-item label="库位" prop="pnId">
<el-select v-model="queryParams.pnId" placeholder="下拉选择" clearable class="!w-240px">
<el-option
v-for="dict in pnCurrentList" :key="dict.id" :label="dict.pn_name"
:value="dict.id" />
</el-select>
</el-form-item>
<el-form-item >
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table ref="multipleTableRef" v-loading="loading" :data="list" :stripe="true" highlight-current-row @current-change="handleCurrentChange" :show-overflow-tooltip="true" class="hl-table">
<el-table-column
type="selection"
width="55"/>
<el-table-column type="index" width="100" fixed label="序号" align="center" />
<el-table-column label="物料编码" align="center" prop="matCode" fixed min-width="120" />
<el-table-column label="物料名称" align="center" prop="matName" fixed min-width="120"/>
<el-table-column label="物料类型" align="center" prop="matType" min-width="120"/>
<el-table-column label="物料简称" align="center" prop="shortName" min-width="120"/>
<el-table-column label="规格/型号" align="center" prop="matSpec" min-width="120"/>
<el-table-column label="品牌" align="center" prop="matBrand" min-width="120"/>
<el-table-column label="仓库" align="center" prop="whName" min-width="120"/>
<el-table-column label="库区" align="center" prop="rgName" min-width="120"/>
<el-table-column label="库位" align="center" prop="pnName" min-width="120"/>
<el-table-column label="批次号" align="center" prop="lotNo" min-width="120" v-if="false"/>
<el-table-column label="库存数量" align="center" prop="storageOkQty" min-width="120"/>
<el-table-column label="金额(元)" align="center" prop="sumKcMoney" min-width="120"/>
<el-table-column label="库存单位" align="center" prop="matUnit" min-width="120"/>
</el-table>
<!-- 分页 -->
<Pagination
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
</el-card>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="success">
确认
</el-button>
</span>
</template>
</Dialog>
<printDialog ref="printref" :minAmount="minAmount" :formData="formData" />
</template>
<script setup lang="ts">
import download from '@/utils/download'
import * as StorageLogApi from '@/api/heli/storagelog'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import * as WarehouseApi from '@/api/heli/warehouse'
import * as RgApi from '@/api/heli/rg'
import * as PnApi from '@/api/heli/pn'
defineOptions({ name: 'StorageLog' })
const printref = ref()
const whList = ref([])
const rgList = ref([])
const pnList = ref([])
const dialogVisible = ref(false)
const rgCurrentList = ref([])
const pnCurrentList = ref([])
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
matCode: undefined,
matName: undefined,
matType: undefined,
lotNo: undefined,
whId: undefined,
rgId:undefined,
pnId: undefined,
headerNo: undefined,
})
const queryFormRef = ref() //
const currentRow = ref()
const multipleTableRef = ref()
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await StorageLogApi.getStorageNowPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
const clickItem = ref([])
const handleCurrentChange = (val) => {
multipleTableRef.value!.clearSelection()
clickItem.value = val;
multipleTableRef.value!.toggleRowSelection(val, undefined)
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
const printfClick = () =>{
if(clickItem.value == null || clickItem.value.length == 0){
message.error("至少选择一项后,打印!")
return
}
printref.value.open(clickItem.value.storageOkQty)
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
const handleWh = async (wid) => {
queryParams.rgId = undefined
queryParams.pnId = undefined
rgCurrentList.value =[]
pnCurrentList.value =[]
rgCurrentList.value = rgList.value.filter( (item) => { return item.wh_id == wid})
}
const rowid = ref()
const open = async (rowids,matCode) => {
clickItem.value = null;
//multipleTableRef.value!.clearSelection()
dialogVisible.value = true
queryParams.matName = matCode;
rowid.value = rowids
await getList();
}
defineExpose({ open }) // open
const emit = defineEmits(['success'])
// emit('success', multipleSelection.value)
const success = () =>{
dialogVisible.value = false;
emit('success',rowid.value,clickItem.value.storageOkQty,clickItem.value.id)
}
const handleRg = async (rgid) => {
pnCurrentList.value =[]
pnCurrentList.value = pnList.value.filter( (item) => { return item.rg_id == rgid})
}
//
const init_page_wh = (async ()=>{
whList.value = await WarehouseApi.getSimpList()
})
//
const init_page_rg = (async ()=>{
rgList.value = await RgApi.getSimpList()
})
//
const init_page_pn = (async ()=>{
pnList.value = await PnApi.getSimpList()
})
/** 初始化 **/
onMounted(async () => {
await init_page_wh()
await init_page_rg()
await init_page_pn()
await getList()
})
</script>

View File

@ -0,0 +1,139 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="领料单单号" prop="matReqNo">
<el-input v-model="formData.matReqNo" placeholder="请输入领料单单号" />
</el-form-item>
<el-form-item label="领料单类型1物料2加工件" prop="goodsType">
<el-radio-group v-model="formData.goodsType">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="单据状态,0 未领料1已领料 默认是0" prop="status">
<el-radio-group v-model="formData.status">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="description">
<Editor v-model="formData.description" height="150px" />
</el-form-item>
<el-form-item label="订单id" prop="projectId">
<el-input v-model="formData.projectId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="生产计划id" prop="projectPlanId">
<el-input v-model="formData.projectPlanId" placeholder="请输入生产计划id" />
</el-form-item>
<el-form-item label="客户id" prop="customerId">
<el-input v-model="formData.customerId" placeholder="请输入客户id" />
</el-form-item>
<el-form-item label="领料单日期" prop="reqDate">
<el-date-picker
v-model="formData.reqDate"
type="date"
value-format="x"
placeholder="选择领料单日期"
/>
</el-form-item>
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="formData.projectName" placeholder="请输入项目名称" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import * as MatReqApi from '@/api/heli/matreq'
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
matReqNo: undefined,
goodsType: undefined,
status: undefined,
description: undefined,
projectId: undefined,
projectPlanId: undefined,
customerId: undefined,
reqDate: undefined,
projectName: undefined,
})
const formRules = reactive({
matReqNo: [{ required: true, message: '领料单单号不能为空', trigger: 'blur' }],
goodsType: [{ required: true, message: '领料单类型1物料2加工件不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await MatReqApi.getMatReq(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as MatReqApi.MatReqVO
if (formType.value === 'create') {
await MatReqApi.createMatReq(data)
message.success(t('common.createSuccess'))
} else {
await MatReqApi.updateMatReq(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
matReqNo: undefined,
goodsType: undefined,
status: undefined,
description: undefined,
projectId: undefined,
projectPlanId: undefined,
customerId: undefined,
reqDate: undefined,
projectName: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -0,0 +1,153 @@
<template>
<el-card class="hl-card" style="position: relative">
<template #header>
<span>详情页</span>
</template>
<el-form ref="formRef" :model="formData" label-width="160px" v-loading="formLoading">
<!-- 基础信息 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span>
</template>
<el-row>
<el-col :span="24">
<el-row>
<el-col :span="6">
<el-row>
<el-col :span="24">
<el-form-item label="领料单号" prop="matReqNo">
<el-input class="!w-300px" placeholder="系统自动生成" v-model="formData.matReqNo" disabled />
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-form-item label="领料单日期" prop="reqDate">
<el-date-picker
v-model="formData.reqDate"
type="date"
value-format="x"
placeholder="选择领料单日期"
disabled
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<!-- 需求单信息 -->
<el-card class="hl-card-info">
<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-table :data="formData.list" class="hl-table" v-loading="loading">
<el-table-column type="index" label="序号" fixed align="center" min-width="60" />
<el-table-column prop="name" min-width="200" label="子项目名称" align="center"/>
<el-table-column prop="boomName" min-width="200" label="物料名称" align="center"/>
<el-table-column prop="materialCode" min-width="200" label="物料编码" align="center"/>
<el-table-column prop="boomSpec" min-width="120" label="规格型号" align="center"/>
<el-table-column prop="boomUnit" label="系统单位">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.HELI_MATERIAL_UNIT"
:value="scope.row.boomUnit"
/>
</template>
</el-table-column>
</el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</el-card>
</el-col>
</el-row>
</el-card>
</el-form>
<div class="hl-footer text-center">
<el-button @click="closeForm" size="large"> </el-button>
</div>
</el-card>
<!-- 表单弹窗物料列表 -->
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import * as MatReqApi from '@/api/heli/matreq'
import * as MatReqDetailApi from '@/api/heli/matreqdetail'
import * as UserApi from '@/api/system/user'
import { useTagsViewStore } from '@/store/modules/tagsView'
const reload: any = inject('reload')
const { t } = useI18n() //
const message = useMessage() //
const { query } = useRoute()
const router = useRouter()
const tagsViewStore = useTagsViewStore()
const dialogVisible = ref(false) //
const formLoading = ref(false) // 12
const formData = ref({
id: undefined,
projectMaterialPlanNo: undefined,
projectId: undefined,
projectPlanId: undefined,
projectPlanNo: undefined,
projectCode: undefined,
auditor: undefined,
createTime: new Date(),
status: undefined,
description: undefined,
boomItemDOList: [],
boomItemRemoveList: [],
matBoomDOList: [],
matItemRemoveList: [],
attachments: [],
matReqNo:undefined,
reqDate:undefined,
list:[]
})
const formRef = ref() // Ref
const subFormRef = ref() // Ref
const loading = ref(true) //
const total = ref(0) //
const subBoomFormLoading = ref(false)
const subBoomFormRef = ref()
const closeForm = async () => {
router.push({ path: '/purchase/matreq' })
tagsViewStore.delVisitedView(router.currentRoute.value)
}
const userList = ref<UserApi.UserVO[]>([]) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
matReqId: query.id
})
//
onMounted(async () => {
//
formData.value = await MatReqApi.getMatReq(query.id)
console.log(formData.value)
getList();
})
const getList = async () => {
loading.value = true
try {
const data = await MatReqDetailApi.getMatReqDetailPage(queryParams)
formData.value.list = data.list
total.value = data.total
} finally {
loading.value = false
}
}
</script>

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