From 1dbda0462c8d5fb1d2ebed6d1d2360004f8f0d17 Mon Sep 17 00:00:00 2001 From: jishenghua <752718920@qq.com> Date: Fri, 29 Aug 2025 15:13:06 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=E5=95=86=E5=93=81=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E5=92=8C=E8=BF=9B=E9=94=80=E5=AD=98=E7=BB=9F=E8=AE=A1=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=BA=93=E5=AD=98=E5=88=86=E5=B8=83=E7=9A=84=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/controller/DepotItemController.java | 63 +++++++++ .../erp/controller/MaterialController.java | 17 +++ .../datasource/mappers/MaterialMapperEx.java | 5 + .../erp/datasource/vo/MaterialDepotStock.java | 28 ++++ .../com/jsh/erp/service/MaterialService.java | 26 +++- .../resources/mapper_xml/MaterialMapperEx.xml | 15 ++ .../src/views/report/InOutStockReport.vue | 20 ++- jshERP-web/src/views/report/MaterialStock.vue | 16 ++- .../report/modules/MaterialDepotStockList.vue | 126 +++++++++++++++++ .../MaterialDepotStockListWithTime.vue | 132 ++++++++++++++++++ 10 files changed, 445 insertions(+), 3 deletions(-) create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialDepotStock.java create mode 100644 jshERP-web/src/views/report/modules/MaterialDepotStockList.vue create mode 100644 jshERP-web/src/views/report/modules/MaterialDepotStockListWithTime.vue diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java index 6995ce05..297f4a6f 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java @@ -8,6 +8,7 @@ import com.jsh.erp.datasource.entities.*; import com.jsh.erp.datasource.vo.DepotItemStockWarningCount; import com.jsh.erp.datasource.vo.DepotItemVoBatchNumberList; import com.jsh.erp.datasource.vo.InOutPriceVo; +import com.jsh.erp.datasource.vo.MaterialDepotStock; import com.jsh.erp.exception.BusinessRunTimeException; import com.jsh.erp.service.DepotService; import com.jsh.erp.service.DepotHeadService; @@ -355,6 +356,7 @@ public class DepotItemController { for (DepotItemVo4WithInfoEx diEx : dataList) { JSONObject item = new JSONObject(); Long mId = diEx.getMId(); + item.put("id", mId); item.put("barCode", diEx.getBarCode()); item.put("materialName", diEx.getMName()); item.put("materialModel", diEx.getMModel()); @@ -472,6 +474,67 @@ public class DepotItemController { return res; } + + /** + * 根据仓库和商品查询库存分布情况-带时间段参数 + * @param mId + * @param request + * @return + */ + @GetMapping(value = "/getMaterialDepotStockByParam") + @ApiOperation(value = "根据仓库和商品查询库存分布情况-带时间段参数") + public String getMaterialDepotStockByParam( + @RequestParam(value = "depotIds",required = false) String depotIds, + @RequestParam("materialId") Long mId, + @RequestParam(value = "unitPrice", required = false) BigDecimal unitPrice, + @RequestParam("beginTime") String beginTime, + @RequestParam("endTime") String endTime, + HttpServletRequest request)throws Exception { + Map objectMap = new HashMap<>(); + beginTime = Tools.parseDayToTime(beginTime, BusinessConstants.DAY_FIRST_TIME); + endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME); + Map depotMap = new HashMap<>(); + JSONArray depotArr = depotService.findDepotByCurrentUser(); + for (Object depotObj: depotArr) { + if(depotObj!=null) { + JSONObject depotObject = JSONObject.parseObject(depotObj.toString()); + depotMap.put(depotObject.getLong("id"), depotObject.getString("depotName")); + } + } + String[] depotIdArr = null; + if(StringUtil.isNotEmpty(depotIds)) { + depotIdArr = depotIds.split(","); + } + List depotList = depotService.parseDepotListByArr(depotIdArr); + Long[] depotIdArray = StringUtil.listToLongArray(depotList); + List list = new ArrayList<>(); + for (int i = 0; i < depotIdArray.length; i++) { + Long depotId = depotIdArray[i]; + List currentDepotIdList = new ArrayList<>(); + currentDepotIdList.add(depotId); + String depotName = depotMap.get(depotId); + MaterialDepotStock materialDepotStock = new MaterialDepotStock(); + materialDepotStock.setDepotId(depotId); + materialDepotStock.setDepotName(depotName); + BigDecimal prevSum = depotItemService.getStockByParamWithDepotList(currentDepotIdList,mId,null,beginTime); + Map intervalMap = depotItemService.getIntervalMapByParamWithDepotList(currentDepotIdList,mId,beginTime,endTime); + BigDecimal inSum = intervalMap.get("inSum"); + BigDecimal outSum = intervalMap.get("outSum"); + BigDecimal thisSum = prevSum.add(inSum).subtract(outSum); + materialDepotStock.setCurrentNumber(thisSum); + materialDepotStock.setUnitPrice(unitPrice); + if(materialDepotStock.getCurrentNumber()!=null && materialDepotStock.getUnitPrice()!=null ) { + materialDepotStock.setAllPrice(materialDepotStock.getCurrentNumber().multiply(materialDepotStock.getUnitPrice())); + } + if(thisSum.compareTo(BigDecimal.ZERO)!=0) { + list.add(materialDepotStock); + } + } + objectMap.put("rows", list); + objectMap.put("total", list.size()); + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } + private List parseListByDepotIds(@RequestParam("depotIds") String depotIds) throws Exception { List depotList = new ArrayList<>(); if(StringUtil.isNotEmpty(depotIds)) { diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java index 6feba05a..5520237f 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java @@ -8,6 +8,7 @@ import com.jsh.erp.datasource.entities.Material; import com.jsh.erp.datasource.entities.MaterialExtend; import com.jsh.erp.datasource.entities.MaterialVo4Unit; import com.jsh.erp.datasource.entities.Unit; +import com.jsh.erp.datasource.vo.MaterialDepotStock; import com.jsh.erp.service.DepotService; import com.jsh.erp.service.DepotItemService; import com.jsh.erp.service.MaterialService; @@ -842,4 +843,20 @@ public class MaterialController extends BaseController { } return res; } + + /** + * 根据仓库和商品查询库存分布情况 + * @param mId + * @param request + * @return + */ + @GetMapping(value = "/getMaterialDepotStock") + @ApiOperation(value = "根据仓库和商品查询库存分布情况") + public TableDataInfo getMaterialDepotStock( + @RequestParam(value = "depotIds",required = false) String depotIds, + @RequestParam("materialId") Long mId, + HttpServletRequest request)throws Exception { + List list = materialService.getMaterialDepotStock(depotIds, mId); + return getDataTable(list); + } } \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java index 4c9eebc0..55c125e8 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java @@ -1,6 +1,7 @@ package com.jsh.erp.datasource.mappers; import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.vo.MaterialDepotStock; import com.jsh.erp.datasource.vo.MaterialVoSearch; import org.apache.ibatis.annotations.Param; @@ -165,4 +166,8 @@ public interface MaterialMapperEx { MaterialExtend getMaterialExtendBySerialNumber( @Param("serialNumber") String serialNumber); + + List getMaterialDepotStock( + @Param("depotIdArray") Long[] depotIdArray, + @Param("mId") Long mId); } diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialDepotStock.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialDepotStock.java new file mode 100644 index 00000000..e681f8a0 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialDepotStock.java @@ -0,0 +1,28 @@ +package com.jsh.erp.datasource.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class MaterialDepotStock { + + private Long id; + + private Long materialId; + + private Long depotId; + + private String depotName; + + private BigDecimal currentNumber; + + private BigDecimal currentUnitPrice; + + private BigDecimal purchaseDecimal; + + private BigDecimal unitPrice; + + private BigDecimal allPrice; + +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/MaterialService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/MaterialService.java index 68d696ba..03dafd51 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/MaterialService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/MaterialService.java @@ -7,6 +7,7 @@ import com.jsh.erp.constants.BusinessConstants; import com.jsh.erp.constants.ExceptionConstants; import com.jsh.erp.datasource.entities.*; import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.datasource.vo.MaterialDepotStock; import com.jsh.erp.datasource.vo.MaterialVoSearch; import com.jsh.erp.exception.BusinessRunTimeException; import com.jsh.erp.exception.JshException; @@ -1495,4 +1496,27 @@ public class MaterialService { return null; } } -} + + public List getMaterialDepotStock(String depotIds, Long mId) throws Exception { + String[] depotIdArr = null; + if(StringUtil.isNotEmpty(depotIds)) { + depotIdArr = depotIds.split(","); + } + boolean moveAvgPriceFlag = systemConfigService.getMoveAvgPriceFlag(); + List depotList = depotService.parseDepotListByArr(depotIdArr); + Long[] depotIdArray = StringUtil.listToLongArray(depotList); + PageUtils.startPage(); + List list = materialMapperEx.getMaterialDepotStock(depotIdArray, mId); + for (MaterialDepotStock item: list) { + if(moveAvgPriceFlag) { + item.setUnitPrice(item.getCurrentUnitPrice()); + } else { + item.setUnitPrice(item.getPurchaseDecimal()); + } + if(item.getCurrentNumber()!=null && item.getUnitPrice()!=null ) { + item.setAllPrice(item.getCurrentNumber().multiply(item.getUnitPrice())); + } + } + return list; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml index 5e397679..bd0ebf2e 100644 --- a/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml @@ -830,4 +830,19 @@ limit 0,1 + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/InOutStockReport.vue b/jshERP-web/src/views/report/InOutStockReport.vue index 819903b6..fda93642 100644 --- a/jshERP-web/src/views/report/InOutStockReport.vue +++ b/jshERP-web/src/views/report/InOutStockReport.vue @@ -81,6 +81,9 @@ :scroll="scroll" :loading="loading" @change="handleTableChange"> + + {{record.id?'分布':''}} + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/modules/MaterialDepotStockListWithTime.vue b/jshERP-web/src/views/report/modules/MaterialDepotStockListWithTime.vue new file mode 100644 index 00000000..bc218013 --- /dev/null +++ b/jshERP-web/src/views/report/modules/MaterialDepotStockListWithTime.vue @@ -0,0 +1,132 @@ + + + \ No newline at end of file