库存更改

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 STORAGE_IN_NOT_EXISTS = new ErrorCode(1_003_010, "入库单不存在");
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, "项目订单不存在");
/************发货管理***********/

View File

@ -151,7 +151,7 @@ public class bdgzsomthingController {
BeanUtils.toBean(list, bdgzsomthingRespVO.class));
}
@Scheduled(fixedRate = 10800000)
// @Scheduled(fixedRate = 10800000)
public void scheduledTask() {
bdgzsomthingService.selectds();
}
@ -159,15 +159,15 @@ public class bdgzsomthingController {
//@Scheduled(cron = "0 2 0 * * ?") //每天十天执行一次
@PostConstruct
public void init() {
selectHasPrice();
selectSafeStorageAndDeliverOneYear();
// selectHasPrice();
// selectSafeStorageAndDeliverOneYear();
}
@Scheduled(cron = "0 0 2 * * ?")
// @Scheduled(cron = "0 0 2 * * ?")
public void selectHasPrice(){
bdgzsomthingService.selectHasPrice();
}
@Scheduled(cron = "0 0 0 * * ?")
// @Scheduled(cron = "0 0 0 * * ?")
public void selectSafeStorageAndDeliverOneYear(){bdgzsomthingService.selectSafeStorageAndDeliverOneYear();}
@PostMapping("/getMessage")
@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.MaterialRespVO;
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.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 io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -128,4 +132,20 @@ public class MaterialController {
PageResult<MaterialDO> pageResult = materialService.getbzjList(pageReqVO);
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.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat;
import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -27,7 +28,7 @@ public class MaterialPlanBoomExcelVo {
@ExcelProperty("子项目名称")
private String projectSubName;
@ExcelProperty("物料编码")
private String materialName;
private String materialNames;
@ExcelProperty("物料名称")
private String matName;
@ -37,9 +38,15 @@ public class MaterialPlanBoomExcelVo {
private String blueprintNo;
@ExcelProperty("需求数量")
private String boomAmount;
@ExcelProperty("系统单位")
@ExcelProperty("领料数量")
private String pickAmount;
@ExcelProperty(value = "系统单位", converter = DictConvert.class)
@DictFormat("heli_material_unit")
private String boomUnit;
@ExcelProperty("库区")
private String rgName;
@ExcelProperty("库位")
private String pnName;
@ExcelProperty("要求完成日期")
private String boomArriveDates;
}

View File

@ -92,5 +92,15 @@ public class MatReqDetailRespVO {
*/
@Schema(description = "物料编码", example = "32088")
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.dal.dataobject.deliverorder.DeliverOrderDO;
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.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
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.service.storagelog.StorageLogService;
@ -66,6 +68,8 @@ public class StorageController {
private StorageLogNowMapper storageLogNowMapper;
@Resource
private MaterialMapper materialMapper;
@Resource
private StorageInventoryMapper storageInventoryMapper;
@PostMapping("/cancelWeiWai")
@Operation(summary = "委外取消提交")
@PreAuthorize("@ss.hasPermission('heli:storage:create')")
@ -140,53 +144,116 @@ public class StorageController {
storageService.updateStorage(updateReqVO);
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){
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);
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.isEmpty(storageInventoryDO)){
storageInventoryDO = new StorageInventoryDO();
storageInventoryDO.setMaterialId(storageMatDO.getMatId());
storageInventoryDO.setWhId(storageMatDO.getWhId());
storageInventoryDO.setRgId(storageMatDO.getRgId());
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());
}
}else {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty()));
}
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);
storageInventoryMapper.insertOrUpdate(storageInventoryDO);
}
}
// 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) {
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);
}
}
}
//状态说明1保存 2提交 3作废 4已审批
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)
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)
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 whId;
private Long rgId;
private Long pnId;
private BigDecimal pickAmount;
/**
* 子项目编码
*/
@TableField(exist = false)
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;
@TableField(exist = false)
private String nickname;
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.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.storagelog.vo.StorageLogPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
import com.chanko.yunxi.mes.module.heli.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.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
@ -130,4 +137,30 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
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.matreqdetail.MatReqDetailDO;
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.processbom.ProcessBomDO;
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.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.supplier.SupplierDO;
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.ProcessBomStatusEnum;
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<>();
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("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")
.leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId)
.leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.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("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()
.groupBy(MaterialPlanBoomDO::getId)
.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.matreq.MatReqDO;
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.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 org.apache.ibatis.annotations.Mapper;
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<>();
query.selectAll(MatReqDetailDO.class)
.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(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(MatReqDetailDO::getId)
.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.purchaseorderno.PurchaseOrderNoDO;
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.supplier.SupplierDO;
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)
.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("min(mp.require_arrive_time) as requireArriveTime")
.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(MaterialDO.class, "mat", MaterialDO::getId, PurchaseOrderNoDetailDO::getMaterialId)
.leftJoin(StorageMaterialDO.class,"sm",StorageMaterialDO::getId,PurchaseOrderNoDetailDO::getMaterialId)
.leftJoin(StorageInventoryDO.class,"sm", StorageInventoryDO::getMaterialId,PurchaseOrderNoDetailDO::getMaterialId)
.disableSubLogicDel()
.groupBy(MaterialPlanDetailDO::getMaterialId)
.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.getProjectSubName()), PurchaseOrderNoDetailDO::getName, pageReqVO.getProjectSubName())
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.ne(PurchaseOrderNoDO::getPurchaseType, 2)
.like(!StringUtils.isEmpty(pageReqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, pageReqVO.getBoomName());
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.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.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.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 org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import javax.annotation.Resource;
import java.util.List;
/**
@ -22,7 +28,6 @@ import java.util.List;
public interface StorageMaterialMapper extends BaseMapperX<StorageMaterialDO> {
// PageResult<StorageLogNowDO> selectMaterialWithNow(StorageLogPageReqVO reqVO);
default PageResult<StorageMaterialDO> selectMaterialWithNow(StorageLogPageReqVO reqVO){
MPJLambdaWrapper<StorageMaterialDO> query = new MPJLambdaWrapper<>();
@ -59,5 +64,6 @@ public interface StorageMaterialMapper extends BaseMapperX<StorageMaterialDO> {
.groupBy(StorageMaterialDO::getId).orderByDesc(StorageMaterialDO::getId);
return selectPage(reqVO,query);
}
}

View File

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

View File

@ -3,9 +3,11 @@ package com.chanko.yunxi.mes.module.heli.service.material;
import java.util.*;
import javax.validation.*;
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.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
/**
* 物料 Service 接口
@ -62,4 +64,7 @@ public interface MaterialService {
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;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.MaterialPageReqVO;
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.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.storageinventory.StorageInventoryMapper;
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.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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -27,10 +35,8 @@ import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -55,6 +61,9 @@ public class MaterialServiceImpl implements MaterialService {
@Resource
private SerialNumberService serialNumberService;
@Resource
private StorageInventoryMapper storageInventoryMapper;
@PostConstruct
public void init(){
@ -209,6 +218,72 @@ public class MaterialServiceImpl implements MaterialService {
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) {
// 基础校验
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.setProjectMaterialPlanDetailId(boomDO.getId());
matReqDetailDO.setProjectMaterialPlanId(boomDO.getProjectMaterialPlanId());
matReqDetailDO.setWhId(materialPlanBoomDO.getWhId());
matReqDetailDO.setRgId(materialPlanBoomDO.getRgId());
matReqDetailDO.setPnId(materialPlanBoomDO.getPnId());
matReqDetailDO.setPickAmount(materialPlanBoomDO.getPickAmount());
matReqDetailDOS.add(matReqDetailDO);
boomDO.setIsPurYard(3);
materialPlanBoomMapper.updateById(boomDO);

View File

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

View File

@ -278,10 +278,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
if (processDesignProgressMapper.selectCount(wrapper)==0){
processDesignDO.setProgressBlank("未开始");
}else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){
processDesignDO.setProgressBlank("进行中");
}else {
if (processDesign.getIsOverProcess()==1){
processDesignDO.setProgressBlank("已完成");
}else {
processDesignDO.setProgressBlank("进行中");
}
}
}else if(ProcessDesignTypeEnum.BLUEPRINT_3D.name().equals(processDesign.getProcessDesignType())){
@ -295,10 +295,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
if (l==0){
processDesignDO.setProgress3d("未开始");
}else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){
processDesignDO.setProgress3d("进行中");
}else{
if (processDesign.getIsOverProcess()==1){
processDesignDO.setProgress3d("已完成");
}else{
processDesignDO.setProgress3d("进行中");
}
}
}else if(ProcessDesignTypeEnum.BLUEPRINT_2D.name().equals(processDesign.getProcessDesignType())){
@ -311,10 +311,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
if (processDesignProgressMapper.selectCount(wrapper)==0){
processDesignDO.setProgress2d("未开始");
}else{
if (ObjectUtil.isEmpty(processDesign.getIsOverProcess())){
processDesignDO.setProgress2d("进行中");
}else{
if (processDesign.getIsOverProcess()==1){
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.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.module.heli.controller.admin.outsourcestockboom.vo.OutsourceStockBoomSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.StorageInventoryController;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
@ -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.purchaseordernodetail.PurchaseOrderNoDetailDO;
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.storagelogNow.StorageLogNowDO;
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.purchaseorder.PurchaseOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
@ -94,6 +98,8 @@ public class StorageServiceImpl implements StorageService {
private PurchaseOrderMapper purchaseOrderMapper;
@Resource
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private StorageInventoryMapper storageInventoryMapper;
@Resource
private StorageLogService storageLogService;
@ -444,6 +450,34 @@ private StorageLogService storageLogService;
updateWrapper.set(PurchaseOrderNoDetailDO::getReceivingStatus,3);
updateWrapper.set(PurchaseOrderNoDetailDO::getPurchaseRemAmount,BigDecimal.ZERO);
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);
}

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

View File

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

View File

@ -70,3 +70,12 @@ export const exportMaterial = async (params) => {
export const getbzjList = async (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') {
active.value = 'detail'
//
const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO;
dataList.value.projectOrderSubs = await DeliverOrderApi.operateDeliverOrders(data);
if(dataList.value.projectOrderSubs.length>0){
dialogVisibles.value = true;
}
// const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO;
// dataList.value.projectOrderSubs = await DeliverOrderApi.operateDeliverOrders(data);
// if(dataList.value.projectOrderSubs.length>0){
// dialogVisibles.value = true;
// }
}
activeId.value = orderId
if (sumbefore.value == 0) {

View File

@ -50,10 +50,10 @@
<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 prop="name" min-width="200" label="子项目名称" align="center"/>
<el-table-column prop="boomName" min-width="200" label="物料名称" align="center"/>
<el-table-column prop="materialCode" min-width="200" label="物料编码" align="center"/>
<el-table-column prop="boomName" min-width="150" 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="boomUnit" label="系统单位">
<el-table-column prop="boomUnit" label="系统单位" width="100" align="center">
<template #default="scope">
<dict-tag
:type="DICT_TYPE.HELI_MATERIAL_UNIT"
@ -61,6 +61,10 @@
/>
</template>
</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>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@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="blueprintNo" min-width="100" />
<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">
<template #default="scope">
<dict-tag
@ -91,6 +99,8 @@
/>
</template>
</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" fixed="right" min-width="280">
<template #default="scope">
@ -196,13 +206,18 @@ const getList = async () => {
const serachLog = (row) => {
matLogRef.value.open(row.id)
}
const getMat = async (rowids,ids,matCodes,name) => {
const getMat = async (data) => {
//formData.value.boomItemDOList = arrBoom
for(var i = 0 ; i < list.value.length ; i ++){
if(list.value[i].id == rowids){
list.value[i].matCode = matCodes
list.value[i].matId = ids
list.value[i].materialNames = name
if(list.value[i].id == data.rowid){
list.value[i].matCode = data.matCode
list.value[i].matId = data.materialId
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;
}
}
@ -220,11 +235,17 @@ const submitForm = async () => {
return;
}
const firstProjectSubId = list[0].projectId;
const whId = list[0].whId;
for (let i = 1; i < list.length; i++) {
if (list[i].projectId !== firstProjectSubId) {
message.error("标准件明细不属于同一个项目,请确认");
return;
}
if (list[i].whId !== whId) {
message.error("标准件明细物料不属于同一仓库,请确认");
return;
}
}
for (let i = 0; i < list.length; i++) {
if (list[i].matId== null) {

View File

@ -5,10 +5,10 @@
<ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<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 label="规格型号" prop="matName" >
<el-input v-model="queryParams.spec" placeholder="规格型号" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item label="规格型号" prop="matSpec" >
<el-input v-model="queryParams.matSpec" placeholder="规格型号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="物料简称" prop="shortName" >
<el-input v-model="queryParams.shortName" placeholder="物料简称" clearable @keyup.enter="handleQuery" class="!w-240px" />
@ -31,15 +31,29 @@
type="selection"
width="55"/>
<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 label="物料名称" align="center" prop="name" fixed min-width="120"/>
<el-table-column label="物料类型" align="center" prop="materialType" min-width="120">
<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="whName" label="仓库" min-width="120" align="center" >
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.materialType" />
{{scope.row.whName}}
</template>
</el-table-column>
<el-table-column label="物料简称" align="center" prop="shortName" min-width="120"/>
<el-table-column label="规格/型号" align="center" prop="spec" min-width="120"/>
<el-table-column prop="rgName" label="库区" min-width="120" align="center" >
<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>
<!-- 分页 -->
<Pagination
@ -61,6 +75,7 @@
<script setup lang="ts">
import {DICT_TYPE} from "@/utils/dict";
import * as MaterialApi from "@/api/heli/material";
import * as StorageInventoryApi from "@/api/heli/storageinventory";
defineOptions({ name: 'StorageLog' })
const printref = ref()
const whList = ref([])
@ -88,9 +103,9 @@ const queryParams = reactive({
pnId: undefined,
headerNo: undefined,
spec:undefined,
materialType:5,
status:1,
shortName:undefined
shortName:undefined,
matName:undefined,
matSpec:undefined,
})
@ -102,7 +117,7 @@ const multipleTableRef = ref()
const getList = async () => {
loading.value = true
try {
const data = await MaterialApi.getbzjList(queryParams) ;
const data = await StorageInventoryApi.getStorageInventoryPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
@ -163,7 +178,18 @@ const emit = defineEmits(['success'])
// emit('success', multipleSelection.value)
const success = () => {
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 @click="handleStatus(2)" type="primary" v-if="btnSave" 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 != 2" size="large">
</el-button>
</div>
</el-card>
@ -377,7 +377,6 @@ import * as StorageCheckApi from '@/api/heli/storagecheck'
import * as StorageMatApi from '@/api/heli/storagemat'
import { getAccessToken, getTenantId } from '@/utils/auth'
import { useUserStore } from '@/store/modules/user'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
import * as MaterialApi from '@/api/heli/material'
import * as WarehouseApi from '@/api/heli/warehouse'
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 download from '@/utils/download'
import * as UserApi from '@/api/system/user'
import materials from './materials.vue'
import materials from './materialsin.vue'
import projects from './subproject.vue'
import {json} from "node:stream/consumers";
import {Search} from "@element-plus/icons-vue";
import purchaseorderDialog from '@/views/heli/outsourcestock/purchaseorderDialog.vue'
@ -469,13 +467,11 @@ const getList = async (arrMat) => {
let flag=true
let whName=''
for (let i = 0; i < whList.value.length; i++) {
console.log(whList.value[i].id)
if (whList.value[i].id==formData.value.whId){
whName=whList.value[i].whName
break;
}
}
console.log("库位1"+pnList.value)
arrMat.forEach((row) => {
if (
formData.value.matItemDOList.filter(
@ -494,8 +490,7 @@ const getList = async (arrMat) => {
}
row.pnlist = ref([])
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) {
row.pnId = row.pnlist[0].id
}else if (pnList.value.length == 0) {
@ -503,6 +498,7 @@ const getList = async (arrMat) => {
}else {
row.pnId=''
}
row.price=''
if (flag){
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-select
v-model="scope.row.pnId" placeholder="" style="width: 100%"
:disabled="ctrView || ctrSave" @change="handlePn(scope)">
:disabled="true" @change="handlePn(scope)">
<el-option
v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pn_name"
:value="dict.id" />
@ -418,7 +418,6 @@ import * as StorageApi from '@/api/heli/storage'
import * as StorageMatApi from '@/api/heli/storagemat'
import { getAccessToken, getTenantId } from '@/utils/auth'
import { useUserStore } from '@/store/modules/user'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
import ProjectOrderDialog from '@/views/heli/deliverorder/projectOrderDialog.vue'
import * as MaterialApi from '@/api/heli/material'
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 download from '@/utils/download'
import * as UserApi from '@/api/system/user'
import materials from './materials.vue'
import materials from './materialsout.vue'
import projects from './subproject.vue'
import { Search, } from '@element-plus/icons-vue'
import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
@ -530,11 +529,8 @@ const getList = async (arrMat) => {
item.pnId == row.pnId
).length == 0
) {
if(row.whId1){
row.matId = row.matId
}else{
row.matId = row.id
}
row.projectNo = formData.value.projectNo
row.projectSubName =formData.value.projectSubName
row.pnlist = ref([])
@ -555,6 +551,7 @@ const getList = async (arrMat) => {
if(row.matUnitId!=null){
row.matUnit = row.matUnitId
}
console.log(row.matRest)
formData.value.matItemDOList.push(row)
}
})
@ -663,7 +660,9 @@ const handleStatus = async (num) => {
formData.value.matItemDOList.forEach(item => {
if(item.storageOkQty<=0){
message.alertWarning(item.matCode+'出库数量为0,请确认!'
)
if(!isZero){
isZero = true;
}
@ -1066,7 +1065,7 @@ const getMatList = async (name) => {
}
const handlePn = async (scope) => {
scope.row.matList = matList.value
// scope.row.matList = matList.value
// var repeatItem = formData.value.matItemDOList.filter(
// (mat) => mat.matId == scope.row.matId && mat.pnId == scope.row.pnId
// )
@ -1077,37 +1076,37 @@ const handlePn = async (scope) => {
// return
// }
if (
matLastData.value.find(
(item) =>
item.matId === scope.row.matId &&
item.whId == formData.value.whId &&
item.pnId == scope.row.pnId
)
) {
const matVo = matLastData.value.find(
(item) =>
item.matId === scope.row.matId &&
item.whId == formData.value.whId &&
item.pnId == scope.row.pnId
)
// if (
// matLastData.value.find(
// (item) =>
// item.matId === scope.row.matId &&
// item.whId == formData.value.whId &&
// item.pnId == scope.row.pnId
// )
// ) {
// const matVo = matLastData.value.find(
// (item) =>
// item.matId === scope.row.matId &&
// item.whId == formData.value.whId &&
// item.pnId == scope.row.pnId
// )
// scope.row.matId = matVo.matId
// scope.row.matName = matVo.matName
// scope.row.matCode = matVo.matCode
// scope.row.matSpec = matVo.matSpec
// scope.row.matType = matVo.materialType
// scope.row.matUnit = matVo.matUnit
scope.row.rgId = matVo.rgId
scope.row.pnId = matVo.pnId
scope.row.matRest = matVo.matRest
// scope.row.rgId = matVo.rgId
// scope.row.pnId = matVo.pnId
// scope.row.matRest = matVo.matRest
// scope.row.storageOkQty = matVo.storageOkQty
// scope.row.lotNo = matVo.lotNo
// scope.row.description = matVo.description
} else {
scope.row.rgId = ''
scope.row.matRest = '0'
message.alertWarning('当前库位无库存数量可出库')
}
// } else {
// scope.row.rgId = ''
// scope.row.matRest = '0'
// message.alertWarning('')
// }
}
const matSelectLoading = ref(false)
@ -1222,7 +1221,7 @@ onMounted(async () => {
await getMatList('')
//
matLastData.value = await StorageMatApi.getStorageMatList(0)
// matLastData.value = await StorageMatApi.getStorageMatList(0)
//
if (query.id) {

View File

@ -371,7 +371,7 @@ link type="primary" size="small" :disabled="ctrView || ctrDelete"
</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>
</div>
</el-card>

View File

@ -172,7 +172,7 @@
</el-table-column>
<el-table-column label="操作" align="center" min-width="180" fixed="right">
<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 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="rgName" 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="matUnit" min-width="100"/>
<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">
import download from '@/utils/download'
import * as StorageLogApi from '@/api/heli/storagelog'
import * as StorageinventoryApi from '@/api/heli/storageinventory'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
@ -156,7 +157,8 @@ const queryFormRef = ref() // 搜索的表单
const getList = async () => {
loading.value = true
try {
const data = await StorageLogApi.getSupplementPage(queryParams)
// const data = await StorageLogApi.getSupplementPage(queryParams)
const data = await StorageinventoryApi.getSupplementPage(queryParams)
list.value = data.list
total.value = data.total
} finally {