库存更改
This commit is contained in:
parent
7ef1c6dcb5
commit
8735b44898
@ -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, "项目订单不存在");
|
||||
/************发货管理***********/
|
||||
|
@ -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 = "小程序消息")
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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){
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 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;
|
||||
}
|
@ -227,5 +227,6 @@ public class TaskDispatchDetailDO extends BaseDO {
|
||||
private BigDecimal matWeight;
|
||||
@TableField(exist = false)
|
||||
private String nickname;
|
||||
|
||||
private Integer reportStatus;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
// 返回
|
||||
|
@ -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("进行中");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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>
|
@ -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>
|
||||
|
@ -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 })
|
||||
}
|
||||
|
@ -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 })
|
||||
}
|
@ -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) {
|
||||
|
@ -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" />
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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>
|
||||
|
@ -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)">
|
||||
|
229
mes-ui/mes-ui-admin-vue3/src/views/heli/storage/materialsin.vue
Normal file
229
mes-ui/mes-ui-admin-vue3/src/views/heli/storage/materialsin.vue
Normal 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) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
|
||||
const multipleTable = ref<InstanceType<typeof ElTable>>()
|
||||
const multipleSelection = ref([])
|
||||
const handleSelectionChange = (val: []) => {
|
||||
multipleSelection.value = val
|
||||
}
|
||||
|
||||
const clickRow = (row: any) => {
|
||||
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>
|
226
mes-ui/mes-ui-admin-vue3/src/views/heli/storage/materialsout.vue
Normal file
226
mes-ui/mes-ui-admin-vue3/src/views/heli/storage/materialsout.vue
Normal 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) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
|
||||
const multipleTable = ref<InstanceType<typeof ElTable>>()
|
||||
const multipleSelection = ref([])
|
||||
const handleSelectionChange = (val: []) => {
|
||||
multipleSelection.value = val
|
||||
}
|
||||
|
||||
const clickRow = (row: any) => {
|
||||
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>
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user