入库问题修改
This commit is contained in:
parent
e401652ec4
commit
b8e4cec878
@ -155,7 +155,13 @@ public class MaterialController {
|
||||
PageResult<MaterialDO> pageResult = materialService.getStorageNowPageGroupMaterial(pageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@GetMapping("/page-material-group-no")
|
||||
@Operation(summary = "根据采购单获得入库物料列表")
|
||||
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
|
||||
public CommonResult<PageResult<MaterialDO>> getStorageNowMaterialNoPage(@Valid StorageLogPageReqVO pageReqVO) {
|
||||
PageResult<MaterialDO> pageResult = materialService.getStorageNowMaterialNoPage(pageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
@GetMapping("/page-now-all")
|
||||
@Operation(summary = "获得出库物料列表")
|
||||
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
|
||||
|
@ -75,5 +75,7 @@ public class MaterialPlanPageReqVO extends PageParam {
|
||||
private Integer mplanStatus;
|
||||
@Schema(description = "责任人")
|
||||
private String duEmpName;
|
||||
@Schema(description = "责任人")
|
||||
private String blueprintNo;
|
||||
|
||||
}
|
@ -21,8 +21,7 @@ import java.util.Date;
|
||||
@NoArgsConstructor
|
||||
@Accessors(chain = false) // 设置 chain = false,避免BOM导入有问题
|
||||
public class PartExcelVO {
|
||||
@ExcelProperty("工序名称")
|
||||
private String procedureName;
|
||||
|
||||
|
||||
|
||||
@ExcelProperty("项目名称")
|
||||
@ -30,11 +29,14 @@ public class PartExcelVO {
|
||||
|
||||
@ExcelProperty("子项目名称")
|
||||
private String projectSubName;
|
||||
@ExcelProperty("客户简码")
|
||||
private String customerName;
|
||||
@ExcelProperty("零件号")
|
||||
private String blueprintNo;
|
||||
// @ExcelProperty("客户简码")
|
||||
// private String customerName;
|
||||
@ExcelProperty("零件名称")
|
||||
private String materialName;
|
||||
|
||||
@ExcelProperty("工序名称")
|
||||
private String procedureName;
|
||||
@ExcelProperty("材质")
|
||||
private String compositionName;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
|
||||
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
|
||||
import com.chanko.yunxi.mes.framework.excel.core.convert.TimestampToDateConvert;
|
||||
@ -109,4 +110,6 @@ public class PurchaseOrderNoRespVO {
|
||||
private String isPrint;
|
||||
@Schema(description = "收货状态")
|
||||
private Integer receivingStatus1;
|
||||
@Schema(description = "创建人")
|
||||
private String submitUserName;
|
||||
}
|
@ -5,12 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
|
||||
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.storageinventory.StorageInventoryDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
|
||||
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.storageinventory.StorageInventoryMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
|
||||
@ -72,6 +76,10 @@ public class StorageController {
|
||||
private MaterialMapper materialMapper;
|
||||
@Resource
|
||||
private StorageInventoryMapper storageInventoryMapper;
|
||||
@Resource
|
||||
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
|
||||
@Resource
|
||||
private PurchaseOrderNoMapper purchaseOrderNoMapper;
|
||||
@PostMapping("/cancelWeiWai")
|
||||
@Operation(summary = "委外取消提交")
|
||||
@PreAuthorize("@ss.hasPermission('heli:storage:create')")
|
||||
@ -184,6 +192,11 @@ public class StorageController {
|
||||
storageInventoryDO.setYardAmount(totalNumber);
|
||||
}
|
||||
storageInventoryMapper.insertOrUpdate(storageInventoryDO);
|
||||
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = purchaseOrderNoDetailMapper.selectById(storageMatDO.getPurchaseOrderNoDetailId());
|
||||
if (ObjectUtil.isNotEmpty(purchaseOrderNoDetailDO)){
|
||||
purchaseOrderNoDetailDO.setPurchaseRemAmount(purchaseOrderNoDetailDO.getPurchaseRemAmount().subtract(storageMatDO.getStorageOkQty()));
|
||||
purchaseOrderNoDetailMapper.updateById(purchaseOrderNoDetailDO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if (updateReqVO.getStockType()==2){
|
||||
@ -285,6 +298,14 @@ public class StorageController {
|
||||
@PreAuthorize("@ss.hasPermission('heli:storage:query')")
|
||||
public CommonResult<StorageRespVO> getStorage(@RequestParam("id") Long id) {
|
||||
StorageDO storage = storageService.getStorage(id);
|
||||
if (storage.getStockType()==1&&storage.getStockInType()==1){
|
||||
LambdaQueryWrapper<PurchaseOrderNoDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(PurchaseOrderNoDO::getPurchaseNo,storage.getHeaderNo());
|
||||
PurchaseOrderNoDO purchaseOrderNoDO = purchaseOrderNoMapper.selectOne(wrapper);
|
||||
if (ObjectUtil.isNotEmpty(purchaseOrderNoDO)){
|
||||
storage.setHeaderId(purchaseOrderNoDO.getId());
|
||||
}
|
||||
}
|
||||
return success(BeanUtils.toBean(storage, StorageRespVO.class));
|
||||
}
|
||||
|
||||
|
@ -107,5 +107,7 @@ public class StorageRespVO {
|
||||
@Schema(description = "子项目id")
|
||||
@ExcelProperty("子项目id")
|
||||
private Integer projectNo;
|
||||
@Schema(description = "上游单号id")
|
||||
private Long headerId;
|
||||
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatSaveReqVO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
@ -82,4 +83,6 @@ public class StorageSaveReqVO {
|
||||
private Long rgId;
|
||||
@Schema(description = "库位id")
|
||||
private Long pnId;
|
||||
private List<StorageMatSaveReqVO> matItemDOList;
|
||||
|
||||
}
|
||||
|
@ -48,7 +48,8 @@ public class StorageLogPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "库位")
|
||||
private Long pnId;
|
||||
|
||||
@Schema(description = "库位")
|
||||
private Long headerId;
|
||||
|
||||
|
||||
}
|
@ -1,15 +1,18 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.storagemat;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.StorageSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
|
||||
@ -69,6 +72,8 @@ public class StorageMatController {
|
||||
private StorageLogNowMapper storageLogNowMapper;
|
||||
@Resource
|
||||
private SerialNumberService serialNumberService;
|
||||
@Resource
|
||||
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建入/出库物料")
|
||||
@ -99,6 +104,8 @@ public class StorageMatController {
|
||||
public CommonResult<Long> createStorageMat(@Valid @RequestBody List<StorageMatSaveReqVO> createReqVO,@RequestParam("stockid") Long stockid) {
|
||||
storageMatService.deleteStorageMatList(stockid);
|
||||
List<String> attr3List = new ArrayList<>();
|
||||
|
||||
|
||||
for (StorageMatSaveReqVO item : createReqVO) {
|
||||
item.setId(null);
|
||||
if (item.getMatCode()!=null){
|
||||
@ -137,8 +144,6 @@ public class StorageMatController {
|
||||
bdgzsomthingService.updateById(bdgzsomthingDO);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -87,5 +87,9 @@ public class StorageMatRespVO {
|
||||
@Schema(description = "库存")
|
||||
@ExcelProperty("库存")
|
||||
private BigDecimal matRest;
|
||||
@Schema(description = "采购单id")
|
||||
private Long purchaseOrderNoId;
|
||||
@Schema(description = "采购单明细id")
|
||||
private Long purchaseOrderNoDetailId;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
@ -52,4 +53,6 @@ public class StorageMatSaveReqVO {
|
||||
private BigDecimal amount;
|
||||
@Schema(description = "备注", example = "你猜")
|
||||
private String projectSubName;
|
||||
private Long purchaseOrderNoDetailId;
|
||||
private Long purchaseOrderNoId;
|
||||
}
|
||||
|
@ -182,4 +182,16 @@ public class MaterialDO extends TenantBaseDO {
|
||||
private Long materialTypeId;
|
||||
@TableField(exist = false)
|
||||
private String matUnitId;
|
||||
@TableField(exist = false)
|
||||
private BigDecimal purchaseRemAmount;
|
||||
@TableField(exist = false)
|
||||
private BigDecimal estimatedPrice;
|
||||
@TableField(exist = false)
|
||||
private BigDecimal purchaseAmount;
|
||||
@TableField(exist = false)
|
||||
private BigDecimal unitPrice;
|
||||
@TableField(exist = false)
|
||||
private Long purchaseOrderNoDetailId;
|
||||
@TableField(exist = false)
|
||||
private Long purchaseOrderNoId;
|
||||
}
|
||||
|
@ -148,6 +148,8 @@ public class PurchaseOrderNoDO extends BaseDO {
|
||||
@TableField(exist = false)
|
||||
private String postalCode;
|
||||
@TableField(exist = false)
|
||||
private String submitUserName;
|
||||
@TableField(exist = false)
|
||||
private String deliveryAddress;
|
||||
@TableField(exist = false)
|
||||
private Integer receivingStatus1;
|
||||
|
@ -138,5 +138,7 @@ public class StorageDO extends BaseDO {
|
||||
private String signature;
|
||||
@TableField(exist = false)
|
||||
private Date date;
|
||||
@TableField(exist = false)
|
||||
private Long headerId;
|
||||
|
||||
}
|
@ -225,6 +225,8 @@ public class TaskDispatchDetailDO extends BaseDO {
|
||||
@TableField(exist = false)
|
||||
private String nameSim;
|
||||
@TableField(exist = false)
|
||||
private String blueprintNo;
|
||||
@TableField(exist = false)
|
||||
private String projectNameSim;
|
||||
@TableField(exist = false)
|
||||
private Long duEmpId;
|
||||
|
@ -9,12 +9,14 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLo
|
||||
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.pn.PnDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.MaterialTypeEnum;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
|
||||
import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO;
|
||||
@ -216,4 +218,33 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
|
||||
}
|
||||
return selectPage(pageReqVO, query);
|
||||
}
|
||||
|
||||
default PageResult<MaterialDO> getStorageNowMaterialNoPage(StorageLogPageReqVO pageReqVO){
|
||||
MPJLambdaWrapper<MaterialDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(MaterialDO.class)
|
||||
.select("ifnull(sum(s.yard_amount),0) matRest")
|
||||
.select("t.name as matName,t.code as matCode,d.label as matType,t.spec as matSpec,t.brand as matBrand")
|
||||
.select("d1.label as matUnit")
|
||||
.select("p.id as purchaseOrderNoDetailId,p.purchase_order_id as purchaseOrderNoId")
|
||||
.select("p.purchase_amount as purchaseAmount","p.estimated_price as estimatedPrice")
|
||||
.select("p.purchase_rem_amount as purchaseRemAmount","ROUND(p.estimated_price / NULLIF(p.purchase_amount, 0)) AS unitPrice")
|
||||
.leftJoin(StorageInventoryDO.class, "s", StorageInventoryDO::getMaterialId, MaterialDO::getId)
|
||||
.leftJoin(PurchaseOrderNoDetailDO.class,"p",PurchaseOrderNoDetailDO::getMaterialId, MaterialDO::getId)
|
||||
.leftJoin(DictDataDO.class,"d",DictDataDO::getValue, MaterialDO::getMaterialType)
|
||||
.leftJoin(DictDataDO.class,"d1",DictDataDO::getValue, MaterialDO::getUnit)
|
||||
.disableSubLogicDel()
|
||||
.groupBy(MaterialDO::getId)
|
||||
.orderByDesc(MaterialDO::getId);
|
||||
|
||||
query.like(!com.alibaba.druid.util.StringUtils.isEmpty(pageReqVO.getMatSpec()),MaterialDO::getSpec, pageReqVO.getMatSpec())
|
||||
.like(!com.alibaba.druid.util.StringUtils.isEmpty(pageReqVO.getMatName()), MaterialDO::getName, pageReqVO.getMatName())
|
||||
.like(!com.alibaba.druid.util.StringUtils.isEmpty(pageReqVO.getMatCode()), MaterialDO::getCode, pageReqVO.getMatCode())
|
||||
.eq(true,PurchaseOrderNoDetailDO::getPurchaseOrderId, pageReqVO.getHeaderId())
|
||||
.eq(true,MaterialDO::getVirtualPart, YesOrNoEnum.N.name())
|
||||
.eq(MaterialDO::getStatus,1)
|
||||
.eq("d.dict_type","heli_material_type")
|
||||
.eq("d1.dict_type","heli_material_unit")
|
||||
;
|
||||
return selectPage(pageReqVO,query);
|
||||
}
|
||||
}
|
||||
|
@ -237,6 +237,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
||||
.disableSubLogicDel();
|
||||
query
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getBlueprintNo()),ProcessBomDetailDO::getBlueprintNo, pageReqVO.getBlueprintNo())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), MaterialPlanDO::getName, pageReqVO.getProjectSubName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getMaterialName()), MaterialPlanBoomDO::getMatName, pageReqVO.getMaterialName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getMatName()), MaterialPlanBoomDO::getMatName, pageReqVO.getMatName())
|
||||
|
@ -33,6 +33,7 @@ public interface PurchaseOrderNoMapper extends BaseMapperX<PurchaseOrderNoDO> {
|
||||
|
||||
query.selectAll(PurchaseOrderNoDO.class)
|
||||
.select("s.name as supplierName","m.project_material_plan_no as materialPlanNo")
|
||||
.select("u1.nickname as submitUserName")
|
||||
.select("CASE " +
|
||||
" WHEN COUNT(d.id) = 0 THEN 1 " + // 无子记录
|
||||
" WHEN SUM(CASE d.receiving_status WHEN 3 THEN 0 ELSE 1 END) = 0 THEN 3 " + // 全部为3
|
||||
@ -43,6 +44,7 @@ public interface PurchaseOrderNoMapper extends BaseMapperX<PurchaseOrderNoDO> {
|
||||
.leftJoin(PurchaseOrderNoDetailDO.class,"d", PurchaseOrderNoDetailDO::getPurchaseOrderId, PurchaseOrderNoDO::getId)
|
||||
.leftJoin(MaterialPlanDO.class, "m", MaterialPlanDO::getId, PurchaseOrderNoDO::getProjectMaterialPlanId)
|
||||
.leftJoin(AdminUserDO.class,"u", AdminUserDO::getId, PurchaseOrderNoDetailDO::getDuEmpId)
|
||||
.leftJoin(AdminUserDO.class,"u1", AdminUserDO::getId, PurchaseOrderNoDO::getCreator)
|
||||
.disableSubLogicDel()
|
||||
.groupBy(PurchaseOrderNoDO::getId)
|
||||
.orderByDesc(PurchaseOrderNoDO::getCreateTime);
|
||||
|
@ -721,6 +721,7 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
||||
.select("d.material_name as materialName,DATE_FORMAT(p.boom_arrive_date, '%Y-%m-%d') AS boomArriveDates")
|
||||
.select("e.brief as customerName,u.nickname as nickname,c.id as projectSubId")
|
||||
.select("p.boom_arrive_date as boomArriveDate,p.du_emp_id as duEmpId,p.description as description,p.mat_weight as matWeight")
|
||||
.select("d.blueprint_no as blueprintNo")
|
||||
.leftJoin(TaskDispatchDO.class, "a", TaskDispatchDO::getId, TaskDispatchDetailDO::getDispatchId)
|
||||
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, TaskDispatchDO::getProjectId)
|
||||
.leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId)
|
||||
@ -737,6 +738,7 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
||||
|
||||
query
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getBlueprintNo()), ProcessBomDetailDO::getBlueprintNo, pageReqVO.getBlueprintNo())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectName, pageReqVO.getProjectName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), ProjectOrderSubDO::getName, pageReqVO.getProjectSubName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getMaterialName()), ProcessBomDetailDO::getMaterialName, pageReqVO.getMaterialName())
|
||||
|
@ -70,4 +70,6 @@ public interface MaterialService {
|
||||
PageResult<StorageInventoryDO> getStorageNowPageAll(StorageLogPageReqVO pageReqVO);
|
||||
|
||||
PageResult<MaterialDO> getSupplementPage(StorageInventoryPageReqVO pageReqVO);
|
||||
|
||||
PageResult<MaterialDO> getStorageNowMaterialNoPage(StorageLogPageReqVO pageReqVO);
|
||||
}
|
||||
|
@ -290,6 +290,40 @@ public class MaterialServiceImpl implements MaterialService {
|
||||
return materialMapper.getSupplementPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<MaterialDO> getStorageNowMaterialNoPage(StorageLogPageReqVO pageReqVO) {
|
||||
PageResult<MaterialDO> pageResult = materialMapper.getStorageNowMaterialNoPage(pageReqVO);
|
||||
if (ObjectUtil.isNotEmpty(pageReqVO.getWhId())) {
|
||||
if (ObjectUtil.isNotEmpty(pageResult.getList())) {
|
||||
// 获取所有物料编码
|
||||
List<Long> ids = pageResult.getList().stream()
|
||||
.map(MaterialDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
// 批量查询库存日志
|
||||
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(StorageInventoryDO::getWhId, pageReqVO.getWhId())
|
||||
.in(StorageInventoryDO::getMaterialId,ids );
|
||||
List<StorageInventoryDO> logList = storageInventoryMapper.selectList(wrapper);
|
||||
|
||||
// 将库存日志按物料编码分组
|
||||
Map<Long, List<StorageInventoryDO>> logMap = logList.stream()
|
||||
.collect(Collectors.groupingBy(StorageInventoryDO::getMaterialId));
|
||||
|
||||
// 计算每个物料的剩余数量并设置到对应的 StorageMaterialDO 对象中
|
||||
for (MaterialDO materialDO : pageResult.getList()) {
|
||||
List<StorageInventoryDO> logs = logMap.getOrDefault(materialDO.getId(), Collections.emptyList());
|
||||
BigDecimal matRest = logs.stream()
|
||||
.map(StorageInventoryDO::getYardAmount)
|
||||
.filter(Objects::nonNull) // 确保过滤掉 null 值
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
materialDO.setMatRest(matRest);
|
||||
}
|
||||
}
|
||||
}
|
||||
return pageResult;
|
||||
|
||||
}
|
||||
|
||||
private void checkData(List<MaterialExcelVO> materialExcelVOList) {
|
||||
// 基础校验
|
||||
Set<ConstraintViolation<List<MaterialExcelVO>>> validate = validator.validate(materialExcelVOList, MaterialExcelVO.class);
|
||||
|
@ -130,6 +130,7 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
|
||||
// purchaseOrderNoDetailDO.setBoomUnit(detailDO.getBoomUnit());
|
||||
// purchaseOrderNoDetailDO.setBoomSpec(detailDO.getBoomSpec());
|
||||
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = BeanUtils.toBean(detailDO, PurchaseOrderNoDetailDO.class);
|
||||
purchaseOrderNoDetailDO.setDuEmpId(detailDO.getDuEmpId());
|
||||
purchaseOrderNoDetailDO.setId(null);
|
||||
purchaseOrderNoDetailDO.setCreateTime(null);
|
||||
purchaseOrderNoDetailDO.setUpdateTime(null);
|
||||
|
@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.service.plan;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
@ -481,7 +482,9 @@ private TaskReportMapper taskReportMapper;
|
||||
eq(ProcessBomDO::getProjectSubId, planSubDOS.getProjectSubId());
|
||||
last("LIMIT 1");
|
||||
}});
|
||||
|
||||
if (processBomDO.getBomStatus() !=7){
|
||||
throw exception(new ErrorCode(400,"BOM没有审核,请先审核BOM"));
|
||||
}
|
||||
PlanTaskDO planTaskDO = planTaskMapper.selectOne(new LambdaQueryWrapper<PlanTaskDO>() {{
|
||||
eq(PlanTaskDO::getProjectId, planSubDOS.getProjectId());
|
||||
eq(PlanTaskDO::getProjectPlanId, planSubDOS.getProjectPlanId());
|
||||
|
@ -109,6 +109,12 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
|
||||
public Long createPurchaseOrderNoDetail(PurchaseOrderNoDetailSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
PurchaseOrderNoDetailDO purchaseOrderNoDetail = BeanUtils.toBean(createReqVO, PurchaseOrderNoDetailDO.class);
|
||||
PurchaseOrderNoDO purchaseOrderNoDO = purchaseOrderNoMapper.selectById(createReqVO.getPurchaseOrderId());
|
||||
if (ObjectUtil.isNotEmpty(purchaseOrderNoDO)){
|
||||
if (purchaseOrderNoDO.getPurchaseType() == 2){
|
||||
purchaseOrderNoDetail.setPurchaseRemAmount(purchaseOrderNoDetail.getPurchaseAmount());
|
||||
}
|
||||
}
|
||||
purchaseOrderNoDetailMapper.insert(purchaseOrderNoDetail);
|
||||
// 返回
|
||||
return purchaseOrderNoDetail.getId();
|
||||
|
@ -5,9 +5,11 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.StorageInventoryController;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
||||
@ -339,11 +341,19 @@ private StorageLogService storageLogService;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createStorage(StorageSaveReqVO createReqVO) {
|
||||
if (createReqVO.getStockType()==1&&createReqVO.getStockInType()==1){
|
||||
for (StorageMatSaveReqVO item : createReqVO.getMatItemDOList()) {
|
||||
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = purchaseOrderNoDetailMapper.selectById(item.getPurchaseOrderNoDetailId());
|
||||
if (ObjectUtil.isNotEmpty(purchaseOrderNoDetailDO)){
|
||||
if (item.getStorageOkQty().compareTo(purchaseOrderNoDetailDO.getPurchaseRemAmount())>0){
|
||||
throw exception(new ErrorCode(400,"本次入库数量"+item.getStorageOkQty()+" 大于订单剩余数量"+purchaseOrderNoDetailDO.getPurchaseRemAmount()+"请确认."));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 插入
|
||||
StorageDO storage = BeanUtils.toBean(createReqVO, StorageDO.class);
|
||||
|
||||
|
||||
|
||||
SerialNumberDO serialNumberDO = new SerialNumberDO();
|
||||
if(createReqVO.getStockType().equals(1)) {
|
||||
// 月度流水号
|
||||
@ -371,6 +381,20 @@ private StorageLogService storageLogService;
|
||||
public void updateStorage(StorageSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateStorageExists(updateReqVO.getId());
|
||||
if (updateReqVO.getStockType()==1&&updateReqVO.getStockInType()==1){
|
||||
List<StorageMatDO> storageMatDOS = storageMatMapper.selectMatByStorckID(updateReqVO.getId());
|
||||
if (ObjectUtil.isNotEmpty(storageMatDOS)){
|
||||
for (StorageMatDO item :storageMatDOS) {
|
||||
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = purchaseOrderNoDetailMapper.selectById(item.getPurchaseOrderNoDetailId());
|
||||
if (ObjectUtil.isNotEmpty(purchaseOrderNoDetailDO)){
|
||||
if (item.getStorageOkQty().compareTo(purchaseOrderNoDetailDO.getPurchaseRemAmount())>0){
|
||||
throw exception(new ErrorCode(400,"本次入库数量"+item.getStorageOkQty()+" 大于订单剩余数量"+purchaseOrderNoDetailDO.getPurchaseRemAmount()+"请确认."));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// 更新
|
||||
StorageDO updateObj = BeanUtils.toBean(updateReqVO, StorageDO.class);
|
||||
storageMapper.updateById(updateObj);
|
||||
|
@ -17,6 +17,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipMan
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.fpuserdetail.FpUserDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
|
||||
@ -30,6 +31,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.fpuserdetail.FpUserDetailMappe
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.procedure.ProcedureMapper;
|
||||
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.projectorder.ProjectOrderSubMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
|
||||
@ -105,6 +107,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
private ProcedureMapper procedureMapper;
|
||||
@Resource
|
||||
private ProcessBomDetailMapper processBomDetailMapper;
|
||||
@Resource
|
||||
private ProcessBomMapper processBomMapper;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) {
|
||||
@ -165,6 +169,17 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
throw exception(PROCESS_BOM_DETAIL_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
if(operateTypeEnum == OperateTypeEnum.SUBMIT||operateTypeEnum == OperateTypeEnum.SAVE){
|
||||
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(updateReqVO.getBomDetailId());
|
||||
if (ObjectUtil.isNotEmpty(bomDetailDO)){
|
||||
ProcessBomDO processBomDO = processBomMapper.selectById(bomDetailDO.getBomId());
|
||||
if (ObjectUtil.isNotEmpty(processBomDO)){
|
||||
if (processBomDO.getBomStatus()!=7){
|
||||
throw exception(new ErrorCode(400,"BOM没有审核,请先审核BOM"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 更新
|
||||
TaskDispatchDO updateObj = BeanUtils.toBean(updateReqVO, TaskDispatchDO.class);
|
||||
if(!updateObj.canOperate(operateTypeEnum)){
|
||||
|
@ -84,3 +84,6 @@ export const getStorageNowMaterialGroupPage = async (params) => {
|
||||
export const getSupplementPage = async (params) => {
|
||||
return await request.get({ url: `/heli/material/getSupplementPage`, params })
|
||||
}
|
||||
export const getStorageNowMaterialNoPage = async (params) => {
|
||||
return await request.get({ url: `/heli/material/page-material-group-no`, params })
|
||||
}
|
||||
|
@ -147,6 +147,8 @@ ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uplo
|
||||
<el-card class="hl-card-info" v-if="query.active != 'detailArchive'">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="() => router.back()" size="large" style="margin-left: 5rem">取 消</el-button>
|
||||
<el-button v-if="'update,create'.indexOf(query.active) > -1 " @click="submitForm('SAVE')" type="success" size="large">保 存</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -166,10 +168,9 @@ ref="contractUploadRef" :file-list="contractUploadFiles" multiple :action="uplo
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="() => router.back()" size="large">取 消</el-button>
|
||||
<el-button v-if="'update,create'.indexOf(query.active) > -1 " @click="submitForm('SAVE')" type="success" size="large">保 存</el-button>
|
||||
</div>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
<!-- -->
|
||||
<!-- </div>-->
|
||||
</el-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
|
@ -360,6 +360,10 @@
|
||||
<el-card class="hl-card-info" v-if="active != 'create'">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="goback" size="large" style="margin-left: 5rem">取 消</el-button>
|
||||
<el-button v-if="active != 'detail' && formData.deliverStatus == 1" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button v-if="(((active != 'detail' && formData.id) || active == 'deliver') && formData.deliverStatus == 1)" @click="submitForm('DELIVER')" type="primary" :disabled="formLoading" size="large">发 货</el-button>
|
||||
<el-button v-if="active == 'detail' && formData.deliverStatus == 2 && formData.id" type="primary" @click="printHandle" :disabled="formLoading" size="large">打印发货单</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -378,12 +382,9 @@
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="goback" size="large">取 消</el-button>
|
||||
<el-button v-if="active != 'detail' && formData.deliverStatus == 1" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button v-if="(((active != 'detail' && formData.id) || active == 'deliver') && formData.deliverStatus == 1)" @click="submitForm('DELIVER')" type="primary" :disabled="formLoading" size="large">发 货</el-button>
|
||||
<el-button v-if="active == 'detail' && formData.deliverStatus == 2 && formData.id" type="primary" @click="printHandle" :disabled="formLoading" size="large">打印发货单</el-button>
|
||||
</div>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
<!-- -->
|
||||
<!-- </div>-->
|
||||
</el-card>
|
||||
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
|
||||
<!-- 【打印发货单】 - 弹框-->
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<el-card class="hl-card">
|
||||
<template #header>
|
||||
<span>零件物料需求计划</span>
|
||||
<span>零件需求计划</span>
|
||||
</template>
|
||||
<ContentWrap class="borderxx">
|
||||
<!-- 搜索工作栏 -->
|
||||
@ -23,6 +23,9 @@
|
||||
<el-form-item label="物料需求单号" prop="projectMaterialPlanNo">
|
||||
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="请输入物料需求单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="零件号" prop="blueprintNo">
|
||||
<el-input v-model="queryParams.blueprintNo" placeholder="请输入零件号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-left:30px">
|
||||
<el-button @click="handleQuery" type="primary">
|
||||
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||
@ -57,17 +60,19 @@
|
||||
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column fixed label="序号" align="center" type="index" width="60" />
|
||||
<el-table-column label="工序名称" align="center" prop="procedureName" min-width="180" >
|
||||
<template #default="scope">
|
||||
<el-button text type="primary">
|
||||
{{ scope.row.procedureName }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<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 label="客户简码" align="center" prop="customerName" min-width="100" />
|
||||
<!-- <el-table-column label="客户简码" align="center" prop="customerName" min-width="100" />-->
|
||||
<el-table-column label="零件号" align="center" prop="blueprintNo" min-width="100" />
|
||||
<el-table-column label="零件名称" align="center" prop="materialName" min-width="180" />
|
||||
<el-table-column label="工序名称" align="center" prop="procedureName" min-width="180" >
|
||||
<template #default="scope">
|
||||
<el-button text type="primary">
|
||||
{{ scope.row.procedureName }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="材质" align="center" prop="compositionName" min-width="120" />
|
||||
<el-table-column label="数量" align="center" prop="boomAmount" min-width="120" />
|
||||
<el-table-column min-width="200px" align="center" >
|
||||
@ -164,7 +169,8 @@ const queryParams = reactive({
|
||||
createTime: [],
|
||||
ownerName:undefined,
|
||||
materialName:undefined,
|
||||
projectMaterialPlanNo:undefined
|
||||
projectMaterialPlanNo:undefined,
|
||||
blueprintNo:undefined,
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200px">
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200px" @close="cancel">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
|
@ -322,6 +322,7 @@ const submitForm = async () => {
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value.cgOrderIdId=detailId.value
|
||||
const data = formData.value as unknown as InvoiceApi.InvoiceVO
|
||||
let dataId = await InvoiceApi.operateInvoice(data)
|
||||
|
||||
@ -430,6 +431,7 @@ const refreshAttachments = (files) => {
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
let file = files[i]
|
||||
file.createTime = new Date()
|
||||
console.log(file)
|
||||
formData.value.attachments.push(file)
|
||||
}
|
||||
// 排序
|
||||
|
@ -1,11 +1,12 @@
|
||||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200px">
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200px" @close="cancel">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="160px"
|
||||
v-loading="formLoading"
|
||||
|
||||
>
|
||||
<el-row>
|
||||
|
||||
@ -388,11 +389,34 @@ const submitForm = async () => {
|
||||
message.error('付款类型跟订单不一致,不允许添加')
|
||||
return false
|
||||
}
|
||||
}
|
||||
if (formData.value.cgYishou>=formData.value.cgYs){
|
||||
message.error('已收金额大于应收金额,请确认')
|
||||
|
||||
|
||||
if (formData.value.orderYsDetails[i].cgType==1&&formData.value.orderYsDetails[i].cgYishou>formData.value.shouFuKuan){
|
||||
message.error('首付款回款金额'+formData.value.orderYsDetails[i].cgYishou+">首付款应收金额"+formData.value.shouFuKuan+",请确认");
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==2&&formData.value.orderYsDetails[i].cgYishou>formData.value.twoFuKuan){
|
||||
message.error('第二笔款回款金额'+formData.value.orderYsDetails[i].cgYishou+">第二笔款应收金额"+formData.value.twoFuKuan+",请确认")
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==3&&formData.value.orderYsDetails[i].cgYishou>formData.value.threeFuKuan){
|
||||
message.error('第三笔款回款金额'+formData.value.orderYsDetails[i].cgYishou+">第三笔款应收金额"+formData.value.threeFuKuan+",请确认")
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==4&&formData.value.orderYsDetails[i].cgYishou>formData.value.fourFuKuan){
|
||||
message.error('第四笔款回款金额'+formData.value.orderYsDetails[i].cgYishou+">第四笔款应收金额"+formData.value.fourFuKuan+",请确认")
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==5&&formData.value.orderYsDetails[i].cgYishou>formData.value.fiveFuKuan){
|
||||
message.error('第五笔款回款金额'+formData.value.orderYsDetails[i].cgYishou+">第五笔款应收金额"+formData.value.fiveFuKuan+",请确认")
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==6&&formData.value.orderYsDetails[i].cgYishou>formData.value.sixFuKuan){
|
||||
message.error('第六笔款回款金额'+formData.value.orderYsDetails[i].cgYishou+">第六笔款应收金额"+formData.value.sixFuKuan+",请确认")
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if (formData.value.cgYishou!=''&&formData.value.cgYishou!=undefined&&formData.value.cgYishou!=null){
|
||||
if (formData.value.cgYishou<formData.value.cgYs&&formData.value.cgTypee==1){
|
||||
await message.confirm("已收金额小于应收金额,回款未全部完成,请确认")
|
||||
|
@ -324,7 +324,7 @@ const submitForm = async () => {
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
console.log(formData.value)
|
||||
formData.value.cgOrderIdId=detailId.value
|
||||
const data = formData.value as unknown as InvoiceApi.InvoiceVO
|
||||
let dataId = await InvoiceApi.operateInvoice(data)
|
||||
|
||||
@ -382,8 +382,7 @@ const handleAvatarSuccess: UploadProps['onSuccess'] = async (
|
||||
// formData.value.attachments = (await getFilePage(attParams)).list
|
||||
// await reload()
|
||||
// formData.value.attachments=[]
|
||||
console.log(111)
|
||||
console.log(formData.value.attachments)
|
||||
|
||||
uploading.value = false;
|
||||
|
||||
}
|
||||
@ -438,6 +437,7 @@ const refreshAttachments = (files) => {
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
let file = files[i]
|
||||
file.createTime = new Date()
|
||||
console.log(file)
|
||||
formData.value.attachments.push(file)
|
||||
}
|
||||
// 排序
|
||||
|
@ -281,8 +281,9 @@ const tableRowClassName = ({ row }) => {
|
||||
// 将 endTime 和 currentTime 的时间部分设置为零
|
||||
endTime.setHours(0, 0, 0, 0);
|
||||
currentTime.setHours(0, 0, 0, 0);
|
||||
console.log(endTime)
|
||||
console.log(currentTime)
|
||||
if (endTime < currentTime){
|
||||
console.log(1)
|
||||
return 'warning-row1';
|
||||
}else {
|
||||
return ''
|
||||
|
@ -147,12 +147,14 @@ import purchaseorderDialog from '@/views/heli/outsourcestock/purchaseorderDialog
|
||||
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||
import supplierDialog from '@/views/heli/purchaseorder/supplierDialog.vue'
|
||||
import * as OutsourceStockApi from '@/api/heli/outsourcestock'
|
||||
import {useUserStore} from "@/store/modules/user";
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const router = useRouter()
|
||||
const tagsViewStore = useTagsViewStore()
|
||||
|
||||
const userStore = useUserStore()
|
||||
const username = userStore.getUser.nickname
|
||||
const currentTag = router.currentRoute.value
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
@ -169,7 +171,7 @@ const formData = ref({
|
||||
autoStockIn: undefined,
|
||||
autoStockOut: undefined,
|
||||
deliver: undefined,
|
||||
receiver: undefined,
|
||||
receiver: username,
|
||||
arrivalDate: undefined,
|
||||
inspectionDate: undefined,
|
||||
remark: undefined,
|
||||
@ -210,6 +212,7 @@ const handleSelectedProjectPurchaseorder = (arr) => {
|
||||
formData.value.supplierName = arr.supplierName
|
||||
formData.value.supplierId = arr.supplierId
|
||||
formData.value.goodsType = arr.goodsType
|
||||
formData.value.deliver=arr.submitUserName
|
||||
setAutomaticWarehousing()
|
||||
}
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ const queryParams = reactive({
|
||||
taxRatio: undefined,
|
||||
estimatedPrice: undefined,
|
||||
actualPrice: undefined,
|
||||
status: undefined,
|
||||
status: 2,
|
||||
receivingStatus: undefined,
|
||||
submitUserId: undefined,
|
||||
submitTime: [],
|
||||
|
@ -29,6 +29,9 @@
|
||||
<el-form-item label="物料需求单号" prop="projectMaterialPlanNo">
|
||||
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="请输入物料需求单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="零件号" prop="blueprintNo">
|
||||
<el-input v-model="queryParams.blueprintNo" placeholder="请输入零件号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-left:30px">
|
||||
<el-button @click="handleQuery" type="primary">
|
||||
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||
@ -62,14 +65,8 @@
|
||||
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column fixed label="序号" align="center" type="index" width="60" />
|
||||
<el-table-column label="工序" align="center" prop="procedureName" min-width="100" fixed>
|
||||
<template #default="scope">
|
||||
<el-button text type="primary">
|
||||
{{ scope.row.procedureName }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="客户简称" align="center" prop="brief" min-width="180" fixed />
|
||||
|
||||
<!-- <el-table-column label="客户简称" align="center" prop="brief" min-width="180" fixed />-->
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" fixed />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||
<el-table-column label="泡沫" align="center" prop="isFoams">
|
||||
@ -86,8 +83,15 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="零件名称" align="center" prop="matName" min-width="180" />
|
||||
<el-table-column label="工序" align="center" prop="procedureName" min-width="100" >
|
||||
<template #default="scope">
|
||||
<el-button text type="primary">
|
||||
{{ scope.row.procedureName }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="unit" min-width="120">
|
||||
<template #default="scope">
|
||||
@ -210,7 +214,8 @@ const queryParams = reactive({
|
||||
materialName:undefined,
|
||||
matName:undefined,
|
||||
projectMaterialPlanNo:undefined,
|
||||
matType:1
|
||||
matType:1,
|
||||
blueprintNo:undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
@ -477,6 +477,7 @@ disabled style="width: 100%;" v-model="row.endDate" type="date" value-format="x"
|
||||
<el-card class="hl-card-info" v-if="false">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="() => router.back()" size="large" style="margin-left: 5rem">取 消</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -495,9 +496,9 @@ disabled style="width: 100%;" v-model="row.endDate" type="date" value-format="x"
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="() => router.back()" size="large">取 消</el-button>
|
||||
</div>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
<!-- -->
|
||||
<!-- </div>-->
|
||||
</el-card>
|
||||
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
|
||||
<printDialog ref="printref" :minAmount="minAmount" :formData="formData" />
|
||||
|
@ -596,6 +596,8 @@ v-for="dict in mergedArray7" :key="dict.id"
|
||||
<el-card class="hl-card-info" v-if="false">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="() => router.back()" size="large" style="margin-left: 5rem">取 消</el-button>
|
||||
<el-button @click="submitForm" type="success" size="large">保 存</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -614,10 +616,9 @@ v-for="dict in mergedArray7" :key="dict.id"
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="() => router.back()" size="large">取 消</el-button>
|
||||
<el-button @click="submitForm" type="success" size="large">保 存</el-button>
|
||||
</div>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
<!-- -->
|
||||
<!-- </div>-->
|
||||
</el-card>
|
||||
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
|
||||
<ProjectSubDialog :title="dialogTitle" width="80%" v-model="dialogVisible" :parent-method="parentMethod" :parent-methods="clouse" :projectOrderSubs="dataList" :ownerId="ownerId" :dateOne="dateOne" :dateTwo="dateTwo" :id="id" :diffDays="diffDays" :typeNames="typeNames" @update="handleUpdate" :showCloseProp="false" center /><!-- :ownerId="ownerId" :dateOne="dateOne" :dateTwo="dateTwo" :id="id" :diffDays="diffDays" :typeNames="typeNames" -->
|
||||
|
@ -54,14 +54,8 @@
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||
<el-table-column type="index" width="100" fixed label="序号" align="center" />
|
||||
<el-table-column fixed label="计划单号" align="center" prop="planNo" width="150">
|
||||
<template #default="scope">
|
||||
<el-button text type="primary" @click="handleCommand('detail',scope.row.id)">
|
||||
{{scope.row.planNo}}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column fixed label="项目编号" align="center" prop="projectCode" width="220" /> -->
|
||||
|
||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" width="220" />
|
||||
<el-table-column fixed label="项目变更次数" align="center" prop="changeNum" width="150" />
|
||||
<el-table-column label="客户名称" align="center" prop="customerName" width="150" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="150" />
|
||||
@ -126,7 +120,13 @@
|
||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="计划单号" align="center" prop="planNo" width="150">
|
||||
<template #default="scope">
|
||||
<el-button text type="primary" @click="handleCommand('detail',scope.row.id)">
|
||||
{{scope.row.planNo}}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" align="center" width="190">
|
||||
<template #default="scope">
|
||||
<el-row>
|
||||
@ -266,7 +266,7 @@ const complete=async(id:number)=>{
|
||||
cancelButtonText: '否',
|
||||
confirmButtonText: '是',
|
||||
type: 'warning',
|
||||
}
|
||||
}
|
||||
).then(async () => {
|
||||
const data =await PlanApi.complete(id)
|
||||
if (data){
|
||||
|
@ -246,6 +246,10 @@
|
||||
<el-card class="hl-card-info">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="() => router.back()" size="large" style="margin-left: 5rem">取 消</el-button>
|
||||
<el-button v-if="pageType != 'detail' && formData.status == 1" @click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button v-if="pageType != 'detail' && formData.status == 1" @click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large">提 交</el-button>
|
||||
<el-button v-if="pageType != 'detail' && formData.status == 2" @click="submitForm('CANCEL_SUBMIT')" type="danger" :disabled="formLoading" size="large">取消提交</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -264,12 +268,9 @@
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="() => router.back()" size="large">取 消</el-button>
|
||||
<el-button v-if="pageType != 'detail' && formData.status == 1" @click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button v-if="pageType != 'detail' && formData.status == 1" @click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large">提 交</el-button>
|
||||
<el-button v-if="pageType != 'detail' && formData.status == 2" @click="submitForm('CANCEL_SUBMIT')" type="danger" :disabled="formLoading" size="large">取消提交</el-button>
|
||||
</div>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
<!-- -->
|
||||
<!-- </div>-->
|
||||
</el-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
|
@ -323,6 +323,19 @@
|
||||
<el-card class="hl-card-info">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="goback" size="large" style="margin-left: 5rem">取 消</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update'"
|
||||
@click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update'"
|
||||
@click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large">提 交</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 2"
|
||||
@click="submitForm('CANCEL_SUBMIT')" type="danger" :disabled="formLoading" size="large">取消提交</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active == 'shenhe'" @click="submitForm('AUDIT')" type="success"
|
||||
:disabled="formLoading" size="large">审核</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -342,22 +355,10 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="goback" size="large">取 消</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update'"
|
||||
@click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update'"
|
||||
@click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large">提 交</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 2"
|
||||
@click="submitForm('CANCEL_SUBMIT')" type="danger" :disabled="formLoading" size="large">取消提交</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && active == 'shenhe'" @click="submitForm('AUDIT')" type="success"
|
||||
:disabled="formLoading" size="large">审核</el-button>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- </div>-->
|
||||
</el-card>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
@ -753,9 +753,40 @@ v-if="!!scope.row.id" link type="primary" size="small"
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
<!-- -->
|
||||
<!-- </div>-->
|
||||
|
||||
<el-card class="hl-card-info" v-if="query.active != 'detailArchive'">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="() => router.back()" size="large" style="margin-left: 5rem;">取 消</el-button>
|
||||
<el-button
|
||||
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus <= 4"
|
||||
@click="submitForm('SAVE')" type="success" size="large" :disabled="saveDisabled">保 存</el-button>
|
||||
<el-button
|
||||
v-if="'price'.indexOf(query.active) > -1"
|
||||
@click="submitForm('PRICE')" type="success" size="large">录 入</el-button>
|
||||
<el-button
|
||||
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus < 8"
|
||||
@click="submitForm('SUBMIT_AUDIT')" type="primary" size="large" :disabled="submitDisabled">送 审</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'audit' && formData.orderStatus == 8" @click="submitForm('AUDIT')"
|
||||
type="primary" size="large">审 核</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'approve' && formData.orderStatus == 16" @click="submitForm('APPROVE')"
|
||||
type="primary" size="large">批 准</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'alter' && formData.orderStatus == 32" @click="submitForm('ALTER')"
|
||||
type="danger" size="large">发起变更</el-button>
|
||||
<el-button
|
||||
v-if="
|
||||
'audit,approve'.indexOf(query.active) > -1 &&
|
||||
(formData.orderStatus == 8 || formData.orderStatus == 16)
|
||||
" @click="activeOpinionDialogVisible = true" type="danger" size="large">打 回</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'terminate' && formData.orderStatus == 32" @click="submitForm('TERMINATE')"
|
||||
type="danger" size="large">直接终止</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -779,35 +810,7 @@ label="操作时间" align="center" prop="startTime" width="220"
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="() => router.back()" size="large">取 消</el-button>
|
||||
<el-button
|
||||
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus <= 4"
|
||||
@click="submitForm('SAVE')" type="success" size="large" :disabled="saveDisabled">保 存</el-button>
|
||||
<el-button
|
||||
v-if="'price'.indexOf(query.active) > -1"
|
||||
@click="submitForm('PRICE')" type="success" size="large">录 入</el-button>
|
||||
<el-button
|
||||
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus < 8"
|
||||
@click="submitForm('SUBMIT_AUDIT')" type="primary" size="large" :disabled="submitDisabled">送 审</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'audit' && formData.orderStatus == 8" @click="submitForm('AUDIT')"
|
||||
type="primary" size="large">审 核</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'approve' && formData.orderStatus == 16" @click="submitForm('APPROVE')"
|
||||
type="primary" size="large">批 准</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'alter' && formData.orderStatus == 32" @click="submitForm('ALTER')"
|
||||
type="danger" size="large">发起变更</el-button>
|
||||
<el-button
|
||||
v-if="
|
||||
'audit,approve'.indexOf(query.active) > -1 &&
|
||||
(formData.orderStatus == 8 || formData.orderStatus == 16)
|
||||
" @click="activeOpinionDialogVisible = true" type="danger" size="large">打 回</el-button>
|
||||
<el-button
|
||||
v-if="query.active == 'terminate' && formData.orderStatus == 32" @click="submitForm('TERMINATE')"
|
||||
type="danger" size="large">直接终止</el-button>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-dialog v-model="activeOpinionDialogVisible" title="打回原因" width="30%" center>
|
||||
@ -2007,4 +2010,5 @@ type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原
|
||||
background: transparent;
|
||||
border: 3px solid orange !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@ -362,6 +362,7 @@ link type="primary" size="small" :disabled="ctrView || ctrDelete"
|
||||
</el-card>
|
||||
<!-- 表单弹窗:物料列表 -->
|
||||
<materials ref="matOpenFormRef" @success="getList" />
|
||||
<materials1 ref="matOpenFormRef1" @success="getList1" />
|
||||
<!-- 表单弹窗:物料列表 -->
|
||||
<projects ref="proOpenFormRef" @success="getProject" />
|
||||
<purchaseorderDialog ref="projectPurchaseorderDialog" @success="handleSelectedProjectPurchaseorder" />
|
||||
@ -480,6 +481,7 @@ import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file'
|
||||
import download from '@/utils/download'
|
||||
import * as UserApi from '@/api/system/user'
|
||||
import materials from './materialsin.vue'
|
||||
import materials1 from './materialsin1.vue'
|
||||
import projects from './subproject.vue'
|
||||
import {Search} from "@element-plus/icons-vue";
|
||||
import purchaseorderDialog from '@/views/heli/outsourcestock/purchaseorderDialog.vue'
|
||||
@ -542,6 +544,7 @@ const queryParams = reactive({
|
||||
})
|
||||
const matOpenFormRef = ref()
|
||||
const proOpenFormRef = ref()
|
||||
const matOpenFormRef1 = ref()
|
||||
|
||||
const openMatForm = () => {
|
||||
// if (formData.value.whId == undefined || formData.value.whId == '') {
|
||||
@ -549,7 +552,12 @@ const openMatForm = () => {
|
||||
// return
|
||||
// }
|
||||
// formData.value.whId
|
||||
matOpenFormRef.value.open(formData.value.whId,'in')
|
||||
console.log(formData.value.headerId)
|
||||
if (formData.value.stockInType==1&&formData.value.headerNo!=null&&formData.value.headerNo!=undefined&&formData.value.headerNo!=''){
|
||||
matOpenFormRef1.value.open(formData.value.whId,'in',formData.value.headerId)
|
||||
}else {
|
||||
matOpenFormRef.value.open(formData.value.whId,'in')
|
||||
}
|
||||
}
|
||||
// const isPrint = async () => {
|
||||
// var newVar = await StorageApi.isPrint(query.id);
|
||||
@ -769,7 +777,64 @@ const getList = async (arrMat) => {
|
||||
}
|
||||
|
||||
}
|
||||
const getList1 = async (arrMat) => {
|
||||
let flag=true
|
||||
let whName=''
|
||||
for (let i = 0; i < whList.value.length; i++) {
|
||||
if (whList.value[i].id==formData.value.whId){
|
||||
whName=whList.value[i].whName
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
queryParams.whId=formData.value.whId;
|
||||
console.log(formData.value.matItemDOList)
|
||||
console.log(arrMat)
|
||||
for (const row of arrMat) {
|
||||
if (
|
||||
formData.value.matItemDOList.filter(
|
||||
(item) =>
|
||||
item.matId == row.id
|
||||
).length == 0
|
||||
) {
|
||||
row.matId = row.id
|
||||
// if (rgList.value.length==1){
|
||||
// row.rgId =rgList.value[0].id
|
||||
// }else {
|
||||
// row.rgId =''
|
||||
// }
|
||||
queryParams.materialId=row.matId;
|
||||
var newVar = await storageInventoryApi.getById(queryParams);
|
||||
if (newVar){
|
||||
row.rgId = newVar.rgId;
|
||||
row.pnId = newVar.pnId;
|
||||
}else {
|
||||
formData.value.rgId = '';
|
||||
formData.value.pnId = '';
|
||||
}
|
||||
row.pnlist = ref([])
|
||||
row.pnlist = pnList.value.filter((pn) => pn.rg_id == row.rgId)
|
||||
|
||||
// if (row.pnlist.length == 1) {
|
||||
// row.pnId = row.pnlist[0].id
|
||||
// }else
|
||||
if (pnList.value.length == 0) {
|
||||
flag=false
|
||||
}
|
||||
row.price=row.unitPrice
|
||||
row.storageOkQty=row.purchaseRemAmount
|
||||
row.purchaseOrderNoId=row.purchaseOrderNoId
|
||||
row.purchaseOrderNoDetailId=row.purchaseOrderNoDetailId
|
||||
if (flag){
|
||||
formData.value.matItemDOList.push(row)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!flag){
|
||||
message.error("该"+whName+"没有配置入库库位,请确认!")
|
||||
}
|
||||
|
||||
}
|
||||
const getProject = async (pro,scope) => {
|
||||
formData.value.matItemDOList.forEach(
|
||||
(item) =>{
|
||||
@ -908,7 +973,7 @@ const failedAttachments = ref<UploadUserFile[]>([])
|
||||
const failedAttachmentsName = ref()
|
||||
|
||||
const openProjectPurchaseorderDialog = () => {
|
||||
projectPurchaseorderDialog.value?.open()
|
||||
projectPurchaseorderDialog.value?.open()
|
||||
}
|
||||
const refreshAttachments = (files, type) => {
|
||||
formData.value.attachments = formData.value.attachments.filter((value) => value.id)
|
||||
|
235
mes-ui/mes-ui-admin-vue3/src/views/heli/storage/materialsin1.vue
Normal file
235
mes-ui/mes-ui-admin-vue3/src/views/heli/storage/materialsin1.vue
Normal file
@ -0,0 +1,235 @@
|
||||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="80%">
|
||||
<ContentWrap class="borderxx">
|
||||
<el-form class="-mb-15px" :model="queryReqVo" :inline="true" label-width="108px">
|
||||
<el-form-item label=" 物料编码:" label-width="150px">
|
||||
<el-input v-model="queryReqVo.matCode" placeholder="物料编码" class="!w-240px" :disabled="!chkboxEnable" />
|
||||
</el-form-item>
|
||||
<el-form-item label=" 物料名称:" label-width="150px">
|
||||
<el-input v-model="queryReqVo.matName" placeholder="物料名称" class="!w-240px" :disabled="!chkboxEnable" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格/型号">
|
||||
<el-input v-model="queryReqVo.matSpec" placeholder="规格/型号" class="!w-240px" :disabled="!chkboxEnable" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery" type="primary" :disabled="!chkboxEnable">
|
||||
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||
</el-button><el-button @click="resetQuery" :disabled="!chkboxEnable">
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
<el-card class="hl-table">
|
||||
<el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" @selection-change="handleSelectionChange" :row-key="getRowKeys" @row-click="clickRow" :selection="true" :reserve-selection="true" min-width="1800" >
|
||||
<el-table-column type="selection" width="55" :reserve-selection="true" :selectable="row=>chkboxEnable" />
|
||||
<!-- <el-table-column prop="no" label="序号" min-width="120" align="center" /> -->
|
||||
<el-table-column label="序号" type="index" min-width="120" align="center" />
|
||||
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" />
|
||||
<el-table-column prop="matName" label="物料名称" min-width="140" align="center" />
|
||||
<el-table-column prop="matType" label="物料类型" min-width="120" align="center" />
|
||||
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
|
||||
|
||||
<el-table-column prop="purchaseAmount" label="采购数量" min-width="120" align="center" />
|
||||
<el-table-column prop="purchaseRemAmount" label="剩余数量" min-width="120" align="center" />
|
||||
<el-table-column prop="estimatedPrice" label="预估总价(元)" min-width="150" align="center" />
|
||||
<!-- <el-table-column prop="rgName" label="库区" min-width="120" align="center" v-if="formType !='in'">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- {{scope.row.num>1&&formType=='group'? '':scope.row.rgName}}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column prop="pnName" label="库位" min-width="140" align="center" v-if="formType !='in'">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- {{scope.row.num>1&&formType=='group'? '':scope.row.pnName}}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column prop="storageOkQty" label="库存数量" min-width="120" align="center" v-if="formType=='out'"/>
|
||||
<el-table-column prop="matRest" label="库存数量" min-width="120" align="center" v-if="formType!='out'"/>
|
||||
<el-table-column prop="matUnit" label="库存单位" min-width="120" align="center" />
|
||||
<el-table-column prop="shortName" label="物料简称" min-width="120" align="center" />
|
||||
<el-table-column prop="matBrand" label="品牌" min-width="120" align="center" />
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryReqVo.pageNo" v-model:limit="queryReqVo.pageSize" @pagination="getList()" />
|
||||
</el-card>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import * as StorageLogApi from '@/api/heli/storagelog'
|
||||
import * as MaterialApi from '@/api/heli/material'
|
||||
import * as ProcessBomApi from '@/api/heli/processbom'
|
||||
import { ElTable } from 'element-plus'
|
||||
import {getStorageNowMaterialNoPage} from "@/api/heli/material";
|
||||
|
||||
//:selectable="row=>row.disabled || chkboxEnable"
|
||||
const chkboxEnable = ref(true)
|
||||
const queryEnable = ref(true)
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
|
||||
const multipleTable = ref<InstanceType<typeof ElTable>>()
|
||||
const multipleSelection = ref([])
|
||||
const handleSelectionChange = (val: []) => {
|
||||
multipleSelection.value = val
|
||||
}
|
||||
|
||||
const clickRow = (row: any) => {
|
||||
if (chkboxEnable.value) {
|
||||
if (row) {
|
||||
multipleTable.value!.toggleRowSelection(row, undefined)
|
||||
} else {
|
||||
multipleTable.value!.clearSelection()
|
||||
}
|
||||
}
|
||||
}
|
||||
//指定key值,数据更新之后保留之前选中的数据
|
||||
const getRowKeys = (row) => {
|
||||
return row.id
|
||||
}
|
||||
|
||||
const queryReqVo: any = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
whId: undefined,
|
||||
matCode: undefined,
|
||||
matSpec: undefined,
|
||||
headerId:undefined,
|
||||
})
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = async () => {
|
||||
queryReqVo.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryReqVo.matCode = ''
|
||||
queryReqVo.matSpec = ''
|
||||
queryReqVo.matName = ''
|
||||
queryReqVo.headerId=''
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
const getList = async () => {
|
||||
formLoading.value = true
|
||||
var data;
|
||||
var dataone;
|
||||
try {
|
||||
if(formType.value == 'out'){
|
||||
data = await StorageLogApi.getStorageNowAllPage(queryReqVo)
|
||||
}else if(formType.value == 'in'){
|
||||
// data = await StorageLogApi.getStorageNowMaterialGroupPage(queryReqVo)
|
||||
data = await MaterialApi.getStorageNowMaterialNoPage(queryReqVo)
|
||||
}else if(formType.value == 'group'){
|
||||
data = await StorageLogApi.getStorageNowMaterialGroupPage(queryReqVo)
|
||||
data.list.forEach(mat =>{
|
||||
mat.storageOkQty = mat.matRest
|
||||
mat.requireAmount = mat.matRest
|
||||
|
||||
})
|
||||
}else if(formType.value == 'bomfind'){
|
||||
dataone = await ProcessBomApi.getProcessBomDetailListByBomIdbyid(queryReqVo.whId.projectNo)
|
||||
dataone = dataone.filter(item => item.whId === queryReqVo.whId.whId);
|
||||
// 将过滤后的数据赋值给datatow
|
||||
}
|
||||
if(dataone){
|
||||
list.value = dataone.map(item => ({
|
||||
...item,
|
||||
matCode: item.materialCode,
|
||||
matName: item.materialName,
|
||||
matSpec:item.spec,
|
||||
storageOkQty:item.amount,
|
||||
matUnit:item.unit,/// 如果你想要删除原来的 aa 属性
|
||||
matType: item.type == 1 ? '标准件' : item.type == 2 ? '其他' : item.type,
|
||||
rgId:item.rgId,
|
||||
pnId:item.pnId,
|
||||
rgName:item.rgName,
|
||||
pnName:item.pnName,
|
||||
whId1:item.whId,
|
||||
matId:item.id,
|
||||
materialId:item.id
|
||||
}))
|
||||
total.value = dataone.length
|
||||
}
|
||||
if(data){
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
}
|
||||
//list.value = data.splice((queryReqVo.pageNo - 1) * queryReqVo.pageSize, queryReqVo.pageSize)
|
||||
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
const formType = ref()
|
||||
/** 打开弹窗 */
|
||||
const open = async (whId: number,type:string,headerId:number) => {
|
||||
multipleSelection.value = []
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = '物料列表'
|
||||
list.value=[]
|
||||
formType.value = type
|
||||
// 修改时,设置数据
|
||||
|
||||
queryReqVo.whId = whId
|
||||
queryReqVo.matCode = ''
|
||||
queryReqVo.matSpec = ''
|
||||
queryReqVo.headerId=headerId
|
||||
getList()
|
||||
chkboxEnable.value = true
|
||||
|
||||
list.value.forEach((row) => {
|
||||
setTimeout(() => {
|
||||
multipleTable.value.toggleRowSelection(row, !chkboxEnable.value) //让页面显示选中的数据
|
||||
}, 0)
|
||||
})
|
||||
try {
|
||||
// 获取物料库存实时列表
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
dialogVisible.value = false
|
||||
multipleSelection.value.forEach((item) => {
|
||||
if (item.amount) {
|
||||
item.matRest = item.amount;
|
||||
} else {
|
||||
item.matRest = item.storageOkQty;
|
||||
}
|
||||
if(item.whId1){
|
||||
item.matId = item.materialId
|
||||
}else{
|
||||
item.matId = item.id
|
||||
}
|
||||
item.storageOkQty = ''
|
||||
item.whId= item.whId??''
|
||||
item.rgId= item.rgId??''
|
||||
item.pnId= item.pnId??''
|
||||
})
|
||||
console.log(multipleSelection.value)
|
||||
// 发送操作成功的事件
|
||||
emit('success', multipleSelection.value)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
@ -412,6 +412,19 @@ v-if="'detail' != active && (scope.row.beginProduce == 0 && scope.row.procedureS
|
||||
<el-card class="hl-card-info">
|
||||
<template #header>
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
|
||||
<el-button @click="goback" size="large">取 消</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && formData.dispatchStatus == 1" @click="submitForm('SAVE')" type="primary"
|
||||
:disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && formData.dispatchStatus == 1" @click="submitForm('SUBMIT')" type="success"
|
||||
:disabled="formLoading" size="large">提 交</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && formData.dispatchStatus == 2" @click="submitForm('CANCEL_SUBMIT')"
|
||||
type="danger" :disabled="formLoading" size="large">取消提交</el-button>
|
||||
<el-button
|
||||
v-if="formData.dispatchStatus == 2" @click="printHandle(formData.id)" :disabled="formLoading"
|
||||
size="large" type="primary">打印流程卡</el-button>
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col>
|
||||
@ -432,21 +445,9 @@ v-if="'detail' != active && (scope.row.beginProduce == 0 && scope.row.procedureS
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div class="hl-footer text-center">
|
||||
<el-button @click="goback" size="large">取 消</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && formData.dispatchStatus == 1" @click="submitForm('SAVE')" type="primary"
|
||||
:disabled="formLoading" size="large">保 存</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && formData.dispatchStatus == 1" @click="submitForm('SUBMIT')" type="success"
|
||||
:disabled="formLoading" size="large">提 交</el-button>
|
||||
<el-button
|
||||
v-if="active != 'detail' && formData.dispatchStatus == 2" @click="submitForm('CANCEL_SUBMIT')"
|
||||
type="danger" :disabled="formLoading" size="large">取消提交</el-button>
|
||||
<el-button
|
||||
v-if="formData.dispatchStatus == 2" @click="printHandle(formData.id)" :disabled="formLoading"
|
||||
size="large" type="primary">打印流程卡</el-button>
|
||||
</div>
|
||||
<!-- <div class="hl-footer text-center">-->
|
||||
<!-- -->
|
||||
<!-- </div>-->
|
||||
<div>
|
||||
<!-- 排产弹框 -->
|
||||
<el-dialog v-model="dialogTableVisible" title="dialogTitle" width="1000">
|
||||
|
Loading…
Reference in New Issue
Block a user