diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java index 58380b3..fb01aae 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java @@ -117,7 +117,9 @@ public class MaterialRespVO { @Schema(description = "库存预警下限") @ExcelProperty("库存预警下限") private BigDecimal invLowerLimit; - + @Schema(description = "库存单价") + @ExcelProperty("库存单价") + private BigDecimal price; @Schema(description = "物料条码") @ExcelProperty("物料条码") private String barcode; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java index 6865092..d5d84fb 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java @@ -80,7 +80,8 @@ public class MaterialSaveReqVO { @Schema(description = "库存预警上限") private BigDecimal invUpperLimit; - + @Schema(description = "库存单价") + private BigDecimal price; @Schema(description = "库存预警下限") private BigDecimal invLowerLimit; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java index dad0757..2ad8e38 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java @@ -1,10 +1,18 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.storage; +import cn.hutool.core.util.ObjectUtil; +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.material.MaterialDO; 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.storagelog.StorageLogNowMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper; import com.chanko.yunxi.mes.module.heli.service.storagelog.StorageLogService; import com.chanko.yunxi.mes.module.heli.service.storagemat.StorageMatService; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -17,6 +25,7 @@ import javax.validation.constraints.*; import javax.validation.*; import javax.servlet.http.*; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.*; import java.io.IOException; @@ -50,7 +59,12 @@ public class StorageController { @Resource private StorageLogService storageLogService; - + @Resource + private StorageMatMapper storageMatMapper; + @Resource + private StorageLogNowMapper storageLogNowMapper; + @Resource + private MaterialMapper materialMapper; @PostMapping("/cancelWeiWai") @Operation(summary = "委外取消提交") @PreAuthorize("@ss.hasPermission('heli:storage:create')") @@ -125,6 +139,54 @@ public class StorageController { storageService.updateStorage(updateReqVO); int status = targetDo.getStatus(); + if (updateReqVO.getStockType()==1&&updateReqVO.getStockInType()==1){ + if (status==2){ + List matList = storageMatMapper.selectMatByStorckID(targetDo.getId()); + for (StorageMatDO storageMatDO : matList) { + LambdaQueryWrapper 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 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()); + BigDecimal divide = add.divide(totalStorageOkQty.add(storageMatDO.getStorageOkQty()),2,RoundingMode.HALF_UP); + materialDO.setPrice(divide); + materialMapper.updateById(materialDO); + } + }else if (status==3){ + List matList = storageMatMapper.selectMatByStorckID(targetDo.getId()); + for (StorageMatDO storageMatDO : matList) { + LambdaQueryWrapper 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 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()); + BigDecimal divide = add.divide(totalStorageOkQty.subtract(storageMatDO.getStorageOkQty()),2,RoundingMode.HALF_UP); + materialDO.setPrice(divide); + materialMapper.updateById(materialDO); + } + } + + } //状态说明:1保存 2提交 3作废 4已审批 if(updateReqVO.getStockType() == 2){ //盘亏出库以外直接出 diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java index 0af0acd..f526178 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/StorageLogController.java @@ -56,7 +56,13 @@ public class StorageLogController { storageLogService.updateStorageLog(updateReqVO); return success(true); } - + @PostMapping("/updatePrice") + @Operation(summary = "更新库存单价") + @PreAuthorize("@ss.hasPermission('heli:storage-log:update')") + public CommonResult updatePrice( @RequestBody StorageLogSaveReqVO updateReqVO) { + storageLogService.updatePrice(updateReqVO); + return success(true); + } @DeleteMapping("/delete") @Operation(summary = "删除入/出库日志") @Parameter(name = "id", description = "编号", required = true) @@ -114,6 +120,13 @@ public class StorageLogController { PageResult pageResult = storageLogService.getStorageNowPage(pageReqVO); return success(pageResult); } + @GetMapping("/price") + @Operation(summary = "获得库存单价分页") + @PreAuthorize("@ss.hasPermission('heli:storage-log:query')") + public CommonResult> getStorageNowPricePage(@Valid StorageLogPageReqVO pageReqVO) { + PageResult pageResult = storageLogService.getStorageNowPricePage(pageReqVO); + return success(pageResult); + } // @GetMapping("/nowsmall") // @Operation(summary = "获得入/出库实时分页") // @PreAuthorize("@ss.hasPermission('heli:storage-log:query')") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogSaveReqVO.java index 3dd4bfd..8d42824 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagelog/vo/StorageLogSaveReqVO.java @@ -45,5 +45,9 @@ public class StorageLogSaveReqVO { @Schema(description = "状态", example = "你说的对") private Integer status; + @Schema(description = "物料编码", example = "你说的对") + private String matCode; + @Schema(description = "库存单价") + private BigDecimal price; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatRespVO.java index c203d73..b6b5939 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatRespVO.java @@ -41,7 +41,9 @@ public class StorageMatRespVO { @Schema(description = "库存良品数量") @ExcelProperty("库存良品数量") private BigDecimal storageOkQty; - + @Schema(description = "库存价格") + @ExcelProperty("库存价格") + private BigDecimal price; @Schema(description = "批次号") @ExcelProperty("批次号") private String lotNo; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatSaveReqVO.java index 6794e2a..df42901 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storagemat/vo/StorageMatSaveReqVO.java @@ -37,7 +37,8 @@ public class StorageMatSaveReqVO { @Schema(description = "库存良品数量") private BigDecimal storageOkQty; - + @Schema(description = "库存价格") + private BigDecimal price; @Schema(description = "批次号") private String lotNo; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java index c04b32d..efdfeb7 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java @@ -119,6 +119,10 @@ public class MaterialDO extends TenantBaseDO { * 库存预警上限 */ private BigDecimal invUpperLimit; + /** + * 库存单价 + */ + private BigDecimal price; /** * 库存预警下限 */ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagelogNow/StorageLogNowDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagelogNow/StorageLogNowDO.java index 9677eec..9b185a8 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagelogNow/StorageLogNowDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagelogNow/StorageLogNowDO.java @@ -30,9 +30,7 @@ public class StorageLogNowDO extends BaseDO { private Long id; private BigDecimal storageOkQty; - private String lotNo; - private String matName; private String shortName; private String matCode; @@ -55,7 +53,10 @@ public class StorageLogNowDO extends BaseDO { @TableField(exist = false) private Long materialTypeId; - + @TableField(exist = false) + private BigDecimal price; + @TableField(exist = false) + private BigDecimal storageOkQtys; @TableField(exist = false) private Long matUnitId; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagemat/StorageMatDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagemat/StorageMatDO.java index 6cb072b..05afa8b 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagemat/StorageMatDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storagemat/StorageMatDO.java @@ -52,6 +52,10 @@ public class StorageMatDO extends BaseDO { * 库存良品数量 */ private BigDecimal storageOkQty; + /** + * 库存价格 + */ + private BigDecimal price; /** * 批次号 */ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogNowMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogNowMapper.java index e9a6567..c11b476 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogNowMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storagelog/StorageLogNowMapper.java @@ -107,4 +107,21 @@ public interface StorageLogNowMapper extends BaseMapperX { List selectNowByMatPnId(@Param("matId")Long matId,@Param("pnId")Long pnId); + + default PageResult getStorageNowPricePage(StorageLogPageReqVO reqVO) { + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + + query.selectAll(StorageLogNowDO.class) + .select("COALESCE(SUM(storage_ok_qty), 0) as storageOkQtys,a.price as price") + .leftJoin(MaterialDO.class,"a",MaterialDO::getCode,StorageLogNowDO::getMatCode) + .groupBy(StorageLogNowDO::getMatCode) + .orderByDesc(StorageLogNowDO::getId); + + query.like(!StringUtils.isEmpty(reqVO.getMatType()),StorageLogNowDO::getMatType, reqVO.getMatType()) + .ne(true,StorageLogNowDO::getStorageOkQty,0) + .like(!StringUtils.isEmpty(reqVO.getMatName()), StorageLogNowDO::getMatName, reqVO.getMatName()) + .like(!StringUtils.isEmpty(reqVO.getMatCode()), StorageLogNowDO::getMatCode, reqVO.getMatCode()); + + return selectPage(reqVO,query); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java index e198941..c70d350 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogService.java @@ -71,4 +71,7 @@ public interface StorageLogService { void createStorageLogBatch(List storageLogDOs); + PageResult getStorageNowPricePage(StorageLogPageReqVO pageReqVO); + + void updatePrice(StorageLogSaveReqVO updateReqVO); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java index 044e35d..77c3d00 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storagelog/StorageLogServiceImpl.java @@ -1,5 +1,6 @@ package com.chanko.yunxi.mes.module.heli.service.storagelog; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogAll.StorageLogAllDO; @@ -163,6 +164,19 @@ public class StorageLogServiceImpl implements StorageLogService { + } + + @Override + public PageResult getStorageNowPricePage(StorageLogPageReqVO pageReqVO) { + return storageLogNowMapper.getStorageNowPricePage(pageReqVO); + } + + @Override + public void updatePrice(StorageLogSaveReqVO updateReqVO) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(MaterialDO::getCode,updateReqVO.getMatCode()); + wrapper.set(MaterialDO::getPrice,updateReqVO.getPrice()); + materialMapper.update(wrapper); } } diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/storagelog/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/storagelog/index.ts index 745f6c0..732495b 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/storagelog/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/storagelog/index.ts @@ -13,6 +13,7 @@ export interface StorageLogVO { noZero: number matCode: string matType:string + price:number } @@ -41,6 +42,10 @@ export const getStorageNowAllPage = async (params) => { export const getStorageNowPage = async (params) => { return await request.get({ url: `/heli/storage-log/now`, params }) } +// 查询库存单价分页 +export const getStorageNowPricePage = async (params) => { + return await request.get({ url: `/heli/storage-log/price`, params }) +} // 查询入/出库实时分页 export const getStorageNowPagesmall = async (params) => { @@ -62,7 +67,10 @@ export const getStorageLog = async (id: number) => { export const createStorageLog = async (data: StorageLogVO) => { return await request.post({ url: `/heli/storage-log/create`, data }) } - +//修改物料单价 +export const updatePrice = async (data: StorageLogVO) => { + return await request.post({ url: `/heli/storage-log/updatePrice`, data }) +} // 修改入/出库日志 export const updateStorageLog = async (data: StorageLogVO) => { return await request.put({ url: `/heli/storage-log/update`, data }) diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/storagemat/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/storagemat/index.ts index ce9e950..56b2dfa 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/storagemat/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/storagemat/index.ts @@ -8,6 +8,7 @@ export interface StorageMatVO { rgId: number pnId: number storageOkQty: number + price: number lotNo: string projectNo: string description: string diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue index f062abb..c593138 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue @@ -256,12 +256,16 @@ const submitForm = async () => { return false } } - if (formData.value.cgYishou!=''&&formData.value.cgYishou!=undefined){ + if (formData.value.cgYishou!=''&&formData.value.cgYishou!=undefined&&formData.value.cgYishou!=null){ if (formData.value.cgYishou=formData.value.cgYs&&formData.value.cgTypee==1){ await message.confirm("已收金额大于等于应收金额,回款已完成,请确认") } + }else { + if (formData.value.cgTypee==2){ + await message.confirm("未输入已收金额,回款未完成,请确认") + } } // 提交请求 formLoading.value = true diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue index 18d21da..0ac950e 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue @@ -177,6 +177,28 @@ + + + + + + + + + + + +