零件采购收货
This commit is contained in:
parent
c114c17a99
commit
e9a3483cb1
@ -28,6 +28,8 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
|||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||||
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.error;
|
||||||
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
|
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
|
||||||
@ -62,14 +64,24 @@ public class DeliverOrderController {
|
|||||||
@Operation(summary = "创建发货订单")
|
@Operation(summary = "创建发货订单")
|
||||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:create')")
|
@PreAuthorize("@ss.hasPermission('heli:deliver-order:create')")
|
||||||
public CommonResult<Long> createDeliverOrder(@Valid @RequestBody DeliverOrderSaveReqVO createReqVO) {
|
public CommonResult<Long> createDeliverOrder(@Valid @RequestBody DeliverOrderSaveReqVO createReqVO) {
|
||||||
return success(deliverOrderService.createDeliverOrder(createReqVO));
|
try {
|
||||||
|
return success(deliverOrderService.createDeliverOrder(createReqVO));
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
return error(500, e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新发货订单")
|
@Operation(summary = "更新发货订单")
|
||||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:update')")
|
@PreAuthorize("@ss.hasPermission('heli:deliver-order:update')")
|
||||||
public CommonResult<Boolean> updateDeliverOrder(@Valid @RequestBody DeliverOrderSaveReqVO updateReqVO) {
|
public CommonResult<Boolean> updateDeliverOrder(@Valid @RequestBody DeliverOrderSaveReqVO updateReqVO) {
|
||||||
deliverOrderService.updateDeliverOrder(updateReqVO);
|
try {
|
||||||
|
deliverOrderService.updateDeliverOrder(updateReqVO);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
return error(500, e.getMessage());
|
||||||
|
}
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,10 +109,14 @@ public class DeliverOrderController {
|
|||||||
@Operation(summary = "操作项目订单")
|
@Operation(summary = "操作项目订单")
|
||||||
@PreAuthorize("@ss.hasPermission('heli:delivery-order:update')")
|
@PreAuthorize("@ss.hasPermission('heli:delivery-order:update')")
|
||||||
@OperateLog(enable = false)
|
@OperateLog(enable = false)
|
||||||
@Transactional(rollbackFor = Exception.class)
|
// @Transactional(rollbackFor = Exception.class)
|
||||||
public CommonResult<Long> operateProjectOrder(@Valid @RequestBody DeliverOrderSaveReqVO operateReqVO) {
|
public CommonResult<Long> operateProjectOrder(@Valid @RequestBody DeliverOrderSaveReqVO operateReqVO) {
|
||||||
LocalDateTime startTime = LocalDateTime.now();
|
LocalDateTime startTime = LocalDateTime.now();
|
||||||
deliverOrderService.operateProjectOrder(operateReqVO);
|
try {
|
||||||
|
deliverOrderService.operateProjectOrder(operateReqVO);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return CommonResult.error(400, e.getMessage());
|
||||||
|
}
|
||||||
// 手动记录日志
|
// 手动记录日志
|
||||||
operateLogFrameworkService.createOperateLog(request,
|
operateLogFrameworkService.createOperateLog(request,
|
||||||
startTime,
|
startTime,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
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 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;
|
||||||
@ -98,6 +99,13 @@ public class PurchaseOrderNoDetailController {
|
|||||||
List<PurchaseOrderNoDetailDO> purchaseOrderNoDetail = purchaseOrderNoDetailService.getPurchaseOrderNoDetailById(id);
|
List<PurchaseOrderNoDetailDO> purchaseOrderNoDetail = purchaseOrderNoDetailService.getPurchaseOrderNoDetailById(id);
|
||||||
return success(purchaseOrderNoDetail);
|
return success(purchaseOrderNoDetail);
|
||||||
}
|
}
|
||||||
|
@GetMapping("/getReceiveGoodDetail")
|
||||||
|
@Operation(summary = "获得采购订单明细分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('project:purchase-order-no-detail:query')")
|
||||||
|
public CommonResult<PageResult<PurchaseOrderNoDetailDO>> getReceiveGoodDetail(@Valid PurchaseOrderNoPageReqVO pageReqVO) {
|
||||||
|
PageResult<PurchaseOrderNoDetailDO> pageResult = purchaseOrderNoDetailService.getReceiveGoodDetail(pageReqVO);
|
||||||
|
return success(pageResult);
|
||||||
|
}
|
||||||
@PostMapping("/verification")
|
@PostMapping("/verification")
|
||||||
@Operation(summary = "收货校验")
|
@Operation(summary = "收货校验")
|
||||||
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
|
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
|
||||||
|
@ -151,7 +151,8 @@ public class MaterialPlanBoomDO extends BaseDO {
|
|||||||
|
|
||||||
//暂估价格
|
//暂估价格
|
||||||
private BigDecimal estimatedPrice;
|
private BigDecimal estimatedPrice;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private BigDecimal unitPrice;
|
||||||
//预估到时间
|
//预估到时间
|
||||||
private LocalDateTime arriveTime;
|
private LocalDateTime arriveTime;
|
||||||
|
|
||||||
|
@ -65,6 +65,10 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
|
|||||||
* 采购数量
|
* 采购数量
|
||||||
*/
|
*/
|
||||||
private BigDecimal purchaseAmount;
|
private BigDecimal purchaseAmount;
|
||||||
|
/**
|
||||||
|
* 预估单价
|
||||||
|
*/
|
||||||
|
private BigDecimal unitPrice;
|
||||||
/**
|
/**
|
||||||
* 暂估价金额
|
* 暂估价金额
|
||||||
*/
|
*/
|
||||||
@ -173,8 +177,7 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String procedureName;
|
private String procedureName;
|
||||||
@TableField(exist = false)
|
|
||||||
private BigDecimal unitPrice;
|
|
||||||
/**
|
/**
|
||||||
* 泡沫
|
* 泡沫
|
||||||
*/
|
*/
|
||||||
|
@ -227,7 +227,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
|||||||
.select(" COALESCE(m.boom_spec, d.spec) as boomSpec","d.blueprint_no as blueprintNo","d.unit as unit","f.name as supplierName")
|
.select(" COALESCE(m.boom_spec, d.spec) as boomSpec","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("COALESCE(m.the_weight, t.mat_weight) as theWeight","COALESCE(m.the_weight, t.mat_weight) as theWeight")
|
.select("COALESCE(m.the_weight, t.mat_weight) as theWeight","COALESCE(m.the_weight, t.mat_weight) as theWeight")
|
||||||
.select("COALESCE(m.purchase_amount, t.boom_amount) AS purchaseAmounts,m.supplier_id as supplierIds,m.estimated_price as estimatedPrices")
|
.select("COALESCE(m.purchase_amount, t.boom_amount) AS purchaseAmounts,m.supplier_id as supplierIds,m.estimated_price as estimatedPrices,m.unit_price as unitPrice")
|
||||||
.select("COALESCE(m.arrive_time, t.boom_arrive_date) as arriveTimes,COALESCE(m.description, t.description) as descriptions")
|
.select("COALESCE(m.arrive_time, t.boom_arrive_date) as arriveTimes,COALESCE(m.description, t.description) as descriptions")
|
||||||
.select("m.is_foam as isFoams","m.foam_price as foamPrice")
|
.select("m.is_foam as isFoams","m.foam_price as foamPrice")
|
||||||
.select("CASE \n" +
|
.select("CASE \n" +
|
||||||
|
@ -9,6 +9,7 @@ import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|||||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.ProcessBoomPageReqVO;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.ProcessBoomPageReqVO;
|
||||||
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.controller.admin.purchaseorderno.vo.PurchaseOrderNoPageReqVO;
|
||||||
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.customer.CustomerDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
||||||
@ -238,4 +239,40 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
|
|||||||
.in(PurchaseOrderNoDetailDO::getReceivingStatus, 1,2);
|
.in(PurchaseOrderNoDetailDO::getReceivingStatus, 1,2);
|
||||||
return selectCount( query);
|
return selectCount( query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default PageResult<PurchaseOrderNoDetailDO> getReceiveGoodDetail(PurchaseOrderNoPageReqVO pageReqVO){
|
||||||
|
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
|
||||||
|
query.selectAll(PurchaseOrderNoDetailDO.class)
|
||||||
|
.select("t.composition as compositionName","t.purchase_rem_amount as purchaseRemAmounts","mat.code as matCode","pro.name as procedureName","bom.blueprint_no as blueprintNo","psub.id as projectSubId")
|
||||||
|
.select("ROUND(t.estimated_price / t.purchase_amount, 1) as unitPrice","bom.spec as matSpec")
|
||||||
|
.leftJoin(PurchaseOrderNoDO.class, "pb", PurchaseOrderNoDO::getId, PurchaseOrderBoomDO::getPurchaseOrderId)
|
||||||
|
.leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)
|
||||||
|
.leftJoin(ProcessBomDetailDO.class,"bom", ProcessBomDetailDO::getId, PurchaseOrderNoDetailDO::getBoomDetailId)
|
||||||
|
.leftJoin(MaterialPlanBoomDO.class,"plan", MaterialPlanBoomDO::getId, PurchaseOrderNoDetailDO::getProjectMaterialPlanBoomId)
|
||||||
|
.leftJoin(ProcedureDO.class,"pro", ProcedureDO::getId, PurchaseOrderNoDetailDO::getProcedureId)
|
||||||
|
.leftJoin(CompositionDO.class, "com", CompositionDO::getId, PurchaseOrderNoDetailDO::getComposition)
|
||||||
|
.leftJoin(ProjectOrderSubDO.class,"sub",ProjectOrderSubDO::getId, PurchaseOrderNoDetailDO::getProjectPlanSubId)
|
||||||
|
.leftJoin(MaterialDO.class,"mat",MaterialDO::getId,PurchaseOrderNoDetailDO::getMaterialId)
|
||||||
|
.leftJoin(PlanSubDO.class,"psub",PlanSubDO::getProjectSubCode, PurchaseOrderNoDetailDO::getProjectSubCode)
|
||||||
|
.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(MaterialPlanDetailDO::getId);
|
||||||
|
query.like(!StringUtils.isEmpty(pageReqVO.getPurchaseNo()), PurchaseOrderDO::getPurchaseNo, pageReqVO.getPurchaseNo())
|
||||||
|
.like(!StringUtils.isEmpty(pageReqVO.getSupplierName()), "s.brief", pageReqVO.getSupplierName())
|
||||||
|
.like(!StringUtils.isEmpty(pageReqVO.getMaterialPlanNo()), "m.project_material_plan_no", pageReqVO.getMaterialPlanNo())
|
||||||
|
.eq(pageReqVO.getStatus() != null, PurchaseOrderNoDO::getStatus, pageReqVO.getStatus())
|
||||||
|
.eq(pageReqVO.getReceivingStatus() != null, PurchaseOrderNoDetailDO::getReceivingStatus, pageReqVO.getReceivingStatus())
|
||||||
|
.eq(pageReqVO.getPurchaseType() != null, PurchaseOrderNoDO::getPurchaseType, pageReqVO.getPurchaseType())
|
||||||
|
.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.getUsername()), AdminUserDO::getNickname, pageReqVO.getUsername())
|
||||||
|
.like(!ObjectUtil.isEmpty(pageReqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, pageReqVO.getBoomName())
|
||||||
|
.like(!ObjectUtil.isEmpty(pageReqVO.getProcedureName()), ProcedureDO::getName, pageReqVO.getProcedureName())
|
||||||
|
.like(!ObjectUtil.isEmpty(pageReqVO.getBlueprintNo()), ProcessBomDetailDO::getBlueprintNo, pageReqVO.getBlueprintNo())
|
||||||
|
.orderByDesc(PurchaseOrderNoDetailDO::getCreateTime);
|
||||||
|
return selectPage(pageReqVO, query);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.service.deliverorder;
|
package com.chanko.yunxi.mes.module.heli.service.deliverorder;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
@ -22,14 +23,14 @@ public interface DeliverOrderService {
|
|||||||
* @param createReqVO 创建信息
|
* @param createReqVO 创建信息
|
||||||
* @return 编号
|
* @return 编号
|
||||||
*/
|
*/
|
||||||
Long createDeliverOrder(@Valid DeliverOrderSaveReqVO createReqVO);
|
Long createDeliverOrder(@Valid DeliverOrderSaveReqVO createReqVO) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新发货订单
|
* 更新发货订单
|
||||||
*
|
*
|
||||||
* @param updateReqVO 更新信息
|
* @param updateReqVO 更新信息
|
||||||
*/
|
*/
|
||||||
void updateDeliverOrder(@Valid DeliverOrderSaveReqVO updateReqVO);
|
void updateDeliverOrder(@Valid DeliverOrderSaveReqVO updateReqVO) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除发货订单
|
* 删除发货订单
|
||||||
@ -66,7 +67,7 @@ public interface DeliverOrderService {
|
|||||||
*/
|
*/
|
||||||
List<DeliverOrderSubDO> getDeliverOrderSubListByDeliveryOrderId(Long deliveryOrderId);
|
List<DeliverOrderSubDO> getDeliverOrderSubListByDeliveryOrderId(Long deliveryOrderId);
|
||||||
|
|
||||||
void operateProjectOrder(DeliverOrderSaveReqVO operateReqVO);
|
void operateProjectOrder(DeliverOrderSaveReqVO operateReqVO) throws IOException ;
|
||||||
|
|
||||||
List<StorageMatDO> operateProjectOrders(DeliverOrderSaveReqVO operateReqVO);
|
List<StorageMatDO> operateProjectOrders(DeliverOrderSaveReqVO operateReqVO);
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -85,8 +86,8 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
// @Transactional(rollbackFor = Exception.class)
|
||||||
public Long createDeliverOrder(DeliverOrderSaveReqVO createReqVO) {
|
public Long createDeliverOrder(DeliverOrderSaveReqVO createReqVO) throws IOException{
|
||||||
|
|
||||||
if(OperateTypeEnum.valueOf(createReqVO.getActive()) == OperateTypeEnum.DELIVER){
|
if(OperateTypeEnum.valueOf(createReqVO.getActive()) == OperateTypeEnum.DELIVER){
|
||||||
// 超额校验
|
// 超额校验
|
||||||
@ -134,8 +135,8 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
// @Transactional(rollbackFor = Exception.class)
|
||||||
public void updateDeliverOrder(DeliverOrderSaveReqVO updateReqVO) {
|
public void updateDeliverOrder(DeliverOrderSaveReqVO updateReqVO) throws IOException{
|
||||||
// 校验存在
|
// 校验存在
|
||||||
DeliverOrderDO oldDO = validateDeliverOrderExists(updateReqVO.getId());
|
DeliverOrderDO oldDO = validateDeliverOrderExists(updateReqVO.getId());
|
||||||
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(updateReqVO.getActive());
|
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(updateReqVO.getActive());
|
||||||
@ -166,7 +167,7 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void overageDeliverValidate(String saleOrderIds, List<DeliverOrderSubDO> thisTimeSubs) {
|
private void overageDeliverValidate(String saleOrderIds, List<DeliverOrderSubDO> thisTimeSubs) throws IOException {
|
||||||
List<DeliverOrderSubDO> thisTimeRelaSubList = thisTimeSubs.stream().filter(deliverOrderSubDO -> deliverOrderSubDO.getSaleOrderSubId() != null).collect(Collectors.toList());
|
List<DeliverOrderSubDO> thisTimeRelaSubList = thisTimeSubs.stream().filter(deliverOrderSubDO -> deliverOrderSubDO.getSaleOrderSubId() != null).collect(Collectors.toList());
|
||||||
|
|
||||||
if(!thisTimeRelaSubList.isEmpty()){
|
if(!thisTimeRelaSubList.isEmpty()){
|
||||||
@ -197,16 +198,29 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
|||||||
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
|
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
|
||||||
|
|
||||||
// 关联额度-历史发货额度-本次发货额度 >= 0 则可通过
|
// 关联额度-历史发货额度-本次发货额度 >= 0 则可通过
|
||||||
boolean allDeliverable = relaProjectOrderSubList.stream().allMatch(relaSub -> {
|
// boolean allDeliverable = relaProjectOrderSubList.stream().allMatch(relaSub -> {
|
||||||
int relaAmount = relaSub.getAmount();
|
// int relaAmount = relaSub.getAmount();
|
||||||
List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(relaSub.getId());
|
// List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(relaSub.getId());
|
||||||
|
// int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
|
||||||
|
// int thisTimeAmount = thisTimeSubsGroupBySaleSubId.get(relaSub.getId()).get(0).getAmount();
|
||||||
|
// return relaAmount-historyDeliveredAmount-thisTimeAmount >= 0;
|
||||||
|
// });
|
||||||
|
for (ProjectOrderSubDO projectOrderSubDO : relaProjectOrderSubList) {
|
||||||
|
int relaAmount = projectOrderSubDO.getAmount();
|
||||||
|
List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(projectOrderSubDO.getId());
|
||||||
int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
|
int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
|
||||||
int thisTimeAmount = thisTimeSubsGroupBySaleSubId.get(relaSub.getId()).get(0).getAmount();
|
int thisTimeAmount = thisTimeSubsGroupBySaleSubId.get(projectOrderSubDO.getId()).get(0).getAmount();
|
||||||
return relaAmount-historyDeliveredAmount-thisTimeAmount >= 0;
|
if (relaAmount-historyDeliveredAmount-thisTimeAmount <0){
|
||||||
});
|
System.out.println("子项目"+projectOrderSubDO.getName());
|
||||||
if(!allDeliverable){
|
System.out.println("已发货"+historyDeliveredAmount);
|
||||||
throw exception(DELIVER_AMOUNT_OVERFLOW);
|
System.out.println(",本次发货"+thisTimeAmount);
|
||||||
|
System.out.println(",总数量"+relaAmount);
|
||||||
|
throw new RuntimeException("子项目"+projectOrderSubDO.getName()+"已发货"+historyDeliveredAmount+",本次发货"+thisTimeAmount+",大于总数量"+relaAmount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// if(!allDeliverable){
|
||||||
|
// throw exception(DELIVER_AMOUNT_OVERFLOW);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,8 +318,8 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
// @Transactional(rollbackFor = Exception.class)
|
||||||
public void operateProjectOrder(DeliverOrderSaveReqVO operateReqVO) {
|
public void operateProjectOrder(DeliverOrderSaveReqVO operateReqVO) throws IOException {
|
||||||
if(operateReqVO.getId() == null){
|
if(operateReqVO.getId() == null){
|
||||||
createDeliverOrder(operateReqVO);
|
createDeliverOrder(operateReqVO);
|
||||||
}else{
|
}else{
|
||||||
@ -313,7 +327,7 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
// @Transactional(rollbackFor = Exception.class)
|
||||||
public List<StorageMatDO> operateProjectOrders(DeliverOrderSaveReqVO operateReqVO) {
|
public List<StorageMatDO> operateProjectOrders(DeliverOrderSaveReqVO operateReqVO) {
|
||||||
operateReqVO.getId();
|
operateReqVO.getId();
|
||||||
//定义存储剩余零件的List集合
|
//定义存储剩余零件的List集合
|
||||||
|
@ -230,7 +230,7 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
|
|||||||
materialPlanBoomDOs.forEach(materialPlanBoom -> {
|
materialPlanBoomDOs.forEach(materialPlanBoom -> {
|
||||||
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
|
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
|
||||||
updateWrapper.eq("id", materialPlanBoom.getId())
|
updateWrapper.eq("id", materialPlanBoom.getId())
|
||||||
.set("mplan_status", 3)
|
.set("mplan_status", updateReqVO.getStatus())
|
||||||
.set("project_purchase_order_make_id", null)
|
.set("project_purchase_order_make_id", null)
|
||||||
.set("purchase_no", null)
|
.set("purchase_no", null)
|
||||||
.set("project_purchase_order_make_detail_id", null)
|
.set("project_purchase_order_make_detail_id", null)
|
||||||
@ -467,6 +467,7 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
|
|||||||
purchaseOrderMakeDetailDO.setBoomName(updateReqVO.getMatName());
|
purchaseOrderMakeDetailDO.setBoomName(updateReqVO.getMatName());
|
||||||
purchaseOrderMakeDetailDO.setBoomSpec(updateReqVO.getBoomSpec());
|
purchaseOrderMakeDetailDO.setBoomSpec(updateReqVO.getBoomSpec());
|
||||||
purchaseOrderMakeDetailDO.setBoomUnit(updateReqVO.getUnit());
|
purchaseOrderMakeDetailDO.setBoomUnit(updateReqVO.getUnit());
|
||||||
|
purchaseOrderMakeDetailDO.setUnitPrice(updateReqVO.getUnitPrice());
|
||||||
purchaseOrderMakeDetailDO.setComposition(updateReqVO.getCompositionName());
|
purchaseOrderMakeDetailDO.setComposition(updateReqVO.getCompositionName());
|
||||||
purchaseOrderMakeDetailDO.setPurchaseAmount(updateReqVO.getPurchaseAmounts());
|
purchaseOrderMakeDetailDO.setPurchaseAmount(updateReqVO.getPurchaseAmounts());
|
||||||
purchaseOrderMakeDetailDO.setEstimatedPrice(updateReqVO.getEstimatedPrices());
|
purchaseOrderMakeDetailDO.setEstimatedPrice(updateReqVO.getEstimatedPrices());
|
||||||
|
@ -4,6 +4,7 @@ import java.util.*;
|
|||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
|
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.PurchaseOrderNoPageReqVO;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo.*;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo.*;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storage.StorageController;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.storage.StorageController;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
|
||||||
@ -72,4 +73,6 @@ public interface PurchaseOrderNoDetailService {
|
|||||||
Long getReceivingGoodsMessage();
|
Long getReceivingGoodsMessage();
|
||||||
|
|
||||||
CommonResult<Boolean> updateFrom(PurchaseOrderNoDetailDO detailDO);
|
CommonResult<Boolean> updateFrom(PurchaseOrderNoDetailDO detailDO);
|
||||||
|
|
||||||
|
PageResult<PurchaseOrderNoDetailDO> getReceiveGoodDetail(PurchaseOrderNoPageReqVO pageReqVO);
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|||||||
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
|
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||||
import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
|
import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.PurchaseOrderNoPageReqVO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.attentiontodo.AttentiontodoDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.attentiontodo.AttentiontodoDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
||||||
@ -587,4 +588,10 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
|
|||||||
|
|
||||||
return CommonResult.success(true);
|
return CommonResult.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<PurchaseOrderNoDetailDO> getReceiveGoodDetail(PurchaseOrderNoPageReqVO pageReqVO) {
|
||||||
|
return purchaseOrderNoDetailMapper.getReceiveGoodDetail(pageReqVO);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,3 +91,6 @@ export const exportOutsourcing = async (params) => {
|
|||||||
export const updateFrom= async (data) => {
|
export const updateFrom= async (data) => {
|
||||||
return await request.post({ url: `/heli/purchase-order-no-detail/updateFrom`, data })
|
return await request.post({ url: `/heli/purchase-order-no-detail/updateFrom`, data })
|
||||||
}
|
}
|
||||||
|
export const getReceiveGoodDetail = async (params) => {
|
||||||
|
return await request.get({ url: `/heli/purchase-order-no-detail/getReceiveGoodDetail`, params })
|
||||||
|
}
|
||||||
|
@ -218,7 +218,7 @@
|
|||||||
<template #header> <span class="hl-table_header">*</span>重量(T)</template>
|
<template #header> <span class="hl-table_header">*</span>重量(T)</template>
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.weight`" :rules="subFormRules.weight" class="mb-0px!">
|
<el-form-item :prop="`${$index}.weight`" :rules="subFormRules.weight" class="mb-0px!">
|
||||||
<el-input :disabled="detailDisabled || flag" v-model="row.weight" @blur="yunFei()" placeholder="请输入重量(T)" />
|
<el-input :disabled="detailDisabled || formData.deliverStatus == 2" v-model="row.weight" @blur="yunFei()" placeholder="请输入重量(T)" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -272,7 +272,7 @@
|
|||||||
<template #header> <span class="hl-table_header">*</span>名称 </template>
|
<template #header> <span class="hl-table_header">*</span>名称 </template>
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.name`" :rules="subFormRules.name" class="mb-0px!">
|
<el-form-item :prop="`${$index}.name`" :rules="subFormRules.name" class="mb-0px!">
|
||||||
<el-input :disabled="detailDisabled || flag" v-model="row.name" />
|
<el-input :disabled="detailDisabled || formData.deliverStatus == 2" v-model="row.name" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -280,7 +280,7 @@
|
|||||||
<template #header> <span class="hl-table_header">*</span>所属类型 </template>
|
<template #header> <span class="hl-table_header">*</span>所属类型 </template>
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.subType`" :rules="subFormRules.subType" class="mb-0px!">
|
<el-form-item :prop="`${$index}.subType`" :rules="subFormRules.subType" class="mb-0px!">
|
||||||
<el-select :disabled="detailDisabled || flag" v-model="row.subType" placeholder="请选择子项类型">
|
<el-select :disabled="detailDisabled || formData.deliverStatus == 2" v-model="row.subType" placeholder="请选择子项类型">
|
||||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MATERIAL_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MATERIAL_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -290,7 +290,7 @@
|
|||||||
<template #header> <span class="hl-table_header">*</span>本次发货数量 </template>
|
<template #header> <span class="hl-table_header">*</span>本次发货数量 </template>
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
|
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
|
||||||
<el-input-number :disabled="detailDisabled || row.id || flag" v-model="row.amount" placeholder="请输入本次发货数量" style="width: 100%" :min="1" :precision="0"/><!-- :precision="0" -->
|
<el-input-number :disabled="detailDisabled || formData.deliverStatus == 2" v-model="row.amount" placeholder="请输入本次发货数量" style="width: 100%" :min="1" :precision="0"/><!-- :precision="0" -->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -298,7 +298,7 @@
|
|||||||
<template #header> <span class="hl-table_header">*</span>单位 </template>
|
<template #header> <span class="hl-table_header">*</span>单位 </template>
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
|
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
|
||||||
<el-select :disabled="detailDisabled || flag" v-model="row.unit" placeholder="请选择单位">
|
<el-select :disabled="detailDisabled || formData.deliverStatus == 2" v-model="row.unit" placeholder="请选择单位">
|
||||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -307,13 +307,13 @@
|
|||||||
<el-table-column label="备注" min-width="150" align="center">
|
<el-table-column label="备注" min-width="150" align="center">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
|
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
|
||||||
<el-input :disabled="detailDisabled || flag" v-model="row.remark" placeholder="请输入备注" />
|
<el-input :disabled="detailDisabled || formData.deliverStatus == 2" v-model="row.remark" placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" align="center" width="240">
|
<el-table-column label="操作" align="center" width="240">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button v-if="'update,create,deliver'.indexOf(active) > -1" link type="danger" size="small" @click.prevent="onDeleteItem2(scope.$index)">
|
<el-button v-if="'update,create,deliver'.indexOf(active) > -1 &&formData.deliverStatus != 2" link type="danger" size="small" @click.prevent="onDeleteItem2(scope.$index)">
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
@ -145,11 +145,20 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column min-width="200px" align="center" prop="unitPrice">
|
||||||
|
<template #header><span class="hl-table_header">*</span>预估单价</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.unitPrice`" class="mb-0px!" >
|
||||||
|
<el-input-number v-model="row.unitPrice" type="number" :precision="2" @change="changeUnitPrice(row)" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column min-width="200px" align="center" prop="estimatedPrices">
|
<el-table-column min-width="200px" align="center" prop="estimatedPrices">
|
||||||
<template #header><span class="hl-table_header">*</span>预估总价</template>
|
<template #header><span class="hl-table_header">*</span>预估总价</template>
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.estimatedPrices`" class="mb-0px!" >
|
<el-form-item :prop="`${$index}.estimatedPrices`" class="mb-0px!" >
|
||||||
<el-input-number v-model="row.estimatedPrices" type="number" :precision="2" />
|
<el-input-number v-model="row.estimatedPrices" type="number" :precision="2" @change="changeEstimatedPrices(row)"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -189,6 +198,15 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="打回原因" align="center" prop="rejRemark" min-width="120" />
|
<el-table-column label="打回原因" align="center" prop="rejRemark" 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" />
|
||||||
|
<el-table-column fixed="right" label="操作" align="center" min-width="100" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.mplanStatus==1" link type="danger"
|
||||||
|
size="small" @click="handleDelete(scope.row.projectPurchaseOrderMakeDetailId)">
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 分页 -->
|
<!-- 分页 -->
|
||||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
@ -208,7 +226,7 @@ import {inject, ref} from "vue";
|
|||||||
import * as MaterialPlanApi from "@/api/heli/materialplan";
|
import * as MaterialPlanApi from "@/api/heli/materialplan";
|
||||||
import * as MaterialPlanBoomApi from "@/api/heli/materialplanboom";
|
import * as MaterialPlanBoomApi from "@/api/heli/materialplanboom";
|
||||||
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
|
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
|
||||||
import {ElTable} from "element-plus";
|
import {ElButton, ElTable, ElTableColumn} from "element-plus";
|
||||||
import {useUserStore} from "@/store/modules/user";
|
import {useUserStore} from "@/store/modules/user";
|
||||||
import * as supplierApi from "@/api/heli/supplier";
|
import * as supplierApi from "@/api/heli/supplier";
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
@ -258,7 +276,22 @@ const queryParams1 = reactive({
|
|||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (id: number) => {
|
||||||
|
try {
|
||||||
|
// 删除的二次确认
|
||||||
|
await message.delConfirm()
|
||||||
|
const data={
|
||||||
|
id:id,
|
||||||
|
status:0
|
||||||
|
}
|
||||||
|
// 发起删除
|
||||||
|
await PartPurchaseOrderApi.updatePurchaseOrderMakeNo(data)
|
||||||
|
message.success(t('common.delSuccess'))
|
||||||
|
// 刷新列表
|
||||||
|
await getList()
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
@ -394,6 +427,13 @@ const floatMul = (a, b) => {
|
|||||||
} catch (f) {}
|
} catch (f) {}
|
||||||
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
|
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
|
||||||
}
|
}
|
||||||
|
const changeUnitPrice =(row:any)=>{
|
||||||
|
row.estimatedPrices=parseFloat((row.unitPrice* row.purchaseAmounts).toFixed(1))
|
||||||
|
|
||||||
|
}
|
||||||
|
const changeEstimatedPrices =(row:any)=>{
|
||||||
|
row.unitPrice=parseFloat((row.estimatedPrices/row.purchaseAmounts).toFixed(1))
|
||||||
|
}
|
||||||
const change1 =(row:any)=>{
|
const change1 =(row:any)=>{
|
||||||
if (flag.value) {
|
if (flag.value) {
|
||||||
var bomDetails = list.value;
|
var bomDetails = list.value;
|
||||||
@ -490,6 +530,10 @@ const submitForm = async () => {
|
|||||||
message.error("预计到货日期为空");
|
message.error("预计到货日期为空");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (list[i].unitPrice === null) {
|
||||||
|
message.error("预估单价为空");
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (list[i].estimatedPrices === null) {
|
if (list[i].estimatedPrices === null) {
|
||||||
message.error("预估总价为空");
|
message.error("预估总价为空");
|
||||||
break;
|
break;
|
||||||
|
@ -31,6 +31,7 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
|||||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
|
status:3,
|
||||||
reason: undefined,
|
reason: undefined,
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
|
@ -80,7 +80,7 @@ class="!w-250px" :disabled="alterDisabled || detailDisabled || priceDisabled"
|
|||||||
<el-form-item label="项目开始日期" prop="projectStartTime">
|
<el-form-item label="项目开始日期" prop="projectStartTime">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
class="!w-250px" v-model="formData.projectStartTime"
|
class="!w-250px" v-model="formData.projectStartTime"
|
||||||
type="date" value-format="x" placeholder="选择项目开始日期"
|
type="date" value-format="x" placeholder="选择项目开始日期" @change="changeTime"
|
||||||
:disabled="alterDisabled || detailDisabled || priceDisabled" />
|
:disabled="alterDisabled || detailDisabled || priceDisabled" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -189,7 +189,8 @@ class="!w-250px" v-model="formData.businessMan"
|
|||||||
class="!w-250px"
|
class="!w-250px"
|
||||||
:class="{ 'alter-class': fieldHasAlter('projectEndTime') }"
|
:class="{ 'alter-class': fieldHasAlter('projectEndTime') }"
|
||||||
v-model="formData.projectEndTime" type="date" value-format="x"
|
v-model="formData.projectEndTime" type="date" value-format="x"
|
||||||
placeholder="选择项目结束日期" :disabled="detailDisabled || priceDisabled" />
|
placeholder="选择项目结束日期" :disabled="detailDisabled || priceDisabled"
|
||||||
|
@change="changeTime"/>
|
||||||
<span
|
<span
|
||||||
style="position: absolute; left: 0; top: 30px"
|
style="position: absolute; left: 0; top: 30px"
|
||||||
v-if="formData.projectStartTime && formData.projectEndTime">{{
|
v-if="formData.projectStartTime && formData.projectEndTime">{{
|
||||||
@ -1609,6 +1610,13 @@ type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原
|
|||||||
// 提交请求
|
// 提交请求
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
|
if(formData.value.projectStartTime&&formData.value.projectEndTime ){
|
||||||
|
var endTime = new Date(formData.value.projectEndTime);
|
||||||
|
if(new Date(formData.value.projectStartTime).getTime() > endTime.getTime()) {
|
||||||
|
message.error("项目开始日期不能大于项目结束日期,请确认!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
// 如不是退回 清理审批意见
|
// 如不是退回 清理审批意见
|
||||||
if (active != 'REPULSE') {
|
if (active != 'REPULSE') {
|
||||||
formData.value.activeOpinion = ''
|
formData.value.activeOpinion = ''
|
||||||
@ -1775,7 +1783,14 @@ type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原
|
|||||||
|
|
||||||
// console.log('上传成功数量', successfulUploadsCount.value)
|
// console.log('上传成功数量', successfulUploadsCount.value)
|
||||||
}
|
}
|
||||||
|
const changeTime = () =>{
|
||||||
|
if(formData.value.projectStartTime&&formData.value.projectEndTime ){
|
||||||
|
var endTime = new Date(formData.value.projectEndTime);
|
||||||
|
if(new Date(formData.value.projectStartTime).getTime() > endTime.getTime()) {
|
||||||
|
message.error("项目开始日期不能大于项目结束日期,请确认!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// 处理单个文件上传失败的情况
|
// 处理单个文件上传失败的情况
|
||||||
const handleError = (error: Error, file: UploadUserFile) => {
|
const handleError = (error: Error, file: UploadUserFile) => {
|
||||||
failedUploadsCount.value++
|
failedUploadsCount.value++
|
||||||
|
@ -96,7 +96,7 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div class="hl-footer text-center">
|
<div class="hl-footer text-center">
|
||||||
<el-button @click="receiveGoods()" type="primary" size="large" >收货</el-button>
|
<!-- <el-button @click="receiveGoods()" type="primary" size="large" >收货</el-button>-->
|
||||||
<el-button @click="isPrint()" type="primary" size="large" :loading="printLoading">打印</el-button>
|
<el-button @click="isPrint()" type="primary" size="large" :loading="printLoading">打印</el-button>
|
||||||
<el-button @click="deleteForm()" type="danger" size="large" >删除</el-button>
|
<el-button @click="deleteForm()" type="danger" size="large" >删除</el-button>
|
||||||
<el-button @click="cancel" size="large">取 消</el-button>
|
<el-button @click="cancel" size="large">取 消</el-button>
|
||||||
|
@ -0,0 +1,281 @@
|
|||||||
|
<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="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="username">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.username" 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 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="procedureName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.procedureName" 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: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-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="receiveGoods" type="success" 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 label="收货状态" align="center" prop="receivingStatus" min-width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.receivingStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="projectSubCode" min-width="150" label="子项目编码" align="center"/>
|
||||||
|
<el-table-column prop="blueprintNo" min-width="100" label="图号" align="center"/>
|
||||||
|
<el-table-column prop="boomName" min-width="120" label="零件名称" align="center"/>
|
||||||
|
<el-table-column prop="procedureName" min-width="120" label="工序" align="center"/>
|
||||||
|
<el-table-column prop="compositionName" min-width="100" label="材质" align="center"/>
|
||||||
|
<el-table-column prop="purchaseAmount" min-width="100" label="采购数量" align="center" />
|
||||||
|
<el-table-column prop="purchaseRemAmount" min-width="100" label="剩余数量" align="center"/>
|
||||||
|
<el-table-column prop="purchaseAmount" 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 prop="estimatedPrice" min-width="180" label="预估总价(元)" align="center">
|
||||||
|
<template #header><span class="hl-table_header">*</span>预估总价(元)</template>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-form-item :prop="`${scope.$index}.estimatedPrice`" class="mb-0px!">
|
||||||
|
<el-input-number style="width: 100%" v-model="scope.row.estimatedPrice" placeholder="预估总价" :min="0" :precision="2" />
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="requireTime" min-width="150" label="需要完成日期" align="center" :formatter="dateFormatter1"/>
|
||||||
|
<el-table-column prop="arriveTime" min-width="150" label="预计到货日期" align="center" :formatter="dateFormatter1" />
|
||||||
|
<el-table-column prop="description" min-width="150" label="技术要求" align="center"/>
|
||||||
|
<el-table-column prop="theWeight" min-width="100" label="理论重量" align="center"/>
|
||||||
|
<el-table-column label="操作" align="center" fixed="right" min-width="200">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" v-if="scope.row.receivingStatus!=3" @click="receiveGood(scope.row)">
|
||||||
|
收货
|
||||||
|
</el-button>
|
||||||
|
<el-button link type="primary" @click="updateFrom(scope.row)" v-if="scope.row.receivingStatus==3">
|
||||||
|
总价修改
|
||||||
|
</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 PurchaseOrderNoApi from '@/api/heli/purchaseorderno'
|
||||||
|
import { ElTable } from 'element-plus'
|
||||||
|
import {useUserStore} from "@/store/modules/user";
|
||||||
|
import routeParamsCache from '@/utils/routeParamsCache'
|
||||||
|
import {dateFormatter1, dateFormatter2} from "@/utils/formatTime";
|
||||||
|
import * as PurchaseOrderNoDetailApi from "@/api/heli/purchaseordernodetail";
|
||||||
|
defineOptions({ name: 'purchaseordernopartReceived' })
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const username = userStore.getUser.nickname
|
||||||
|
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: 2,
|
||||||
|
currencyType: undefined,
|
||||||
|
taxRatio: undefined,
|
||||||
|
estimatedPrice: undefined,
|
||||||
|
actualPrice: undefined,
|
||||||
|
status: undefined,
|
||||||
|
submitUserId: undefined,
|
||||||
|
submitTime: [],
|
||||||
|
auditor: undefined,
|
||||||
|
auditTime: [],
|
||||||
|
description: undefined,
|
||||||
|
creator: undefined,
|
||||||
|
createTime: undefined,
|
||||||
|
receivingStatus:1,
|
||||||
|
projectName:undefined,
|
||||||
|
projectSubName:undefined,
|
||||||
|
username:username,
|
||||||
|
supplierName:undefined,
|
||||||
|
boomName:undefined,
|
||||||
|
blueprintNo:undefined,
|
||||||
|
procedureName:undefined
|
||||||
|
})
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
queryParams.ids = undefined
|
||||||
|
const data = await PurchaseOrderNoDetailApi.getReceiveGoodDetail(queryParams)
|
||||||
|
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const updateFrom = async (row) => {
|
||||||
|
await PurchaseOrderNoDetailApi.updateFrom(row)
|
||||||
|
loading.value = true;
|
||||||
|
|
||||||
|
message.success("修改成功");
|
||||||
|
getList(); // 确保刷新完成
|
||||||
|
emit('success');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value.resetFields()
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
const multipleTable: any = ref<InstanceType<typeof ElTable>>()
|
||||||
|
const multipleSelection: any = ref([])
|
||||||
|
|
||||||
|
const handleSelectionChange = (val: PurchaseOrderApi.PurchaseOrderVO[]) => {
|
||||||
|
multipleTable.value = val
|
||||||
|
|
||||||
|
}
|
||||||
|
const receiveGood = async (row) => {
|
||||||
|
multipleTable.value=[]
|
||||||
|
multipleTable.value.push(row)
|
||||||
|
receiveGoods();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const receiveGoods = async () => {
|
||||||
|
try {
|
||||||
|
|
||||||
|
const list = multipleTable.value|| []; // 安全获取数据
|
||||||
|
// 1. 检查空数据
|
||||||
|
if (!list || list.length==null||list.length==0) {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
if (list[i].estimatedPrice==null||list[i].estimatedPrice==0){
|
||||||
|
message.error("零件"+list[i].boomName+"预估总价为空或数量为0,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await PurchaseOrderNoDetailApi.verification(list)
|
||||||
|
const res = await Promise.race([
|
||||||
|
PurchaseOrderNoDetailApi.receiveGoods(list),
|
||||||
|
new Promise((_, reject) =>
|
||||||
|
setTimeout(() => reject(new Error("请求超时")), 30000)
|
||||||
|
)
|
||||||
|
]);
|
||||||
|
loading.value = true;
|
||||||
|
|
||||||
|
message.success("收货成功");
|
||||||
|
getList(); // 确保刷新完成
|
||||||
|
emit('success');
|
||||||
|
} catch (error) {
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 初始化 **/
|
||||||
|
const route = useRoute()
|
||||||
|
const routeValue = ref('')
|
||||||
|
onMounted(async () => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
</script>
|
@ -55,11 +55,26 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<!-- <el-col :span="12">-->
|
||||||
<el-form-item label="备注" prop="remark">
|
<!-- <el-form-item label="备注" prop="remark">-->
|
||||||
<el-input type="textarea" v-model="formData.remark" :disabled="true" />
|
<!-- <el-input type="textarea" v-model="formData.remark" :disabled="true" />-->
|
||||||
</el-form-item>
|
<!-- </el-form-item>-->
|
||||||
</el-col>
|
<!-- </el-col>-->
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="客户名称" prop="customerName">
|
||||||
|
<el-input class="!w-260px" v-model="formData.customerName" :disabled="true" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="9">
|
||||||
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
|
<el-input class="!w-260px" v-model="formData.projectName" :disabled="true" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="9">
|
||||||
|
<el-form-item label="子项目名称" prop="projectSubName">
|
||||||
|
<el-input class="!w-260px" v-model="formData.projectSubName" :disabled="true" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</el-card>
|
||||||
<!-- <el-card class="hl-card-info" v-if="dispatchType == 'ASSEMBLE'">-->
|
<!-- <el-card class="hl-card-info" v-if="dispatchType == 'ASSEMBLE'">-->
|
||||||
@ -716,7 +731,10 @@ const formData = ref({
|
|||||||
taskDispatchDetails: [],
|
taskDispatchDetails: [],
|
||||||
operateLogs: [],
|
operateLogs: [],
|
||||||
active: undefined,
|
active: undefined,
|
||||||
activeOpinion: ''
|
activeOpinion: '',
|
||||||
|
customerName:undefined,
|
||||||
|
projectSubName:undefined,
|
||||||
|
projectName:undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
Loading…
Reference in New Issue
Block a user