近期修改

This commit is contained in:
z 2025-07-07 11:07:46 +08:00
parent 05d944ecd4
commit b076998bb0
18 changed files with 180 additions and 79 deletions

View File

@ -151,7 +151,7 @@ public class bdgzsomthingController {
BeanUtils.toBean(list, bdgzsomthingRespVO.class)); BeanUtils.toBean(list, bdgzsomthingRespVO.class));
} }
// @Scheduled(fixedRate = 10800000) @Scheduled(fixedRate = 10800000)
public void scheduledTask() { public void scheduledTask() {
bdgzsomthingService.selectds(); bdgzsomthingService.selectds();
} }
@ -159,15 +159,15 @@ public class bdgzsomthingController {
//@Scheduled(cron = "0 2 0 * * ?") //每天十天执行一次 //@Scheduled(cron = "0 2 0 * * ?") //每天十天执行一次
@PostConstruct @PostConstruct
public void init() { public void init() {
// selectHasPrice(); selectHasPrice();
// selectSafeStorageAndDeliverOneYear(); selectSafeStorageAndDeliverOneYear();
} }
// @Scheduled(cron = "0 0 2 * * ?") @Scheduled(cron = "0 0 2 * * ?")
public void selectHasPrice(){ public void selectHasPrice(){
bdgzsomthingService.selectHasPrice(); bdgzsomthingService.selectHasPrice();
} }
// @Scheduled(cron = "0 0 0 * * ?") @Scheduled(cron = "0 0 0 * * ?")
public void selectSafeStorageAndDeliverOneYear(){bdgzsomthingService.selectSafeStorageAndDeliverOneYear();} public void selectSafeStorageAndDeliverOneYear(){bdgzsomthingService.selectSafeStorageAndDeliverOneYear();}
@PostMapping("/getMessage") @PostMapping("/getMessage")
@Operation(summary = "小程序消息") @Operation(summary = "小程序消息")

View File

@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialExc
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialRespVO; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialSaveReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.StorageInventoryPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
@ -148,4 +149,12 @@ public class MaterialController {
PageResult<StorageInventoryDO> pageResult = materialService.getStorageNowPageAll(pageReqVO); PageResult<StorageInventoryDO> pageResult = materialService.getStorageNowPageAll(pageReqVO);
return success(pageResult); return success(pageResult);
} }
@GetMapping("/getSupplementPage")
@Operation(summary = "获得库存补充分页")
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:query')")
public CommonResult<PageResult<MaterialDO>> getSupplementPage(@Valid StorageInventoryPageReqVO pageReqVO) {
PageResult<MaterialDO> pageResult = materialService.getSupplementPage(pageReqVO);
return success(pageResult);
}
} }

View File

@ -171,8 +171,14 @@ public class StorageController {
storageInventoryDO.setShortName(materialDO.getShortName()); storageInventoryDO.setShortName(materialDO.getShortName());
storageInventoryDO.setBoomCode(materialDO.getCode()); storageInventoryDO.setBoomCode(materialDO.getCode());
} }
storageInventoryDO.setPrice(storageMatDO.getPrice());
}else { }else {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty())); BigDecimal totalNumber = storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty());
BigDecimal inventoryPrice = storageInventoryDO.getYardAmount().multiply(storageInventoryDO.getPrice());
BigDecimal inPrice = storageMatDO.getStorageOkQty().multiply(storageMatDO.getPrice());
BigDecimal sumPrice = inventoryPrice.add(inPrice);
storageInventoryDO.setPrice(sumPrice.divide(totalNumber,2, RoundingMode.HALF_UP));
storageInventoryDO.setYardAmount(totalNumber);
} }
storageInventoryMapper.insertOrUpdate(storageInventoryDO); storageInventoryMapper.insertOrUpdate(storageInventoryDO);
} }

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
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.material.vo.MaterialPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.StorageInventoryPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
@ -14,6 +15,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogN
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.chanko.yunxi.mes.module.heli.enums.MaterialTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum; import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
@ -23,6 +25,7 @@ import org.springframework.util.StringUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 物料 Mapper * 物料 Mapper
@ -163,4 +166,54 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
} }
default PageResult<MaterialDO> getSupplementPage(StorageInventoryPageReqVO pageReqVO){
MPJLambdaWrapper<MaterialDO> subQuery = new MPJLambdaWrapper<>();
subQuery.select(MaterialDO::getId)
.leftJoin(StorageInventoryDO.class, "s", StorageInventoryDO::getMaterialId, MaterialDO::getId)
.disableSubLogicDel()
.groupBy(MaterialDO::getId)
.having("COALESCE(SUM(s.yard_amount), 0) < COALESCE(MAX(t.inv_safe), 0)");
//执行子查询获取符合条件的matCode
List<Long> qualifiedMatCodes = this.selectList(subQuery)
.stream()
.map(MaterialDO::getId)
.distinct()
.collect(Collectors.toList());
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("w.wh_name as whName","r.rg_name as rgName","p.pn_name as pnName")
.select("t.material_type as materialTypeId","t.unit as matUnitId")
.leftJoin(StorageInventoryDO.class, "s", StorageInventoryDO::getMaterialId, MaterialDO::getId)
.leftJoin(DictDataDO.class,"d",DictDataDO::getValue, MaterialDO::getMaterialType)
.leftJoin(DictDataDO.class,"d1",DictDataDO::getValue, MaterialDO::getUnit)
.leftJoin(WarehouseDO.class,"w",WarehouseDO::getId, StorageInventoryDO::getWhId)
.leftJoin(RgDO.class,"r",RgDO::getId, StorageInventoryDO::getRgId)
.leftJoin(PnDO.class,"p",PnDO::getId, StorageInventoryDO::getPnId)
.disableSubLogicDel()
.groupBy(StorageInventoryDO::getId)
.groupBy(MaterialDO::getId)
.orderByDesc(StorageInventoryDO::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,MaterialDO::getVirtualPart, YesOrNoEnum.N.name())
.eq(MaterialDO::getStatus,1)
.eq(MaterialDO::getTenantId, 2)
.eq(pageReqVO.getWhId()!= null,StorageInventoryDO::getWhId, pageReqVO.getWhId())
.eq(pageReqVO.getRgId()!= null,StorageInventoryDO::getRgId, pageReqVO.getRgId())
.eq(pageReqVO.getPnId()!= null,StorageInventoryDO::getPnId, pageReqVO.getPnId())
.eq("d.dict_type","heli_material_type")
.eq("d1.dict_type","heli_material_unit");
if (!qualifiedMatCodes.isEmpty()) {
query.in(MaterialDO::getId, qualifiedMatCodes);
} else {
// 如果没有符合条件的matCode返回空结果
query.apply("1 = 0");
}
return selectPage(pageReqVO, query);
}
} }

View File

@ -170,9 +170,9 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
query.selectAll(MaterialPlanBoomDO.class) query.selectAll(MaterialPlanBoomDO.class)
.select("mat.id as matId","mat.name as matName","mat.code as matCode","mat.spec as matSpec","mat.unit as matUnit","mat.material_type as matType") .select("mat.id as matId","mat.name as matName","mat.code as matCode","mat.spec as matSpec","mat.unit as matUnit","mat.material_type as matType")
.select("sum(ifnull(sm.storage_ok_qty,0)) as matRest") .select("sum(ifnull(sm.yard_amount,0)) as matRest")
.leftJoin(MaterialDO.class, "mat", MaterialDO::getId, MaterialPlanDetailDO::getMaterialId) .leftJoin(MaterialDO.class, "mat", MaterialDO::getId, MaterialPlanDetailDO::getMaterialId)
.leftJoin(StorageMaterialDO.class,"sm",StorageMaterialDO::getId, MaterialPlanDetailDO::getMaterialId) .leftJoin(StorageInventoryDO.class,"sm",StorageInventoryDO::getMaterialId, MaterialPlanDetailDO::getMaterialId)
.disableSubLogicDel() .disableSubLogicDel()
.groupBy(MaterialPlanBoomDO::getId) .groupBy(MaterialPlanBoomDO::getId)
.orderByDesc(MaterialPlanBoomDO::getCreateTime); .orderByDesc(MaterialPlanBoomDO::getCreateTime);

View File

@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.service.material;
import java.util.*; import java.util.*;
import javax.validation.*; import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.StorageInventoryPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -67,4 +68,6 @@ public interface MaterialService {
PageResult<MaterialDO> getStorageNowPageGroupMaterial(StorageLogPageReqVO pageReqVO); PageResult<MaterialDO> getStorageNowPageGroupMaterial(StorageLogPageReqVO pageReqVO);
PageResult<StorageInventoryDO> getStorageNowPageAll(StorageLogPageReqVO pageReqVO); PageResult<StorageInventoryDO> getStorageNowPageAll(StorageLogPageReqVO pageReqVO);
PageResult<MaterialDO> getSupplementPage(StorageInventoryPageReqVO pageReqVO);
} }

View File

@ -12,6 +12,7 @@ import com.chanko.yunxi.mes.framework.tenant.core.util.TenantUtils;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialExcelVO; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialExcelVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialSaveReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.StorageInventoryPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
@ -284,6 +285,11 @@ public class MaterialServiceImpl implements MaterialService {
return pageResult; return pageResult;
} }
@Override
public PageResult<MaterialDO> getSupplementPage(StorageInventoryPageReqVO pageReqVO) {
return materialMapper.getSupplementPage(pageReqVO);
}
private void checkData(List<MaterialExcelVO> materialExcelVOList) { private void checkData(List<MaterialExcelVO> materialExcelVOList) {
// 基础校验 // 基础校验
Set<ConstraintViolation<List<MaterialExcelVO>>> validate = validator.validate(materialExcelVOList, MaterialExcelVO.class); Set<ConstraintViolation<List<MaterialExcelVO>>> validate = validator.validate(materialExcelVOList, MaterialExcelVO.class);

View File

@ -248,7 +248,8 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
storageMatMapper.insertBatch(outList); storageMatMapper.insertBatch(outList);
storageService.updateMatLogList(storageDO.getId(),2); storageService.updateMatLogList(storageDO.getId(),2);
storageService.updateMatLogList(out.getId(),2); storageService.updateMatLogList(out.getId(),2);
storageMapper.deleteById(storageDO);
storageMapper.deleteById(out);
// materialMapper.insertBatch(materialDOList); // materialMapper.insertBatch(materialDOList);
return success(true); return success(true);
} }

View File

@ -43,6 +43,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -426,6 +427,7 @@ private StorageLogService storageLogService;
storageDO.setStockNo(STOCK_IN.getCode(serialNumberDO1.getSerialNumber().toString())); storageDO.setStockNo(STOCK_IN.getCode(serialNumberDO1.getSerialNumber().toString()));
serialNumberService.updateSerialNumber(serialNumberDO1); serialNumberService.updateSerialNumber(serialNumberDO1);
storageDO.setStatus(2); storageDO.setStatus(2);
storageDO.setStockInType(1);
storageDO.setKeeper(getLoginUser().getId()); storageDO.setKeeper(getLoginUser().getId());
storageDO.setKeeperTime(LocalDateTime.now()); storageDO.setKeeperTime(LocalDateTime.now());
storageMapper.insert(storageDO); storageMapper.insert(storageDO);
@ -445,6 +447,8 @@ private StorageLogService storageLogService;
//入库日志 //入库日志
updateMatLogList(storageDO.getId(),2); updateMatLogList(storageDO.getId(),2);
storageMapper.deleteById(storageDO);
LambdaUpdateWrapper<PurchaseOrderNoDetailDO> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<PurchaseOrderNoDetailDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PurchaseOrderNoDetailDO::getId,createReqVO.getId()); updateWrapper.eq(PurchaseOrderNoDetailDO::getId,createReqVO.getId());
updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,3); updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,3);
@ -459,6 +463,11 @@ private StorageLogService storageLogService;
wrapper.eq(StorageInventoryDO::getPnId,createReqVO.getPnId()); wrapper.eq(StorageInventoryDO::getPnId,createReqVO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted,0); wrapper.eq(StorageInventoryDO::getDeleted,0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper); StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = purchaseOrderNoDetailMapper.selectById(createReqVO.getId());
BigDecimal purchasePrice=BigDecimal.ZERO;
if (ObjectUtil.isNotEmpty(purchaseOrderNoDetailDO)){
purchasePrice= purchaseOrderNoDetailDO.getEstimatedPrice().divide(purchaseOrderNoDetailDO.getPurchaseAmount(), 2, RoundingMode.HALF_UP);
}
if (ObjectUtil.isEmpty(storageInventoryDO)){ if (ObjectUtil.isEmpty(storageInventoryDO)){
storageInventoryDO = new StorageInventoryDO(); storageInventoryDO = new StorageInventoryDO();
storageInventoryDO.setMaterialId(createReqVO.getMaterialId()); storageInventoryDO.setMaterialId(createReqVO.getMaterialId());
@ -474,7 +483,13 @@ private StorageLogService storageLogService;
storageInventoryDO.setShortName(materialDO.getShortName()); storageInventoryDO.setShortName(materialDO.getShortName());
storageInventoryDO.setBoomCode(materialDO.getCode()); storageInventoryDO.setBoomCode(materialDO.getCode());
} }
storageInventoryDO.setPrice(purchasePrice);
}else { }else {
BigDecimal totalNumber = storageInventoryDO.getYardAmount().add(createReqVO.getStorageAmount());
BigDecimal inventoryPrice = storageInventoryDO.getYardAmount().multiply(storageInventoryDO.getPrice());
BigDecimal inPrice = createReqVO.getStorageAmount().multiply(purchasePrice);
BigDecimal sumPrice = inventoryPrice.add(inPrice);
storageInventoryDO.setPrice(sumPrice.divide(totalNumber,2, RoundingMode.HALF_UP));
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(createReqVO.getStorageAmount())); storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(createReqVO.getStorageAmount()));
} }
storageInventoryMapper.insertOrUpdate(storageInventoryDO); storageInventoryMapper.insertOrUpdate(storageInventoryDO);

View File

@ -323,7 +323,8 @@ public class StorageInServiceImpl implements StorageInService {
storageMatMapper.insertBatch(outList); storageMatMapper.insertBatch(outList);
storageService.updateMatLogList(storageDO.getId(),2); storageService.updateMatLogList(storageDO.getId(),2);
storageService.updateMatLogList(out.getId(),2); storageService.updateMatLogList(out.getId(),2);
storageMapper.deleteById(storageDO);
storageMapper.deleteById(out);
return CommonResult.success(true); return CommonResult.success(true);
} }

View File

@ -71,8 +71,13 @@ public class UnqualifiedNotificationServiceImpl implements UnqualifiedNotificati
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1); serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
unqualifiedNotification.setCode(CodeEnum.UNQUALIFIED_NOTIFICATION.getCode(serialNumberDO.getSerialNumber().toString())); unqualifiedNotification.setCode(CodeEnum.UNQUALIFIED_NOTIFICATION.getCode(serialNumberDO.getSerialNumber().toString()));
unqualifiedNotification.setNotificationStatus(UnqualifiedNotificationStatusEnum.valueOf(createReqVO.getActive()).getCode()); unqualifiedNotification.setNotificationStatus(UnqualifiedNotificationStatusEnum.valueOf(createReqVO.getActive()).getCode());
try {
unqualifiedNotificationMapper.insert(unqualifiedNotification);
} catch (Exception e){
e.printStackTrace();
}
unqualifiedNotificationMapper.insert(unqualifiedNotification);
//质检通知单预警 //质检通知单预警
{ {

View File

@ -27,7 +27,7 @@
<!-- <if test="wh_id != null and wh_id != ''">--> <!-- <if test="wh_id != null and wh_id != ''">-->
<!-- AND wh_id = #{wh_id}--> <!-- AND wh_id = #{wh_id}-->
<!-- </if>--> <!-- </if>-->
select mat_id,mat_name,mat_code,mat_rest,material_type,wh_id,rg_id,pn_id,spec as mat_spec,unit as mat_unit,'' as lot_no,storage_ok_qty from v_storage_material_amount where > 0 select mat_id,mat_name,mat_code,mat_rest,material_type,wh_id,rg_id,pn_id,spec as mat_spec,unit as mat_unit,'' as lot_no,storage_ok_qty from v_storage_material_amount where mat_rest > 0
<if test="wh_id != null and wh_id != ''"> <if test="wh_id != null and wh_id != ''">
AND wh_id = #{wh_id} AND wh_id = #{wh_id}
</if> </if>

View File

@ -79,3 +79,8 @@ export const getStorageNowAllPage = async (params) => {
export const getStorageNowMaterialGroupPage = async (params) => { export const getStorageNowMaterialGroupPage = async (params) => {
return await request.get({ url: `/heli/material/page-material-group`, params }) return await request.get({ url: `/heli/material/page-material-group`, params })
} }
// 查询库存补充
export const getSupplementPage = async (params) => {
return await request.get({ url: `/heli/material/getSupplementPage`, params })
}

View File

@ -13,7 +13,7 @@ v-model="queryParams.purchaseNo" placeholder="采购单号" clearable @keyup.ent
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="createTime"> <el-form-item label="单据日期" prop="createTime">
<el-date-picker <el-date-picker
class="!w-240px" v-model="queryParams.createTime" type="date" value-format="x" class="!w-220px" v-model="queryParams.createTime" type="date" value-format="x"
placeholder="单据日期" /> placeholder="单据日期" />
</el-form-item> </el-form-item>
<el-form-item label="供应商" prop="supplierName"> <el-form-item label="供应商" prop="supplierName">
@ -21,27 +21,27 @@ v-model="queryParams.purchaseNo" placeholder="采购单号" clearable @keyup.ent
v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.enter="handleQuery" v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.enter="handleQuery"
class="!w-240px" /> class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item label="采购单类型" prop="purchaseType"> <!-- <el-form-item label="采购单类型" prop="purchaseType">-->
<el-select v-model="queryParams.purchaseType" placeholder="下拉选择" clearable class="!w-240px"> <!-- <el-select v-model="queryParams.purchaseType" placeholder="下拉选择" clearable class="!w-240px">-->
<el-option <!-- <el-option-->
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_ORDER_TYPE)" :key="dict.value" <!--v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_ORDER_TYPE)" :key="dict.value"-->
:label="dict.label" :value="dict.value" /> <!-- :label="dict.label" :value="dict.value" />-->
</el-select> <!-- </el-select>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="物料需求计划单号" prop="materialPlanNo"> <el-form-item label="物料需求计划单号" prop="materialPlanNo">
<el-input <el-input
v-model="queryParams.materialPlanNo" placeholder="物料需求计划单号" clearable @keyup.enter="handleQuery" v-model="queryParams.materialPlanNo" placeholder="物料需求计划单号" clearable @keyup.enter="handleQuery"
class="!w-240px" /> class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item label="采购物类型" prop="goodsType"> <!-- <el-form-item label="采购物类型" prop="goodsType">-->
<el-select v-model="queryParams.goodsType" placeholder="下拉选择" clearable class="!w-240px"> <!-- <el-select v-model="queryParams.goodsType" placeholder="下拉选择" clearable class="!w-220px">-->
<el-option <!-- <el-option-->
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_GOODS_TYPE)" :key="dict.value" <!--v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_GOODS_TYPE)" :key="dict.value"-->
:label="dict.label" :value="dict.value" /> <!-- :label="dict.label" :value="dict.value" />-->
</el-select> <!-- </el-select>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="单据状态" prop="status"> <el-form-item label="单据状态" prop="status">
<el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-240px"> <el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-220px">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_ORDER_STATUS).filter(item=>item.value != 1)" :key="dict.value" v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_ORDER_STATUS).filter(item=>item.value != 1)" :key="dict.value"
:label="dict.label" :value="dict.value" /> :label="dict.label" :value="dict.value" />
@ -151,7 +151,7 @@ const queryParams = reactive({
purchaseNo: undefined, purchaseNo: undefined,
supplierId: undefined, supplierId: undefined,
contractNo: undefined, contractNo: undefined,
purchaseType: undefined, purchaseType: 2,
projectMaterialPlanId: undefined, projectMaterialPlanId: undefined,
goodsType: undefined, goodsType: undefined,
currencyType: undefined, currencyType: undefined,
@ -201,6 +201,7 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
queryFormRef.value.resetFields() queryFormRef.value.resetFields()
setDefaultDate()
handleQuery() handleQuery()
} }

View File

@ -318,7 +318,7 @@
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column prop="matUnit" label="系统单位" min-width="100" align="center"> <el-table-column prop="matUnit" label="系统单位" min-width="100" align="center">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" v-if="typeof scope.row.matUnit === 'number'"/> <dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="description" min-width="180" label="备注" align="center"> <el-table-column prop="description" min-width="180" label="备注" align="center">

View File

@ -671,17 +671,11 @@ import { dateFormatter, formatDate } from '@/utils/formatTime'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import { useTagsViewStore } from '@/store/modules/tagsView' import { useTagsViewStore } from '@/store/modules/tagsView'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue' import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
import CompositionSelect from '@/views/heli/hlvuestyle/compositionSelect.vue'
import materials from '@/views/heli/storage/materials.vue' import materials from '@/views/heli/storage/materials.vue'
import MaterialDialog from '@/views/heli/purchaseorder/materialDialog.vue' import MaterialDialog from '@/views/heli/purchaseorder/materialDialog.vue'
import BoomDialog from '@/views/heli/purchaseorder/boomDialog.vue' import BoomDialog from '@/views/heli/purchaseorder/boomDialog.vue'
import SupplierSelect from '@/views/heli/hlvuestyle/supplierSelect.vue' import SupplierSelect from '@/views/heli/hlvuestyle/supplierSelect.vue'
import {setFlagsFromString} from "node:v8";
import {
createPurchaseOrderNoDetail, deletePurchaseOrderNoDetail,
PurchaseOrderNoDetailVO, updatePurchaseOrderNoDetail
} from "@/api/heli/purchaseordernodetail";
const reload: any = inject('reload') const reload: any = inject('reload')
const { t } = useI18n() // const { t } = useI18n() //

View File

@ -13,7 +13,7 @@ v-model="queryParams.purchaseNo" placeholder="采购单号" clearable @keyup.ent
</el-form-item> </el-form-item>
<el-form-item label="单据日期" prop="createTime"> <el-form-item label="单据日期" prop="createTime">
<el-date-picker <el-date-picker
class="!w-240px" v-model="queryParams.createTime" type="date" value-format="x" class="!w-220px" v-model="queryParams.createTime" type="date" value-format="x"
placeholder="单据日期" /> placeholder="单据日期" />
</el-form-item> </el-form-item>
<el-form-item label="供应商" prop="supplierName"> <el-form-item label="供应商" prop="supplierName">
@ -21,27 +21,27 @@ class="!w-240px" v-model="queryParams.createTime" type="date" value-format="x"
v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.enter="handleQuery" v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.enter="handleQuery"
class="!w-240px" /> class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item label="采购单类型" prop="purchaseType"> <!-- <el-form-item label="采购单类型" prop="purchaseType">-->
<el-select v-model="queryParams.purchaseType" placeholder="下拉选择" clearable class="!w-240px"> <!-- <el-select v-model="queryParams.purchaseType" placeholder="下拉选择" clearable class="!w-240px">-->
<el-option <!-- <el-option-->
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_ORDER_TYPE)" :key="dict.value" <!--v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_ORDER_TYPE)" :key="dict.value"-->
:label="dict.label" :value="dict.value" /> <!-- :label="dict.label" :value="dict.value" />-->
</el-select> <!-- </el-select>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="物料需求计划单号" prop="materialPlanNo"> <el-form-item label="物料需求计划单号" prop="materialPlanNo">
<el-input <el-input
v-model="queryParams.materialPlanNo" placeholder="物料需求计划单号" clearable @keyup.enter="handleQuery" v-model="queryParams.materialPlanNo" placeholder="物料需求计划单号" clearable @keyup.enter="handleQuery"
class="!w-240px" /> class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item label="采购物类型" prop="goodsType"> <!-- <el-form-item label="采购物类型" prop="goodsType">-->
<el-select v-model="queryParams.goodsType" placeholder="下拉选择" clearable class="!w-240px"> <!-- <el-select v-model="queryParams.goodsType" placeholder="下拉选择" clearable class="!w-220px">-->
<el-option <!-- <el-option-->
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_GOODS_TYPE)" :key="dict.value" <!--v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_GOODS_TYPE)" :key="dict.value"-->
:label="dict.label" :value="dict.value" /> <!-- :label="dict.label" :value="dict.value" />-->
</el-select> <!-- </el-select>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="单据状态" prop="status"> <el-form-item label="单据状态" prop="status">
<el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-240px"> <el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-220px">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_ORDER_STATUS)" :key="dict.value" v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_ORDER_STATUS)" :key="dict.value"
:label="dict.label" :value="dict.value" /> :label="dict.label" :value="dict.value" />
@ -86,7 +86,7 @@ label="单据日期" align="center" prop="createTime" :formatter="dateFormatter"
fixed> fixed>
<template #default="scope"> <template #default="scope">
{{ {{
formatDate(scope.row.createTime, 'YYYY-MM-DD') formatDate1(scope.row.createTime, 'YYYY-MM-DD')
}} }}
</template> </template>
</el-table-column> </el-table-column>
@ -170,7 +170,7 @@ link type="primary" @click="editReceivingStatus(scope.row.id)"
<span style="margin-left:20px;width: 110px">联系人{{ printData.contactName }}</span> <span style="margin-left:20px;width: 110px">联系人{{ printData.contactName }}</span>
<span style="margin-left:20px;width: 150px">电话{{ printData.contactMobile }}</span> <span style="margin-left:20px;width: 150px">电话{{ printData.contactMobile }}</span>
</div> </div>
</div> </div>
</div> </div>
<table class="print-table"> <table class="print-table">
@ -184,7 +184,7 @@ link type="primary" @click="editReceivingStatus(scope.row.id)"
<col style="width: 7%;" /> <col style="width: 7%;" />
<col style="width: 10%;" /> <col style="width: 10%;" />
<col style="width: 7%;" /> <col style="width: 7%;" />
</colgroup> </colgroup>
<thead> <thead>
@ -198,7 +198,7 @@ link type="primary" @click="editReceivingStatus(scope.row.id)"
<th>采购数量</th> <th>采购数量</th>
<th>单价()</th> <th>单价()</th>
<th>总价格()</th> <th>总价格()</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -216,8 +216,8 @@ link type="primary" @click="editReceivingStatus(scope.row.id)"
<td>{{ printData.purchaseOrderNoDetailList[index]?.purchaseAmountSum || '' }}</td> <td>{{ printData.purchaseOrderNoDetailList[index]?.purchaseAmountSum || '' }}</td>
<td>{{ printData.purchaseOrderNoDetailList[index]?.estimatedPriceSum || '' }}</td> --> <td>{{ printData.purchaseOrderNoDetailList[index]?.estimatedPriceSum || '' }}</td> -->
</tr> </tr>
<tr> <tr>
<td colspan="5"></td> <td colspan="5"></td>
@ -245,7 +245,7 @@ link type="primary" @click="editReceivingStatus(scope.row.id)"
</div> </div>
</div> </div>
</div> </div>
<template #footer> <template #footer>
<el-button @click="printDialogVisible = false">关闭</el-button> <el-button @click="printDialogVisible = false">关闭</el-button>
@ -256,7 +256,7 @@ link type="primary" @click="editReceivingStatus(scope.row.id)"
<script setup lang="ts"> <script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter, formatDate } from '@/utils/formatTime' import {dateFormatter, formatDate, formatDate1} from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import * as PurchaseOrderApi from '@/api/heli/purchaseorder' import * as PurchaseOrderApi from '@/api/heli/purchaseorder'
import * as PurchaseOrderNoApi from '@/api/heli/purchaseorderno' import * as PurchaseOrderNoApi from '@/api/heli/purchaseorderno'
@ -279,7 +279,7 @@ const queryParams = reactive({
purchaseNo: undefined, purchaseNo: undefined,
supplierId: undefined, supplierId: undefined,
contractNo: undefined, contractNo: undefined,
purchaseType: undefined, purchaseType: 2,
projectMaterialPlanId: undefined, projectMaterialPlanId: undefined,
goodsType: undefined, goodsType: undefined,
currencyType: undefined, currencyType: undefined,
@ -315,7 +315,7 @@ const getList = async () => {
const handleQuery = () => { const handleQuery = () => {
queryParams.pageNo = 1 queryParams.pageNo = 1
if (queryParams.createTime !== "Invalid Date" && queryParams.createTime !== "") { if (queryParams.createTime !== "Invalid Date" && queryParams.createTime !== "") {
queryParams.createTime = formatDate(queryParams.createTime, 'YYYY-MM-DD') queryParams.createTime = formatDate1(queryParams.createTime, 'YYYY-MM-DD')
} }
getList() getList()
} }
@ -323,6 +323,7 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
queryFormRef.value.resetFields() queryFormRef.value.resetFields()
setDefaultDate()
handleQuery() handleQuery()
} }
const multipleTable: any = ref<InstanceType<typeof ElTable>>() const multipleTable: any = ref<InstanceType<typeof ElTable>>()
@ -504,22 +505,22 @@ function doPrint() {
.order-info { .order-info {
justify-content: space-between; justify-content: space-between;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
} }
.stamp-info { .stamp-info {
margin-top: 10px; margin-top: 10px;
} }
.stamp-info span{ .stamp-info span{
font-size: 15px !important; font-size: 15px !important;
} }
.order-info span{ .order-info span{
font-size: 15px !important; font-size: 15px !important;
} }
.print-table { .print-table {
width: 100%; width: 100%;
@ -538,7 +539,7 @@ function doPrint() {
} }
@media print { @media print {
body { margin: 0; } body { margin: 0; }
.print-content { .print-content {
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: 10px; padding: 10px;
@ -558,7 +559,7 @@ function doPrint() {
iframe.contentWindow?.print() iframe.contentWindow?.print()
setTimeout(() => document.body.removeChild(iframe), 1000) setTimeout(() => document.body.removeChild(iframe), 1000)
} }
} }
function limitTo20Chars(input) { function limitTo20Chars(input) {
@ -573,12 +574,12 @@ function limitTo20Chars(input) {
body * { body * {
visibility: hidden; visibility: hidden;
} }
/* 只显示打印区域 */ /* 只显示打印区域 */
#printArea, #printArea * { #printArea, #printArea * {
visibility: visible; visibility: visible;
} }
/* 打印区域定位 */ /* 打印区域定位 */
#printArea { #printArea {
position: absolute; position: absolute;
@ -586,7 +587,7 @@ function limitTo20Chars(input) {
top: 0; top: 0;
width: 100%; width: 100%;
} }
/* 隐藏弹窗相关元素 */ /* 隐藏弹窗相关元素 */
.el-dialog, .el-dialog__wrapper, .el-dialog__header, .el-dialog__footer { .el-dialog, .el-dialog__wrapper, .el-dialog__header, .el-dialog__footer {
display: none !important; display: none !important;
@ -595,7 +596,7 @@ function limitTo20Chars(input) {
.order-info { .order-info {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
@ -607,11 +608,11 @@ function limitTo20Chars(input) {
} }
.stamp-info { .stamp-info {
margin-top: 10px; margin-top: 10px;
} }
.stamp-info span{ .stamp-info span{
font-size: 15px !important; font-size: 15px !important;
} }
.print-table { .print-table {
width: 100%; width: 100%;
@ -632,12 +633,12 @@ function limitTo20Chars(input) {
} }
.print-table th { .print-table th {
background-color: #f5f7fa; background-color: #f5f7fa;
color: #303133; color: #303133;
font-weight: 600; font-weight: 600;
font-size: 13px !important; font-size: 13px !important;
} }
</style> </style>

View File

@ -109,7 +109,7 @@ v-for="dict in pnCurrentList" :key="dict.id" :label="dict.pn_name"
<script setup lang="ts"> <script setup lang="ts">
import download from '@/utils/download' import download from '@/utils/download'
import * as StorageLogApi from '@/api/heli/storagelog' import * as MaterialApi from '@/api/heli/material'
import * as StorageinventoryApi from '@/api/heli/storageinventory' import * as StorageinventoryApi from '@/api/heli/storageinventory'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
@ -158,7 +158,8 @@ const getList = async () => {
loading.value = true loading.value = true
try { try {
// const data = await StorageLogApi.getSupplementPage(queryParams) // const data = await StorageLogApi.getSupplementPage(queryParams)
const data = await StorageinventoryApi.getSupplementPage(queryParams) // const data = await StorageinventoryApi.getSupplementPage(queryParams)
const data = await MaterialApi.getSupplementPage(queryParams)
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
} finally { } finally {