Merge branch 'main' of http://120.48.141.82:3000/licq/heli-mes
This commit is contained in:
commit
d5f25b6f66
@ -200,17 +200,11 @@ public class MaterialPlanController {
|
|||||||
return materialPlanService.delMaterial(id);
|
return materialPlanService.delMaterial(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @PostMapping("/getPartPurchasePages")
|
|
||||||
// @Operation(summary = "获得零件采购分页")
|
|
||||||
// public CommonResult<PageResult<MaterialPlanBoomDO>> getPartPurchasePages(@Valid @RequestBody MaterialPlanPageReqVO pageReqVO) {
|
|
||||||
// PageResult<MaterialPlanBoomDO> pageResult = materialPlanService.getPartPurchasePages(pageReqVO);
|
|
||||||
// return success(pageResult);
|
|
||||||
// }
|
|
||||||
|
|
||||||
@GetMapping("/getPartPurchasePages")
|
@GetMapping("/getPartPurchasePages")
|
||||||
@Operation(summary = "获得零件采购分页")
|
@Operation(summary = "获得零件采购分页")
|
||||||
public CommonResult<PageResult<MaterialPlanBoomDO>> getPartPurchasePages() {
|
public CommonResult<PageResult<MaterialPlanBoomDO>> getPartPurchasePages(@Valid MaterialPlanPageReqVO pageReqVO) {
|
||||||
String a ="asdij";
|
PageResult<MaterialPlanBoomDO> pageResult = materialPlanService.getPartPurchasePages(pageReqVO);
|
||||||
return null;
|
return success(pageResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -118,5 +118,21 @@ public class PurchaseOrderMakeController {
|
|||||||
public CommonResult<Boolean> updatePartCheckNo(@Valid PurchaseOrderMakeSaveReqVO updateReqVO) {
|
public CommonResult<Boolean> updatePartCheckNo(@Valid PurchaseOrderMakeSaveReqVO updateReqVO) {
|
||||||
return success(partPurchaseOrderService.updatePartCheckStatusNo(updateReqVO));
|
return success(partPurchaseOrderService.updatePartCheckStatusNo(updateReqVO));
|
||||||
}
|
}
|
||||||
|
@PutMapping("/reject")
|
||||||
|
@Operation(summary = "采购审批驳回")
|
||||||
|
public CommonResult<Boolean> reject(@Valid PurchaseOrderMakeSaveReqVO updateReqVO) {
|
||||||
|
return success(partPurchaseOrderService.reject(updateReqVO));
|
||||||
|
}
|
||||||
|
@PutMapping("/approval")
|
||||||
|
@Operation(summary = "采购单批准")
|
||||||
|
public CommonResult<Boolean> approval(@RequestParam("id") Long id) {
|
||||||
|
return success(partPurchaseOrderService.approval(id));
|
||||||
|
}
|
||||||
|
@GetMapping("/getDetail")
|
||||||
|
@Operation(summary = "获得采购单明细")
|
||||||
|
// @PreAuthorize("@ss.hasPermission('heli:material-plan:query')")
|
||||||
|
public CommonResult<PageResult<PartPurchaseOrderPageRespVO>> getDetail(@Valid PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO) {
|
||||||
|
PageResult<PartPurchaseOrderPageRespVO> pageResult = partPurchaseOrderService.getDetail(partPurchaseOrderPageReqVO);
|
||||||
|
return success(pageResult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,4 +158,5 @@ public class PurchaseOrderNoController {
|
|||||||
public CommonResult<Boolean> deleteForm(@RequestParam("id") Long id) {
|
public CommonResult<Boolean> deleteForm(@RequestParam("id") Long id) {
|
||||||
return purchaseOrderNoService.deleteForm(id);
|
return purchaseOrderNoService.deleteForm(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail;
|
||||||
|
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.PurchaseOrderNoPageReqVO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.PurchaseOrderNoRespVO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -111,5 +114,23 @@ public class PurchaseOrderNoDetailController {
|
|||||||
public CommonResult<Boolean> receiveGoods(@Valid @RequestBody List<PurchaseOrderNoDetailDO> list) {
|
public CommonResult<Boolean> receiveGoods(@Valid @RequestBody List<PurchaseOrderNoDetailDO> list) {
|
||||||
return purchaseOrderNoDetailService.receiveGoods(list);
|
return purchaseOrderNoDetailService.receiveGoods(list);
|
||||||
}
|
}
|
||||||
|
@GetMapping("/received")
|
||||||
|
@Operation(summary = "获得标准件收货分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('project:purchase-order-no-detail:query')")
|
||||||
|
public CommonResult<PageResult<PurchaseOrderNoDetailDO>> received(@Valid PurchaseOrderNoDetailPageReqVO pageReqVO) {
|
||||||
|
PageResult<PurchaseOrderNoDetailDO> pageResult = purchaseOrderNoDetailService.received(pageReqVO);
|
||||||
|
return success(pageResult);
|
||||||
|
}
|
||||||
|
@GetMapping("/exportReceived")
|
||||||
|
@Operation(summary = "导出采购订单主 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('project:purchase-order-no:export')")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportPurchaseOrderNoExcel(@Valid PurchaseOrderNoDetailPageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<PurchaseOrderNoDetailDO> list = purchaseOrderNoDetailService.received(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "标准件收货.xlsx", "数据", ReceivedExcelVo.class,
|
||||||
|
BeanUtils.toBean(list, ReceivedExcelVo.class));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,5 +114,10 @@ public class PurchaseOrderNoDetailPageReqVO extends PageParam {
|
|||||||
|
|
||||||
@Schema(description = "责任人id", example = "30495")
|
@Schema(description = "责任人id", example = "30495")
|
||||||
private Long duEmpId;
|
private Long duEmpId;
|
||||||
|
@Schema(description = "子项目名称")
|
||||||
|
private String projectSubName;
|
||||||
|
@Schema(description = "项目编码")
|
||||||
|
private String projectCode;
|
||||||
|
@Schema(description = "项目编码")
|
||||||
|
private Integer goodsType;
|
||||||
}
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
|
||||||
|
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Excel 导入 VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Accessors(chain = false) // 设置 chain = false,避免BOM导入有问题
|
||||||
|
public class ReceivedExcelVo {
|
||||||
|
@ExcelProperty("子项目编码")
|
||||||
|
private String projectSubCode;
|
||||||
|
|
||||||
|
@ExcelProperty("物料编码")
|
||||||
|
private String matCode;
|
||||||
|
@ExcelProperty("标准件名称")
|
||||||
|
private String boomName;
|
||||||
|
@ExcelProperty("规格型号")
|
||||||
|
private String boomSpec;
|
||||||
|
@ExcelProperty("需求数量")
|
||||||
|
private String boomAmount;
|
||||||
|
@ExcelProperty("采购数量")
|
||||||
|
private String purchaseAmount;
|
||||||
|
|
||||||
|
@ExcelProperty("剩余数量")
|
||||||
|
private String purchaseRemAmount;
|
||||||
|
@ExcelProperty("需求完成时间")
|
||||||
|
private String requireTimes;
|
||||||
|
@ExcelProperty("计划到货日期")
|
||||||
|
private String arriveTimes;
|
||||||
|
@ExcelProperty("供应商")
|
||||||
|
private String supplierName;
|
||||||
|
@ExcelProperty("价格")
|
||||||
|
private String estimatedPrice;
|
||||||
|
@ExcelProperty(value = "订单状态", converter = DictConvert.class)
|
||||||
|
@DictFormat("heli_purchase_receiving_status")
|
||||||
|
private String receivingStatus;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.storagein;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.storagein;
|
||||||
|
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -96,9 +97,20 @@ public class StorageInController {
|
|||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
@PreAuthorize("@ss.hasPermission('heli:storage-in:query')")
|
@PreAuthorize("@ss.hasPermission('heli:storage-in:query')")
|
||||||
public CommonResult<StorageInDO> isPrint(@RequestParam("id") Long id) {
|
public CommonResult<StorageInDO> isPrint(@RequestParam("id") Long id) {
|
||||||
|
|
||||||
return success(storageInService.isPrint(id));
|
return success(storageInService.isPrint(id));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@PostMapping("/standardPartsReceived")
|
||||||
|
@Operation(summary = "标准件收货")
|
||||||
|
@PreAuthorize("@ss.hasPermission('heli:storage-in:query')")
|
||||||
|
public CommonResult<Boolean> standardPartsReceived(@Valid @RequestBody List<PurchaseOrderNoDetailDO> list) {
|
||||||
|
return storageInService.standardPartsReceived(list);
|
||||||
|
}
|
||||||
|
@GetMapping("/warehousing")
|
||||||
|
@Operation(summary = "采购入库")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('heli:storage-in:query')")
|
||||||
|
public CommonResult<Boolean> warehousing(@RequestParam("id") Long id) {
|
||||||
|
return storageInService.warehousing(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.storagein.vo;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.storagein.vo;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import com.alibaba.excel.annotation.*;
|
import com.alibaba.excel.annotation.*;
|
||||||
|
|
||||||
|
@ -172,4 +172,9 @@ public class MaterialPlanBoomDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String duEmpName;
|
private String duEmpName;
|
||||||
|
/**
|
||||||
|
* 客户简称
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String brief;
|
||||||
}
|
}
|
||||||
|
@ -184,6 +184,10 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
|
|||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String matType;
|
private String matType;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
|
private String supplierName;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String purchaseNo;
|
||||||
|
@TableField(exist = false)
|
||||||
private BigDecimal matRest;
|
private BigDecimal matRest;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private BigDecimal unitPrice;
|
private BigDecimal unitPrice;
|
||||||
@ -200,4 +204,13 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
|
|||||||
private String compositionName;
|
private String compositionName;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String procedureName;
|
private String procedureName;
|
||||||
|
/**
|
||||||
|
* 入库数量
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Date boomArriveDates;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String arriveTimes;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String requireTimes;
|
||||||
}
|
}
|
||||||
|
@ -142,6 +142,18 @@ public class StorageInDetailDO extends BaseDO {
|
|||||||
* 供应商id
|
* 供应商id
|
||||||
*/
|
*/
|
||||||
private Long supplierId;
|
private Long supplierId;
|
||||||
|
/**
|
||||||
|
* 采购单明细id
|
||||||
|
*/
|
||||||
|
private Long purchaseOrderNoDetailId;
|
||||||
|
/**
|
||||||
|
* 采购单明细id
|
||||||
|
*/
|
||||||
|
private Long purchaseOrderNoId;
|
||||||
|
/**
|
||||||
|
* 到货日期
|
||||||
|
*/
|
||||||
|
private Date acarrDate;
|
||||||
/**
|
/**
|
||||||
* 入库数量
|
* 入库数量
|
||||||
*/
|
*/
|
||||||
|
@ -21,11 +21,13 @@ 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.processbom.ProcessBomDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
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.storagelogNow.StorageMaterialDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.enums.BoomDetailTypeEnum;
|
import com.chanko.yunxi.mes.module.heli.enums.BoomDetailTypeEnum;
|
||||||
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
|
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
|
||||||
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.*;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.*;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
@ -42,6 +44,14 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
|||||||
Long hasPurchase(Map map);
|
Long hasPurchase(Map map);
|
||||||
Long hasPurYard(Map map);
|
Long hasPurYard(Map map);
|
||||||
|
|
||||||
|
default int updateSetNull(List<Long> ids){
|
||||||
|
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
|
||||||
|
updateWrapper.set("supplier_id",null).set("estimated_price",null)
|
||||||
|
.set("purchase_amount",null).set("arrive_time",null).set("mat_rest",null)
|
||||||
|
.in("id",ids);
|
||||||
|
return update(updateWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
default PageResult<MaterialPlanBoomDO> selectPage(MaterialPlanBoomPageReqVO reqVO) {
|
default PageResult<MaterialPlanBoomDO> selectPage(MaterialPlanBoomPageReqVO reqVO) {
|
||||||
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
||||||
query.selectAll(MaterialPlanBoomDO.class)
|
query.selectAll(MaterialPlanBoomDO.class)
|
||||||
@ -197,7 +207,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
|||||||
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
||||||
query.selectAll(MaterialPlanBoomDO.class)
|
query.selectAll(MaterialPlanBoomDO.class)
|
||||||
.select("p.project_name as projectName","p.name as projectSubName")
|
.select("p.project_name as projectName","p.name as projectSubName")
|
||||||
.select("d.blueprint_no as blueprintNo","d.unit as unit")
|
.select("d.blueprint_no as blueprintNo","d.unit as unit","f.name as supplierName")
|
||||||
.select("a.nickname as duEmpName","c.name as procedureName","e.name as compositionName")
|
.select("a.nickname as duEmpName","c.name as procedureName","e.name as compositionName")
|
||||||
.select(MaterialPlanDO::getBrief)
|
.select(MaterialPlanDO::getBrief)
|
||||||
.leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId)
|
.leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId)
|
||||||
@ -205,6 +215,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
|||||||
.leftJoin(AdminUserDO.class, "a", AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
|
.leftJoin(AdminUserDO.class, "a", AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
|
||||||
.leftJoin(ProcedureDO.class, "c", ProcedureDO::getId, MaterialPlanBoomDO::getProcedureId)
|
.leftJoin(ProcedureDO.class, "c", ProcedureDO::getId, MaterialPlanBoomDO::getProcedureId)
|
||||||
.leftJoin(CompositionDO.class, "e", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
|
.leftJoin(CompositionDO.class, "e", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
|
||||||
|
.leftJoin(SupplierDO.class, "f", SupplierDO::getId, MaterialPlanBoomDO::getSupplierId)
|
||||||
.disableSubLogicDel();
|
.disableSubLogicDel();
|
||||||
query
|
query
|
||||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName())
|
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName())
|
||||||
@ -215,9 +226,11 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
|||||||
.like(!StringUtils.isEmpty(pageReqVO.getDuEmpName()), AdminUserDO::getNickname, pageReqVO.getDuEmpName())
|
.like(!StringUtils.isEmpty(pageReqVO.getDuEmpName()), AdminUserDO::getNickname, pageReqVO.getDuEmpName())
|
||||||
.eq(!StringUtils.isEmpty(pageReqVO.getMatType()), MaterialPlanDO::getMatType, pageReqVO.getMatType())
|
.eq(!StringUtils.isEmpty(pageReqVO.getMatType()), MaterialPlanDO::getMatType, pageReqVO.getMatType())
|
||||||
.eq(!StringUtils.isEmpty(pageReqVO.getStatus()), MaterialPlanBoomDO::getIsPurYard, pageReqVO.getStatus())
|
.eq(!StringUtils.isEmpty(pageReqVO.getStatus()), MaterialPlanBoomDO::getIsPurYard, pageReqVO.getStatus())
|
||||||
.eq(Objects.nonNull(pageReqVO.getMplanStatus()), MaterialPlanBoomDO::getMplanStatus, pageReqVO.getMplanStatus())
|
.in(Objects.nonNull(pageReqVO.getMplanStatus()), MaterialPlanBoomDO::getMplanStatus, pageReqVO.getMplanStatus() != 0 ? Arrays.asList(pageReqVO.getMplanStatus()) : Arrays.asList(0, 3))
|
||||||
.eq(Objects.nonNull(pageReqVO.getProjectMaterialPlanNo()), MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());
|
.eq(Objects.nonNull(pageReqVO.getProjectMaterialPlanNo()), MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());
|
||||||
return selectPage(pageReqVO, query);
|
|
||||||
|
PageResult<MaterialPlanBoomDO> pageResult = selectPage(pageReqVO, query);
|
||||||
|
return pageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,11 +67,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
|||||||
List<ProcessBomDetailDO> selectStandardListByBomId(@Param("bomId") Long bomId);
|
List<ProcessBomDetailDO> selectStandardListByBomId(@Param("bomId") Long bomId);
|
||||||
|
|
||||||
|
|
||||||
@Select("SELECT p.*, IFNULL(SUM(s.storage_ok_qty), 0) AS storage_ok_qty " +
|
@Select("SELECT p.* FROM pro_process_bom_detail p WHERE p.bom_id = #{bomId} and p.type = 1 AND p.deleted IN (0, 1) ")
|
||||||
"FROM pro_process_bom_detail p " +
|
|
||||||
"LEFT JOIN v_storage_material_now s ON p.material_name = s.mat_name " +
|
|
||||||
"WHERE p.bom_id = #{bomId} and p.type = 1 AND p.deleted IN (0, 1) " +
|
|
||||||
"GROUP BY p.material_name")
|
|
||||||
//2025 0601 因为bom明细页查询到结果 由 group by materialcode转换为 group by id
|
//2025 0601 因为bom明细页查询到结果 由 group by materialcode转换为 group by id
|
||||||
List<ProcessBomDetailDO> selectStandardListByBomId20250609(@Param("bomId") Long bomId);
|
List<ProcessBomDetailDO> selectStandardListByBomId20250609(@Param("bomId") Long bomId);
|
||||||
default Long getBomDetailByBluePrintNoAndBomId(String bomCode,String bluePrintNo){
|
default Long getBomDetailByBluePrintNoAndBomId(String bomCode,String bluePrintNo){
|
||||||
@ -231,7 +227,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
|||||||
// .eq(MaterialPlanBoomDO::getDeleted,0)
|
// .eq(MaterialPlanBoomDO::getDeleted,0)
|
||||||
// .eq(MaterialPlanDO::getDeleted,0);
|
// .eq(MaterialPlanDO::getDeleted,0);
|
||||||
if (ObjectUtils.isEmpty(pageReqVO.getProjectMaterialPlanNo())) {
|
if (ObjectUtils.isEmpty(pageReqVO.getProjectMaterialPlanNo())) {
|
||||||
query.eq(ProcessBomDO::getBomStatus,"2")
|
query.eq(ProcessBomDO::getBomStatus,"7")
|
||||||
.ne(ProjectOrderDO::getOrderStatus,"64")
|
.ne(ProjectOrderDO::getOrderStatus,"64")
|
||||||
.eq(ProcessBomDetailDO::getType,"1");
|
.eq(ProcessBomDetailDO::getType,"1");
|
||||||
;
|
;
|
||||||
|
@ -86,6 +86,7 @@ public interface PurchaseOrderMakeMapper extends BaseMapperX<PurchaseOrderMakeDO
|
|||||||
.like(Objects.nonNull(reqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, reqVO.getProjectName())
|
.like(Objects.nonNull(reqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, reqVO.getProjectName())
|
||||||
|
|
||||||
.eq(Objects.nonNull(reqVO.getProjectNameSim()), PurchaseOrderMakeDO::getProjectNameSim, reqVO.getProjectNameSim())
|
.eq(Objects.nonNull(reqVO.getProjectNameSim()), PurchaseOrderMakeDO::getProjectNameSim, reqVO.getProjectNameSim())
|
||||||
|
.groupBy(PurchaseOrderMakeDO::getId)
|
||||||
.orderByDesc(PurchaseOrderMakeDO::getId);
|
.orderByDesc(PurchaseOrderMakeDO::getId);
|
||||||
|
|
||||||
// 使用 selectJoinPage 进行分页查询
|
// 使用 selectJoinPage 进行分页查询
|
||||||
|
@ -45,7 +45,7 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
|
|||||||
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
|
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
|
||||||
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
|
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
|
||||||
.eq(PurchaseOrderMakeDO::getGoodsType,1)
|
.eq(PurchaseOrderMakeDO::getGoodsType,1)
|
||||||
.disableSubLogicDel();
|
.eq(PurchaseOrderMakeDO::getStatus,2);
|
||||||
if (!StringUtils.isEmpty(reqVO.getProjectName())){
|
if (!StringUtils.isEmpty(reqVO.getProjectName())){
|
||||||
query.like(ProjectOrderDO::getProjectName, reqVO.getProjectName());
|
query.like(ProjectOrderDO::getProjectName, reqVO.getProjectName());
|
||||||
}
|
}
|
||||||
@ -108,4 +108,39 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
|
|||||||
return pageResult;
|
return pageResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default PageResult<PartPurchaseOrderPageRespVO> getDetail(PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO){
|
||||||
|
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")
|
||||||
|
.leftJoin(PurchaseOrderMakeDO.class,"a",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
|
||||||
|
.leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,PurchaseOrderMakeDO::getProjectId)
|
||||||
|
.leftJoin(AdminUserDO.class,"c", AdminUserDO::getId,PurchaseOrderMakeDetailDO::getDuEmpId)
|
||||||
|
.leftJoin(SupplierDO.class, "d", SupplierDO::getId,PurchaseOrderMakeDetailDO::getSupplierId)
|
||||||
|
.leftJoin(ProcedureDO.class, "e", ProcedureDO::getId, PurchaseOrderMakeDetailDO::getProcedureId)
|
||||||
|
.disableLogicDel()
|
||||||
|
.disableSubLogicDel()
|
||||||
|
.eq(Objects.nonNull(partPurchaseOrderPageReqVO.getPurchaseOrderId()), PurchaseOrderMakeDO::getId, partPurchaseOrderPageReqVO.getPurchaseOrderId())
|
||||||
|
.eq(StringUtils.isNotBlank(partPurchaseOrderPageReqVO.getContractNo()), PurchaseOrderMakeDO::getContractNo, partPurchaseOrderPageReqVO.getContractNo())
|
||||||
|
.eq(Objects.nonNull(partPurchaseOrderPageReqVO.getDocumentStatus()), PurchaseOrderMakeDO::getStatus, partPurchaseOrderPageReqVO.getDocumentStatus())
|
||||||
|
.like(StringUtils.isNotBlank(partPurchaseOrderPageReqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, partPurchaseOrderPageReqVO.getProjectName())
|
||||||
|
.like(StringUtils.isNotBlank(partPurchaseOrderPageReqVO.getProjectSubName()), PurchaseOrderMakeDetailDO::getName, partPurchaseOrderPageReqVO.getProjectSubName())
|
||||||
|
.like(StringUtils.isNotBlank(partPurchaseOrderPageReqVO.getMaterialName()), PurchaseOrderMakeDetailDO::getBoomName, partPurchaseOrderPageReqVO.getMaterialName())
|
||||||
|
.eq(Objects.nonNull(partPurchaseOrderPageReqVO.getStatus()), PurchaseOrderMakeDetailDO::getOrderStatus, partPurchaseOrderPageReqVO.getStatus())
|
||||||
|
.eq(Objects.nonNull(partPurchaseOrderPageReqVO.getProjectCode()), ProjectOrderDO::getCode, partPurchaseOrderPageReqVO.getProjectCode())
|
||||||
|
.like(Objects.nonNull(partPurchaseOrderPageReqVO.getOwnerName()), AdminUserDO::getNickname, partPurchaseOrderPageReqVO.getOwnerName())
|
||||||
|
.like(Objects.nonNull(partPurchaseOrderPageReqVO.getSupplierName()), SupplierDO::getName, partPurchaseOrderPageReqVO.getSupplierName());
|
||||||
|
|
||||||
|
String sqlStr= query.getTargetSql();
|
||||||
|
|
||||||
|
PageResult<PartPurchaseOrderPageRespVO> pageResult = selectJoinPage(partPurchaseOrderPageReqVO, PartPurchaseOrderPageRespVO.class, query);
|
||||||
|
return pageResult;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,12 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.Pro
|
|||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermaterial.vo.PurchaseOrderMaterialPageReqVO;
|
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.composition.CompositionDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
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.materialplanboom.MaterialPlanBoomDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.MaterialPlanDetailDO;
|
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.procedure.ProcedureDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
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.projectorder.ProjectOrderSubDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderboom.PurchaseOrderBoomDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderboom.PurchaseOrderBoomDO;
|
||||||
@ -20,10 +22,13 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermaterial.Pur
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
|
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.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
|
||||||
|
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo.*;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo.*;
|
||||||
import org.springframework.beans.PropertyValues;
|
import org.springframework.beans.PropertyValues;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购订单明细 Mapper
|
* 采购订单明细 Mapper
|
||||||
@ -80,4 +85,28 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
|
|||||||
query.eq(PurchaseOrderNoDetailDO::getDeleted, 0);
|
query.eq(PurchaseOrderNoDetailDO::getDeleted, 0);
|
||||||
return selectList(query);
|
return selectList(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default PageResult<PurchaseOrderNoDetailDO> received(PurchaseOrderNoDetailPageReqVO pageReqVO){
|
||||||
|
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
|
||||||
|
|
||||||
|
query.selectAll(PurchaseOrderNoDetailDO.class)
|
||||||
|
.select("s.name as supplierName","m.code as matCode","p.purchase_no as purchaseNo","t.purchase_rem_amount as purchaseRemAmounts")
|
||||||
|
.select("DATE_FORMAT(t.require_time,'%Y-%m-%d') as requireTimes","DATE_FORMAT(t.arrive_time,'%Y-%m-%d') as arriveTimes")
|
||||||
|
.leftJoin(PurchaseOrderNoDO.class,"p", PurchaseOrderNoDO::getId, PurchaseOrderNoDetailDO::getPurchaseOrderId)
|
||||||
|
.leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)
|
||||||
|
.leftJoin(MaterialDO.class,"m", MaterialDO::getId, PurchaseOrderNoDetailDO::getMaterialId)
|
||||||
|
.leftJoin(ProjectOrderDO.class,"pro", ProjectOrderDO::getId, PurchaseOrderNoDetailDO::getProjectId)
|
||||||
|
.disableSubLogicDel()
|
||||||
|
.groupBy(PurchaseOrderNoDetailDO::getId)
|
||||||
|
.orderByDesc(PurchaseOrderNoDetailDO::getCreateTime);
|
||||||
|
query
|
||||||
|
.eq(pageReqVO.getReceivingStatus() != null, PurchaseOrderNoDetailDO::getReceivingStatus, pageReqVO.getReceivingStatus())
|
||||||
|
.eq(pageReqVO.getGoodsType() != null, PurchaseOrderNoDO::getGoodsType, pageReqVO.getGoodsType())
|
||||||
|
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()), PurchaseOrderNoDetailDO::getProjectName, pageReqVO.getProjectName())
|
||||||
|
.like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), PurchaseOrderNoDetailDO::getName, pageReqVO.getProjectSubName())
|
||||||
|
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
|
||||||
|
.like(!StringUtils.isEmpty(pageReqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, pageReqVO.getBoomName());
|
||||||
|
|
||||||
|
return selectPage(pageReqVO, query);
|
||||||
|
}
|
||||||
}
|
}
|
@ -65,6 +65,7 @@ public interface StorageInDetailMapper extends BaseMapperX<StorageInDetailDO> {
|
|||||||
.leftJoin(SupplierDO.class,"sup", SupplierDO::getId, StorageInDetailDO::getSupplierId)
|
.leftJoin(SupplierDO.class,"sup", SupplierDO::getId, StorageInDetailDO::getSupplierId)
|
||||||
.leftJoin(MaterialDO.class,"m", MaterialDO::getId, StorageInDetailDO::getMaterialId)
|
.leftJoin(MaterialDO.class,"m", MaterialDO::getId, StorageInDetailDO::getMaterialId)
|
||||||
.groupBy(StorageInDetailDO::getId)
|
.groupBy(StorageInDetailDO::getId)
|
||||||
|
.disableSubLogicDel()
|
||||||
.orderByDesc(StorageInDetailDO::getCreateTime);
|
.orderByDesc(StorageInDetailDO::getCreateTime);
|
||||||
query.eq(pageReqVO.getStorageNoId() != null, StorageInDetailDO::getStorageNoId, pageReqVO.getStorageNoId());
|
query.eq(pageReqVO.getStorageNoId() != null, StorageInDetailDO::getStorageNoId, pageReqVO.getStorageNoId());
|
||||||
return selectPage(pageReqVO, query);
|
return selectPage(pageReqVO, query);
|
||||||
|
@ -16,6 +16,7 @@ import org.apache.poi.hpsf.Decimal;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ public interface StorageLogNowMapper extends BaseMapperX<StorageLogNowDO> {
|
|||||||
|
|
||||||
List<StorageLogNowDO> selectNowList(StorageNowAllReqVO reqVO);
|
List<StorageLogNowDO> selectNowList(StorageNowAllReqVO reqVO);
|
||||||
|
|
||||||
|
List<StorageLogNowDO> selectAllByMatNames(@Param("matNames") List<String> matNames);
|
||||||
List<StorageLogNowDO> selectNowByMatPnId(@Param("matId")Long matId,@Param("pnId")Long pnId);
|
List<StorageLogNowDO> selectNowByMatPnId(@Param("matId")Long matId,@Param("pnId")Long pnId);
|
||||||
|
|
||||||
default PageResult<StorageLogNowDO> getStorageNowPricePage(StorageLogPageReqVO reqVO) {
|
default PageResult<StorageLogNowDO> getStorageNowPricePage(StorageLogPageReqVO reqVO) {
|
||||||
|
@ -372,10 +372,16 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
|
|||||||
break;
|
break;
|
||||||
case "caigou":
|
case "caigou":
|
||||||
if (boomDO.getIsPurYard()!=1) return CommonResult.error(400,"该物料信息状态非库存状态,请刷新界面!");
|
if (boomDO.getIsPurYard()!=1) return CommonResult.error(400,"该物料信息状态非库存状态,请刷新界面!");
|
||||||
boomDO.setIsPurYard(5);
|
// boomDO.setIsPurYard(5);
|
||||||
|
LambdaUpdateWrapper<MaterialPlanBoomDO> wrapper = new LambdaUpdateWrapper<>();
|
||||||
|
wrapper.eq(MaterialPlanBoomDO::getId,pageReqVO.getId())
|
||||||
|
.set(MaterialPlanBoomDO::getIsPurYard,5)
|
||||||
|
.set(MaterialPlanBoomDO::getMaterialId,null)
|
||||||
|
.set(MaterialPlanBoomDO::getMatRest,0);
|
||||||
|
materialPlanBoomMapper.update(wrapper);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
materialPlanBoomMapper.updateById(boomDO);
|
if (!"caigou".equals(pageReqVO.getType())) materialPlanBoomMapper.updateById(boomDO);
|
||||||
}
|
}
|
||||||
return CommonResult.success(true);
|
return CommonResult.success(true);
|
||||||
}
|
}
|
||||||
|
@ -224,6 +224,7 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
|
//去库存,要同时删掉:供应商、采购数量、预估总价、预计到货日期
|
||||||
List<MaterialPlanBoomDO> materialPlanBoomDOList = updateReqVO.getMaterialPlanBoomDOList();
|
List<MaterialPlanBoomDO> materialPlanBoomDOList = updateReqVO.getMaterialPlanBoomDOList();
|
||||||
List<Long> ids = new ArrayList<>();
|
List<Long> ids = new ArrayList<>();
|
||||||
|
|
||||||
@ -243,7 +244,7 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
|
|||||||
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE);
|
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE);
|
||||||
}
|
}
|
||||||
materialPlanBoomMapper.updateBatch(materialPlanBoomDOList);
|
materialPlanBoomMapper.updateBatch(materialPlanBoomDOList);
|
||||||
|
materialPlanBoomMapper.updateSetNull(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -139,6 +139,7 @@ public class MatReqServiceImpl implements MatReqService {
|
|||||||
matReqDO.setProjectName(planDO.getProjectName());
|
matReqDO.setProjectName(planDO.getProjectName());
|
||||||
matReqDO.setCustomerId(planDO.getCustomerId());
|
matReqDO.setCustomerId(planDO.getCustomerId());
|
||||||
matReqDO.setReqDate(LocalDate.now());
|
matReqDO.setReqDate(LocalDate.now());
|
||||||
|
matReqDO.setProjectPlanId(planDO.getProjectPlanId());
|
||||||
matReqMapper.insert(matReqDO);
|
matReqMapper.insert(matReqDO);
|
||||||
List<MatReqDetailDO> matReqDetailDOS = new ArrayList<>();
|
List<MatReqDetailDO> matReqDetailDOS = new ArrayList<>();
|
||||||
for (MaterialPlanBoomDO materialPlanBoomDO : list) {
|
for (MaterialPlanBoomDO materialPlanBoomDO : list) {
|
||||||
|
@ -56,4 +56,10 @@ public interface PartPurchaseOrderService {
|
|||||||
* @return 更新采购单审批状态
|
* @return 更新采购单审批状态
|
||||||
*/
|
*/
|
||||||
boolean updatePartCheckStatusNo(PurchaseOrderMakeSaveReqVO updateReqVO);
|
boolean updatePartCheckStatusNo(PurchaseOrderMakeSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
Boolean reject(PurchaseOrderMakeSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
Boolean approval(Long id);
|
||||||
|
|
||||||
|
PageResult<PartPurchaseOrderPageRespVO> getDetail(PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO);
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder;
|
package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
|
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
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.common.util.object.BeanUtils;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.QueryWrapperX;
|
import com.chanko.yunxi.mes.framework.mybatis.core.query.QueryWrapperX;
|
||||||
|
import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
|
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.PartPurchaseOrderPageRespVO;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
|
||||||
@ -25,11 +28,15 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
||||||
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER;
|
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -111,6 +118,8 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
|
|||||||
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
|
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
|
||||||
purchaseOrderMakeDO.setId(id);
|
purchaseOrderMakeDO.setId(id);
|
||||||
purchaseOrderMakeDO.setStatus(2);
|
purchaseOrderMakeDO.setStatus(2);
|
||||||
|
purchaseOrderMakeDO.setAuditor(SecurityFrameworkUtils.getLoginUserId());
|
||||||
|
purchaseOrderMakeDO.setAuditTime(LocalDateTime.now());
|
||||||
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
|
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
|
||||||
|
|
||||||
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", id);
|
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", id);
|
||||||
@ -150,4 +159,61 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean reject(PurchaseOrderMakeSaveReqVO updateReqVO) {
|
||||||
|
PurchaseOrderMakeDO orderMakeDO = purchaseOrderMakeMapper.selectById(updateReqVO.getId());
|
||||||
|
if (orderMakeDO.getStatus() != 1) throw exception(new ErrorCode(400,"该单据状态非待审核,请刷新界面!"));
|
||||||
|
|
||||||
|
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
|
||||||
|
purchaseOrderMakeDO.setId(updateReqVO.getId());
|
||||||
|
purchaseOrderMakeDO.setStatus(3);
|
||||||
|
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
|
||||||
|
purchaseOrderMakeMapper.deleteById(purchaseOrderMakeDO);
|
||||||
|
LambdaUpdateWrapper<PurchaseOrderMakeDetailDO> wrapper = new LambdaUpdateWrapper<>();
|
||||||
|
wrapper.eq(PurchaseOrderMakeDetailDO::getPurchaseOrderId, updateReqVO.getId());
|
||||||
|
purchaseOrderMakeDetailMapper.delete(wrapper);
|
||||||
|
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("purchase_amount", BigDecimal.ZERO)
|
||||||
|
.set("estimated_price", BigDecimal.ZERO)
|
||||||
|
.set("arrive_time",null)
|
||||||
|
.set("supplier_id", null);
|
||||||
|
materialPlanBoomMapper.update(updateWrapper);
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean approval(Long id) {
|
||||||
|
PurchaseOrderMakeDO orderMakeDO = purchaseOrderMakeMapper.selectById(id);
|
||||||
|
if (orderMakeDO.getStatus() != 1) throw exception(new ErrorCode(400,"该单据状态非待审核,请刷新界面!"));
|
||||||
|
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
|
||||||
|
purchaseOrderMakeDO.setId(id);
|
||||||
|
purchaseOrderMakeDO.setStatus(2);
|
||||||
|
purchaseOrderMakeDO.setAuditTime(LocalDateTime.now());
|
||||||
|
purchaseOrderMakeDO.setAuditor(getLoginUser().getId());
|
||||||
|
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 PageResult<PartPurchaseOrderPageRespVO> getDetail(PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO) {
|
||||||
|
return purchaseOrderMakeDetailMapper.getDetail(partPurchaseOrderPageReqVO);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ 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.processbom.ProcessBomDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.shenhe.ShenheDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.shenhe.ShenheDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
|
||||||
@ -42,6 +43,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.plantask.PlanTaskMapper;
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.shenhe.ShenheMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.shenhe.ShenheMapper;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
|
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
|
||||||
import com.chanko.yunxi.mes.module.heli.service.attentiontodo.AttentiontodoService;
|
import com.chanko.yunxi.mes.module.heli.service.attentiontodo.AttentiontodoService;
|
||||||
import com.chanko.yunxi.mes.module.heli.service.composition.CompositionService;
|
import com.chanko.yunxi.mes.module.heli.service.composition.CompositionService;
|
||||||
@ -123,6 +125,8 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
private MaterialPlanMapper materialPlanMapper;
|
private MaterialPlanMapper materialPlanMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private MaterialPlanBoomMapper materialPlanBoomMapper;
|
private MaterialPlanBoomMapper materialPlanBoomMapper;
|
||||||
|
@Resource
|
||||||
|
private StorageLogNowMapper storageLogNowMapper;
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createProcessBom(ProcessBomSaveReqVO createReqVO) {
|
public Long createProcessBom(ProcessBomSaveReqVO createReqVO) {
|
||||||
@ -808,6 +812,29 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
list.addAll(processBomDetailMapper.selectStandardListByBomId20250609(bomId));
|
list.addAll(processBomDetailMapper.selectStandardListByBomId20250609(bomId));
|
||||||
// Map<Long, List<ProcessBomDetailDO>> standardGroupByMatId = processBomDetailDOS.stream().collect(Collectors.groupingBy(vo -> vo.getMaterialId() == null ? -1 : vo.getMaterialId()));
|
// Map<Long, List<ProcessBomDetailDO>> standardGroupByMatId = processBomDetailDOS.stream().collect(Collectors.groupingBy(vo -> vo.getMaterialId() == null ? -1 : vo.getMaterialId()));
|
||||||
//查非标准件的
|
//查非标准件的
|
||||||
|
if (CollUtil.isNotEmpty(list)){
|
||||||
|
HashSet<String> materialNameSet = new HashSet<>();
|
||||||
|
for (ProcessBomDetailDO processBomDetailDO : list) {
|
||||||
|
processBomDetailDO.setStorageOkQty(BigDecimal.ZERO);
|
||||||
|
if (processBomDetailDO.getMaterialName() != null) {
|
||||||
|
materialNameSet.add(processBomDetailDO.getMaterialName());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(materialNameSet)){
|
||||||
|
List<StorageLogNowDO> storageLogNowDOS = storageLogNowMapper.selectAllByMatNames(new ArrayList<>(materialNameSet));
|
||||||
|
for (ProcessBomDetailDO processBomDetailDO : list) {
|
||||||
|
for (StorageLogNowDO storageLogNowDO : storageLogNowDOS) {
|
||||||
|
if (processBomDetailDO.getMaterialName()!= null && storageLogNowDO.getMatName().equals(processBomDetailDO.getMaterialName())) {
|
||||||
|
processBomDetailDO.setStorageOkQty(storageLogNowDO.getStorageOkQty());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
List<ProcessBomDetailDO> processBomDetailNoStandardDOS = processBomDetailMapper.selectListNoStandardList(bomId);
|
List<ProcessBomDetailDO> processBomDetailNoStandardDOS = processBomDetailMapper.selectListNoStandardList(bomId);
|
||||||
List<ProcessBomDetailDO> noStandardList = processBomDetailNoStandardDOS.stream()
|
List<ProcessBomDetailDO> noStandardList = processBomDetailNoStandardDOS.stream()
|
||||||
|
@ -59,4 +59,6 @@ public interface PurchaseOrderNoDetailService {
|
|||||||
CommonResult<Boolean> verification(List<PurchaseOrderNoDetailDO> list);
|
CommonResult<Boolean> verification(List<PurchaseOrderNoDetailDO> list);
|
||||||
|
|
||||||
CommonResult<Boolean> receiveGoods(List<PurchaseOrderNoDetailDO> list);
|
CommonResult<Boolean> receiveGoods(List<PurchaseOrderNoDetailDO> list);
|
||||||
|
|
||||||
|
PageResult<PurchaseOrderNoDetailDO> received(PurchaseOrderNoDetailPageReqVO pageReqVO);
|
||||||
}
|
}
|
||||||
|
@ -180,4 +180,9 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<PurchaseOrderNoDetailDO> received(PurchaseOrderNoDetailPageReqVO pageReqVO) {
|
||||||
|
return purchaseOrderNoDetailMapper.received(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.service.storagein;
|
package com.chanko.yunxi.mes.module.heli.service.storagein;
|
||||||
|
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
|
|
||||||
|
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storagein.vo.*;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.storagein.vo.*;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagein.StorageInDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagein.StorageInDO;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 入库单 Service 接口
|
* 入库单 Service 接口
|
||||||
*
|
*
|
||||||
@ -52,4 +57,8 @@ public interface StorageInService {
|
|||||||
|
|
||||||
|
|
||||||
StorageInDO isPrint(Long id);
|
StorageInDO isPrint(Long id);
|
||||||
|
|
||||||
|
CommonResult<Boolean> standardPartsReceived(List<PurchaseOrderNoDetailDO> list);
|
||||||
|
|
||||||
|
CommonResult<Boolean> warehousing(Long id);
|
||||||
}
|
}
|
||||||
|
@ -3,18 +3,27 @@ package com.chanko.yunxi.mes.module.heli.service.storagein;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storageindetail.vo.StorageInDetailPageReqVO;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.storageindetail.vo.StorageInDetailPageReqVO;
|
||||||
|
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.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageindetail.StorageInDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageindetail.StorageInDetailDO;
|
||||||
|
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.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageindetail.StorageInDetailMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageindetail.StorageInDetailMapper;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
|
||||||
import com.sun.corba.se.spi.ior.IdentifiableFactory;
|
import com.sun.corba.se.spi.ior.IdentifiableFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storagein.vo.*;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.storagein.vo.*;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagein.StorageInDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagein.StorageInDO;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
@ -24,6 +33,8 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagein.StorageInMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagein.StorageInMapper;
|
||||||
|
|
||||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
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.CodeEnum.STOCK_IN;
|
||||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,6 +52,10 @@ public class StorageInServiceImpl implements StorageInService {
|
|||||||
private StorageInDetailMapper storageInDetailMapper;
|
private StorageInDetailMapper storageInDetailMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
|
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
|
||||||
|
@Resource
|
||||||
|
private SerialNumberService serialNumberService;
|
||||||
|
@Resource
|
||||||
|
private PurchaseOrderNoMapper purchaseOrderNoMapper;
|
||||||
@Override
|
@Override
|
||||||
public Long createStorageIn(StorageInSaveReqVO createReqVO) {
|
public Long createStorageIn(StorageInSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
@ -70,21 +85,20 @@ public class StorageInServiceImpl implements StorageInService {
|
|||||||
if (ObjectUtil.isNotEmpty(storageInDetailDOS)){
|
if (ObjectUtil.isNotEmpty(storageInDetailDOS)){
|
||||||
for (StorageInDetailDO storageInDetailDO : storageInDetailDOS) {
|
for (StorageInDetailDO storageInDetailDO : storageInDetailDOS) {
|
||||||
LambdaQueryWrapper<PurchaseOrderNoDetailDO> wrapper1 = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<PurchaseOrderNoDetailDO> wrapper1 = new LambdaQueryWrapper<>();
|
||||||
wrapper1.eq(PurchaseOrderNoDetailDO::getStorageId,storageInDetailDO.getStorageNoId());
|
wrapper1.eq(PurchaseOrderNoDetailDO::getId,storageInDetailDO.getPurchaseOrderNoDetailId());
|
||||||
wrapper1.eq(PurchaseOrderNoDetailDO::getStorageMatId,storageInDetailDO.getId());
|
|
||||||
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = purchaseOrderNoDetailMapper.selectOne(wrapper1);
|
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = purchaseOrderNoDetailMapper.selectOne(wrapper1);
|
||||||
if (ObjectUtil.isNotEmpty(purchaseOrderNoDetailDO)){
|
if (ObjectUtil.isNotEmpty(purchaseOrderNoDetailDO)){
|
||||||
LambdaUpdateWrapper<PurchaseOrderNoDetailDO> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<PurchaseOrderNoDetailDO> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
updateWrapper.eq(PurchaseOrderNoDetailDO::getId,purchaseOrderNoDetailDO.getId());
|
updateWrapper.eq(PurchaseOrderNoDetailDO::getId,purchaseOrderNoDetailDO.getId());
|
||||||
updateWrapper.set(PurchaseOrderNoDetailDO::getStorageId,null);
|
updateWrapper.set(PurchaseOrderNoDetailDO::getStorageId,null);
|
||||||
updateWrapper.set(PurchaseOrderNoDetailDO::getStorageMatId,null);
|
updateWrapper.set(PurchaseOrderNoDetailDO::getStorageMatId,null);
|
||||||
|
purchaseOrderNoDetailDO.setPurchaseRemAmount(purchaseOrderNoDetailDO.getPurchaseRemAmount().add(storageInDetailDO.getStorageAmount()));
|
||||||
if (purchaseOrderNoDetailDO.getPurchaseAmount().compareTo(purchaseOrderNoDetailDO.getPurchaseRemAmount())==0){
|
if (purchaseOrderNoDetailDO.getPurchaseAmount().compareTo(purchaseOrderNoDetailDO.getPurchaseRemAmount())==0){
|
||||||
updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,1);
|
updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,1);
|
||||||
}else {
|
}else {
|
||||||
updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,2);
|
updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,2);
|
||||||
}
|
}
|
||||||
updateWrapper.set(PurchaseOrderNoDetailDO::getPurchaseRemAmount,purchaseOrderNoDetailDO.getPurchaseRemAmount().add(storageInDetailDO.getStorageAmount()));
|
updateWrapper.set(PurchaseOrderNoDetailDO::getPurchaseRemAmount,purchaseOrderNoDetailDO.getPurchaseRemAmount());
|
||||||
purchaseOrderNoDetailMapper.update(updateWrapper);
|
purchaseOrderNoDetailMapper.update(updateWrapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,4 +137,132 @@ public class StorageInServiceImpl implements StorageInService {
|
|||||||
return storageInDO;
|
return storageInDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> standardPartsReceived(List<PurchaseOrderNoDetailDO> list) {
|
||||||
|
List<Long> idList = list.stream()
|
||||||
|
.filter(Objects::nonNull) // 过滤空对象
|
||||||
|
.map(PurchaseOrderNoDetailDO::getId)
|
||||||
|
.filter(Objects::nonNull) // 过滤空ID
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
Map<Long, BigDecimal> idToRemAmountMap = list.stream()
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
PurchaseOrderNoDetailDO::getId, // 键:id
|
||||||
|
PurchaseOrderNoDetailDO::getPurchaseRemAmounts, // 值:purchaseRemAmounts
|
||||||
|
(existing, replacement) -> existing // 键冲突时处理策略(保留现有值)
|
||||||
|
));
|
||||||
|
LambdaQueryWrapper<PurchaseOrderNoDetailDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
lambdaQueryWrapper.in(PurchaseOrderNoDetailDO::getId,idList);
|
||||||
|
List<PurchaseOrderNoDetailDO> purchaseOrderNoDetailDOS = purchaseOrderNoDetailMapper.selectList(lambdaQueryWrapper);
|
||||||
|
if (ObjectUtil.isNotEmpty(purchaseOrderNoDetailDOS)) {
|
||||||
|
for (PurchaseOrderNoDetailDO purchaseOrderNoDetailDO : purchaseOrderNoDetailDOS){
|
||||||
|
BigDecimal amount = (purchaseOrderNoDetailDO.getId() != null)
|
||||||
|
? idToRemAmountMap.getOrDefault(purchaseOrderNoDetailDO.getId(), BigDecimal.ZERO)
|
||||||
|
: BigDecimal.ZERO;
|
||||||
|
if (purchaseOrderNoDetailDO.getPurchaseRemAmount().compareTo(amount)<0){
|
||||||
|
return CommonResult.error(400,"标准件名称"+purchaseOrderNoDetailDO.getBoomName()+"剩余数量"+purchaseOrderNoDetailDO.getPurchaseRemAmount()+"小于入库数量"+amount+"请确认!");
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<StorageInDetailDO> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(StorageInDetailDO::getPurchaseOrderNoDetailId,purchaseOrderNoDetailDO.getId());
|
||||||
|
wrapper.eq(StorageInDetailDO::getDeleted,0);
|
||||||
|
List<StorageInDetailDO> storageInDetailDOS = storageInDetailMapper.selectList(wrapper);
|
||||||
|
if (ObjectUtil.isNotEmpty(storageInDetailDOS)){
|
||||||
|
BigDecimal StorageAmount = storageInDetailDOS.stream()
|
||||||
|
.filter(Objects::nonNull) // 过滤掉空对象
|
||||||
|
.map(StorageInDetailDO::getStorageAmount)
|
||||||
|
.filter(Objects::nonNull) // 过滤掉空值
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add); // 累加求和
|
||||||
|
BigDecimal sum = StorageAmount.add(amount);
|
||||||
|
if (sum.compareTo(purchaseOrderNoDetailDO.getBoomAmount())>0){
|
||||||
|
return CommonResult.error(400,"标准件名称"+purchaseOrderNoDetailDO.getBoomName()+"入库数量"+sum+"+本次入库数量"+amount+"大于需求数量"+purchaseOrderNoDetailDO.getBoomAmount()+"请确认!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StorageInDO storageInDO = new StorageInDO();
|
||||||
|
|
||||||
|
// 月度流水号
|
||||||
|
SerialNumberDO serialNumberDO = new SerialNumberDO();
|
||||||
|
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
|
||||||
|
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
|
||||||
|
storageInDO.setStorageNo(STOCK_IN.getCode(serialNumberDO.getSerialNumber().toString()));
|
||||||
|
storageInDO.setGoodsType(1);
|
||||||
|
storageInDO.setStatus(1);
|
||||||
|
storageInDO.setIsPrint("N");
|
||||||
|
storageInDO.setOrdDate(new Date());
|
||||||
|
storageInMapper.insert(storageInDO);
|
||||||
|
List<StorageInDetailDO> storageInDetailDOList = new ArrayList<>();
|
||||||
|
for (PurchaseOrderNoDetailDO orderNoDetailDO : list) {
|
||||||
|
StorageInDetailDO storageInDetailDO = new StorageInDetailDO();
|
||||||
|
storageInDetailDO.setStorageNoId(storageInDO.getId());
|
||||||
|
storageInDetailDO.setProjectSubCode(orderNoDetailDO.getProjectSubCode());
|
||||||
|
storageInDetailDO.setBoomDetailId(orderNoDetailDO.getBoomDetailId());
|
||||||
|
storageInDetailDO.setBoomName(orderNoDetailDO.getBoomName());
|
||||||
|
storageInDetailDO.setBoomSpec(orderNoDetailDO.getBoomSpec());
|
||||||
|
storageInDetailDO.setBoomUnit(orderNoDetailDO.getBoomUnit());
|
||||||
|
storageInDetailDO.setComposition(orderNoDetailDO.getComposition());
|
||||||
|
storageInDetailDO.setPurchaseAmount(orderNoDetailDO.getPurchaseAmount());
|
||||||
|
storageInDetailDO.setEstimatedPrice(orderNoDetailDO.getEstimatedPrice());
|
||||||
|
storageInDetailDO.setActualPrice(orderNoDetailDO.getActualPrice());
|
||||||
|
storageInDetailDO.setBoomAmount(orderNoDetailDO.getBoomAmount());
|
||||||
|
storageInDetailDO.setRequireTime(orderNoDetailDO.getRequireTime());
|
||||||
|
storageInDetailDO.setProjectMaterialPlanId(orderNoDetailDO.getProjectMaterialPlanId());
|
||||||
|
storageInDetailDO.setProjectMaterialPlanBoomId(orderNoDetailDO.getProjectMaterialPlanBoomId());
|
||||||
|
storageInDetailDO.setProjectPlanSubId(orderNoDetailDO.getProjectPlanSubId());
|
||||||
|
storageInDetailDO.setName(orderNoDetailDO.getName());
|
||||||
|
storageInDetailDO.setNameSim(orderNoDetailDO.getNameSim());
|
||||||
|
storageInDetailDO.setProjectId(orderNoDetailDO.getProjectId());
|
||||||
|
storageInDetailDO.setProjectPlanId(orderNoDetailDO.getProjectPlanId());
|
||||||
|
storageInDetailDO.setCustomerId(orderNoDetailDO.getCustomerId());
|
||||||
|
storageInDetailDO.setBrief(orderNoDetailDO.getBrief());
|
||||||
|
storageInDetailDO.setProjectName(orderNoDetailDO.getProjectName());
|
||||||
|
storageInDetailDO.setProjectNameSim(orderNoDetailDO.getProjectNameSim());
|
||||||
|
storageInDetailDO.setMaterialId(orderNoDetailDO.getMaterialId());
|
||||||
|
storageInDetailDO.setStorageAmount(orderNoDetailDO.getPurchaseRemAmounts());
|
||||||
|
PurchaseOrderNoDO purchaseOrderNoDO = purchaseOrderNoMapper.selectById(orderNoDetailDO.getPurchaseOrderId());
|
||||||
|
if (ObjectUtil.isNotEmpty(purchaseOrderNoDO)){
|
||||||
|
storageInDetailDO.setSupplierId(purchaseOrderNoDO.getSupplierId());
|
||||||
|
}
|
||||||
|
storageInDetailDO.setPurchaseOrderNoId(orderNoDetailDO.getPurchaseOrderId());
|
||||||
|
storageInDetailDO.setPurchaseOrderNoDetailId(orderNoDetailDO.getId());
|
||||||
|
storageInDetailDO.setAcarrDate(new Date());
|
||||||
|
if (orderNoDetailDO.getPurchaseRemAmount().compareTo(orderNoDetailDO.getPurchaseRemAmounts())==0){
|
||||||
|
orderNoDetailDO.setReceivingStatus(3);
|
||||||
|
}else {
|
||||||
|
orderNoDetailDO.setReceivingStatus(2);
|
||||||
|
}
|
||||||
|
orderNoDetailDO.setPurchaseRemAmount(orderNoDetailDO.getPurchaseRemAmount().subtract(orderNoDetailDO.getPurchaseRemAmounts()));
|
||||||
|
purchaseOrderNoDetailMapper.updateById(orderNoDetailDO);
|
||||||
|
storageInDetailDOList.add(storageInDetailDO);
|
||||||
|
}
|
||||||
|
storageInDetailMapper.insertBatch(storageInDetailDOList);
|
||||||
|
// 回写序列记录
|
||||||
|
serialNumberService.updateSerialNumber(serialNumberDO);
|
||||||
|
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> warehousing(Long id) {
|
||||||
|
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = purchaseOrderNoDetailMapper.selectById(id);
|
||||||
|
LambdaQueryWrapper<StorageInDetailDO> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(StorageInDetailDO::getPurchaseOrderNoDetailId,id);
|
||||||
|
wrapper.eq(StorageInDetailDO::getDeleted,0);
|
||||||
|
List<StorageInDetailDO> storageInDetailDOS = storageInDetailMapper.selectList(wrapper);
|
||||||
|
BigDecimal sum=BigDecimal.ZERO;
|
||||||
|
if (ObjectUtil.isNotEmpty(storageInDetailDOS)){
|
||||||
|
sum = storageInDetailDOS.stream()
|
||||||
|
.filter(Objects::nonNull) // 过滤掉空对象
|
||||||
|
.map(StorageInDetailDO::getStorageAmount)
|
||||||
|
.filter(Objects::nonNull) // 过滤掉空值
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add); // 累加求和
|
||||||
|
}
|
||||||
|
if (sum.compareTo(purchaseOrderNoDetailDO.getBoomAmount())!=0){
|
||||||
|
return CommonResult.error(400,"该入库数量"+sum+"!=需求数量"+purchaseOrderNoDetailDO.getBoomAmount()+"请确认!");
|
||||||
|
}
|
||||||
|
purchaseOrderNoDetailDO.setReceivingStatus(3);
|
||||||
|
purchaseOrderNoDetailDO.setPurchaseRemAmount(BigDecimal.ZERO);
|
||||||
|
purchaseOrderNoDetailMapper.updateById(purchaseOrderNoDetailDO);
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -153,13 +153,14 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
.filter(o -> o.getId() != null)
|
.filter(o -> o.getId() != null)
|
||||||
.map(TaskDispatchDetailDO::getId)
|
.map(TaskDispatchDetailDO::getId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
if (ObjectUtil.isNotEmpty(idList)){
|
||||||
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.in(TaskDispatchDetailDO::getId, idList);
|
wrapper.in(TaskDispatchDetailDO::getId, idList);
|
||||||
wrapper.eq(TaskDispatchDetailDO::getDeleted, 0);
|
wrapper.eq(TaskDispatchDetailDO::getDeleted, 0);
|
||||||
List<TaskDispatchDetailDO> detailDOS = taskDispatchDetailMapper.selectList(wrapper);
|
List<TaskDispatchDetailDO> detailDOS = taskDispatchDetailMapper.selectList(wrapper);
|
||||||
|
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(updateObj.getId());
|
||||||
for (TaskDispatchDetailDO dispatchDetailDO : detailDOS) {
|
for (TaskDispatchDetailDO dispatchDetailDO : detailDOS) {
|
||||||
if (dispatchDetailDO.getPlanStatus()==1){
|
if (dispatchDetailDO.getPlanStatus()==1){
|
||||||
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(dispatchDetailDO.getDispatchId());
|
|
||||||
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(taskDispatchDO.getBomDetailId());
|
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(taskDispatchDO.getBomDetailId());
|
||||||
ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId());
|
ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId());
|
||||||
if (ObjectUtil.isNotEmpty(bomDetailDO)&&ObjectUtil.isNotEmpty(procedureDO)){
|
if (ObjectUtil.isNotEmpty(bomDetailDO)&&ObjectUtil.isNotEmpty(procedureDO)){
|
||||||
@ -168,6 +169,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 明细工序状态更新
|
// 明细工序状态更新
|
||||||
if(operateTypeEnum == OperateTypeEnum.SUBMIT){
|
if(operateTypeEnum == OperateTypeEnum.SUBMIT){
|
||||||
|
@ -71,10 +71,16 @@
|
|||||||
</where>
|
</where>
|
||||||
order by t.mat_code
|
order by t.mat_code
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectNowByMatPnId" resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
|
<select id="selectNowByMatPnId" resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
|
||||||
select * from v_storage_material_now where id=#{matId} and pn_id=#{pnId} order by mat_code
|
select * from v_storage_material_now where id=#{matId} and pn_id=#{pnId} order by mat_code
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectAllByMatNames" resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
|
||||||
|
select mat_name as matName,IFNULL(SUM(storage_ok_qty), 0) AS storage_ok_qty from v_storage_material_now where mat_name in
|
||||||
|
<foreach collection="matNames" open="(" close=")" separator="," item="name">
|
||||||
|
#{name}
|
||||||
|
</foreach>
|
||||||
|
group by mat_name
|
||||||
|
</select>
|
||||||
<select id="selectMaterialWithNow"
|
<select id="selectMaterialWithNow"
|
||||||
parameterType="com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO"
|
parameterType="com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO"
|
||||||
resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
|
resultType="com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO">
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
"private": false,
|
"private": false,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"i": "pnpm install",
|
"i": "pnpm install",
|
||||||
"dev": "vite --mode dev",
|
"dev": "vite --mode base",
|
||||||
"front": "vite --mode front",
|
"front": "vite --mode front",
|
||||||
"ts:check": "vue-tsc --noEmit",
|
"ts:check": "vue-tsc --noEmit",
|
||||||
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro",
|
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro",
|
||||||
|
@ -95,12 +95,7 @@ export const delMaterial = async (id: number) => {
|
|||||||
return await request.delete({ url: `/heli/material-plan/delMaterial?id=` + id })
|
return await request.delete({ url: `/heli/material-plan/delMaterial?id=` + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
// // 查询零件采购分页
|
// 查询零件采购分页
|
||||||
// export const getPartPurchasePages = async (params) => {
|
export const getPartPurchasePages = async (params) => {
|
||||||
// return await request.post({ url: `/heli/material-plan/getPartPurchasePages`, params })
|
return await request.get({ url: `/heli/material-plan/getPartPurchasePages`, params })
|
||||||
// }
|
|
||||||
|
|
||||||
// 更新采购单主驳回
|
|
||||||
export const getPartPurchasePages = async () => {
|
|
||||||
return await request.get({ url: `/heli/material-plan/getPartPurchasePage` })
|
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ import request from '@/config/axios'
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
export interface PartPurchaseOrderVO {
|
export interface PartVO {
|
||||||
id: number
|
id: number
|
||||||
projectMaterialPlanNo: string
|
projectMaterialPlanNo: string
|
||||||
projectId: number
|
projectId: number
|
||||||
@ -45,3 +45,13 @@ export const updatePurchaseOrderMakeNo = async (params) => {
|
|||||||
return await request.put({ url: `/heli/purchase-order-make/updatePartCheckNo`, params })
|
return await request.put({ url: `/heli/purchase-order-make/updatePartCheckNo`, params })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const reject = async (params) => {
|
||||||
|
return await request.put({ url: `/heli/purchase-order-make/reject`, params })
|
||||||
|
}
|
||||||
|
export const approval = async (id: number) => {
|
||||||
|
return await request.put({ url: `/heli/purchase-order-make/approval?id=` + id })
|
||||||
|
}
|
||||||
|
// 获取零件采购订单生成分页
|
||||||
|
export const getDetail = async (params) => {
|
||||||
|
return await request.get({ url: `/heli/purchase-order-make/getDetail`, params })
|
||||||
|
}
|
||||||
|
@ -73,3 +73,11 @@ export const verification = async (data) => {
|
|||||||
export const receiveGoods= async (data) => {
|
export const receiveGoods= async (data) => {
|
||||||
return await request.post({ url: `/heli/purchase-order-no-detail/receiveGoods`, data })
|
return await request.post({ url: `/heli/purchase-order-no-detail/receiveGoods`, data })
|
||||||
}
|
}
|
||||||
|
// 查询采购订单明细分页
|
||||||
|
export const received = async (params) => {
|
||||||
|
return await request.get({ url: `/heli/purchase-order-no-detail/received`, params })
|
||||||
|
}
|
||||||
|
// 导出采购订单明细 Excel
|
||||||
|
export const exportReceived = async (params) => {
|
||||||
|
return await request.download({ url: `/heli/purchase-order-no-detail/exportReceived`, params })
|
||||||
|
}
|
||||||
|
@ -48,3 +48,11 @@ export const exportStorageIn = async (params) => {
|
|||||||
export const isPrint = async (id: number) => {
|
export const isPrint = async (id: number) => {
|
||||||
return await request.get({ url: `/heli/storage-in/isPrint?id=` + id })
|
return await request.get({ url: `/heli/storage-in/isPrint?id=` + id })
|
||||||
}
|
}
|
||||||
|
// 新增入库单
|
||||||
|
export const standardPartsReceived = async (data: StorageInVO) => {
|
||||||
|
return await request.post({ url: `/heli/storage-in/standardPartsReceived`, data })
|
||||||
|
}
|
||||||
|
// 查询入库单详情
|
||||||
|
export const warehousing = async (id: number) => {
|
||||||
|
return await request.get({ url: `/heli/storage-in/warehousing?id=` + id })
|
||||||
|
}
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<el-card class="hl-card-info">
|
<el-card class="hl-card-info">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">零件明细</span>
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">零件明细</span>
|
||||||
<el-button style="margin-left: 18px" @click="singleSubmissions()" type="success" size="large">送审</el-button>
|
<el-button style="margin-left: 18px" @click="singleSubmissions()" type="success" size="large">送 审</el-button>
|
||||||
</template>
|
</template>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col>
|
<el-col>
|
||||||
@ -69,13 +69,75 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="客户简称" align="center" prop="brief" min-width="180" />
|
<el-table-column label="客户简称" align="center" prop="customerBriefName" min-width="180" />
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||||
|
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||||
|
<el-table-column min-width="200px" align="center">
|
||||||
|
<template #header>泡沫</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.isFoam`" class="mb-0px!">
|
||||||
|
<el-checkbox-group v-model="row.isFoam">
|
||||||
|
<el-checkbox v-for="dict in ['是', '否']" :key="dict" :label="dict">
|
||||||
|
{{ dict }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="零件名称" align="center" prop="matName" min-width="180" />
|
<el-table-column label="零件名称" align="center" prop="matName" min-width="180" />
|
||||||
<el-table-column label="材质" align="center" prop="compositionName" min-width="120" />
|
<el-table-column label="材质" align="center" prop="compositionName" min-width="120" />
|
||||||
<el-table-column label="图号" align="center" prop="blueprintNo" min-width="120" />
|
<el-table-column label="图号" align="center" prop="blueprintNo" min-width="120" />
|
||||||
<el-table-column label="需求数量" align="center" prop="boomAmount" min-width="120" />
|
<el-table-column label="需求数量" align="center" prop="boomAmount" min-width="120" />
|
||||||
<el-table-column label="单位" align="center" prop="unit" min-width="120" />
|
<el-table-column label="单位" align="center" prop="unit" min-width="120" />
|
||||||
|
<el-table-column min-width="200px" align="center">
|
||||||
|
<template #header>采购数量</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.purchaseAmount`" class="mb-0px!" >
|
||||||
|
<el-input-number v-model="row.purchaseAmount" type="number" :precision="0" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column min-width="200px" align="center" >
|
||||||
|
<template #header><span class="hl-table_header">*</span>供应商</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.supplierId`" class="mb-0px!" >
|
||||||
|
<SupplierSelect v-model="row.supplierId" class="!w-265px" clearable @update:newValue="handleSelectedUser($index, $event)"/>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column min-width="200px" align="center">
|
||||||
|
<template #header>预估总价</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.estimatedPrice`" class="mb-0px!" >
|
||||||
|
<el-input-number v-model="row.estimatedPrice" type="number" :precision="2" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column min-width="200px" align="center" >
|
||||||
|
<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 class="!w-265px" v-model="row.arriveTime" type="date" value-format="x" placeholder="预计到货日期" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column min-width="200px" align="center" >
|
||||||
|
<template #header>技术要求</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.description`" class="mb-0px!" >
|
||||||
|
<el-input class="!w-265px" v-model="row.description" placeholder="技术要求" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column min-width="200px" align="center">
|
||||||
|
<template #header>理论重量(吨)</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.theWeight`" class="mb-0px!" >
|
||||||
|
<el-input-number v-model="row.theWeight" type="number" :precision="3" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="责任人" align="center" prop="duEmpName" min-width="120" />
|
<el-table-column label="责任人" align="center" prop="duEmpName" min-width="120" />
|
||||||
<el-table-column label="状态" align="center" prop="mplanStatus" min-width="120" />
|
<el-table-column label="状态" align="center" prop="mplanStatus" min-width="120" />
|
||||||
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="120" />
|
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="120" />
|
||||||
@ -102,6 +164,7 @@ import {ElTable} from "element-plus";
|
|||||||
import {useUserStore} from "@/store/modules/user";
|
import {useUserStore} from "@/store/modules/user";
|
||||||
import {dateFormatter1} from "@/utils/formatTime";
|
import {dateFormatter1} from "@/utils/formatTime";
|
||||||
import {getPartPurchasePages} from "@/api/heli/materialplan";
|
import {getPartPurchasePages} from "@/api/heli/materialplan";
|
||||||
|
import SupplierSelect from "@/views/heli/hlvuestyle/supplierSelect.vue";
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
|
|
||||||
defineOptions({ name: 'standard' })
|
defineOptions({ name: 'standard' })
|
||||||
@ -144,10 +207,9 @@ const exportLoading = ref(false) // 导出的加载中
|
|||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
// const data = await MaterialPlanApi.getPartPurchasePages(queryParams)
|
const data = await MaterialPlanApi.getPartPurchasePages(queryParams)
|
||||||
// list.value = data.list
|
list.value = data.list
|
||||||
// total.value = data.total
|
total.value = data.total
|
||||||
await MaterialPlanApi.getPartPurchasePages()
|
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
@ -177,9 +239,14 @@ const handleQuery = () => {
|
|||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
// //接收供应商传递的数据
|
||||||
|
// const handleSelectedSupplier = (newValue: any) => {
|
||||||
|
// formData.value.supplierId = newValue?.id
|
||||||
|
// }
|
||||||
const handleSelectedUser = (currentIndex, newValue: any) => {
|
const handleSelectedUser = (currentIndex, newValue: any) => {
|
||||||
list.value[currentIndex].duEmpId = newValue?.id
|
list.value[currentIndex].supplierId = newValue?.id
|
||||||
}
|
}
|
||||||
|
|
||||||
const singleSubmission= (val) =>{
|
const singleSubmission= (val) =>{
|
||||||
multipleTable.value=[]
|
multipleTable.value=[]
|
||||||
multipleTable.value.push(val)
|
multipleTable.value.push(val)
|
||||||
@ -204,6 +271,26 @@ const submitForm = async () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
if (list[i].purchaseAmount === null || list[i].purchaseAmount === 0) {
|
||||||
|
message.error("采购数量为0或空");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (list[i].supplierId === null) {
|
||||||
|
message.error("供应商为空");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (list[i].arriveTime === null) {
|
||||||
|
message.error("预计到货日期为空");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (list[i].estimatedPrice === null) {
|
||||||
|
message.error("预估总价为空");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// 2. 检查供应商一致性
|
// 2. 检查供应商一致性
|
||||||
const firstSupplierId = list[0].supplierId;
|
const firstSupplierId = list[0].supplierId;
|
||||||
if (list.some(item => item.supplierId !== firstSupplierId)) {
|
if (list.some(item => item.supplierId !== firstSupplierId)) {
|
||||||
|
@ -135,13 +135,27 @@ const updateParams = reactive({
|
|||||||
reason: undefined
|
reason: undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const approve = async () => {
|
const approve = async () => {
|
||||||
|
const checkParams = await PartPurchaseOrderApi.getPurchaseOrderMake(query.id)
|
||||||
|
if (checkParams.status != 1){
|
||||||
|
message.warning("该单据状态非待审核,请刷新界面!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
await PartPurchaseOrderApi.updatePurchaseOrderMake(formData.value.id)
|
await PartPurchaseOrderApi.updatePurchaseOrderMake(formData.value.id)
|
||||||
message.success("提交成功");
|
message.success("提交成功");
|
||||||
getList();
|
getList();
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleReject = async () => {
|
const handleReject = async () => {
|
||||||
|
const checkParams = await PartPurchaseOrderApi.getPurchaseOrderMake(query.id)
|
||||||
|
if (checkParams.status != 1){
|
||||||
|
message.warning("该单据状态非待审核,请刷新界面!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { value, action } = await ElMessageBox.prompt('请输入驳回原因', '提示', {
|
const { value, action } = await ElMessageBox.prompt('请输入驳回原因', '提示', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
|
@ -0,0 +1,189 @@
|
|||||||
|
<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="purchaseNo">
|
||||||
|
<el-input class="!w-300px" placeholder="系统自动生成" v-model="formData.purchaseNo" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</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.matBoomDOList" class="hl-table" v-loading="loading">
|
||||||
|
<el-table-column type="index" label="序号" fixed align="center" min-width="60" />
|
||||||
|
<el-table-column prop="projectName" min-width="200" label="项目名称" align="center"/>
|
||||||
|
<el-table-column prop="projectSubCode" min-width="200" label="子项目编码" align="center"/>
|
||||||
|
<el-table-column prop="boomName" min-width="200" label="物料名称" align="center"/>
|
||||||
|
<el-table-column prop="boomSpec" min-width="120" label="规格型号" align="center"/>
|
||||||
|
<el-table-column prop="boomAmount" min-width="100" label="需求数量" align="center"/>
|
||||||
|
<el-table-column prop="purchaseAmount" min-width="100" label="采购数量" align="center"/>
|
||||||
|
<el-table-column prop="requireTime" min-width="200" label="需要完成日期" align="center" :formatter="dateFormatter1"/>
|
||||||
|
<el-table-column prop="arriveTime" min-width="200" label="预计到货日期" align="center" :formatter="dateFormatter1"/>
|
||||||
|
<el-table-column prop="supplierName" min-width="100" label="供应商" align="center"/>
|
||||||
|
<el-table-column prop="description" min-width="200" label="备注" align="center"/>
|
||||||
|
<el-table-column prop="estimatedPrice" min-width="100" label="预估总价" align="center"/>
|
||||||
|
</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">
|
||||||
|
<template v-if="formData.type === 'check'">
|
||||||
|
<el-button @click="approve" type="primary" v-if="formData.status == 1"
|
||||||
|
size="large">批 准</el-button>
|
||||||
|
<el-button @click="reject" v-if="formData.status == 1" size="large" type="danger">驳 回</el-button>
|
||||||
|
<el-button @click="cancel" size="large">取 消</el-button>
|
||||||
|
</template>
|
||||||
|
<template v-if="formData.type === 'detail'">
|
||||||
|
<el-button @click="cancel" size="large">取 消</el-button>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<!-- 表单弹窗:物料列表 -->
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
import * as UserApi from '@/api/system/user'
|
||||||
|
|
||||||
|
import { dateFormatter1} from '@/utils/formatTime'
|
||||||
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||||
|
|
||||||
|
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
|
||||||
|
import { ElMessageBox } from 'element-plus'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
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) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
|
const formData = ref({
|
||||||
|
id: undefined,
|
||||||
|
purchaseNo: undefined,
|
||||||
|
projectId: undefined,
|
||||||
|
projectPlanId: undefined,
|
||||||
|
projectPlanNo: undefined,
|
||||||
|
projectCode: undefined,
|
||||||
|
auditor: undefined,
|
||||||
|
createTime: new Date(),
|
||||||
|
status: undefined,
|
||||||
|
description: undefined,
|
||||||
|
boomItemDOList: [],
|
||||||
|
boomItemRemoveList: [],
|
||||||
|
matBoomDOList: [],
|
||||||
|
matItemRemoveList: [],
|
||||||
|
attachments: [],
|
||||||
|
type: undefined,
|
||||||
|
})
|
||||||
|
|
||||||
|
const formRef = ref() // 表单 Ref
|
||||||
|
const subFormRef = ref() // 表单 Ref
|
||||||
|
const loading = ref(true) // 列表的加载中
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const subBoomFormLoading = ref(false)
|
||||||
|
const subBoomFormRef = ref()
|
||||||
|
const updateParams = reactive({
|
||||||
|
id: query.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
const approve = async () => {
|
||||||
|
await PartPurchaseOrderApi.approval(formData.value.id)
|
||||||
|
message.success("批准成功");
|
||||||
|
formData.value = await PartPurchaseOrderApi.getPurchaseOrderMake(query.id)
|
||||||
|
formData.value.type = query.type
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleReject = async () => {
|
||||||
|
try {
|
||||||
|
const { value, action } = await ElMessageBox.prompt('请输入驳回原因', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
inputPattern: /.+/, // 至少输入一个字符
|
||||||
|
inputErrorMessage: '内容不能为空'
|
||||||
|
})
|
||||||
|
|
||||||
|
if (action === 'confirm') {
|
||||||
|
reject(value) // 将输入内容传入 reject 方法
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
// 用户点击取消或输入不合法时会进入这里
|
||||||
|
console.log('操作取消或输入无效')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 假设这是你要调用的 reject 方法
|
||||||
|
const reject = async() => {
|
||||||
|
// updateParams.reason = reason
|
||||||
|
// 这里可以执行提交驳回逻辑
|
||||||
|
await PartPurchaseOrderApi.reject(updateParams)
|
||||||
|
message.success("驳回成功");
|
||||||
|
router.push({ path: '/purchase/PurchaseOrderMake'});
|
||||||
|
tagsViewStore.delVisitedView(router.currentRoute.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
const cancel = async () => {
|
||||||
|
router.push({ path: '/purchase/PurchaseOrderMake'});
|
||||||
|
}
|
||||||
|
|
||||||
|
const userList = ref<UserApi.UserVO[]>([]) // 用户列表
|
||||||
|
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
purchaseOrderId: query.id
|
||||||
|
})
|
||||||
|
// 页面数据加载初始化
|
||||||
|
onMounted(async () => {
|
||||||
|
// 获取物料需求计划信息
|
||||||
|
formData.value = await PartPurchaseOrderApi.getPurchaseOrderMake(query.id)
|
||||||
|
formData.value.type = query.type
|
||||||
|
getList();
|
||||||
|
})
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const data = await PartPurchaseOrderApi.getDetail(queryParams)
|
||||||
|
formData.value.matBoomDOList = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
@ -0,0 +1,197 @@
|
|||||||
|
<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="130px">
|
||||||
|
<el-form-item label="采购单号" prop="purchaseNo">
|
||||||
|
<el-input v-model="queryParams.purchaseNo" 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"
|
||||||
|
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="supplierName">
|
||||||
|
<el-input v-model="queryParams.supplierName" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- <el-form-item label="采购单类型" prop="goodType">-->
|
||||||
|
<!-- <el-select v-model="queryParams.goodsType" placeholder="请选择采购单类型" clearable class="!w-240px">-->
|
||||||
|
<!-- <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PART_PURCHASE_ORDER_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />-->
|
||||||
|
<!-- </el-select>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<el-form-item label="单据状态" prop="documentStatus">
|
||||||
|
<el-select v-model="queryParams.status" placeholder="请选择单据状态" clearable class="!w-240px">
|
||||||
|
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_DOCUMENT_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item style="margin-left:15px">
|
||||||
|
<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 v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||||
|
<el-table-column label="序号" type="index" align="center" fixed min-width="70px" />
|
||||||
|
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="180" fixed>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button text type="primary" @click="openForm('detail', scope.row.id)">
|
||||||
|
{{ scope.row.purchaseNo }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="采购单类型" align="center" prop="goodsType" min-width="180px" >
|
||||||
|
<template #default="scope">
|
||||||
|
{{
|
||||||
|
getIntDictOptions(DICT_TYPE.HELI_PART_PURCHASE_ORDER_TYPE).find(
|
||||||
|
(dict) => dict.value === scope.row.goodsType
|
||||||
|
)?.label || '未知状态'
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="客户简码" align="center" prop="brief" min-width="180px" />
|
||||||
|
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180px" />
|
||||||
|
<el-table-column label="项目简码" align="center" prop="projectNameSim" min-width="180px" />
|
||||||
|
<el-table-column label="单据状态" align="center" prop="status" min-width="180px" >
|
||||||
|
<template #default="scope">
|
||||||
|
{{
|
||||||
|
getIntDictOptions(DICT_TYPE.HELI_DOCUMENT_STATUS).find(
|
||||||
|
(dict) => dict.value === scope.row.status
|
||||||
|
)?.label || '未知状态'
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" fixed="right" min-width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.status === 1"
|
||||||
|
link
|
||||||
|
type="primary"
|
||||||
|
@click="openForm('check', scope.row.id)"
|
||||||
|
>
|
||||||
|
去审核
|
||||||
|
</el-button>
|
||||||
|
<el-button link type="primary" @click="openForm('detail', scope.row.id)">
|
||||||
|
查看详情
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页 -->
|
||||||
|
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||||
|
@pagination="getList" />
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {DICT_TYPE, getIntDictOptions} from '@/utils/dict'
|
||||||
|
import * as MaterialPlanApi from '@/api/heli/materialplan'
|
||||||
|
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
|
||||||
|
|
||||||
|
|
||||||
|
defineOptions({ name: 'MaterialPlan' })
|
||||||
|
const router = useRouter()
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
|
const loading = ref(true) // 列表的加载中
|
||||||
|
const list = ref([]) // 列表的数据
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
id: undefined,
|
||||||
|
purchaseNo: undefined,
|
||||||
|
projectId: undefined,
|
||||||
|
projectPlanId: undefined,
|
||||||
|
submitUserId: undefined,
|
||||||
|
projectName: undefined,
|
||||||
|
projectSubName: undefined,
|
||||||
|
supplierName:undefined,
|
||||||
|
submitTime: [],
|
||||||
|
auditor: undefined,
|
||||||
|
auditTime: [],
|
||||||
|
goodsType: 1,
|
||||||
|
description: undefined,
|
||||||
|
createTime: [],
|
||||||
|
matType:undefined,
|
||||||
|
status:1
|
||||||
|
})
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const data = await PartPurchaseOrderApi.getPartCheckPage(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value.resetFields()
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 添加/修改操作 */
|
||||||
|
|
||||||
|
const openForm = (type: string, id?: number) => {
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case 'create':
|
||||||
|
router.push({ path: '/purchase/materialplanadd', query: { id: id } })
|
||||||
|
break;
|
||||||
|
case 'update':
|
||||||
|
router.push({ path: '/purchase/materialplanedit', query: { id: id } })
|
||||||
|
break;
|
||||||
|
case 'detail':
|
||||||
|
router.push({ path: '/purchase/PurchaseOrderMakeDetail', query: { id: id , type: type} })
|
||||||
|
break;
|
||||||
|
case 'check':
|
||||||
|
router.push({ path: '/purchase/PurchaseOrderMakeDetail', query: { id: id , type: type} })
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 初始化 **/
|
||||||
|
onMounted(async () => {
|
||||||
|
//用户列表数据
|
||||||
|
// userInit.value = await UserApi.getSimpleUserList()
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
onActivated(() => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
</script>
|
@ -0,0 +1,270 @@
|
|||||||
|
<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="receivingStatus">
|
||||||
|
<el-select v-model="queryParams.receivingStatus" placeholder="下拉选择" clearable class="!w-240px">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS)" :key="dict.value"
|
||||||
|
:label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item style="margin-left:50px">
|
||||||
|
<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="handleExport"
|
||||||
|
: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="standardPartsReceived" type="success" size="large">收货</el-button>
|
||||||
|
<el-button style="margin-left: 20px" type="primary" @click="jump" 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
|
||||||
|
v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table" ref="multipleTable" @selection-change="handleSelectionChange"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
|
||||||
|
<el-table-column fixed label="序号" type="index" align="center" width="60" />
|
||||||
|
<!-- <el-table-column label="id" align="center" min-width="180" prop="id" />-->
|
||||||
|
|
||||||
|
<el-table-column label="子项目编码" align="center" min-width="180" prop="projectSubCode" />
|
||||||
|
<el-table-column label="物料编码" align="center" min-width="120" prop="matCode" />
|
||||||
|
<el-table-column label="标准件名称" align="center" min-width="150" prop="boomName" />
|
||||||
|
<el-table-column label="规格型号" align="center" min-width="120" prop="boomSpec" />
|
||||||
|
<el-table-column label="需求数量" align="center" min-width="100" prop="boomAmount" />
|
||||||
|
<el-table-column label="采购数量" align="center" min-width="100" prop="purchaseAmount" />
|
||||||
|
<el-table-column label="剩余数量" align="center" min-width="100" prop="purchaseRemAmount" />
|
||||||
|
<el-table-column prop="purchaseRemAmounts" min-width="180" align="center">
|
||||||
|
<template #header><span class="hl-table_header">*</span>入库数量</template>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-form-item :prop="`${scope.$index}.purchaseRemAmounts`" class="mb-0px!">
|
||||||
|
<el-input-number style="width: 100%" v-model="scope.row.purchaseRemAmounts" placeholder="入库数量" :min="0" :precision="2" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column min-width="200px" align="center" >
|
||||||
|
<template #header>到货日期</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.boomArriveDates`" class="mb-0px!" >
|
||||||
|
<el-date-picker class="!w-265px" v-model="row.boomArriveDates" type="date" value-format="x" placeholder="到货日期" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<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" min-width="180" prop="supplierName" />
|
||||||
|
<el-table-column label="价格" align="center" min-width="100" prop="estimatedPrice" />
|
||||||
|
<el-table-column label="订单状态" align="center" prop="receivingStatus" min-width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.receivingStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="采购订单号" align="center" min-width="180" prop="purchaseNo" />
|
||||||
|
|
||||||
|
<el-table-column label="操作" align="center" fixed="right" min-width="110">
|
||||||
|
<template #header>
|
||||||
|
<span style="margin-right: 30%">操作</span>
|
||||||
|
</template>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="warehousing(scope.row.id)" v-if="scope.row.purchaseAmount>scope.row.boomAmount">
|
||||||
|
采购入库
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</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>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
import download from '@/utils/download'
|
||||||
|
import * as PurchaseOrderApi from '@/api/heli/purchaseorder'
|
||||||
|
import * as PurchaseOrderNoDetailApi from '@/api/heli/purchaseordernodetail'
|
||||||
|
import * as StorageinApi from '@/api/heli/storagein'
|
||||||
|
import { ElTable } from 'element-plus'
|
||||||
|
import {useUserStore} from "@/store/modules/user";
|
||||||
|
import {ref} from "vue";
|
||||||
|
import {dateFormatter2} from "@/utils/formatTime";
|
||||||
|
import {PurchaseOrderNoDetailVO} from "@/api/heli/purchaseordernodetail";
|
||||||
|
import * as ProcessBomApi from "@/api/heli/processbom";
|
||||||
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
|
|
||||||
|
defineOptions({ name: 'PurchaseOrder' })
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
const router = useRouter()
|
||||||
|
const loading = ref(true) // 列表的加载中
|
||||||
|
const list = ref([]) // 列表的数据
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
id: undefined,
|
||||||
|
ids: undefined,
|
||||||
|
purchaseNo: undefined,
|
||||||
|
supplierId: undefined,
|
||||||
|
contractNo: undefined,
|
||||||
|
purchaseType: undefined,
|
||||||
|
projectMaterialPlanId: undefined,
|
||||||
|
goodsType: 1,
|
||||||
|
currencyType: undefined,
|
||||||
|
taxRatio: undefined,
|
||||||
|
estimatedPrice: undefined,
|
||||||
|
actualPrice: undefined,
|
||||||
|
status: undefined,
|
||||||
|
submitUserId: undefined,
|
||||||
|
submitTime: [],
|
||||||
|
auditor: undefined,
|
||||||
|
auditTime: [],
|
||||||
|
description: undefined,
|
||||||
|
creator: undefined,
|
||||||
|
createTime: undefined,
|
||||||
|
receivingStatus:undefined,
|
||||||
|
projectName:undefined,
|
||||||
|
projectSubName:undefined,
|
||||||
|
supplierName:undefined,
|
||||||
|
boomName:undefined,
|
||||||
|
projectCode:undefined
|
||||||
|
})
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
const multipleTable = ref<InstanceType<typeof ElTable>>()
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
queryParams.ids = undefined
|
||||||
|
const data = await PurchaseOrderNoDetailApi.received(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const handleSelectionChange = (val) => {
|
||||||
|
multipleTable.value=val
|
||||||
|
|
||||||
|
}
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
const jump = async () => {
|
||||||
|
router.push({ path: '/inventory/storagein' })
|
||||||
|
}
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value.resetFields()
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
const multipleSelection: any = ref([])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const warehousing = async (id) => {
|
||||||
|
await StorageinApi.warehousing(id)
|
||||||
|
message.success("采购入库成功")
|
||||||
|
await getList()
|
||||||
|
}
|
||||||
|
const standardPartsReceived = async () => {
|
||||||
|
const list = multipleTable.value|| []; // 安全获取数据
|
||||||
|
|
||||||
|
// 1. 检查空数据
|
||||||
|
if (!list || list.length==null) {
|
||||||
|
message.error("提交明细不能为空,请确认");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
if (list[i].purchaseRemAmounts==null||list[i].purchaseRemAmounts==0){
|
||||||
|
message.error("标准件"+list[i].boomName+"入库数量为空或数量为0,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await StorageinApi.standardPartsReceived(list)
|
||||||
|
formLoading.value = true
|
||||||
|
message.success("收货成功")
|
||||||
|
// 发送操作成功的事件
|
||||||
|
getList()
|
||||||
|
emit('success')
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = async () => {
|
||||||
|
try {
|
||||||
|
// 导出的二次确认
|
||||||
|
await message.exportConfirm()
|
||||||
|
// 发起导出
|
||||||
|
exportLoading.value = true
|
||||||
|
const data = await PurchaseOrderNoDetailApi.exportReceived(queryParams)
|
||||||
|
download.excel(data, '标准件收货.xlsx')
|
||||||
|
} catch {
|
||||||
|
} finally {
|
||||||
|
exportLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** 初始化 **/
|
||||||
|
onMounted( () => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
</script>
|
@ -24,6 +24,7 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
|
<el-row>
|
||||||
<el-form-item label="入库日期" prop="ordDate">
|
<el-form-item label="入库日期" prop="ordDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.ordDate"
|
v-model="formData.ordDate"
|
||||||
@ -33,6 +34,7 @@
|
|||||||
disabled
|
disabled
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-row>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -91,7 +91,6 @@ const message = useMessage() // 消息弹窗
|
|||||||
const { query } = useRoute()
|
const { query } = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const tagsViewStore = useTagsViewStore()
|
const tagsViewStore = useTagsViewStore()
|
||||||
|
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
@ -126,7 +125,7 @@ const subBoomFormRef = ref()
|
|||||||
|
|
||||||
|
|
||||||
const closeForm = async () => {
|
const closeForm = async () => {
|
||||||
router.push({ path: '/purchase/management' })
|
router.push({ path: '/inventory/supplementManagement' ,query: { ...query }})
|
||||||
tagsViewStore.delVisitedView(router.currentRoute.value)
|
tagsViewStore.delVisitedView(router.currentRoute.value)
|
||||||
}
|
}
|
||||||
const userList = ref<UserApi.UserVO[]>([]) // 用户列表
|
const userList = ref<UserApi.UserVO[]>([]) // 用户列表
|
||||||
|
@ -89,7 +89,7 @@ import * as UserApi from '@/api/system/user'
|
|||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
|
|
||||||
defineOptions({ name: 'MaterialPlan' })
|
defineOptions({ name: 'supplementManagement' })
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
@ -156,7 +156,6 @@ const openForm = (type: string, id?: number) => {
|
|||||||
router.push({ path: '/purchase/materialplanedit', query: { id: id } })
|
router.push({ path: '/purchase/materialplanedit', query: { id: id } })
|
||||||
break;
|
break;
|
||||||
case 'detail':
|
case 'detail':
|
||||||
console.log("0000")
|
|
||||||
router.push({ path: '/inventory/supplemanagementdetail', query: { id: id } })
|
router.push({ path: '/inventory/supplemanagementdetail', query: { id: id } })
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -189,9 +188,12 @@ const userInit = ref()
|
|||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
userInit.value = await UserApi.getSimpleUserList()
|
userInit.value = await UserApi.getSimpleUserList()
|
||||||
|
|
||||||
//用户列表数据
|
//用户列表数据
|
||||||
setDefaultDate()
|
setDefaultDate()
|
||||||
getList()
|
getList()
|
||||||
})
|
})
|
||||||
|
onActivated(() => {
|
||||||
|
console.log(11)
|
||||||
|
getList()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -1514,7 +1514,6 @@ const onAddItem = () => {
|
|||||||
}else{
|
}else{
|
||||||
if(formData.value.taskDispatchDetails != null && formData.value.taskDispatchDetails.length > 0){
|
if(formData.value.taskDispatchDetails != null && formData.value.taskDispatchDetails.length > 0){
|
||||||
var it = formData.value.taskDispatchDetails [0]
|
var it = formData.value.taskDispatchDetails [0]
|
||||||
console.log(it)
|
|
||||||
if(it.startTime != null){
|
if(it.startTime != null){
|
||||||
row.startTime = it.startTime
|
row.startTime = it.startTime
|
||||||
}
|
}
|
||||||
@ -1545,6 +1544,17 @@ const onAddItem = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
if(formData.value.taskDispatchDetails != null && formData.value.taskDispatchDetails.length > 0){
|
||||||
|
for(var i = 0 ; i < formData.value.taskDispatchDetails.length ; i ++ ){
|
||||||
|
var item = formData.value.taskDispatchDetails[i];
|
||||||
|
for(var j = 0 ; j < list.length ; j ++ ){
|
||||||
|
var item1 = list[j];
|
||||||
|
if(item.procedureId == item1.procedureId){
|
||||||
|
item1.dispatchType = item.dispatchType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
formData.value.taskDispatchDetails = list;
|
formData.value.taskDispatchDetails = list;
|
||||||
}else{
|
}else{
|
||||||
formData.value.taskDispatchDetails = []
|
formData.value.taskDispatchDetails = []
|
||||||
@ -1677,6 +1687,7 @@ const onDeleteItem = async (row,index) => {
|
|||||||
message.success(t('common.delSuccess'))
|
message.success(t('common.delSuccess'))
|
||||||
}
|
}
|
||||||
const handleOutsourcingChange= async (row: any) => {
|
const handleOutsourcingChange= async (row: any) => {
|
||||||
|
console.log('ss')
|
||||||
if(row.isOutsourcing == false){
|
if(row.isOutsourcing == false){
|
||||||
row.dispatchType = 1
|
row.dispatchType = 1
|
||||||
row.postId = ''
|
row.postId = ''
|
||||||
|
Loading…
Reference in New Issue
Block a user