库存更改

This commit is contained in:
z 2025-07-04 18:53:50 +08:00
parent 7ef1c6dcb5
commit 8735b44898
47 changed files with 1897 additions and 152 deletions

View File

@ -67,6 +67,7 @@ public interface ErrorCodeConstants {
ErrorCode BEFORE_STORAGE_NOT_EXISTS = new ErrorCode(1_003_009, "物料原仓库查询错误"); ErrorCode BEFORE_STORAGE_NOT_EXISTS = new ErrorCode(1_003_009, "物料原仓库查询错误");
ErrorCode STORAGE_IN_NOT_EXISTS = new ErrorCode(1_003_010, "入库单不存在"); ErrorCode STORAGE_IN_NOT_EXISTS = new ErrorCode(1_003_010, "入库单不存在");
ErrorCode STORAGE_IN_DETAIL_NOT_EXISTS = new ErrorCode(1_003_011, "入库单明细不存在"); ErrorCode STORAGE_IN_DETAIL_NOT_EXISTS = new ErrorCode(1_003_011, "入库单明细不存在");
ErrorCode STORAGE_INVENTORY_NOT_EXISTS = new ErrorCode(1_003_012, "库存不存在");
/************订单管理***********/ /************订单管理***********/
ErrorCode PROJECT_ORDER_NOT_EXISTS = new ErrorCode(1_004_001, "项目订单不存在"); ErrorCode PROJECT_ORDER_NOT_EXISTS = new ErrorCode(1_004_001, "项目订单不存在");
/************发货管理***********/ /************发货管理***********/

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,7 +10,11 @@ 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.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.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
import com.chanko.yunxi.mes.module.heli.service.material.MaterialService; import com.chanko.yunxi.mes.module.heli.service.material.MaterialService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -128,4 +132,20 @@ public class MaterialController {
PageResult<MaterialDO> pageResult = materialService.getbzjList(pageReqVO); PageResult<MaterialDO> pageResult = materialService.getbzjList(pageReqVO);
return success(BeanUtils.toBean(pageResult, MaterialRespVO.class)); return success(BeanUtils.toBean(pageResult, MaterialRespVO.class));
} }
@GetMapping("/page-material-group")
@Operation(summary = "获得入库物料列表")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
public CommonResult<PageResult<MaterialDO>> getStorageLogPageGroupMaterial(@Valid StorageLogPageReqVO pageReqVO) {
PageResult<MaterialDO> pageResult = materialService.getStorageNowPageGroupMaterial(pageReqVO);
return success(pageResult);
}
@GetMapping("/page-now-all")
@Operation(summary = "获得出库物料列表")
@PreAuthorize("@ss.hasPermission('heli:storage-log:query')")
public CommonResult<PageResult<StorageInventoryDO>> getStorageLogPageAll(@Valid StorageLogPageReqVO pageReqVO) {
PageResult<StorageInventoryDO> pageResult = materialService.getStorageNowPageAll(pageReqVO);
return success(pageResult);
}
} }

View File

@ -2,6 +2,7 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat; import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -27,7 +28,7 @@ public class MaterialPlanBoomExcelVo {
@ExcelProperty("子项目名称") @ExcelProperty("子项目名称")
private String projectSubName; private String projectSubName;
@ExcelProperty("物料编码") @ExcelProperty("物料编码")
private String materialName; private String materialNames;
@ExcelProperty("物料名称") @ExcelProperty("物料名称")
private String matName; private String matName;
@ -37,9 +38,15 @@ public class MaterialPlanBoomExcelVo {
private String blueprintNo; private String blueprintNo;
@ExcelProperty("需求数量") @ExcelProperty("需求数量")
private String boomAmount; private String boomAmount;
@ExcelProperty("系统单位") @ExcelProperty("领料数量")
private String pickAmount;
@ExcelProperty(value = "系统单位", converter = DictConvert.class)
@DictFormat("heli_material_unit") @DictFormat("heli_material_unit")
private String boomUnit; private String boomUnit;
@ExcelProperty("库区")
private String rgName;
@ExcelProperty("库位")
private String pnName;
@ExcelProperty("要求完成日期") @ExcelProperty("要求完成日期")
private String boomArriveDates; private String boomArriveDates;
} }

View File

@ -92,5 +92,15 @@ public class MatReqDetailRespVO {
*/ */
@Schema(description = "物料编码", example = "32088") @Schema(description = "物料编码", example = "32088")
private String materialCode; private String materialCode;
@Schema(description = "领料数量", example = "32088")
private BigDecimal pickAmount;
@Schema(description = "仓库", example = "32088")
private String whName;
@Schema(description = "库区", example = "32088")
private String rgName;
@Schema(description = "库位", example = "32088")
private String pnName;
} }

View File

@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
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.storagelog.StorageLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.heli.service.storagelog.StorageLogService; import com.chanko.yunxi.mes.module.heli.service.storagelog.StorageLogService;
@ -66,6 +68,8 @@ public class StorageController {
private StorageLogNowMapper storageLogNowMapper; private StorageLogNowMapper storageLogNowMapper;
@Resource @Resource
private MaterialMapper materialMapper; private MaterialMapper materialMapper;
@Resource
private StorageInventoryMapper storageInventoryMapper;
@PostMapping("/cancelWeiWai") @PostMapping("/cancelWeiWai")
@Operation(summary = "委外取消提交") @Operation(summary = "委外取消提交")
@PreAuthorize("@ss.hasPermission('heli:storage:create')") @PreAuthorize("@ss.hasPermission('heli:storage:create')")
@ -140,53 +144,116 @@ public class StorageController {
storageService.updateStorage(updateReqVO); storageService.updateStorage(updateReqVO);
int status = targetDo.getStatus(); int status = targetDo.getStatus();
if (updateReqVO.getStockType()==1&&updateReqVO.getStockInType()==1){ // if (updateReqVO.getStockType()==1&&updateReqVO.getStockInType()==1){
// if (status==2){
// List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(targetDo.getId());
// for (StorageMatDO storageMatDO : matList) {
// LambdaQueryWrapper<StorageLogNowDO> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(StorageLogNowDO::getMatCode, storageMatDO.getMatCode());
// wrapper.eq(StorageLogNowDO::getMatName,storageMatDO.getMatName());
// BigDecimal totalStorageOkQty = storageLogNowMapper.selectList(wrapper).stream()
// .map(StorageLogNowDO::getStorageOkQty)
// .filter(Objects::nonNull) // 确保过滤掉 null
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(MaterialDO::getCode, storageMatDO.getMatCode());
// queryWrapper.eq(MaterialDO::getName,storageMatDO.getMatName());
// MaterialDO materialDO = materialMapper.selectOne(queryWrapper);
// if (ObjectUtil.isEmpty(materialDO.getPrice())){
// materialDO.setPrice(BigDecimal.ZERO);
// }
// BigDecimal add = totalStorageOkQty.multiply(materialDO.getPrice()).add(storageMatDO.getPrice().multiply(storageMatDO.getStorageOkQty()));
// BigDecimal divide = add.divide(totalStorageOkQty.add(storageMatDO.getStorageOkQty()),2,RoundingMode.HALF_UP);
// materialDO.setPrice(divide);
// materialMapper.updateById(materialDO);
// }
// }else if (status==3){
// List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(targetDo.getId());
// for (StorageMatDO storageMatDO : matList) {
// LambdaQueryWrapper<StorageLogNowDO> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(StorageLogNowDO::getMatCode, storageMatDO.getMatCode());
// wrapper.eq(StorageLogNowDO::getMatName,storageMatDO.getMatName());
// BigDecimal totalStorageOkQty = storageLogNowMapper.selectList(wrapper).stream()
// .map(StorageLogNowDO::getStorageOkQty)
// .filter(Objects::nonNull) // 确保过滤掉 null
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(MaterialDO::getCode, storageMatDO.getMatCode());
// queryWrapper.eq(MaterialDO::getName,storageMatDO.getMatName());
// MaterialDO materialDO = materialMapper.selectOne(queryWrapper);
// if (ObjectUtil.isEmpty(materialDO.getPrice())){
// materialDO.setPrice(BigDecimal.ZERO);
// }
// BigDecimal add = totalStorageOkQty.multiply(materialDO.getPrice()).subtract(storageMatDO.getPrice().multiply(storageMatDO.getStorageOkQty()));
// BigDecimal divide = add.divide(totalStorageOkQty.subtract(storageMatDO.getStorageOkQty()),2,RoundingMode.HALF_UP);
// materialDO.setPrice(divide);
// materialMapper.updateById(materialDO);
// }
// }
// }
List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(targetDo.getId());
if (updateReqVO.getStockType()==1){
if (status==2){ if (status==2){
List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(targetDo.getId());
for (StorageMatDO storageMatDO : matList) { for (StorageMatDO storageMatDO : matList) {
LambdaQueryWrapper<StorageLogNowDO> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageLogNowDO::getMatCode, storageMatDO.getMatCode()); wrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId());
wrapper.eq(StorageLogNowDO::getMatName,storageMatDO.getMatName()); wrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId());
BigDecimal totalStorageOkQty = storageLogNowMapper.selectList(wrapper).stream() wrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId());
.map(StorageLogNowDO::getStorageOkQty) wrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId());
.filter(Objects::nonNull) // 确保过滤掉 null wrapper.eq(StorageInventoryDO::getDeleted,0);
.reduce(BigDecimal.ZERO, BigDecimal::add); StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>(); if (ObjectUtil.isEmpty(storageInventoryDO)){
queryWrapper.eq(MaterialDO::getCode, storageMatDO.getMatCode()); storageInventoryDO = new StorageInventoryDO();
queryWrapper.eq(MaterialDO::getName,storageMatDO.getMatName()); storageInventoryDO.setMaterialId(storageMatDO.getMatId());
MaterialDO materialDO = materialMapper.selectOne(queryWrapper); storageInventoryDO.setWhId(storageMatDO.getWhId());
if (ObjectUtil.isEmpty(materialDO.getPrice())){ storageInventoryDO.setRgId(storageMatDO.getRgId());
materialDO.setPrice(BigDecimal.ZERO); storageInventoryDO.setPnId(storageMatDO.getPnId());
storageInventoryDO.setYardAmount(storageMatDO.getStorageOkQty() );
MaterialDO materialDO = materialMapper.selectById(storageMatDO.getMatId());
if (ObjectUtil.isNotEmpty(materialDO)){
storageInventoryDO.setBoomUnit(materialDO.getUnit());
storageInventoryDO.setBoomName(materialDO.getName());
storageInventoryDO.setBoomSpec(materialDO.getSpec());
storageInventoryDO.setShortName(materialDO.getShortName());
storageInventoryDO.setBoomCode(materialDO.getCode());
} }
BigDecimal add = totalStorageOkQty.multiply(materialDO.getPrice()).add(storageMatDO.getPrice().multiply(storageMatDO.getStorageOkQty())); }else {
BigDecimal divide = add.divide(totalStorageOkQty.add(storageMatDO.getStorageOkQty()),2,RoundingMode.HALF_UP); storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty()));
materialDO.setPrice(divide);
materialMapper.updateById(materialDO);
} }
}else if (status==3){ storageInventoryMapper.insertOrUpdate(storageInventoryDO);
List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(targetDo.getId()); }
}
// else if (status==3){
// for (StorageMatDO storageMatDO : matList) {
// LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId());
// wrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId());
// wrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId());
// wrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId());
// wrapper.eq(StorageInventoryDO::getDeleted,0);
// StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
// if (ObjectUtil.isNotEmpty(storageInventoryDO)){
// storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().subtract(storageMatDO.getStorageOkQty()));
// }
// storageInventoryMapper.insertOrUpdate(storageInventoryDO);
// }
// }
}else if (updateReqVO.getStockType()==2){
if (updateReqVO.getStatus() == 4){
for (StorageMatDO storageMatDO : matList) { for (StorageMatDO storageMatDO : matList) {
LambdaQueryWrapper<StorageLogNowDO> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageLogNowDO::getMatCode, storageMatDO.getMatCode()); wrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId());
wrapper.eq(StorageLogNowDO::getMatName,storageMatDO.getMatName()); wrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId());
BigDecimal totalStorageOkQty = storageLogNowMapper.selectList(wrapper).stream() wrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId());
.map(StorageLogNowDO::getStorageOkQty) wrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId());
.filter(Objects::nonNull) // 确保过滤掉 null wrapper.eq(StorageInventoryDO::getDeleted,0);
.reduce(BigDecimal.ZERO, BigDecimal::add); StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>(); if (ObjectUtil.isNotEmpty(storageInventoryDO)){
queryWrapper.eq(MaterialDO::getCode, storageMatDO.getMatCode()); storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().subtract(storageMatDO.getStorageOkQty()));
queryWrapper.eq(MaterialDO::getName,storageMatDO.getMatName());
MaterialDO materialDO = materialMapper.selectOne(queryWrapper);
if (ObjectUtil.isEmpty(materialDO.getPrice())){
materialDO.setPrice(BigDecimal.ZERO);
} }
BigDecimal add = totalStorageOkQty.multiply(materialDO.getPrice()).subtract(storageMatDO.getPrice().multiply(storageMatDO.getStorageOkQty())); storageInventoryMapper.insertOrUpdate(storageInventoryDO);
BigDecimal divide = add.divide(totalStorageOkQty.subtract(storageMatDO.getStorageOkQty()),2,RoundingMode.HALF_UP);
materialDO.setPrice(divide);
materialMapper.updateById(materialDO);
} }
} }
} }
//状态说明1保存 2提交 3作废 4已审批 //状态说明1保存 2提交 3作废 4已审批
if(updateReqVO.getStockType() == 2){ if(updateReqVO.getStockType() == 2){

View File

@ -0,0 +1,104 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.service.storageinventory.StorageInventoryService;
@Tag(name = "管理后台 - 库存")
@RestController
@RequestMapping("/heli/storage-inventory")
@Validated
public class StorageInventoryController {
@Resource
private StorageInventoryService storageInventoryService;
@PostMapping("/create")
@Operation(summary = "创建库存")
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:create')")
public CommonResult<Long> createStorageInventory(@Valid @RequestBody StorageInventorySaveReqVO createReqVO) {
return success(storageInventoryService.createStorageInventory(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新库存")
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:update')")
public CommonResult<Boolean> updateStorageInventory(@Valid @RequestBody StorageInventorySaveReqVO updateReqVO) {
storageInventoryService.updateStorageInventory(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除库存")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:delete')")
public CommonResult<Boolean> deleteStorageInventory(@RequestParam("id") Long id) {
storageInventoryService.deleteStorageInventory(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得库存")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:query')")
public CommonResult<StorageInventoryRespVO> getStorageInventory(@RequestParam("id") Long id) {
StorageInventoryDO storageInventory = storageInventoryService.getStorageInventory(id);
return success(BeanUtils.toBean(storageInventory, StorageInventoryRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得库存分页")
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:query')")
public CommonResult<PageResult<StorageInventoryDO>> getStorageInventoryPage(@Valid StorageInventoryPageReqVO pageReqVO) {
PageResult<StorageInventoryDO> pageResult = storageInventoryService.getStorageInventoryPage(pageReqVO);
return success(pageResult);
}
@GetMapping("/export-excel")
@Operation(summary = "导出库存 Excel")
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:export')")
@OperateLog(type = EXPORT)
public void exportStorageInventoryExcel(@Valid StorageInventoryPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<StorageInventoryDO> list = storageInventoryService.getStorageInventoryPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "库存.xls", "数据", StorageInventoryRespVO.class,
BeanUtils.toBean(list, StorageInventoryRespVO.class));
}
@GetMapping("/getSupplementPage")
@Operation(summary = "获得库存分页")
@PreAuthorize("@ss.hasPermission('heli:storage-inventory:query')")
public CommonResult<PageResult<StorageInventoryDO>> getSupplementPage(@Valid StorageInventoryPageReqVO pageReqVO) {
PageResult<StorageInventoryDO> pageResult = storageInventoryService.getSupplementPage(pageReqVO);
return success(pageResult);
}
}

View File

@ -0,0 +1,89 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 库存分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class StorageInventoryPageReqVO extends PageParam {
@Schema(description = "仓库id", example = "10130")
private Long whId;
@Schema(description = "库区id", example = "4170")
private Long rgId;
@Schema(description = "库位id", example = "963")
private Long pnId;
@Schema(description = "批次号")
private String lotNo;
@Schema(description = "备注", example = "你猜")
private String description;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "订单id", example = "7867")
private Long projectId;
@Schema(description = "项目名称", example = "赵六")
private String projectName;
@Schema(description = "订单子项目id", example = "13594")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
private String name;
@Schema(description = "物料名称", example = "李四")
private String boomName;
@Schema(description = "系统单位")
private String boomUnit;
@Schema(description = "物料id", example = "14070")
private Long materialId;
@Schema(description = "规格型号")
private String boomSpec;
@Schema(description = "库存数量")
private BigDecimal yardAmount;
@Schema(description = "可用数量")
private BigDecimal useAmount;
@Schema(description = "预占数量")
private BigDecimal preAmount;
@Schema(description = "库存价格", example = "14437")
private BigDecimal price;
@Schema(description = "物料简称", example = "王五")
private String shortName;
@Schema(description = "物料编码")
private String matCode;
@Schema(description = "物料名称")
private String matName;
@Schema(description = "物料类型")
private String matType;
@Schema(description = "物料类型")
private String matSpec;
}

View File

@ -0,0 +1,97 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 库存 Response VO")
@Data
@ExcelIgnoreUnannotated
public class StorageInventoryRespVO {
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18794")
@ExcelProperty("主键id")
private Long id;
@Schema(description = "仓库id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10130")
@ExcelProperty("仓库id")
private Long whId;
@Schema(description = "库区id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4170")
@ExcelProperty("库区id")
private Long rgId;
@Schema(description = "库位id", requiredMode = Schema.RequiredMode.REQUIRED, example = "963")
@ExcelProperty("库位id")
private Long pnId;
@Schema(description = "批次号")
@ExcelProperty("批次号")
private String lotNo;
@Schema(description = "备注", example = "你猜")
@ExcelProperty("备注")
private String description;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "订单id", example = "7867")
@ExcelProperty("订单id")
private Long projectId;
@Schema(description = "项目名称", example = "赵六")
@ExcelProperty("项目名称")
private String projectName;
@Schema(description = "订单子项目id", example = "13594")
@ExcelProperty("订单子项目id")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
@ExcelProperty("子项目名称,唯一")
private String name;
@Schema(description = "物料名称", example = "李四")
@ExcelProperty("物料名称")
private String boomName;
@Schema(description = "系统单位")
@ExcelProperty("系统单位")
private String boomUnit;
@Schema(description = "物料id", example = "14070")
@ExcelProperty("物料id")
private Long materialId;
@Schema(description = "规格型号")
@ExcelProperty("规格型号")
private String boomSpec;
@Schema(description = "库存数量")
@ExcelProperty("库存数量")
private BigDecimal yardAmount;
@Schema(description = "可用数量")
@ExcelProperty("可用数量")
private BigDecimal useAmount;
@Schema(description = "预占数量")
@ExcelProperty("预占数量")
private BigDecimal preAmount;
@Schema(description = "库存价格", example = "14437")
@ExcelProperty("库存价格")
private BigDecimal price;
@Schema(description = "物料简称", example = "王五")
@ExcelProperty("物料简称")
private String shortName;
}

View File

@ -0,0 +1,74 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 库存新增/修改 Request VO")
@Data
public class StorageInventorySaveReqVO {
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18794")
private Long id;
@Schema(description = "仓库id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10130")
@NotNull(message = "仓库id不能为空")
private Long whId;
@Schema(description = "库区id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4170")
@NotNull(message = "库区id不能为空")
private Long rgId;
@Schema(description = "库位id", requiredMode = Schema.RequiredMode.REQUIRED, example = "963")
@NotNull(message = "库位id不能为空")
private Long pnId;
@Schema(description = "批次号")
private String lotNo;
@Schema(description = "备注", example = "你猜")
private String description;
@Schema(description = "订单id", example = "7867")
private Long projectId;
@Schema(description = "项目名称", example = "赵六")
private String projectName;
@Schema(description = "订单子项目id", example = "13594")
private Long projectPlanSubId;
@Schema(description = "子项目名称,唯一", example = "张三")
private String name;
@Schema(description = "物料名称", example = "李四")
private String boomName;
@Schema(description = "系统单位")
private String boomUnit;
@Schema(description = "物料id", example = "14070")
private Long materialId;
@Schema(description = "规格型号")
private String boomSpec;
@Schema(description = "库存数量")
private BigDecimal yardAmount;
@Schema(description = "可用数量")
private BigDecimal useAmount;
@Schema(description = "预占数量")
private BigDecimal preAmount;
@Schema(description = "库存价格", example = "14437")
private BigDecimal price;
@Schema(description = "物料简称", example = "王五")
private String shortName;
}

View File

@ -144,5 +144,42 @@ public class MaterialDO extends TenantBaseDO {
@TableField(exist = false) @TableField(exist = false)
private String mainSupplierName; private String mainSupplierName;
@TableField(exist = false)
private BigDecimal storageOkQty;
@TableField(exist = false)
private String lotNo;
@TableField(exist = false)
private String matName;
@TableField(exist = false)
private String matCode;
@TableField(exist = false)
private String matType;
@TableField(exist = false)
private String matSpec;
@TableField(exist = false)
private String matBrand;
@TableField(exist = false)
private String matUnit;
@TableField(exist = false)
private Long whId;
@TableField(exist = false)
private String whName;
@TableField(exist = false)
private Long rgId;
@TableField(exist = false)
private String rgName;
@TableField(exist = false)
private Long pnId;
@TableField(exist = false)
private String pnName;
@TableField(exist = false)
private BigDecimal matRest;
@TableField(exist = false)
private String num;
@TableField(exist = false)
private Long materialTypeId;
@TableField(exist = false)
private String matUnitId;
} }

View File

@ -214,5 +214,18 @@ public class MaterialPlanBoomDO extends BaseDO {
*/ */
@TableField(exist = false) @TableField(exist = false)
private String isFoams; private String isFoams;
@TableField(exist = false)
private Long whId;
@TableField(exist = false)
private Long rgId;
@TableField(exist = false)
private Long pnId;
@TableField(exist = false)
private BigDecimal pickAmount;
@TableField(exist = false)
private String whName;
@TableField(exist = false)
private String rgName;
@TableField(exist = false)
private String pnName;
} }

View File

@ -95,10 +95,25 @@ public class MatReqDetailDO extends BaseDO {
*/ */
private Long projectMaterialPlanDetailId; private Long projectMaterialPlanDetailId;
private Long whId;
private Long rgId;
private Long pnId;
private BigDecimal pickAmount;
/** /**
* 子项目编码 * 子项目编码
*/ */
@TableField(exist = false) @TableField(exist = false)
private String materialCode; private String materialCode;
@TableField(exist = false)
private String whName;
@TableField(exist = false)
private String rgName;
@TableField(exist = false)
private String pnName;
} }

View File

@ -0,0 +1,145 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
/**
* 库存 DO
*
* @author 管理员
*/
@TableName("wms_storage_inventory")
@KeySequence("wms_storage_inventory_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StorageInventoryDO extends BaseDO {
/**
* 主键id
*/
@TableId
private Long id;
/**
* 仓库id
*/
private Long whId;
/**
* 库区id
*/
private Long rgId;
/**
* 库位id
*/
private Long pnId;
/**
* 批次号
*/
private String lotNo;
/**
* 备注
*/
private String description;
/**
* 订单id
*/
private Long projectId;
/**
* 项目名称
*/
private String projectName;
/**
* 订单子项目id
*/
private Long projectPlanSubId;
/**
* 子项目名称唯一
*/
private String name;
/**
* 物料名称
*/
private String boomName;
/**
* 系统单位
*/
private String boomUnit;
/**
* 物料id
*/
private Long materialId;
/**
* 规格型号
*/
private String boomSpec;
/**
* 库存数量
*/
private BigDecimal yardAmount;
/**
* 可用数量
*/
private BigDecimal useAmount;
/**
* 预占数量
*/
private BigDecimal preAmount;
/**
* 库存价格
*/
private BigDecimal price;
/**
* 物料简称
*/
private String shortName;
/**
* 物料编码
*/
private String boomCode;
@TableField(exist = false)
private BigDecimal storageOkQty;
@TableField(exist = false)
private String matName;
@TableField(exist = false)
private String matCode;
@TableField(exist = false)
private String matType;
@TableField(exist = false)
private String matSpec;
@TableField(exist = false)
private String matBrand;
@TableField(exist = false)
private String matUnit;
@TableField(exist = false)
private String whName;
@TableField(exist = false)
private String rgName;
@TableField(exist = false)
private String pnName;
@TableField(exist = false)
private BigDecimal matRest;
@TableField(exist = false)
private String num;
@TableField(exist = false)
private Long materialTypeId;
@TableField(exist = false)
private String matUnitId;
@TableField(exist = false)
private String invSafe;
}

View File

@ -227,5 +227,6 @@ public class TaskDispatchDetailDO extends BaseDO {
private BigDecimal matWeight; private BigDecimal matWeight;
@TableField(exist = false) @TableField(exist = false)
private String nickname; private String nickname;
private Integer reportStatus; private Integer reportStatus;
} }

View File

@ -4,11 +4,18 @@ 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.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;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
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.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -130,4 +137,30 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
return selectPage(reqVO, query); return selectPage(reqVO, query);
} }
default PageResult<MaterialDO> selectMaterialGroupNow(StorageLogPageReqVO pageReqVO){
MPJLambdaWrapper<MaterialDO> query = new MPJLambdaWrapper<>();
query.selectAll(MaterialDO.class)
.select("ifnull(sum(s.yard_amount),0) matRest")
.select("t.name as matName,t.code as matCode,d.label as matType,t.spec as matSpec,t.brand as matBrand")
.select("d1.label as matUnit")
.leftJoin(StorageInventoryDO.class, "s", StorageInventoryDO::getMaterialId, MaterialDO::getId)
.leftJoin(DictDataDO.class,"d",DictDataDO::getValue, MaterialDO::getMaterialType)
.leftJoin(DictDataDO.class,"d1",DictDataDO::getValue, MaterialDO::getUnit)
.disableSubLogicDel()
.groupBy(MaterialDO::getId)
.orderByDesc(MaterialDO::getId);
query.like(!com.alibaba.druid.util.StringUtils.isEmpty(pageReqVO.getMatSpec()),MaterialDO::getSpec, pageReqVO.getMatSpec())
.like(!com.alibaba.druid.util.StringUtils.isEmpty(pageReqVO.getMatName()), MaterialDO::getName, pageReqVO.getMatName())
.like(!com.alibaba.druid.util.StringUtils.isEmpty(pageReqVO.getMatCode()), MaterialDO::getCode, pageReqVO.getMatCode())
.eq(true,MaterialDO::getVirtualPart, YesOrNoEnum.N.name())
.eq(MaterialDO::getStatus,1)
.eq("d.dict_type","heli_material_type")
.eq("d1.dict_type","heli_material_unit")
;
return selectPage(pageReqVO,query);
}
} }

View File

@ -16,14 +16,18 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.Material
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.MaterialPlanDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.MaterialPlanDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.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.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.chanko.yunxi.mes.module.heli.enums.BoomDetailTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.BoomDetailTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum; import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
@ -183,12 +187,17 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
query.selectAll(MaterialPlanBoomDO.class) query.selectAll(MaterialPlanBoomDO.class)
.select("p.project_name as projectName","p.project_id as projectId","p.name as projectSubName","mat.material_id as matId","m.code as materialName","m.name as materialNames") .select("p.project_name as projectName","p.project_id as projectId","p.name as projectSubName","mat.material_id as matId","m.code as materialName","m.name as materialNames")
.select("IFNULL(mat.pick_amount, t.boom_amount) AS pickAmount")
.select("w.wh_name as whName","r.rg_name as rgName","pn.pn_name as pnName")
.select("d.spec as boomSpec","d.blueprint_no as blueprintNo","d.unit as boomUnit","DATE_FORMAT(t.boom_arrive_date, '%Y-%m-%d') AS boomArriveDates") .select("d.spec as boomSpec","d.blueprint_no as blueprintNo","d.unit as boomUnit","DATE_FORMAT(t.boom_arrive_date, '%Y-%m-%d') AS boomArriveDates")
.leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId) .leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId)
.leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,MaterialPlanDO::getProjectId) .leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.leftJoin(ProcessBomDetailDO.class,"d",ProcessBomDetailDO::getId,MaterialPlanBoomDO::getBoomDetailId) .leftJoin(ProcessBomDetailDO.class,"d",ProcessBomDetailDO::getId,MaterialPlanBoomDO::getBoomDetailId)
.leftJoin("project_mat_req_detail mat on (t.id=mat.project_material_plan_detail_id and mat.deleted=0 and mat.tenant_id = 2)") .leftJoin("project_mat_req_detail mat on (t.id=mat.project_material_plan_detail_id and mat.deleted=0 and mat.tenant_id = 2)")
.leftJoin("base_material m ON (m.id = mat.material_id and m.tenant_id = 2) ") .leftJoin("base_material m ON (m.id = mat.material_id and m.tenant_id = 2) ")
.leftJoin("wms_wh w ON (w.id = mat.wh_id and w.tenant_id = 2) ")
.leftJoin("wms_rg r ON (r.id = mat.rg_id and r.tenant_id = 2) ")
.leftJoin("wms_pn pn ON (pn.id = mat.pn_id and pn.tenant_id = 2) ")
.disableSubLogicDel() .disableSubLogicDel()
.groupBy(MaterialPlanBoomDO::getId) .groupBy(MaterialPlanBoomDO::getId)
.orderByDesc(MaterialPlanBoomDO::getCreateTime); .orderByDesc(MaterialPlanBoomDO::getCreateTime);

View File

@ -9,7 +9,11 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq.MatReqDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreq.MatReqDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.matreqdetail.MatReqDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.matreqdetail.vo.*;
@ -27,7 +31,11 @@ public interface MatReqDetailMapper extends BaseMapperX<MatReqDetailDO> {
MPJLambdaWrapper<MatReqDetailDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<MatReqDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(MatReqDetailDO.class) query.selectAll(MatReqDetailDO.class)
.select("m.code as materialCode") .select("m.code as materialCode")
.select("w.wh_name as whName","r.rg_name as rgName","p.pn_name as pnName")
.leftJoin(MaterialDO.class, "m", MaterialDO::getId, MatReqDetailDO::getMaterialId) .leftJoin(MaterialDO.class, "m", MaterialDO::getId, MatReqDetailDO::getMaterialId)
.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() .disableSubLogicDel()
.groupBy(MatReqDetailDO::getId) .groupBy(MatReqDetailDO::getId)
.orderByDesc(MatReqDetailDO::getCreateTime); .orderByDesc(MatReqDetailDO::getCreateTime);

View File

@ -21,6 +21,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderboom.Purchas
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermaterial.PurchaseOrderMaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermaterial.PurchaseOrderMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
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.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
@ -43,13 +44,13 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
query.selectAll(PurchaseOrderNoDetailDO.class) query.selectAll(PurchaseOrderNoDetailDO.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")
.select(" mp.require_amount") // sum(ifnull(mp.require_amount,0)) as requireAmount .select(" mp.require_amount") // sum(ifnull(mp.require_amount,0)) as requireAmount
.select("min(mp.require_arrive_time) as requireArriveTime") .select("min(mp.require_arrive_time) as requireArriveTime")
.leftJoin(PurchaseOrderNoDO.class, "pb", PurchaseOrderNoDO::getId, PurchaseOrderNoDetailDO::getPurchaseOrderId) .leftJoin(PurchaseOrderNoDO.class, "pb", PurchaseOrderNoDO::getId, PurchaseOrderNoDetailDO::getPurchaseOrderId)
.leftJoin("project_material_plan_detail mp on mp.project_material_plan_id = pb.project_material_plan_id AND mp.material_id = t.material_id") .leftJoin("project_material_plan_detail mp on mp.project_material_plan_id = pb.project_material_plan_id AND mp.material_id = t.material_id")
.leftJoin(MaterialDO.class, "mat", MaterialDO::getId, PurchaseOrderNoDetailDO::getMaterialId) .leftJoin(MaterialDO.class, "mat", MaterialDO::getId, PurchaseOrderNoDetailDO::getMaterialId)
.leftJoin(StorageMaterialDO.class,"sm",StorageMaterialDO::getId,PurchaseOrderNoDetailDO::getMaterialId) .leftJoin(StorageInventoryDO.class,"sm", StorageInventoryDO::getMaterialId,PurchaseOrderNoDetailDO::getMaterialId)
.disableSubLogicDel() .disableSubLogicDel()
.groupBy(MaterialPlanDetailDO::getMaterialId) .groupBy(MaterialPlanDetailDO::getMaterialId)
.orderByAsc(PurchaseOrderNoDetailDO::getId); .orderByAsc(PurchaseOrderNoDetailDO::getId);
@ -105,6 +106,7 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()), PurchaseOrderNoDetailDO::getProjectName, pageReqVO.getProjectName()) .like(!StringUtils.isEmpty(pageReqVO.getProjectName()), PurchaseOrderNoDetailDO::getProjectName, pageReqVO.getProjectName())
.like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), PurchaseOrderNoDetailDO::getName, pageReqVO.getProjectSubName()) .like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), PurchaseOrderNoDetailDO::getName, pageReqVO.getProjectSubName())
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode()) .like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.ne(PurchaseOrderNoDO::getPurchaseType, 2)
.like(!StringUtils.isEmpty(pageReqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, pageReqVO.getBoomName()); .like(!StringUtils.isEmpty(pageReqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, pageReqVO.getBoomName());
return selectPage(pageReqVO, query); return selectPage(pageReqVO, query);

View File

@ -0,0 +1,164 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory;
import java.util.*;
import java.util.stream.Collectors;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.*;
/**
* 库存 Mapper
*
* @author 管理员
*/
@Mapper
public interface StorageInventoryMapper extends BaseMapperX<StorageInventoryDO> {
default PageResult<StorageInventoryDO> selectPage(StorageInventoryPageReqVO reqVO) {
MPJLambdaWrapper<StorageInventoryDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageInventoryDO.class)
.select("ifnull(sum(t.yard_amount),0) matRest")
.select("m.name as matName,m.code as matCode,d.label as matType,m.spec as matSpec,m.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("m.material_type as materialTypeId","m.unit as matUnitId")
.leftJoin(MaterialDO.class, "m", MaterialDO::getId, StorageInventoryDO::getMaterialId)
.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)
.orderByDesc(StorageInventoryDO::getId);
query.like(!com.alibaba.druid.util.StringUtils.isEmpty(reqVO.getMatSpec()),MaterialDO::getSpec, reqVO.getMatSpec())
.like(!com.alibaba.druid.util.StringUtils.isEmpty(reqVO.getMatName()), MaterialDO::getName, reqVO.getMatName())
.like(!com.alibaba.druid.util.StringUtils.isEmpty(reqVO.getMatCode()), MaterialDO::getCode, reqVO.getMatCode())
.like(!com.alibaba.druid.util.StringUtils.isEmpty(reqVO.getShortName()), MaterialDO::getShortName, reqVO.getShortName())
.eq(true,MaterialDO::getVirtualPart, YesOrNoEnum.N.name())
.ne(StorageInventoryDO::getYardAmount,0)
.eq(MaterialDO::getStatus,1)
.eq(reqVO.getWhId()!= null,StorageInventoryDO::getWhId, reqVO.getWhId())
.eq(reqVO.getRgId()!= null,StorageInventoryDO::getRgId, reqVO.getRgId())
.eq(reqVO.getPnId()!= null,StorageInventoryDO::getPnId, reqVO.getPnId())
.eq("d.dict_type","heli_material_type")
.eq("d1.dict_type","heli_material_unit");
return selectPage(reqVO, query);
}
default PageResult<StorageInventoryDO> getStorageNowPageAll(StorageLogPageReqVO pageReqVO){
// MPJLambdaWrapper<MaterialDO> query = new MPJLambdaWrapper<>();
//
// query.selectAll(StorageLogNowDO.class)
// .select("a.material_type as materialTypeId","a.unit as matUnitId","COALESCE(a.price, 0) as price")
//
// .leftJoin(MaterialDO.class,"a",MaterialDO::getId,StorageLogNowDO::getId)
// .orderByDesc(StorageLogNowDO::getId);
//
// query.like(!StringUtils.isEmpty(reqVO.getMatType()),StorageLogNowDO::getMatType, reqVO.getMatType())
// .like(!StringUtils.isEmpty(reqVO.getMatSpec()),StorageLogNowDO::getMatSpec, reqVO.getMatSpec())
// .eq(reqVO.getWhId()!= null,StorageLogNowDO::getWhId, reqVO.getWhId())
// .eq(reqVO.getRgId()!= null,StorageLogNowDO::getRgId, reqVO.getRgId())
// .eq(reqVO.getPnId()!= null,StorageLogNowDO::getPnId, reqVO.getPnId())
// .ne(StorageLogNowDO::getStorageOkQty,0)
// .like(!StringUtils.isEmpty(reqVO.getMatName()), StorageLogNowDO::getMatName, reqVO.getMatName())
// .like(!StringUtils.isEmpty(reqVO.getMatCode()), StorageLogNowDO::getMatCode, reqVO.getMatCode())
// .like(!StringUtils.isEmpty(reqVO.getLotNo()),StorageLogNowDO::getLotNo, reqVO.getLotNo());
// System.out.println(query);
// return selectPage(reqVO,query);
MPJLambdaWrapper<StorageInventoryDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageInventoryDO.class)
.select("ifnull(sum(t.yard_amount),0) matRest")
.select("m.name as matName,m.code as matCode,d.label as matType,m.spec as matSpec,m.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("m.material_type as materialTypeId","m.unit as matUnitId")
.leftJoin(MaterialDO.class, "m", MaterialDO::getId, StorageInventoryDO::getMaterialId)
.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)
.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())
.ne(StorageInventoryDO::getYardAmount,0)
.eq(MaterialDO::getStatus,1)
.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");
return selectPage(pageReqVO, query);
}
default PageResult<StorageInventoryDO> getSupplementPage(StorageInventoryPageReqVO pageReqVO){
MPJLambdaWrapper<StorageInventoryDO> subQuery = new MPJLambdaWrapper<>();
subQuery.select(StorageInventoryDO::getMatCode)
.leftJoin(MaterialDO.class, "m", MaterialDO::getId, StorageInventoryDO::getMaterialId)
.groupBy(StorageInventoryDO::getMaterialId)
.having("SUM(yard_amount) < COALESCE(MAX(m.inv_safe), 0)");
//执行子查询获取符合条件的matCode
List<Long> qualifiedMatCodes = this.selectList(subQuery)
.stream()
.map(StorageInventoryDO::getMaterialId)
.distinct()
.collect(Collectors.toList());
MPJLambdaWrapper<StorageInventoryDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageInventoryDO.class)
.select("ifnull(sum(t.yard_amount),0) matRest")
.select("m.name as matName,m.code as matCode,d.label as matType,m.spec as matSpec,m.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("m.material_type as materialTypeId","m.unit as matUnitId")
.select("ROUND(m.inv_safe, 2) as invSafe") // 添加安全库存字段
.leftJoin(MaterialDO.class, "m", MaterialDO::getId, StorageInventoryDO::getMaterialId)
.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)
.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())
.ne(StorageInventoryDO::getYardAmount,0)
.eq(MaterialDO::getStatus,1)
.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(StorageInventoryDO::getMaterialId, qualifiedMatCodes);
} else {
// 如果没有符合条件的matCode返回空结果
query.apply("1 = 0");
}
return selectPage(pageReqVO, query);
}
}

View File

@ -5,12 +5,18 @@ 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.storagelog.vo.StorageLogPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO;
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.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import javax.annotation.Resource;
import java.util.List; import java.util.List;
/** /**
@ -22,7 +28,6 @@ import java.util.List;
public interface StorageMaterialMapper extends BaseMapperX<StorageMaterialDO> { public interface StorageMaterialMapper extends BaseMapperX<StorageMaterialDO> {
// PageResult<StorageLogNowDO> selectMaterialWithNow(StorageLogPageReqVO reqVO); // PageResult<StorageLogNowDO> selectMaterialWithNow(StorageLogPageReqVO reqVO);
default PageResult<StorageMaterialDO> selectMaterialWithNow(StorageLogPageReqVO reqVO){ default PageResult<StorageMaterialDO> selectMaterialWithNow(StorageLogPageReqVO reqVO){
MPJLambdaWrapper<StorageMaterialDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<StorageMaterialDO> query = new MPJLambdaWrapper<>();
@ -59,5 +64,6 @@ public interface StorageMaterialMapper extends BaseMapperX<StorageMaterialDO> {
.groupBy(StorageMaterialDO::getId).orderByDesc(StorageMaterialDO::getId); .groupBy(StorageMaterialDO::getId).orderByDesc(StorageMaterialDO::getId);
return selectPage(reqVO,query); return selectPage(reqVO,query);
} }
} }

View File

@ -95,8 +95,8 @@ public class BgMasterLineServiceImpl implements BgMasterLineService {
wrapper1.eq(TaskDispatchDetailDO::getDeleted, 0); wrapper1.eq(TaskDispatchDetailDO::getDeleted, 0);
TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper1); TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper1);
if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){ if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){
taskDispatchDetailDO.setReportStatus(1); nextTaskDispatchDetailDO.setReportStatus(1);
taskDispatchDetailMapper.updateById(taskDispatchDetailDO); taskDispatchDetailMapper.updateById(nextTaskDispatchDetailDO);
} }
} }

View File

@ -3,9 +3,11 @@ 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.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;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
/** /**
* 物料 Service 接口 * 物料 Service 接口
@ -62,4 +64,7 @@ public interface MaterialService {
PageResult<MaterialDO> getbzjList(MaterialPageReqVO pageReqVO); PageResult<MaterialDO> getbzjList(MaterialPageReqVO pageReqVO);
PageResult<MaterialDO> getStorageNowPageGroupMaterial(StorageLogPageReqVO pageReqVO);
PageResult<StorageInventoryDO> getStorageNowPageAll(StorageLogPageReqVO pageReqVO);
} }

View File

@ -1,6 +1,7 @@
package com.chanko.yunxi.mes.module.heli.service.material; package com.chanko.yunxi.mes.module.heli.service.material;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -11,12 +12,19 @@ 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.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;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum; import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
import com.chanko.yunxi.mes.module.heli.enums.MaterialTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.MaterialTypeEnum;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService; import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.heli.service.storage.StorageService;
import com.chanko.yunxi.mes.module.heli.service.storagelog.StorageLogService;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -27,10 +35,8 @@ import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.Validator; import javax.validation.Validator;
import java.util.HashMap; import java.math.BigDecimal;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -55,6 +61,9 @@ public class MaterialServiceImpl implements MaterialService {
@Resource @Resource
private SerialNumberService serialNumberService; private SerialNumberService serialNumberService;
@Resource
private StorageInventoryMapper storageInventoryMapper;
@PostConstruct @PostConstruct
public void init(){ public void init(){
@ -209,6 +218,72 @@ public class MaterialServiceImpl implements MaterialService {
return materialMapper.getbzjList( pageReqVO); return materialMapper.getbzjList( pageReqVO);
} }
@Override
public PageResult<MaterialDO> getStorageNowPageGroupMaterial(StorageLogPageReqVO pageReqVO) {
PageResult<MaterialDO> pageResult = materialMapper.selectMaterialGroupNow(pageReqVO);
if (ObjectUtil.isNotEmpty(pageReqVO.getWhId())) {
if (ObjectUtil.isNotEmpty(pageResult.getList())) {
// 获取所有物料编码
List<Long> ids = pageResult.getList().stream()
.map(MaterialDO::getId)
.collect(Collectors.toList());
// 批量查询库存日志
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getWhId, pageReqVO.getWhId())
.in(StorageInventoryDO::getMaterialId,ids );
List<StorageInventoryDO> logList = storageInventoryMapper.selectList(wrapper);
// 将库存日志按物料编码分组
Map<Long, List<StorageInventoryDO>> logMap = logList.stream()
.collect(Collectors.groupingBy(StorageInventoryDO::getMaterialId));
// 计算每个物料的剩余数量并设置到对应的 StorageMaterialDO 对象中
for (MaterialDO materialDO : pageResult.getList()) {
List<StorageInventoryDO> logs = logMap.getOrDefault(materialDO.getId(), Collections.emptyList());
BigDecimal matRest = logs.stream()
.map(StorageInventoryDO::getYardAmount)
.filter(Objects::nonNull) // 确保过滤掉 null
.reduce(BigDecimal.ZERO, BigDecimal::add);
materialDO.setMatRest(matRest);
}
}
}
return pageResult;
}
@Override
public PageResult<StorageInventoryDO> getStorageNowPageAll(StorageLogPageReqVO pageReqVO) {
PageResult<StorageInventoryDO> pageResult = storageInventoryMapper.getStorageNowPageAll(pageReqVO);
if (ObjectUtil.isEmpty(pageReqVO.getWhId())) {
if (ObjectUtil.isNotEmpty(pageResult.getList())) {
// 获取所有物料编码
List<Long> ids = pageResult.getList().stream()
.map(StorageInventoryDO::getMaterialId)
.collect(Collectors.toList());
// 批量查询库存日志
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper
.in(StorageInventoryDO::getMaterialId,ids );
List<StorageInventoryDO> logList = storageInventoryMapper.selectList(wrapper);
// 将库存日志按物料编码分组
Map<Long, List<StorageInventoryDO>> logMap = logList.stream()
.collect(Collectors.groupingBy(StorageInventoryDO::getMaterialId));
// 计算每个物料的剩余数量并设置到对应的 StorageMaterialDO 对象中
for (StorageInventoryDO storageInventoryDO : pageResult.getList()) {
List<StorageInventoryDO> logs = logMap.getOrDefault(storageInventoryDO.getMaterialId(), Collections.emptyList());
BigDecimal matRest = logs.stream()
.map(StorageInventoryDO::getYardAmount)
.filter(Objects::nonNull) // 确保过滤掉 null
.reduce(BigDecimal.ZERO, BigDecimal::add);
storageInventoryDO.setMatRest(matRest);
}
}
}
return pageResult;
}
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

@ -163,6 +163,10 @@ public class MatReqServiceImpl implements MatReqService {
matReqDetailDO.setMaterialId(materialPlanBoomDO.getMatId()); matReqDetailDO.setMaterialId(materialPlanBoomDO.getMatId());
matReqDetailDO.setProjectMaterialPlanDetailId(boomDO.getId()); matReqDetailDO.setProjectMaterialPlanDetailId(boomDO.getId());
matReqDetailDO.setProjectMaterialPlanId(boomDO.getProjectMaterialPlanId()); matReqDetailDO.setProjectMaterialPlanId(boomDO.getProjectMaterialPlanId());
matReqDetailDO.setWhId(materialPlanBoomDO.getWhId());
matReqDetailDO.setRgId(materialPlanBoomDO.getRgId());
matReqDetailDO.setPnId(materialPlanBoomDO.getPnId());
matReqDetailDO.setPickAmount(materialPlanBoomDO.getPickAmount());
matReqDetailDOS.add(matReqDetailDO); matReqDetailDOS.add(matReqDetailDO);
boomDO.setIsPurYard(3); boomDO.setIsPurYard(3);
materialPlanBoomMapper.updateById(boomDO); materialPlanBoomMapper.updateById(boomDO);

View File

@ -186,8 +186,8 @@ public class PgMasterServiceImpl implements PgMasterService {
wrapper1.eq(TaskDispatchDetailDO::getDeleted, 0); wrapper1.eq(TaskDispatchDetailDO::getDeleted, 0);
TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper1); TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper1);
if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){ if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){
taskDispatchDetailDO.setReportStatus(1); nextTaskDispatchDetailDO.setReportStatus(1);
taskDispatchDetailMapper.updateById(taskDispatchDetailDO); taskDispatchDetailMapper.updateById(nextTaskDispatchDetailDO);
} }
} }
// 返回 // 返回

View File

@ -278,10 +278,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
if (processDesignProgressMapper.selectCount(wrapper)==0){ if (processDesignProgressMapper.selectCount(wrapper)==0){
processDesignDO.setProgressBlank("未开始"); processDesignDO.setProgressBlank("未开始");
}else{ }else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){ if (processDesign.getIsOverProcess()==1){
processDesignDO.setProgressBlank("进行中");
}else {
processDesignDO.setProgressBlank("已完成"); processDesignDO.setProgressBlank("已完成");
}else {
processDesignDO.setProgressBlank("进行中");
} }
} }
}else if(ProcessDesignTypeEnum.BLUEPRINT_3D.name().equals(processDesign.getProcessDesignType())){ }else if(ProcessDesignTypeEnum.BLUEPRINT_3D.name().equals(processDesign.getProcessDesignType())){
@ -295,10 +295,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
if (l==0){ if (l==0){
processDesignDO.setProgress3d("未开始"); processDesignDO.setProgress3d("未开始");
}else{ }else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){ if (processDesign.getIsOverProcess()==1){
processDesignDO.setProgress3d("进行中");
}else{
processDesignDO.setProgress3d("已完成"); processDesignDO.setProgress3d("已完成");
}else{
processDesignDO.setProgress3d("进行中");
} }
} }
}else if(ProcessDesignTypeEnum.BLUEPRINT_2D.name().equals(processDesign.getProcessDesignType())){ }else if(ProcessDesignTypeEnum.BLUEPRINT_2D.name().equals(processDesign.getProcessDesignType())){
@ -311,10 +311,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
if (processDesignProgressMapper.selectCount(wrapper)==0){ if (processDesignProgressMapper.selectCount(wrapper)==0){
processDesignDO.setProgress2d("未开始"); processDesignDO.setProgress2d("未开始");
}else{ }else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){ if (processDesign.getIsOverProcess()==1){
processDesignDO.setProgress2d("进行中");
}else{
processDesignDO.setProgress2d("已完成"); processDesignDO.setProgress2d("已完成");
}else{
processDesignDO.setProgress2d("进行中");
} }
} }
} }

View File

@ -3,9 +3,11 @@ package com.chanko.yunxi.mes.module.heli.service.storage;
import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.StorageInventoryController;
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.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;
@ -15,6 +17,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestockmaterial.Ou
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
@ -26,6 +29,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestockboom.OutsourceSt
import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestockmaterial.OutsourceStockMaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestockmaterial.OutsourceStockMaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorder.PurchaseOrderMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorder.PurchaseOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
@ -94,6 +98,8 @@ public class StorageServiceImpl implements StorageService {
private PurchaseOrderMapper purchaseOrderMapper; private PurchaseOrderMapper purchaseOrderMapper;
@Resource @Resource
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper; private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private StorageInventoryMapper storageInventoryMapper;
@Resource @Resource
private StorageLogService storageLogService; private StorageLogService storageLogService;
@ -444,6 +450,34 @@ private StorageLogService storageLogService;
updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,3); updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,3);
updateWrapper.set(PurchaseOrderNoDetailDO::getPurchaseRemAmount,BigDecimal.ZERO); updateWrapper.set(PurchaseOrderNoDetailDO::getPurchaseRemAmount,BigDecimal.ZERO);
purchaseOrderNoDetailMapper.update(updateWrapper); purchaseOrderNoDetailMapper.update(updateWrapper);
//更新库存
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getMaterialId,createReqVO.getMaterialId());
wrapper.eq(StorageInventoryDO::getWhId,createReqVO.getWhId());
wrapper.eq(StorageInventoryDO::getRgId,createReqVO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId,createReqVO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted,0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
if (ObjectUtil.isEmpty(storageInventoryDO)){
storageInventoryDO = new StorageInventoryDO();
storageInventoryDO.setMaterialId(createReqVO.getMaterialId());
storageInventoryDO.setWhId(createReqVO.getWhId());
storageInventoryDO.setRgId(createReqVO.getRgId());
storageInventoryDO.setPnId(createReqVO.getPnId());
storageInventoryDO.setYardAmount(createReqVO.getStorageAmount());
MaterialDO materialDO = materialMapper.selectById(createReqVO.getMaterialId());
if (ObjectUtil.isNotEmpty(materialDO)){
storageInventoryDO.setBoomUnit(materialDO.getUnit());
storageInventoryDO.setBoomName(materialDO.getName());
storageInventoryDO.setBoomSpec(materialDO.getSpec());
storageInventoryDO.setShortName(materialDO.getShortName());
storageInventoryDO.setBoomCode(materialDO.getCode());
}
}else {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(createReqVO.getStorageAmount()));
}
storageInventoryMapper.insertOrUpdate(storageInventoryDO);
return CommonResult.success(true); return CommonResult.success(true);
} }

View File

@ -0,0 +1,56 @@
package com.chanko.yunxi.mes.module.heli.service.storageinventory;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* 库存 Service 接口
*
* @author 管理员
*/
public interface StorageInventoryService {
/**
* 创建库存
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createStorageInventory(@Valid StorageInventorySaveReqVO createReqVO);
/**
* 更新库存
*
* @param updateReqVO 更新信息
*/
void updateStorageInventory(@Valid StorageInventorySaveReqVO updateReqVO);
/**
* 删除库存
*
* @param id 编号
*/
void deleteStorageInventory(Long id);
/**
* 获得库存
*
* @param id 编号
* @return 库存
*/
StorageInventoryDO getStorageInventory(Long id);
/**
* 获得库存分页
*
* @param pageReqVO 分页查询
* @return 库存分页
*/
PageResult<StorageInventoryDO> getStorageInventoryPage(StorageInventoryPageReqVO pageReqVO);
PageResult<StorageInventoryDO> getSupplementPage(StorageInventoryPageReqVO pageReqVO);
}

View File

@ -0,0 +1,79 @@
package com.chanko.yunxi.mes.module.heli.service.storageinventory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* 库存 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class StorageInventoryServiceImpl implements StorageInventoryService {
@Resource
private StorageInventoryMapper storageInventoryMapper;
@Override
public Long createStorageInventory(StorageInventorySaveReqVO createReqVO) {
// 插入
StorageInventoryDO storageInventory = BeanUtils.toBean(createReqVO, StorageInventoryDO.class);
storageInventoryMapper.insert(storageInventory);
// 返回
return storageInventory.getId();
}
@Override
public void updateStorageInventory(StorageInventorySaveReqVO updateReqVO) {
// 校验存在
validateStorageInventoryExists(updateReqVO.getId());
// 更新
StorageInventoryDO updateObj = BeanUtils.toBean(updateReqVO, StorageInventoryDO.class);
storageInventoryMapper.updateById(updateObj);
}
@Override
public void deleteStorageInventory(Long id) {
// 校验存在
validateStorageInventoryExists(id);
// 删除
storageInventoryMapper.deleteById(id);
}
private void validateStorageInventoryExists(Long id) {
if (storageInventoryMapper.selectById(id) == null) {
throw exception(STORAGE_INVENTORY_NOT_EXISTS);
}
}
@Override
public StorageInventoryDO getStorageInventory(Long id) {
return storageInventoryMapper.selectById(id);
}
@Override
public PageResult<StorageInventoryDO> getStorageInventoryPage(StorageInventoryPageReqVO pageReqVO) {
return storageInventoryMapper.selectPage(pageReqVO);
}
@Override
public PageResult<StorageInventoryDO> getSupplementPage(StorageInventoryPageReqVO pageReqVO) {
return storageInventoryMapper.getSupplementPage(pageReqVO);
}
}

View File

@ -9,6 +9,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrder
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.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper;
@ -16,6 +17,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMappe
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
import com.chanko.yunxi.mes.module.heli.service.storage.StorageService; import com.chanko.yunxi.mes.module.heli.service.storage.StorageService;
@ -69,6 +71,8 @@ public class StorageMatServiceImpl implements StorageMatService {
private StorageLogMapper storageLogMapper; private StorageLogMapper storageLogMapper;
@Resource @Resource
private ProjectOrderSubMapper projectOrderSubMapper; private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private StorageInventoryMapper storageInventoryMapper;
@Override @Override
public Long createStorageMat(StorageMatSaveReqVO createReqVO) { public Long createStorageMat(StorageMatSaveReqVO createReqVO) {
// 插入 // 插入
@ -235,25 +239,25 @@ public class StorageMatServiceImpl implements StorageMatService {
@Override @Override
public List<StorageMatDO> getStorageMatPage(StorageMatPageReqVO pageReqVO) { public List<StorageMatDO> getStorageMatPage(StorageMatPageReqVO pageReqVO) {
List<StorageMatDO> storageMatDOS = storageMatMapper.selectMatByStorckID(pageReqVO.getStockId()); List<StorageMatDO> storageMatDOS = storageMatMapper.selectMatByStorckID(pageReqVO.getStockId());
LambdaQueryWrapper<StorageLogNowDO> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StorageInventoryDO> queryWrapper = new LambdaQueryWrapper<>();
HashMap<String,String> subNameMap = new HashMap<>(); HashMap<String,String> subNameMap = new HashMap<>();
if (CollUtil.isNotEmpty(storageMatDOS)){ if (CollUtil.isNotEmpty(storageMatDOS)){
for (StorageMatDO storageMatDO : storageMatDOS) { for (StorageMatDO storageMatDO : storageMatDOS) {
queryWrapper.clear(); queryWrapper.clear();
queryWrapper.select(StorageLogNowDO::getStorageOkQty); queryWrapper.select(StorageInventoryDO::getYardAmount);
queryWrapper.eq(StorageLogNowDO::getId,storageMatDO.getMatId()); queryWrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId());
if (storageMatDO.getWhId()!=null){ if (storageMatDO.getWhId()!=null){
queryWrapper.eq(StorageLogNowDO::getWhId,storageMatDO.getWhId()); queryWrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId());
} }
if (storageMatDO.getPnId()!=null){ if (storageMatDO.getPnId()!=null){
queryWrapper.eq(StorageLogNowDO::getPnId,storageMatDO.getPnId()); queryWrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId());
} }
if (storageMatDO.getRgId()!=null){ if (storageMatDO.getRgId()!=null){
queryWrapper.eq(StorageLogNowDO::getRgId,storageMatDO.getRgId()); queryWrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId());
} }
StorageLogNowDO storageLogNowDO = storageLogNowMapper.selectOne(queryWrapper); StorageInventoryDO storageLogNowDO = storageInventoryMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(storageLogNowDO)){ if (ObjectUtil.isNotEmpty(storageLogNowDO)){
storageMatDO.setMatRest(storageLogNowDO.getStorageOkQty()); storageMatDO.setMatRest(storageLogNowDO.getYardAmount());
}else { }else {
storageMatDO.setMatRest(new BigDecimal(0)); storageMatDO.setMatRest(new BigDecimal(0));
} }

View File

@ -896,16 +896,17 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
// planMapper.updateById(planDO); // planMapper.updateById(planDO);
// } // }
// } // }
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getTestYn())){ if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getCheckYn())){
if ("1".equals(taskDispatchDetailDO.getTestYn())&&"PRODUCTION".equals(taskDispatchDO.getDispatchType())){ if (taskDispatchDetailDO.getCheckYn()==1&&"PRODUCTION".equals(taskDispatchDO.getDispatchType())){
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDetailDO.getDispatchId()); wrapper.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDetailDO.getDispatchId());
wrapper.eq(TaskDispatchDetailDO::getSort, taskDispatchDetailDO.getSort()+1); wrapper.eq(TaskDispatchDetailDO::getSort, taskDispatchDetailDO.getSort()+1);
wrapper.eq(TaskDispatchDetailDO::getDeleted, 0); wrapper.eq(TaskDispatchDetailDO::getDeleted, 0);
TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper); TaskDispatchDetailDO nextTaskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){ if (ObjectUtil.isNotEmpty(nextTaskDispatchDetailDO)){
taskDispatchDetailDO.setReportStatus(1); nextTaskDispatchDetailDO.setReportStatus(1);
} }
taskDispatchDetailMapper.updateById(nextTaskDispatchDetailDO);
} }
} }
taskDispatchDetailMapper.updateById(taskDispatchDetailDO); taskDispatchDetailMapper.updateById(taskDispatchDetailDO);

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@ -23,7 +23,11 @@
<result property="storageOkQty" column="storage_ok_qty"/> <result property="storageOkQty" column="storage_ok_qty"/>
</resultMap> </resultMap>
<select id="selectStorageMatValid" resultType="com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatValidRespVO" parameterType="java.lang.Long"> <select id="selectStorageMatValid" resultType="com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatValidRespVO" parameterType="java.lang.Long">
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 <!-- 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-->
<!-- <if test="wh_id != null and wh_id != ''">-->
<!-- AND wh_id = #{wh_id}-->
<!-- </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
<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

@ -70,3 +70,12 @@ export const exportMaterial = async (params) => {
export const getbzjList = async (params) => { export const getbzjList = async (params) => {
return await request.get({ url: `/heli/material/getbzjList`,params }) return await request.get({ url: `/heli/material/getbzjList`,params })
} }
export const getStorageNowAllPage = async (params) => {
return await request.get({ url: `/heli/material/page-now-all`, params })
}
// 入库查询物料
export const getStorageNowMaterialGroupPage = async (params) => {
return await request.get({ url: `/heli/material/page-material-group`, params })
}

View File

@ -0,0 +1,57 @@
import request from '@/config/axios'
export interface StorageInventoryVO {
id: number
whId: number
rgId: number
pnId: number
lotNo: string
description: string
projectId: number
projectName: string
projectPlanSubId: number
name: string
boomName: string
boomUnit: string
materialId: number
boomSpec: string
yardAmount: number
useAmount: number
preAmount: number
price: number
shortName: string
}
// 查询库存分页
export const getStorageInventoryPage = async (params) => {
return await request.get({ url: `/heli/storage-inventory/page`, params })
}
// 查询库存详情
export const getStorageInventory = async (id: number) => {
return await request.get({ url: `/heli/storage-inventory/get?id=` + id })
}
// 新增库存
export const createStorageInventory = async (data: StorageInventoryVO) => {
return await request.post({ url: `/heli/storage-inventory/create`, data })
}
// 修改库存
export const updateStorageInventory = async (data: StorageInventoryVO) => {
return await request.put({ url: `/heli/storage-inventory/update`, data })
}
// 删除库存
export const deleteStorageInventory = async (id: number) => {
return await request.delete({ url: `/heli/storage-inventory/delete?id=` + id })
}
// 导出库存 Excel
export const exportStorageInventory = async (params) => {
return await request.download({ url: `/heli/storage-inventory/export-excel`, params })
}
// 查询入/出库实时分页
export const getSupplementPage = async (params) => {
return await request.get({ url: `/heli/storage-inventory/getSupplementPage`, params })
}

View File

@ -671,11 +671,11 @@ const submitForm = async (operate) => {
} else if (operate == 'DELIVER') { } else if (operate == 'DELIVER') {
active.value = 'detail' active.value = 'detail'
// //
const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO; // const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO;
dataList.value.projectOrderSubs = await DeliverOrderApi.operateDeliverOrders(data); // dataList.value.projectOrderSubs = await DeliverOrderApi.operateDeliverOrders(data);
if(dataList.value.projectOrderSubs.length>0){ // if(dataList.value.projectOrderSubs.length>0){
dialogVisibles.value = true; // dialogVisibles.value = true;
} // }
} }
activeId.value = orderId activeId.value = orderId
if (sumbefore.value == 0) { if (sumbefore.value == 0) {

View File

@ -50,10 +50,10 @@
<el-table :data="formData.list" class="hl-table" v-loading="loading"> <el-table :data="formData.list" class="hl-table" v-loading="loading">
<el-table-column type="index" label="序号" fixed align="center" min-width="60" /> <el-table-column type="index" label="序号" fixed align="center" min-width="60" />
<el-table-column prop="name" min-width="200" label="子项目名称" align="center"/> <el-table-column prop="name" min-width="200" label="子项目名称" align="center"/>
<el-table-column prop="boomName" min-width="200" label="物料名称" align="center"/> <el-table-column prop="boomName" min-width="150" label="物料名称" align="center"/>
<el-table-column prop="materialCode" min-width="200" label="物料编码" align="center"/> <el-table-column prop="materialCode" min-width="170" label="物料编码" align="center"/>
<el-table-column prop="boomSpec" min-width="120" label="规格型号" align="center"/> <el-table-column prop="boomSpec" min-width="120" label="规格型号" align="center"/>
<el-table-column prop="boomUnit" label="系统单位"> <el-table-column prop="boomUnit" label="系统单位" width="100" align="center">
<template #default="scope"> <template #default="scope">
<dict-tag <dict-tag
:type="DICT_TYPE.HELI_MATERIAL_UNIT" :type="DICT_TYPE.HELI_MATERIAL_UNIT"
@ -61,6 +61,10 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="whName" min-width="120" label="仓库" align="center"/>
<el-table-column prop="rgName" min-width="120" label="库区" align="center"/>
<el-table-column prop="pnName" min-width="120" label="库位" align="center"/>
<el-table-column prop="pickAmount" min-width="120" label="领料数量" align="center"/>
</el-table> </el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" <Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" /> @pagination="getList" />

View File

@ -83,6 +83,14 @@
<el-table-column label="规格型号" align="center" prop="boomSpec" min-width="100px" /> <el-table-column label="规格型号" align="center" prop="boomSpec" min-width="100px" />
<el-table-column label="图号" align="center" prop="blueprintNo" min-width="100" /> <el-table-column label="图号" align="center" prop="blueprintNo" min-width="100" />
<el-table-column label="需求数量" align="center" prop="boomAmount" min-width="150" /> <el-table-column label="需求数量" align="center" prop="boomAmount" min-width="150" />
<el-table-column prop="purchaseRemAmounts" min-width="180" align="center">
<template #header><span class="hl-table_header">*</span>领料数量</template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.pickAmount`" class="mb-0px!">
<el-input-number style="width: 100%" v-model="scope.row.pickAmount" placeholder="领料数量" :min="0" :precision="2" />
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="boomUnit" label="系统单位" min-width="100"> <el-table-column prop="boomUnit" label="系统单位" min-width="100">
<template #default="scope"> <template #default="scope">
<dict-tag <dict-tag
@ -91,6 +99,8 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="库区" align="center" prop="rgName" min-width="120px" />
<el-table-column label="库位" align="center" prop="pnName" min-width="120px" />
<el-table-column label="要求完成日期" align="center" prop="boomArriveDate" min-width="150" :formatter="dateFormatter1" /> <el-table-column label="要求完成日期" align="center" prop="boomArriveDate" min-width="150" :formatter="dateFormatter1" />
<el-table-column label="操作" align="center" fixed="right" min-width="280"> <el-table-column label="操作" align="center" fixed="right" min-width="280">
<template #default="scope"> <template #default="scope">
@ -196,13 +206,18 @@ const getList = async () => {
const serachLog = (row) => { const serachLog = (row) => {
matLogRef.value.open(row.id) matLogRef.value.open(row.id)
} }
const getMat = async (rowids,ids,matCodes,name) => { const getMat = async (data) => {
//formData.value.boomItemDOList = arrBoom //formData.value.boomItemDOList = arrBoom
for(var i = 0 ; i < list.value.length ; i ++){ for(var i = 0 ; i < list.value.length ; i ++){
if(list.value[i].id == rowids){ if(list.value[i].id == data.rowid){
list.value[i].matCode = matCodes list.value[i].matCode = data.matCode
list.value[i].matId = ids list.value[i].matId = data.materialId
list.value[i].materialNames = name list.value[i].materialNames =data.matName
list.value[i].whId = data.whId
list.value[i].rgId = data.rgId
list.value[i].pnId = data.pnId
list.value[i].rgName = data.rgName
list.value[i].pnName = data.pnName
break; break;
} }
} }
@ -220,11 +235,17 @@ const submitForm = async () => {
return; return;
} }
const firstProjectSubId = list[0].projectId; const firstProjectSubId = list[0].projectId;
const whId = list[0].whId;
for (let i = 1; i < list.length; i++) { for (let i = 1; i < list.length; i++) {
if (list[i].projectId !== firstProjectSubId) { if (list[i].projectId !== firstProjectSubId) {
message.error("标准件明细不属于同一个项目,请确认"); message.error("标准件明细不属于同一个项目,请确认");
return; return;
} }
if (list[i].whId !== whId) {
message.error("标准件明细物料不属于同一仓库,请确认");
return;
}
} }
for (let i = 0; i < list.length; i++) { for (let i = 0; i < list.length; i++) {
if (list[i].matId== null) { if (list[i].matId== null) {

View File

@ -5,10 +5,10 @@
<ContentWrap class="borderxx"> <ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px"> <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="物料名称" prop="matName" > <el-form-item label="物料名称" prop="matName" >
<el-input v-model="queryParams.name" placeholder="物料名称" clearable @keyup.enter="handleQuery" class="!w-240px" /> <el-input v-model="queryParams.matName" placeholder="物料名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item label="规格型号" prop="matName" > <el-form-item label="规格型号" prop="matSpec" >
<el-input v-model="queryParams.spec" placeholder="规格型号" clearable @keyup.enter="handleQuery" class="!w-240px" /> <el-input v-model="queryParams.matSpec" placeholder="规格型号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item label="物料简称" prop="shortName" > <el-form-item label="物料简称" prop="shortName" >
<el-input v-model="queryParams.shortName" placeholder="物料简称" clearable @keyup.enter="handleQuery" class="!w-240px" /> <el-input v-model="queryParams.shortName" placeholder="物料简称" clearable @keyup.enter="handleQuery" class="!w-240px" />
@ -31,15 +31,29 @@
type="selection" type="selection"
width="55"/> width="55"/>
<el-table-column type="index" width="100" fixed label="序号" align="center" /> <el-table-column type="index" width="100" fixed label="序号" align="center" />
<el-table-column label="物料编码" align="center" prop="code" fixed min-width="120" /> <el-table-column prop="matCode" label="物料编码" min-width="120" align="center" />
<el-table-column label="物料名称" align="center" prop="name" fixed min-width="120"/> <el-table-column prop="matName" label="物料名称" min-width="140" align="center" />
<el-table-column label="物料类型" align="center" prop="materialType" min-width="120"> <el-table-column prop="matType" label="物料类型" min-width="120" align="center" />
<el-table-column prop="shortName" label="物料简称" min-width="120" align="center" />
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matBrand" label="品牌" min-width="120" align="center" />
<el-table-column prop="whName" label="仓库" min-width="120" align="center" >
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.materialType" /> {{scope.row.whName}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物料简称" align="center" prop="shortName" min-width="120"/> <el-table-column prop="rgName" label="库区" min-width="120" align="center" >
<el-table-column label="规格/型号" align="center" prop="spec" min-width="120"/> <template #default="scope">
{{scope.row.rgName}}
</template>
</el-table-column>
<el-table-column prop="pnName" label="库位" min-width="140" align="center" >
<template #default="scope">
{{scope.row.pnName}}
</template>
</el-table-column>
<el-table-column prop="matRest" label="库存数量" min-width="120" align="center" />
<el-table-column prop="matUnit" label="库存单位" min-width="120" align="center" />
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination <Pagination
@ -61,6 +75,7 @@
<script setup lang="ts"> <script setup lang="ts">
import {DICT_TYPE} from "@/utils/dict"; import {DICT_TYPE} from "@/utils/dict";
import * as MaterialApi from "@/api/heli/material"; import * as MaterialApi from "@/api/heli/material";
import * as StorageInventoryApi from "@/api/heli/storageinventory";
defineOptions({ name: 'StorageLog' }) defineOptions({ name: 'StorageLog' })
const printref = ref() const printref = ref()
const whList = ref([]) const whList = ref([])
@ -88,9 +103,9 @@ const queryParams = reactive({
pnId: undefined, pnId: undefined,
headerNo: undefined, headerNo: undefined,
spec:undefined, spec:undefined,
materialType:5, shortName:undefined,
status:1, matName:undefined,
shortName:undefined matSpec:undefined,
}) })
@ -102,7 +117,7 @@ const multipleTableRef = ref()
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
try { try {
const data = await MaterialApi.getbzjList(queryParams) ; const data = await StorageInventoryApi.getStorageInventoryPage(queryParams)
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
} finally { } finally {
@ -163,7 +178,18 @@ const emit = defineEmits(['success'])
// emit('success', multipleSelection.value) // emit('success', multipleSelection.value)
const success = () => { const success = () => {
dialogVisible.value = false; dialogVisible.value = false;
emit('success', rowid.value, clickItem.value[0].id, clickItem.value[0].code, clickItem.value[0].name) const data={
rowid:rowid.value,
materialId:clickItem.value[0].materialId,
matCode:clickItem.value[0].matCode,
matName: clickItem.value[0].matName,
whId:clickItem.value[0].whId,
rgId:clickItem.value[0].rgId,
pnId:clickItem.value[0].pnId,
rgName:clickItem.value[0].rgName,
pnName:clickItem.value[0].pnName,
}
emit('success', data)
} }

View File

@ -354,7 +354,7 @@ link type="primary" size="small" :disabled="ctrView || ctrDelete"
</el-button> </el-button>
<el-button @click="handleStatus(2)" type="primary" v-if="btnSave" size="large"> <el-button @click="handleStatus(2)" type="primary" v-if="btnSave" size="large">
</el-button> </el-button>
<el-button @click="handleStatus(3)" type="danger" v-if="btnCancel" size="large"> <el-button @click="handleStatus(3)" type="danger" v-if="btnCancel&&formData.status != 2" size="large">
</el-button> </el-button>
</div> </div>
</el-card> </el-card>
@ -377,7 +377,6 @@ import * as StorageCheckApi from '@/api/heli/storagecheck'
import * as StorageMatApi from '@/api/heli/storagemat' import * as StorageMatApi from '@/api/heli/storagemat'
import { getAccessToken, getTenantId } from '@/utils/auth' import { getAccessToken, getTenantId } from '@/utils/auth'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
import * as MaterialApi from '@/api/heli/material' import * as MaterialApi from '@/api/heli/material'
import * as WarehouseApi from '@/api/heli/warehouse' import * as WarehouseApi from '@/api/heli/warehouse'
import * as RgApi from '@/api/heli/rg' import * as RgApi from '@/api/heli/rg'
@ -385,9 +384,8 @@ import * as PnApi from '@/api/heli/pn'
import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file' import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file'
import download from '@/utils/download' import download from '@/utils/download'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import materials from './materials.vue' import materials from './materialsin.vue'
import projects from './subproject.vue' import projects from './subproject.vue'
import {json} from "node:stream/consumers";
import {Search} from "@element-plus/icons-vue"; import {Search} from "@element-plus/icons-vue";
import purchaseorderDialog from '@/views/heli/outsourcestock/purchaseorderDialog.vue' import purchaseorderDialog from '@/views/heli/outsourcestock/purchaseorderDialog.vue'
@ -469,13 +467,11 @@ const getList = async (arrMat) => {
let flag=true let flag=true
let whName='' let whName=''
for (let i = 0; i < whList.value.length; i++) { for (let i = 0; i < whList.value.length; i++) {
console.log(whList.value[i].id)
if (whList.value[i].id==formData.value.whId){ if (whList.value[i].id==formData.value.whId){
whName=whList.value[i].whName whName=whList.value[i].whName
break; break;
} }
} }
console.log("库位1"+pnList.value)
arrMat.forEach((row) => { arrMat.forEach((row) => {
if ( if (
formData.value.matItemDOList.filter( formData.value.matItemDOList.filter(
@ -494,8 +490,7 @@ const getList = async (arrMat) => {
} }
row.pnlist = ref([]) row.pnlist = ref([])
row.pnlist = pnList.value.filter((pn) => pn.rg_id == row.rgId) row.pnlist = pnList.value.filter((pn) => pn.rg_id == row.rgId)
console.log("库位"+pnList.value)
console.log("库位长度"+pnList.value.length)
if (row.pnlist.length == 1) { if (row.pnlist.length == 1) {
row.pnId = row.pnlist[0].id row.pnId = row.pnlist[0].id
}else if (pnList.value.length == 0) { }else if (pnList.value.length == 0) {
@ -503,6 +498,7 @@ const getList = async (arrMat) => {
}else { }else {
row.pnId='' row.pnId=''
} }
row.price=''
if (flag){ if (flag){
formData.value.matItemDOList.push(row) formData.value.matItemDOList.push(row)
} }

View File

@ -225,7 +225,7 @@ class="!w-265px" placeholder="物料编码" :disabled="true || ctrView || ctrSav
<el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!">
<el-select <el-select
v-model="scope.row.pnId" placeholder="" style="width: 100%" v-model="scope.row.pnId" placeholder="" style="width: 100%"
:disabled="ctrView || ctrSave" @change="handlePn(scope)"> :disabled="true" @change="handlePn(scope)">
<el-option <el-option
v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pn_name" v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pn_name"
:value="dict.id" /> :value="dict.id" />
@ -418,7 +418,6 @@ import * as StorageApi from '@/api/heli/storage'
import * as StorageMatApi from '@/api/heli/storagemat' import * as StorageMatApi from '@/api/heli/storagemat'
import { getAccessToken, getTenantId } from '@/utils/auth' import { getAccessToken, getTenantId } from '@/utils/auth'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
import ProjectOrderDialog from '@/views/heli/deliverorder/projectOrderDialog.vue' import ProjectOrderDialog from '@/views/heli/deliverorder/projectOrderDialog.vue'
import * as MaterialApi from '@/api/heli/material' import * as MaterialApi from '@/api/heli/material'
import * as WarehouseApi from '@/api/heli/warehouse' import * as WarehouseApi from '@/api/heli/warehouse'
@ -427,7 +426,7 @@ import * as PnApi from '@/api/heli/pn'
import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file' import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file'
import download from '@/utils/download' import download from '@/utils/download'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import materials from './materials.vue' import materials from './materialsout.vue'
import projects from './subproject.vue' import projects from './subproject.vue'
import { Search, } from '@element-plus/icons-vue' import { Search, } from '@element-plus/icons-vue'
import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue' import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
@ -530,11 +529,8 @@ const getList = async (arrMat) => {
item.pnId == row.pnId item.pnId == row.pnId
).length == 0 ).length == 0
) { ) {
if(row.whId1){
row.matId = row.matId row.matId = row.matId
}else{
row.matId = row.id
}
row.projectNo = formData.value.projectNo row.projectNo = formData.value.projectNo
row.projectSubName =formData.value.projectSubName row.projectSubName =formData.value.projectSubName
row.pnlist = ref([]) row.pnlist = ref([])
@ -555,6 +551,7 @@ const getList = async (arrMat) => {
if(row.matUnitId!=null){ if(row.matUnitId!=null){
row.matUnit = row.matUnitId row.matUnit = row.matUnitId
} }
console.log(row.matRest)
formData.value.matItemDOList.push(row) formData.value.matItemDOList.push(row)
} }
}) })
@ -663,7 +660,9 @@ const handleStatus = async (num) => {
formData.value.matItemDOList.forEach(item => { formData.value.matItemDOList.forEach(item => {
if(item.storageOkQty<=0){ if(item.storageOkQty<=0){
message.alertWarning(item.matCode+'出库数量为0,请确认!' message.alertWarning(item.matCode+'出库数量为0,请确认!'
) )
if(!isZero){ if(!isZero){
isZero = true; isZero = true;
} }
@ -1066,7 +1065,7 @@ const getMatList = async (name) => {
} }
const handlePn = async (scope) => { const handlePn = async (scope) => {
scope.row.matList = matList.value // scope.row.matList = matList.value
// var repeatItem = formData.value.matItemDOList.filter( // var repeatItem = formData.value.matItemDOList.filter(
// (mat) => mat.matId == scope.row.matId && mat.pnId == scope.row.pnId // (mat) => mat.matId == scope.row.matId && mat.pnId == scope.row.pnId
// ) // )
@ -1077,37 +1076,37 @@ const handlePn = async (scope) => {
// return // return
// } // }
if ( // if (
matLastData.value.find( // matLastData.value.find(
(item) => // (item) =>
item.matId === scope.row.matId && // item.matId === scope.row.matId &&
item.whId == formData.value.whId && // item.whId == formData.value.whId &&
item.pnId == scope.row.pnId // item.pnId == scope.row.pnId
) // )
) { // ) {
const matVo = matLastData.value.find( // const matVo = matLastData.value.find(
(item) => // (item) =>
item.matId === scope.row.matId && // item.matId === scope.row.matId &&
item.whId == formData.value.whId && // item.whId == formData.value.whId &&
item.pnId == scope.row.pnId // item.pnId == scope.row.pnId
) // )
// scope.row.matId = matVo.matId // scope.row.matId = matVo.matId
// scope.row.matName = matVo.matName // scope.row.matName = matVo.matName
// scope.row.matCode = matVo.matCode // scope.row.matCode = matVo.matCode
// scope.row.matSpec = matVo.matSpec // scope.row.matSpec = matVo.matSpec
// scope.row.matType = matVo.materialType // scope.row.matType = matVo.materialType
// scope.row.matUnit = matVo.matUnit // scope.row.matUnit = matVo.matUnit
scope.row.rgId = matVo.rgId // scope.row.rgId = matVo.rgId
scope.row.pnId = matVo.pnId // scope.row.pnId = matVo.pnId
scope.row.matRest = matVo.matRest // scope.row.matRest = matVo.matRest
// scope.row.storageOkQty = matVo.storageOkQty // scope.row.storageOkQty = matVo.storageOkQty
// scope.row.lotNo = matVo.lotNo // scope.row.lotNo = matVo.lotNo
// scope.row.description = matVo.description // scope.row.description = matVo.description
} else { // } else {
scope.row.rgId = '' // scope.row.rgId = ''
scope.row.matRest = '0' // scope.row.matRest = '0'
message.alertWarning('当前库位无库存数量可出库') // message.alertWarning('')
} // }
} }
const matSelectLoading = ref(false) const matSelectLoading = ref(false)
@ -1222,7 +1221,7 @@ onMounted(async () => {
await getMatList('') await getMatList('')
// //
matLastData.value = await StorageMatApi.getStorageMatList(0) // matLastData.value = await StorageMatApi.getStorageMatList(0)
// //
if (query.id) { if (query.id) {

View File

@ -371,7 +371,7 @@ link type="primary" size="small" :disabled="ctrView || ctrDelete"
</el-button> </el-button>
<el-button @click="handleStatus(4)" type="success" v-if="btnok " size="large">审核</el-button> <el-button @click="handleStatus(4)" type="success" v-if="btnok " size="large">审核</el-button>
<el-button @click="handleStatus(3)" type="danger" v-if="btnCancel " size="large"> <el-button @click="handleStatus(3)" type="danger" v-if="btnCancel&&formData.status != 4 " size="large">
</el-button> </el-button>
</div> </div>
</el-card> </el-card>

View File

@ -172,7 +172,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" min-width="180" fixed="right"> <el-table-column label="操作" align="center" min-width="180" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="openDetail('update', scope.row.id)" v-if="scope.row.status != 3"> <el-button link type="primary" @click="openDetail('update', scope.row.id)" v-if="scope.row.status != 3&&scope.row.status!=4">
编辑 编辑
</el-button> </el-button>
<el-button link type="primary" @click="openDetail('review', scope.row.id)"> <el-button link type="primary" @click="openDetail('review', scope.row.id)">

View File

@ -0,0 +1,229 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="80%">
<ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryReqVo" :inline="true" label-width="108px">
<el-form-item label=" 物料编码:" label-width="150px">
<el-input v-model="queryReqVo.matCode" placeholder="物料编码" class="!w-240px" :disabled="!chkboxEnable" />
</el-form-item>
<el-form-item label=" 物料名称:" label-width="150px">
<el-input v-model="queryReqVo.matName" placeholder="物料名称" class="!w-240px" :disabled="!chkboxEnable" />
</el-form-item>
<el-form-item label="规格/型号">
<el-input v-model="queryReqVo.matSpec" placeholder="规格/型号" class="!w-240px" :disabled="!chkboxEnable" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery" type="primary" :disabled="!chkboxEnable">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button><el-button @click="resetQuery" :disabled="!chkboxEnable">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<el-card class="hl-table">
<el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" @selection-change="handleSelectionChange" :row-key="getRowKeys" @row-click="clickRow" :selection="true" :reserve-selection="true" min-width="1800" >
<el-table-column type="selection" width="55" :reserve-selection="true" :selectable="row=>chkboxEnable" />
<!-- <el-table-column prop="no" label="序号" min-width="120" align="center" /> -->
<el-table-column label="序号" type="index" min-width="120" align="center" />
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" />
<el-table-column prop="matName" label="物料名称" min-width="140" align="center" />
<el-table-column prop="matType" label="物料类型" min-width="120" align="center" />
<el-table-column prop="shortName" label="物料简称" min-width="120" align="center" />
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matBrand" label="品牌" min-width="120" align="center" />
<!-- <el-table-column prop="rgName" label="库区" min-width="120" align="center" v-if="formType !='in'">-->
<!-- <template #default="scope">-->
<!-- {{scope.row.num>1&&formType=='group'? '':scope.row.rgName}}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="pnName" label="库位" min-width="140" align="center" v-if="formType !='in'">-->
<!-- <template #default="scope">-->
<!-- {{scope.row.num>1&&formType=='group'? '':scope.row.pnName}}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="storageOkQty" label="库存数量" min-width="120" align="center" v-if="formType=='out'"/>
<el-table-column prop="matRest" label="库存数量" min-width="120" align="center" v-if="formType!='out'"/>
<el-table-column prop="matUnit" label="库存单位" min-width="120" align="center" />
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryReqVo.pageNo" v-model:limit="queryReqVo.pageSize" @pagination="getList()" />
</el-card>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import * as StorageLogApi from '@/api/heli/storagelog'
import * as MaterialApi from '@/api/heli/material'
import * as ProcessBomApi from '@/api/heli/processbom'
import { ElTable } from 'element-plus'
//:selectable="row=>row.disabled || chkboxEnable"
const chkboxEnable = ref(true)
const queryEnable = ref(true)
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const list = ref([]) //
const total = ref(0) //
const multipleTable = ref<InstanceType<typeof ElTable>>()
const multipleSelection = ref([])
const handleSelectionChange = (val: []) => {
multipleSelection.value = val
}
const clickRow = (row: any) => {
console.log(row)
if (chkboxEnable.value) {
if (row) {
multipleTable.value!.toggleRowSelection(row, undefined)
} else {
multipleTable.value!.clearSelection()
}
}
}
//key,
const getRowKeys = (row) => {
return row.id
}
const queryReqVo: any = reactive({
pageNo: 1,
pageSize: 10,
whId: undefined,
matCode: undefined,
matSpec: undefined
})
/** 搜索按钮操作 */
const handleQuery = async () => {
queryReqVo.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryReqVo.matCode = ''
queryReqVo.matSpec = ''
queryReqVo.matName = ''
handleQuery()
}
const getList = async () => {
formLoading.value = true
var data;
var dataone;
try {
if(formType.value == 'out'){
data = await StorageLogApi.getStorageNowAllPage(queryReqVo)
}else if(formType.value == 'in'){
// data = await StorageLogApi.getStorageNowMaterialGroupPage(queryReqVo)
data = await MaterialApi.getStorageNowMaterialGroupPage(queryReqVo)
}else if(formType.value == 'group'){
data = await StorageLogApi.getStorageNowMaterialGroupPage(queryReqVo)
data.list.forEach(mat =>{
mat.storageOkQty = mat.matRest
mat.requireAmount = mat.matRest
})
}else if(formType.value == 'bomfind'){
dataone = await ProcessBomApi.getProcessBomDetailListByBomIdbyid(queryReqVo.whId.projectNo)
dataone = dataone.filter(item => item.whId === queryReqVo.whId.whId);
// datatow
}
if(dataone){
list.value = dataone.map(item => ({
...item,
matCode: item.materialCode,
matName: item.materialName,
matSpec:item.spec,
storageOkQty:item.amount,
matUnit:item.unit,/// aa
matType: item.type == 1 ? '标准件' : item.type == 2 ? '其他' : item.type,
rgId:item.rgId,
pnId:item.pnId,
rgName:item.rgName,
pnName:item.pnName,
whId1:item.whId,
matId:item.id,
materialId:item.id
}))
total.value = dataone.length
}
if(data){
list.value = data.list
total.value = data.total
}
//list.value = data.splice((queryReqVo.pageNo - 1) * queryReqVo.pageSize, queryReqVo.pageSize)
} finally {
formLoading.value = false
}
}
const formType = ref()
/** 打开弹窗 */
const open = async (whId: number,type:string) => {
multipleSelection.value = []
dialogVisible.value = true
dialogTitle.value = '物料列表'
list.value=[]
formType.value = type
//
queryReqVo.whId = whId
queryReqVo.matCode = ''
queryReqVo.matSpec = ''
getList()
chkboxEnable.value = true
list.value.forEach((row) => {
setTimeout(() => {
multipleTable.value.toggleRowSelection(row, !chkboxEnable.value) //
}, 0)
})
try {
//
} finally {
formLoading.value = false
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
formLoading.value = true
try {
dialogVisible.value = false
multipleSelection.value.forEach((item) => {
if (item.amount) {
item.matRest = item.amount;
} else {
item.matRest = item.storageOkQty;
}
if(item.whId1){
item.matId = item.materialId
}else{
item.matId = item.id
}
item.storageOkQty = ''
item.whId= item.whId??''
item.rgId= item.rgId??''
item.pnId= item.pnId??''
})
console.log(multipleSelection.value)
//
emit('success', multipleSelection.value)
} finally {
formLoading.value = false
}
}
</script>

View File

@ -0,0 +1,226 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="80%">
<ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryReqVo" :inline="true" label-width="108px">
<el-form-item label=" 物料编码:" label-width="150px">
<el-input v-model="queryReqVo.matCode" placeholder="物料编码" class="!w-240px" :disabled="!chkboxEnable" />
</el-form-item>
<el-form-item label=" 物料名称:" label-width="150px">
<el-input v-model="queryReqVo.matName" placeholder="物料名称" class="!w-240px" :disabled="!chkboxEnable" />
</el-form-item>
<el-form-item label="规格/型号">
<el-input v-model="queryReqVo.matSpec" placeholder="规格/型号" class="!w-240px" :disabled="!chkboxEnable" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery" type="primary" :disabled="!chkboxEnable">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button><el-button @click="resetQuery" :disabled="!chkboxEnable">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<el-card class="hl-table">
<el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" @selection-change="handleSelectionChange" :row-key="getRowKeys" @row-click="clickRow" :selection="true" :reserve-selection="true" min-width="1800" >
<el-table-column type="selection" width="55" :reserve-selection="true" :selectable="row=>chkboxEnable" />
<!-- <el-table-column prop="no" label="序号" min-width="120" align="center" /> -->
<el-table-column label="序号" type="index" min-width="120" align="center" />
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" />
<el-table-column prop="matName" label="物料名称" min-width="140" align="center" />
<el-table-column prop="matType" label="物料类型" min-width="120" align="center" />
<el-table-column prop="shortName" label="物料简称" min-width="120" align="center" />
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matBrand" label="品牌" min-width="120" align="center" />
<el-table-column prop="rgName" label="库区" min-width="120" align="center" v-if="formType !='in'">
<template #default="scope">
{{scope.row.num>1&&formType=='group'? '':scope.row.rgName}}
</template>
</el-table-column>
<el-table-column prop="pnName" label="库位" min-width="140" align="center" v-if="formType !='in'">
<template #default="scope">
{{scope.row.num>1&&formType=='group'? '':scope.row.pnName}}
</template>
</el-table-column>
<el-table-column prop="matRest" label="库存数量" min-width="120" align="center" />
<el-table-column prop="matUnit" label="库存单位" min-width="120" align="center" />
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryReqVo.pageNo" v-model:limit="queryReqVo.pageSize" @pagination="getList()" />
</el-card>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import * as StorageLogApi from '@/api/heli/storagelog'
import * as MaterialApi from '@/api/heli/material'
import * as ProcessBomApi from '@/api/heli/processbom'
import { ElTable } from 'element-plus'
//:selectable="row=>row.disabled || chkboxEnable"
const chkboxEnable = ref(true)
const queryEnable = ref(true)
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const list = ref([]) //
const total = ref(0) //
const multipleTable = ref<InstanceType<typeof ElTable>>()
const multipleSelection = ref([])
const handleSelectionChange = (val: []) => {
multipleSelection.value = val
}
const clickRow = (row: any) => {
console.log(row)
if (chkboxEnable.value) {
if (row) {
multipleTable.value!.toggleRowSelection(row, undefined)
} else {
multipleTable.value!.clearSelection()
}
}
}
//key,
const getRowKeys = (row) => {
return row.id
}
const queryReqVo: any = reactive({
pageNo: 1,
pageSize: 10,
whId: undefined,
matCode: undefined,
matSpec: undefined
})
/** 搜索按钮操作 */
const handleQuery = async () => {
queryReqVo.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryReqVo.matCode = ''
queryReqVo.matSpec = ''
queryReqVo.matName = ''
handleQuery()
}
const getList = async () => {
formLoading.value = true
var data;
var dataone;
try {
if(formType.value == 'out'){
data = await MaterialApi.getStorageNowAllPage(queryReqVo)
}else if(formType.value == 'in'){
// data = await StorageLogApi.getStorageNowMaterialGroupPage(queryReqVo)
data = await MaterialApi.getStorageNowMaterialGroupPage(queryReqVo)
}else if(formType.value == 'group'){
data = await StorageLogApi.getStorageNowMaterialGroupPage(queryReqVo)
data.list.forEach(mat =>{
mat.storageOkQty = mat.matRest
mat.requireAmount = mat.matRest
})
}else if(formType.value == 'bomfind'){
dataone = await ProcessBomApi.getProcessBomDetailListByBomIdbyid(queryReqVo.whId.projectNo)
dataone = dataone.filter(item => item.whId === queryReqVo.whId.whId);
// datatow
}
if(dataone){
list.value = dataone.map(item => ({
...item,
matCode: item.materialCode,
matName: item.materialName,
matSpec:item.spec,
storageOkQty:item.amount,
matUnit:item.unit,/// aa
matType: item.type == 1 ? '标准件' : item.type == 2 ? '其他' : item.type,
rgId:item.rgId,
pnId:item.pnId,
rgName:item.rgName,
pnName:item.pnName,
whId1:item.whId,
matId:item.id,
materialId:item.id
}))
total.value = dataone.length
}
if(data){
list.value = data.list
total.value = data.total
}
//list.value = data.splice((queryReqVo.pageNo - 1) * queryReqVo.pageSize, queryReqVo.pageSize)
} finally {
formLoading.value = false
}
}
const formType = ref()
/** 打开弹窗 */
const open = async (whId: number,type:string) => {
multipleSelection.value = []
dialogVisible.value = true
dialogTitle.value = '物料列表'
list.value=[]
formType.value = type
//
queryReqVo.whId = whId
queryReqVo.matCode = ''
queryReqVo.matSpec = ''
getList()
chkboxEnable.value = true
list.value.forEach((row) => {
setTimeout(() => {
multipleTable.value.toggleRowSelection(row, !chkboxEnable.value) //
}, 0)
})
try {
//
} finally {
formLoading.value = false
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
formLoading.value = true
try {
dialogVisible.value = false
multipleSelection.value.forEach((item) => {
if (item.amount) {
item.matRest = item.amount;
} else {
item.matRest = item.matRest;
}
item.matId = item.materialId
item.storageOkQty = ''
item.whId= item.whId??''
item.rgId= item.rgId??''
item.pnId= item.pnId??''
})
console.log(multipleSelection.value)
//
emit('success', multipleSelection.value)
} finally {
formLoading.value = false
}
}
</script>

View File

@ -83,7 +83,7 @@ v-for="dict in pnCurrentList" :key="dict.id" :label="dict.pn_name"
<el-table-column label="仓库" align="center" prop="whName" min-width="120"/> <el-table-column label="仓库" align="center" prop="whName" min-width="120"/>
<el-table-column label="库区" align="center" prop="rgName" min-width="120"/> <el-table-column label="库区" align="center" prop="rgName" min-width="120"/>
<el-table-column label="库位" align="center" prop="pnName" min-width="120"/> <el-table-column label="库位" align="center" prop="pnName" min-width="120"/>
<el-table-column label="库存数量" align="center" prop="storageOkQty" min-width="100"/> <el-table-column label="库存数量" align="center" prop="matRest" min-width="100"/>
<el-table-column label="安全库存" align="center" prop="invSafe" min-width="100"/> <el-table-column label="安全库存" align="center" prop="invSafe" min-width="100"/>
<el-table-column label="系统单位" align="center" prop="matUnit" min-width="100"/> <el-table-column label="系统单位" align="center" prop="matUnit" min-width="100"/>
<el-table-column min-width="200px" align="center" fixed="right"> <el-table-column min-width="200px" align="center" fixed="right">
@ -110,6 +110,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 StorageLogApi from '@/api/heli/storagelog'
import * as StorageinventoryApi from '@/api/heli/storageinventory'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
@ -156,7 +157,8 @@ const queryFormRef = ref() // 搜索的表单
const getList = async () => { 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)
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
} finally { } finally {