Ver Fonte

Merge remote-tracking branch 'origin/master'

wxf há 2 anos atrás
pai
commit
1050f0a1b3
35 ficheiros alterados com 623 adições e 96 exclusões
  1. 59 0
      hx-common/src/main/java/com/fjhx/common/aspect/DataSourceAspect.java
  2. 1 0
      hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java
  3. 51 0
      hx-mail/src/main/java/com/fjhx/mail/controller/message/InfoController.java
  4. 1 1
      hx-mail/src/main/java/com/fjhx/mail/controller/message/MailController.java
  5. 14 0
      hx-mail/src/main/java/com/fjhx/mail/service/message/InfoService.java
  6. 78 0
      hx-mail/src/main/java/com/fjhx/mail/service/message/impl/InfoServiceImpl.java
  7. 0 3
      hx-mes/src/main/java/com/fjhx/mes/controller/bom/BomInfoController.java
  8. 0 10
      hx-mes/src/main/java/com/fjhx/mes/service/bom/impl/BomInfoServiceImpl.java
  9. 4 7
      hx-oa/src/main/java/com/fjhx/oa/controller/netdisk/NetdiskController.java
  10. 7 0
      hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleInfoSelectDto.java
  11. 4 0
      hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportCommentsServiceImpl.java
  12. 1 1
      hx-oa/src/main/java/com/fjhx/oa/service/netdisk/NetdiskService.java
  13. 1 4
      hx-oa/src/main/java/com/fjhx/oa/service/netdisk/impl/NetdiskServiceImpl.java
  14. 6 0
      hx-oa/src/main/java/com/fjhx/oa/service/schedule/impl/ScheduleInfoServiceImpl.java
  15. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/subscribe/SubscribeController.java
  16. 8 0
      hx-purchase/src/main/java/com/fjhx/purchase/controller/subscribe/SubscribeDetailController.java
  17. 8 4
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java
  18. 6 1
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/SubscribeDetailService.java
  19. 4 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/SubscribeService.java
  20. 64 27
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java
  21. 26 19
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeServiceImpl.java
  22. 8 0
      hx-supply/src/main/java/com/fjhx/supply/controller/supplier/SupplierInfoController.java
  23. 6 1
      hx-supply/src/main/java/com/fjhx/supply/entity/supplier/dto/SupplierInfoSelectDto.java
  24. 5 0
      hx-supply/src/main/java/com/fjhx/supply/entity/supplier/po/SupplierInfo.java
  25. 4 0
      hx-supply/src/main/java/com/fjhx/supply/service/supplier/SupplierInfoService.java
  26. 22 0
      hx-supply/src/main/java/com/fjhx/supply/service/supplier/impl/SupplierInfoServiceImpl.java
  27. 2 1
      hx-supply/src/main/resources/mapper/supplier/SupplierInfoMapper.xml
  28. 37 0
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockController.java
  29. 3 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/Stock.java
  30. 6 1
      hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/dto/WarehouseSelectDto.java
  31. 2 0
      hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockMapper.java
  32. 25 6
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockService.java
  33. 132 9
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java
  34. 1 0
      hx-wms/src/main/java/com/fjhx/wms/service/warehouse/impl/WarehouseServiceImpl.java
  35. 19 1
      hx-wms/src/main/resources/mapper/stock/StockMapper.xml

+ 59 - 0
hx-common/src/main/java/com/fjhx/common/aspect/DataSourceAspect.java

@@ -0,0 +1,59 @@
+package com.fjhx.common.aspect;
+
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.fjhx.common.constant.SourceConstant;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+
+@Aspect
+@Component
+public class DataSourceAspect {
+
+    private static final Set<String> dataSourceSet = new HashSet<>();
+
+    static {
+        Class<SourceConstant> sourceConstantClass = SourceConstant.class;
+        Field[] declaredFields = sourceConstantClass.getDeclaredFields();
+        for (Field declaredField : declaredFields) {
+            dataSourceSet.add(declaredField.getName().toLowerCase());
+        }
+    }
+
+    @Pointcut("execution (* com.fjhx.*.service.*.*.*(..))")
+    public void pointcut() {
+
+    }
+
+    @Around(value = "pointcut()")
+    public Object before(ProceedingJoinPoint point) throws Throwable {
+        Object target = point.getTarget();
+        String name = target.getClass().getName();
+        String moduleName = name.split("\\.")[2];
+
+        String peek = DynamicDataSourceContextHolder.peek();
+        if (Objects.equals(peek, moduleName)) {
+            return point.proceed();
+        }
+
+        if (dataSourceSet.contains(moduleName)) {
+            DynamicDataSourceContextHolder.push(moduleName);
+            try {
+                return point.proceed();
+            } finally {
+                DynamicDataSourceContextHolder.poll();
+            }
+        }
+
+        return point.proceed();
+    }
+
+
+}

+ 1 - 0
hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java

@@ -25,6 +25,7 @@ public interface SourceConstant {
     String MAIL = "mail";
 
     String COMMON = "common";
+
     String VICTORIATOURIST = "victoriatourist";
 
 }

+ 51 - 0
hx-mail/src/main/java/com/fjhx/mail/controller/message/InfoController.java

@@ -0,0 +1,51 @@
+package com.fjhx.mail.controller.message;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSON;
+import com.fjhx.mail.config.MailServiceConfig;
+import com.fjhx.mail.service.message.InfoService;
+import com.ruoyi.common.annotation.NonInterception;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.exception.ServiceException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/mailInfo")
+public class InfoController {
+
+    @Autowired
+    private InfoService infoService;
+
+    /**
+     * 获取员工邮箱
+     */
+    @PostMapping("/getUserList")
+    public List<SysUser> getUserList() {
+        return infoService.getUserList();
+    }
+
+    /**
+     * 获取用户邮箱列表
+     */
+    @NonInterception
+    @PostMapping("/getUserEmailList")
+    public Object getUserEmailList(@RequestBody BaseSelectDto dto) {
+        Long id = dto.getId();
+        if (id == null) {
+            throw new ServiceException("用户id不能为空");
+        }
+
+        String get = HttpUtil.get(MailServiceConfig.urlPrefix + "getUserEmailList/" + id);
+        return JSON.parseObject(get);
+    }
+
+}

+ 1 - 1
hx-mail/src/main/java/com/fjhx/mail/controller/message/MailController.java

@@ -35,7 +35,7 @@ public class MailController {
     }
 
     /**
-     * 获取用户邮箱列表
+     * 获取用户邮箱明细
      */
     @NonInterception
     @PostMapping("/getMessageDetail")

+ 14 - 0
hx-mail/src/main/java/com/fjhx/mail/service/message/InfoService.java

@@ -0,0 +1,14 @@
+package com.fjhx.mail.service.message;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+
+import java.util.List;
+
+public interface InfoService {
+
+    /**
+     * 获取员工邮箱
+     */
+    List<SysUser> getUserList();
+
+}

+ 78 - 0
hx-mail/src/main/java/com/fjhx/mail/service/message/impl/InfoServiceImpl.java

@@ -0,0 +1,78 @@
+package com.fjhx.mail.service.message.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.mail.service.message.InfoService;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class InfoServiceImpl implements InfoService {
+
+    @Autowired
+    private ISysDeptService sysDeptService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Override
+    public List<SysUser> getUserList() {
+
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+
+        Long userId = SecurityUtils.getUserId();
+
+        List<SysDept> sysDeptList = sysDeptService.list(Wrappers.<SysDept>lambdaQuery()
+                .and(q -> q.eq(SysDept::getDirectorId, userId).or().eq(SysDept::getLeaderId, userId)));
+
+        if (sysDeptList.size() == 0) {
+            return new ArrayList<>();
+        }
+
+        Set<Long> deptSet = new HashSet<>();
+        List<SysDept> list = sysDeptService.list();
+        Map<Long, List<SysDept>> parentDeptMap = list.stream().collect(Collectors.groupingBy(SysDept::getParentId));
+
+        for (SysDept sysDept : sysDeptList) {
+            Long deptId = sysDept.getDeptId();
+
+            if (Objects.equals(sysDept.getDirectorId(), userId)) {
+                subordinateDeptId(deptId, deptSet, parentDeptMap);
+            } else {
+                deptSet.add(deptId);
+            }
+        }
+
+        List<SysUser> sysUserList = sysUserService.list(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getDeptId, deptSet));
+
+        DynamicDataSourceContextHolder.poll();
+        return sysUserList;
+    }
+
+    private void subordinateDeptId(Long deptId, Set<Long> deptSet, Map<Long, List<SysDept>> parentDeptMap) {
+        deptSet.add(deptId);
+
+        // 获取子部门
+        List<SysDept> sysDeptList = parentDeptMap.get(deptId);
+        if (ObjectUtil.isEmpty(sysDeptList)) {
+            return;
+        }
+
+        for (SysDept sysDept : sysDeptList) {
+            subordinateDeptId(sysDept.getDeptId(), deptSet, parentDeptMap);
+        }
+
+    }
+
+
+}

+ 0 - 3
hx-mes/src/main/java/com/fjhx/mes/controller/bom/BomInfoController.java

@@ -1,8 +1,6 @@
 package com.fjhx.mes.controller.bom;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.mes.entity.bom.dto.BomInfoDto;
 import com.fjhx.mes.entity.bom.dto.BomInfoSelectDto;
 import com.fjhx.mes.entity.bom.po.BomInfo;
@@ -27,7 +25,6 @@ import java.util.List;
  * @author
  * @since 2023-03-29
  */
-@DS(SourceConstant.MES)
 @RestController
 @RequestMapping("/bomInfo")
 public class BomInfoController {

+ 0 - 10
hx-mes/src/main/java/com/fjhx/mes/service/bom/impl/BomInfoServiceImpl.java

@@ -3,10 +3,8 @@ package com.fjhx.mes.service.bom.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.bom.dto.BomInfoDto;
@@ -62,19 +60,15 @@ public class BomInfoServiceImpl extends ServiceImpl<BomInfoMapper, BomInfo> impl
 
         Map<Long, ProductInfo> productInfoMap = new HashMap<>();
         if (!ObjectUtil.isAllEmpty(productType, keyword)) {
-            DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
             List<ProductInfo> list = productInfoService.list(IWrapper.<ProductInfo>getWrapper()
                     .eq(ProductInfo::getType, productType)
                     .keyword(keyword, new SqlField(ProductInfo::getName), new SqlField(ProductInfo::getCode)));
 
             if (list.size() == 0) {
-                DynamicDataSourceContextHolder.clear();
                 return new Page<>();
             }
 
             productInfoMap = list.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
-            DynamicDataSourceContextHolder.clear();
-            DynamicDataSourceContextHolder.push(SourceConstant.MES);
         }
 
         IWrapper<BomInfo> wrapper = getWrapper()
@@ -100,13 +94,11 @@ public class BomInfoServiceImpl extends ServiceImpl<BomInfoMapper, BomInfo> impl
                 item.setProductName(productInfo.getName());
             }
         } else {
-            DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
             productInfoService.attributeAssign(records, BomInfo::getProductId, (item, productInfo) -> {
                 item.setProductType(productInfo.getType());
                 item.setProductCode(productInfo.getCode());
                 item.setProductName(productInfo.getName());
             });
-            DynamicDataSourceContextHolder.clear();
         }
 
         return page;
@@ -120,13 +112,11 @@ public class BomInfoServiceImpl extends ServiceImpl<BomInfoMapper, BomInfo> impl
         List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, id));
         List<BomDetailVo> bomDetailVoList = BeanUtil.copyToList(bomDetailList, BomDetailVo.class);
 
-        DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
         productInfoService.attributeAssign(bomDetailVoList, BomDetailVo::getProductId, (item, productInfo) -> {
             item.setProductCode(productInfo.getCode());
             item.setProductName(productInfo.getName());
             item.setProductUnit(productInfo.getUnit());
         });
-        DynamicDataSourceContextHolder.clear();
 
         result.setBomDetailVoList(bomDetailVoList);
         return result;

+ 4 - 7
hx-oa/src/main/java/com/fjhx/oa/controller/netdisk/NetdiskController.java

@@ -7,10 +7,7 @@ import com.fjhx.oa.entity.netdisk.vo.NetdiskVo;
 import com.fjhx.oa.service.netdisk.NetdiskService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -41,9 +38,9 @@ public class NetdiskController {
     /**
      * 网盘子目录树
      */
-    @PostMapping("/tree")
-    public List<NetdiskVo> tree(@RequestBody NetdiskSelectDto dto) {
-        return netdiskService.tree(dto);
+    @GetMapping("/tree")
+    public List<NetdiskVo> tree() {
+        return netdiskService.tree();
     }
 
     /**

+ 7 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/schedule/dto/ScheduleInfoSelectDto.java

@@ -1,9 +1,12 @@
 package com.fjhx.oa.entity.schedule.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * 日程信息表列表查询入参实体
  *
@@ -14,4 +17,8 @@ import lombok.Setter;
 @Setter
 public class ScheduleInfoSelectDto extends BaseSelectDto {
 
+    /**按月份过滤*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    private Date date;
+
 }

+ 4 - 0
hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportCommentsServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fjhx.oa.service.daily.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -45,6 +46,9 @@ public class DailyReportCommentsServiceImpl extends ServiceImpl<DailyReportComme
         UserUtil.assignmentNickName(records, DailyReportComments::getCreateUser, DailyReportCommentsVo::setUserName);
         //赋值回复评论列表
         List<Long> dailyReportCommentsIds = records.stream().map(DailyReportComments::getId).collect(Collectors.toList());
+        if(ObjectUtil.isEmpty(dailyReportCommentsIds)){
+            return page;
+        }
         List<DailyReportComments> list = list(q -> q.in(DailyReportComments::getReplyId, dailyReportCommentsIds));
         List<DailyReportCommentsVo> dailyReportCommentsVos = BeanUtil.copyToList(list, DailyReportCommentsVo.class);
         UserUtil.assignmentNickName(dailyReportCommentsVos, DailyReportComments::getCreateUser, DailyReportCommentsVo::setUserName);

+ 1 - 1
hx-oa/src/main/java/com/fjhx/oa/service/netdisk/NetdiskService.java

@@ -25,7 +25,7 @@ public interface NetdiskService extends BaseService<Netdisk> {
      */
     Page<NetdiskVo> getPage(NetdiskSelectDto dto);
 
-    List<NetdiskVo> tree(NetdiskSelectDto dto);
+    List<NetdiskVo> tree();
 
         /**
          * 网盘明细

+ 1 - 4
hx-oa/src/main/java/com/fjhx/oa/service/netdisk/impl/NetdiskServiceImpl.java

@@ -62,12 +62,9 @@ public class NetdiskServiceImpl extends ServiceImpl<NetdiskMapper, Netdisk> impl
 
     //网盘目录子目录树
     @Override
-    public List<NetdiskVo> tree(NetdiskSelectDto dto) {
+    public List<NetdiskVo> tree() {
         QueryWrapper<Netdisk> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("type", 1);
-        if(ObjectUtil.isNotEmpty(dto.getKeyword())) {
-            queryWrapper.like("name", dto.getKeyword());
-        }
         List<Netdisk> list = list(queryWrapper);
         return treeRecursion(list,-1l);
     }

+ 6 - 0
hx-oa/src/main/java/com/fjhx/oa/service/schedule/impl/ScheduleInfoServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -38,6 +39,8 @@ import java.util.stream.Collectors;
 @DS(SourceConstant.OA)
 @Service
 public class ScheduleInfoServiceImpl extends ServiceImpl<ScheduleInfoMapper, ScheduleInfo> implements ScheduleInfoService {
+    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
     @Autowired
     ScheduleDetailsService scheduleDetailsService;
 
@@ -45,6 +48,9 @@ public class ScheduleInfoServiceImpl extends ServiceImpl<ScheduleInfoMapper, Sch
     public Page<ScheduleInfoVo> getPage(ScheduleInfoSelectDto dto) {
         IWrapper<ScheduleInfo> wrapper = getWrapper();
         wrapper.orderByDesc("si", ScheduleInfo::getId);
+        if(ObjectUtil.isNotEmpty(dto.getDate())) {
+            wrapper.apply("date_format(si.start_date,'%Y-%m') = date_format('" + sdf.format(dto.getDate()) + "','%Y-%m')");
+        }
         Page<ScheduleInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
     }

+ 8 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/subscribe/SubscribeController.java

@@ -46,6 +46,14 @@ public class SubscribeController {
     }
 
     /**
+     * 申购单明细 维多利亚
+     */
+    @PostMapping("/detailByWdly")
+    public Subscribe detailByWdly(@RequestBody BaseSelectDto dto) {
+        return subscribeService.detailByWdly(dto.getId());
+    }
+
+    /**
      * 申购单新增
      */
     @PostMapping("/add")

+ 8 - 0
hx-purchase/src/main/java/com/fjhx/purchase/controller/subscribe/SubscribeDetailController.java

@@ -39,6 +39,14 @@ public class SubscribeDetailController {
     }
 
     /**
+     * 待采购 维多利亚
+     */
+    @PostMapping("/pageByWdly")
+    public Page<SubscribeDetailVo> pageByWdly(@RequestBody SubscribeDetailSelectDto dto) {
+        return subscribeDetailService.getPageByWdly(dto);
+    }
+
+    /**
      * 申购单明细
      */
     @PostMapping("/detail")

+ 8 - 4
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/po/Purchase.java

@@ -3,20 +3,19 @@ package com.fjhx.purchase.entity.purchase.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
-import lombok.Getter;
-import lombok.Setter;
-
 /**
  * <p>
  * 采购
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-06
  */
 @Getter
@@ -88,4 +87,9 @@ public class Purchase extends BasePo {
      */
     @TableField(exist = false)
     private List<PurchaseDetail> purchaseDetailList;
+
+    /**
+     * 维多利亚扩展json
+     */
+    private String victoriatouristJson;
 }

+ 6 - 1
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/SubscribeDetailService.java

@@ -15,7 +15,7 @@ import java.util.List;
  * 申购单 服务类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-03
  */
 public interface SubscribeDetailService extends BaseService<SubscribeDetail> {
@@ -26,6 +26,11 @@ public interface SubscribeDetailService extends BaseService<SubscribeDetail> {
     Page<SubscribeDetailVo> getPage(SubscribeDetailSelectDto dto);
 
     /**
+     * 待采购分页 维多利亚
+     */
+    Page<SubscribeDetailVo> getPageByWdly(SubscribeDetailSelectDto dto);
+
+    /**
      * 申购单明细
      */
     List<SubscribeDetailVo> detail(List<Long> ids);

+ 4 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/SubscribeService.java

@@ -27,6 +27,10 @@ public interface SubscribeService extends BaseService<Subscribe> {
      * 申购单明细
      */
     Subscribe detail(Long id);
+    /**
+     * 申购单明细 维多利亚
+     */
+    Subscribe detailByWdly(Long id);
 
     /**
      * 申购单新增

+ 64 - 27
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -1,29 +1,32 @@
 package com.fjhx.purchase.service.subscribe.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
-import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailDto;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailSelectDto;
 import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
+import com.fjhx.purchase.entity.subscribe.vo.SubscribeDetailVo;
 import com.fjhx.purchase.mapper.subscribe.SubscribeDetailMapper;
 import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.subscribe.vo.SubscribeDetailVo;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailDto;
-import cn.hutool.core.bean.BeanUtil;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 
@@ -32,7 +35,7 @@ import java.util.stream.Collectors;
  * 申购单 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-03
  */
 @DS(SourceConstant.PURCHASE)
@@ -41,43 +44,46 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
 
     @Autowired
     private ProductInfoService productInfoService;
+    @Autowired
+    WarehouseService warehouseService;
 
     /**
      * 分页
+     *
      * @param dto
      * @return
      */
     @Override
     public Page<SubscribeDetailVo> getPage(SubscribeDetailSelectDto dto) {
-        Map<Long,List<ProductInfoVo>> productMap;
+        Map<Long, List<ProductInfoVo>> productMap;
         List<Long> productIds = new ArrayList<>();
         IWrapper<SubscribeDetail> wrapper = getWrapper();
         //搜索条件-----当产品数据量多得情况下会影响查询得速度。超过1000条mybatisplus在in查询得时候会报错
-        if(ObjectUtil.isNotEmpty(dto.getProductType())){//如果类型存在带入类型查询
+        if (ObjectUtil.isNotEmpty(dto.getProductType())) {//如果类型存在带入类型查询
             List<ProductInfoVo> productList = productInfoService.getListByProductType(dto.getProductType());
-            if(CollectionUtils.isEmpty(productList)){
+            if (CollectionUtils.isEmpty(productList)) {
                 return new Page<>();
-            }else{
+            } else {
                 productMap = productList.stream().distinct().collect(Collectors.groupingBy(ProductInfoVo::getId));
                 productIds = productList.stream().map(ProductInfoVo::getId).collect(Collectors.toList());
             }
-        }else{//不存在查所有
+        } else {//不存在查所有
             List<ProductInfoVo> productList = productInfoService.getListByProductType(null);
             productMap = productList.stream().distinct().collect(Collectors.groupingBy(ProductInfoVo::getId));
         }
-        if(ObjectUtil.isNotEmpty(dto.getStatus())){
-            wrapper.in("t1",SubscribeDetail::getStatus, Arrays.asList(dto.getStatus().split(",")));
+        if (ObjectUtil.isNotEmpty(dto.getStatus())) {
+            wrapper.in("t1", SubscribeDetail::getStatus, Arrays.asList(dto.getStatus().split(",")));
         }
-        if(CollectionUtils.isNotEmpty(productIds)){
-            wrapper.in("t1",SubscribeDetail::getBussinessId,productIds);
+        if (CollectionUtils.isNotEmpty(productIds)) {
+            wrapper.in("t1", SubscribeDetail::getBussinessId, productIds);
         }
         wrapper.orderByDesc("t1", SubscribeDetail::getCreateTime);
         Page<SubscribeDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<SubscribeDetailVo> list = page.getRecords();
-        if(CollectionUtils.isNotEmpty(list)&&MapUtils.isNotEmpty(productMap)){
-            for(SubscribeDetailVo s:list){
+        if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(productMap)) {
+            for (SubscribeDetailVo s : list) {
                 List<ProductInfoVo> productInfos = productMap.getOrDefault(s.getBussinessId(), null);
-                if(ObjectUtil.isNotEmpty(productInfos)){
+                if (ObjectUtil.isNotEmpty(productInfos)) {
                     ProductInfoVo vo = productInfos.get(0);
                     s.setProductCode(vo.getCode());
                     s.setProductName(vo.getName());
@@ -90,24 +96,55 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
         return page;
     }
 
+    @Override
+    public Page<SubscribeDetailVo> getPageByWdly(SubscribeDetailSelectDto dto) {
+        Page<SubscribeDetailVo> page = getPage(dto);
+        List<SubscribeDetailVo> records = page.getRecords();
+
+        //获取到货仓库id列表
+        List<Long> wids = new ArrayList<>();
+        for (SubscribeDetailVo subscribeDetailVo : records) {
+            String victoriatouristJson = subscribeDetailVo.getVictoriatouristJson();
+            if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                JSONObject json = JSONObject.parseObject(victoriatouristJson);
+                wids.add(json.getLong("receiptWarehouseId"));
+            }
+        }
+        //赋值到货仓库名称
+        if (ObjectUtil.isNotEmpty(wids)) {
+            List<Warehouse> warehouses = warehouseService.listByIds(wids);
+            Map<Long, String> warehousesMap = warehouses.stream().collect(Collectors.toMap(Warehouse::getId, Warehouse::getName));
+            for (SubscribeDetailVo subscribeDetailVo : records) {
+                String victoriatouristJson = subscribeDetailVo.getVictoriatouristJson();
+                if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                    JSONObject json = JSONObject.parseObject(victoriatouristJson);
+                    json.put("receiptWarehouseName", warehousesMap.get(json.getLong("receiptWarehouseId")));
+                    subscribeDetailVo.setVictoriatouristJson(json.toJSONString());
+                }
+            }
+        }
+        return page;
+    }
+
     /**
      * 根据IDS获取明细
+     *
      * @param ids
      * @return
      */
     @Override
     public List<SubscribeDetailVo> detail(List<Long> ids) {
-        if(CollectionUtils.isEmpty(ids)){
+        if (CollectionUtils.isEmpty(ids)) {
             throw new ServiceException("参数异常");
         }
         List<SubscribeDetailVo> list = baseMapper.getDetail(ids);
-        if(CollectionUtils.isNotEmpty(list)){
+        if (CollectionUtils.isNotEmpty(list)) {
             //根据申购businessId取出所有产品
             List<Long> productIds = list.stream().map(SubscribeDetail::getBussinessId).collect(Collectors.toList());
             List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
             Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
-            for(SubscribeDetail s:list){
-                if(MapUtils.isNotEmpty(productMap)){
+            for (SubscribeDetail s : list) {
+                if (MapUtils.isNotEmpty(productMap)) {
                     ProductInfoVo p = productMap.get(s.getBussinessId()).get(0);
                     s.setProductCategory(p.getClassifyName());
                     s.setProductCode(p.getCode());

+ 26 - 19
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeServiceImpl.java

@@ -6,29 +6,28 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
 import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
+import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
 import com.fjhx.purchase.mapper.subscribe.SubscribeMapper;
 import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.purchase.util.code.CodeEnum;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import io.seata.spring.annotation.GlobalTransactional;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -40,7 +39,7 @@ import java.util.stream.Collectors;
  * 申购单 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-03
  */
 @DS(SourceConstant.PURCHASE)
@@ -66,29 +65,30 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
 
     /**
      * 详情
+     *
      * @param id
      * @return
      */
     @Override
     public Subscribe detail(Long id) {
-        if(ObjectUtils.isEmpty(id)){
+        if (ObjectUtils.isEmpty(id)) {
             throw new ServiceException("参数异常");
         }
         Subscribe subscribe = this.getById(id);
-        if(ObjectUtils.isEmpty(subscribe)){
+        if (ObjectUtils.isEmpty(subscribe)) {
             throw new ServiceException("数据不存在");
         }
         //处理申购产品
         List<SubscribeDetail> subscribeDetailList = subscribeDetailService.list(
                 Wrappers.<SubscribeDetail>query().lambda()
-                        .eq(SubscribeDetail::getSubscribeId,id));
-        if(CollectionUtils.isNotEmpty(subscribeDetailList)){
+                        .eq(SubscribeDetail::getSubscribeId, id));
+        if (CollectionUtils.isNotEmpty(subscribeDetailList)) {
             //根据申购businessId取出所有产品
             List<Long> productIds = subscribeDetailList.stream().map(SubscribeDetail::getBussinessId).collect(Collectors.toList());
             List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
             Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
-            for(SubscribeDetail s:subscribeDetailList){
-                if(MapUtils.isNotEmpty(productMap)){
+            for (SubscribeDetail s : subscribeDetailList) {
+                if (MapUtils.isNotEmpty(productMap)) {
                     ProductInfoVo p = productMap.get(s.getBussinessId()).get(0);
                     s.setProductCategory(p.getClassifyName());
                     s.setProductCode(p.getCode());
@@ -99,14 +99,20 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
             }
         }
         subscribe.setSubscribeDetailList(subscribeDetailList);
+        return subscribe;
+    }
+
+    @Override
+    public Subscribe detailByWdly(Long id) {
+        Subscribe subscribe = detail(id);
         //赋值维多利亚扩展收货仓库名
         String victoriatouristJson = subscribe.getVictoriatouristJson();
-        if(ObjectUtils.isNotEmpty(victoriatouristJson)){
+        if (ObjectUtils.isNotEmpty(victoriatouristJson)) {
             JSONObject json = JSONObject.parseObject(victoriatouristJson);
             Long receiptWarehouseId = json.getLong("receiptWarehouseId");
             Warehouse warehouse = warehouseService.getById(receiptWarehouseId);
-            if(ObjectUtils.isNotEmpty(victoriatouristJson)) {
-                json.put("receiptWarehouseName",warehouse.getName());
+            if (ObjectUtils.isNotEmpty(victoriatouristJson)) {
+                json.put("receiptWarehouseName", warehouse.getName());
                 subscribe.setVictoriatouristJson(json.toJSONString());
             }
         }
@@ -121,8 +127,8 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
         subscribe.setCode(CodeEnum.SUBSCRIBE.getCode());
         subscribeService.save(subscribe);
         List<SubscribeDetail> SubscribeDetails = subscribe.getSubscribeDetailList();
-        if(CollectionUtils.isNotEmpty(SubscribeDetails)){
-            for(SubscribeDetail s : SubscribeDetails){
+        if (CollectionUtils.isNotEmpty(SubscribeDetails)) {
+            for (SubscribeDetail s : SubscribeDetails) {
                 s.setSubscribeId(subscribe.getId());
             }
             subscribeDetailService.saveBatch(subscribe.getSubscribeDetailList());
@@ -131,6 +137,7 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
 
     /**
      * 编辑
+     *
      * @param subscribeDto
      */
     @GlobalTransactional

+ 8 - 0
hx-supply/src/main/java/com/fjhx/supply/controller/supplier/SupplierInfoController.java

@@ -40,6 +40,14 @@ public class SupplierInfoController {
     }
 
     /**
+     * 供应商分页 维多利亚
+     */
+    @PostMapping("/pageByWdly")
+    public Page<SupplierInfoVo> pageByWdly(@RequestBody SupplierInfoSelectDto dto) {
+        return supplierInfoService.getPageByWdly(dto);
+    }
+
+    /**
      * 供应商明细
      */
     @PostMapping("/detail")

+ 6 - 1
hx-supply/src/main/java/com/fjhx/supply/entity/supplier/dto/SupplierInfoSelectDto.java

@@ -7,7 +7,7 @@ import lombok.Setter;
 /**
  * 供应商列表查询入参实体
  *
- * @author 
+ * @author
  * @since 2023-03-17
  */
 @Getter
@@ -19,4 +19,9 @@ public class SupplierInfoSelectDto extends BaseSelectDto {
      */
     private Integer type;
 
+    /**
+     * 维多利亚有无账期过滤
+     */
+    private Integer accountPeriodType;
+
 }

+ 5 - 0
hx-supply/src/main/java/com/fjhx/supply/entity/supplier/po/SupplierInfo.java

@@ -68,4 +68,9 @@ public class SupplierInfo extends BasePo {
      */
     private String remark;
 
+    /**
+     * 维多利亚扩展json
+     */
+    private String victoriatouristJson;
+
 }

+ 4 - 0
hx-supply/src/main/java/com/fjhx/supply/service/supplier/SupplierInfoService.java

@@ -22,6 +22,10 @@ public interface SupplierInfoService extends BaseService<SupplierInfo> {
      * 供应商分页
      */
     Page<SupplierInfoVo> getPage(SupplierInfoSelectDto dto);
+    /**
+     * 供应商分页维多利亚
+     */
+    Page<SupplierInfoVo> getPageByWdly(SupplierInfoSelectDto dto);
 
     /**
      * 供应商明细

+ 22 - 0
hx-supply/src/main/java/com/fjhx/supply/service/supplier/impl/SupplierInfoServiceImpl.java

@@ -52,6 +52,28 @@ public class SupplierInfoServiceImpl extends ServiceImpl<SupplierInfoMapper, Sup
         return page;
     }
 
+    /**供应商分页维多利亚用*/
+    @Override
+    public Page<SupplierInfoVo> getPageByWdly(SupplierInfoSelectDto dto) {
+        IWrapper<SupplierInfo> wrapper = getWrapper();
+        wrapper.orderByDesc("si", SupplierInfo::getId);
+        wrapper.eq("si", SupplierInfo::getType, dto.getType());
+        wrapper.keyword(dto,
+                new SqlField("si", SupplierInfo::getName),
+                new SqlField("si", SupplierInfo::getCode)
+        );
+        //根据账期过滤
+        wrapper.eq("json_unquote( si.victoriatourist_json -> '$.accountPeriod' )",dto.getAccountPeriodType());
+        Page<SupplierInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+
+        List<SupplierInfoVo> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+        AreaUtil.setAreaName(records);
+        return page;
+    }
+
     @Override
     public SupplierInfoVo detail(Long id) {
         SupplierInfo SupplierInfo = this.getById(id);

+ 2 - 1
hx-supply/src/main/resources/mapper/supplier/SupplierInfoMapper.xml

@@ -17,7 +17,8 @@
             si.create_user,
             si.create_time,
             si.update_user,
-            si.update_time
+            si.update_time,
+            si.victoriatourist_json
         from supplier_info si
             ${ew.customSqlSegment}
     </select>

+ 37 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockController.java

@@ -38,6 +38,22 @@ public class StockController {
     }
 
     /**
+     * 维多利亚 按仓库查询
+     */
+    @PostMapping("/pageByWarehouse")
+    public Page<StockVo> pageByWarehouse(@RequestBody StockSelectDto dto) {
+        return stockService.pageByWarehouse(dto);
+    }
+
+    /**
+     * 维多利亚 按产品查询
+     */
+    @PostMapping("/pageByProduct")
+    public Page<StockVo> pageByProduct(@RequestBody StockSelectDto dto) {
+        return stockService.pageByProduct(dto);
+    }
+
+    /**
      * 库存明细
      */
     @PostMapping("/detail")
@@ -77,4 +93,25 @@ public class StockController {
         stockService.delete(dto.getId());
     }
 
+    /**
+     * 次品转良品
+     *
+     * @return
+     */
+    @PostMapping("/defectiveToQualified")
+    public void defectiveToQualified(@RequestBody Stock stock){
+        stockService.defectiveToQualified(stock);
+    }
+
+    /**
+     * 良品转次品
+     *
+     * @return
+     */
+    @PostMapping("/qualifiedToDefective")
+    public void qualifiedToDefective(@RequestBody Stock stock){
+        stockService.qualifiedToDefective(stock);
+    }
+
+
 }

+ 3 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/Stock.java

@@ -36,4 +36,7 @@ public class Stock extends BasePo {
      */
     private BigDecimal quantity;
 
+    /**维多利亚扩展*/
+    private String victoriatouristJson;
+
 }

+ 6 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/dto/WarehouseSelectDto.java

@@ -7,12 +7,17 @@ import lombok.Setter;
 /**
  * 仓库列表查询入参实体
  *
- * @author 
+ * @author
  * @since 2023-03-20
  */
 @Getter
 @Setter
 public class WarehouseSelectDto extends BaseSelectDto {
 
+    /**
+     * 仓库类型过滤
+     */
+    private String type;
+
 
 }

+ 2 - 0
hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockMapper.java

@@ -23,4 +23,6 @@ public interface StockMapper extends BaseMapper<Stock> {
      */
     Page<StockVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Stock> wrapper);
 
+    Page<StockVo> pageByProduct(@Param("page") Page<Object> page, @Param("ew") IWrapper<Stock> wrapper);
+
 }

+ 25 - 6
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockService.java

@@ -1,13 +1,12 @@
 package com.fjhx.wms.service.stock;
 
-import com.fjhx.wms.entity.stock.po.Stock;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.dto.StockDto;
 import com.fjhx.wms.entity.stock.dto.StockSelectDto;
+import com.fjhx.wms.entity.stock.po.Stock;
 import com.fjhx.wms.entity.stock.po.StockJournalDetails;
-import com.ruoyi.common.core.domain.BaseSelectDto;
-import com.ruoyi.common.core.service.BaseService;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.wms.entity.stock.vo.StockVo;
-import com.fjhx.wms.entity.stock.dto.StockDto;
+import com.ruoyi.common.core.service.BaseService;
 
 import java.util.List;
 
@@ -17,7 +16,7 @@ import java.util.List;
  * 库存 服务类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-03-20
  */
 public interface StockService extends BaseService<Stock> {
@@ -28,6 +27,15 @@ public interface StockService extends BaseService<Stock> {
     Page<StockVo> getPage(StockSelectDto dto);
 
     /**
+     * 维多利亚 按仓库分类分页
+     */
+    Page<StockVo> pageByWarehouse(StockSelectDto dto);
+    /**
+     * 维多利亚 按产品分类分页
+     */
+    Page<StockVo> pageByProduct(StockSelectDto dto);
+
+    /**
      * 库存明细
      */
     Stock detail(StockDto dto);
@@ -54,4 +62,15 @@ public interface StockService extends BaseService<Stock> {
 
     List<StockJournalDetails> ModifyInventory(Long stockJournalId, int type, List<Stock> list, Long warehouseId);
 
+    /**
+     * 良品转次品
+     */
+    void qualifiedToDefective(Stock stock);
+
+    /**
+     * 次品转良品
+     */
+    void defectiveToQualified(Stock stock);
+
+
 }

+ 132 - 9
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -1,26 +1,27 @@
 package com.fjhx.wms.service.stock.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.fjhx.item.entity.product.po.ProductInfo;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.stock.dto.StockDto;
 import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
+import com.fjhx.wms.entity.stock.dto.StockSelectDto;
 import com.fjhx.wms.entity.stock.po.Stock;
 import com.fjhx.wms.entity.stock.po.StockJournal;
 import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import com.fjhx.wms.entity.stock.vo.StockVo;
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.mapper.stock.StockMapper;
 import com.fjhx.wms.service.stock.StockJournalDetailsService;
 import com.fjhx.wms.service.stock.StockJournalService;
 import com.fjhx.wms.service.stock.StockService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.wms.entity.stock.dto.StockSelectDto;
+import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.obs.services.internal.ServiceException;
-import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.wms.entity.stock.vo.StockVo;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.wms.entity.stock.dto.StockDto;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
@@ -46,6 +47,8 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
     StockJournalDetailsService stockJournalDetailsService;
     @Autowired
     ProductInfoService productInfoService;
+    @Autowired
+    WarehouseService warehouseService;
 
     @Override
     public Page<StockVo> getPage(StockSelectDto dto) {
@@ -65,15 +68,95 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
                 item.setProductName(productInfo.getName());
             });
         }
+        return page;
+    }
+
+    /**
+     * 维多利亚 按仓库库存查询
+     */
+    @Override
+    public Page<StockVo> pageByWarehouse(StockSelectDto dto) {
+        Page<StockVo> page = getPage(dto);
+        List<StockVo> stockVos = page.getRecords();
+
+        //获取产品id列表
+        List<Long> productIds = stockVos.stream().map(Stock::getProductId).collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(productIds)) {
+            //赋值产品名称
+            productInfoService.attributeAssign(stockVos, StockVo::getProductId, (item, productInfo) -> {
+                //赋值维多利亚扩展产品信息
+                String victoriatouristJson = item.getVictoriatouristJson();
+                if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                    JSONObject json = JSONObject.parseObject(victoriatouristJson);
+                    json.put("code", productInfo.getCode());
+                    json.put("spec", productInfo.getSpec());
+                    json.put("unit", productInfo.getUnit());
+                    item.setVictoriatouristJson(json.toJSONString());
+                }
+            });
+        }
+
         //维多利亚扩展
+        List<Long> warehouseIds = new ArrayList<>();
+        for (StockVo stockVo : stockVos) {
+            String victoriatouristJson = stockVo.getVictoriatouristJson();
+            if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                JSONObject json = JSONObject.parseObject(victoriatouristJson);
+                //遍历仓库id
+                warehouseIds.add(json.getLong("warehouseId"));
+            }
+        }
+        //如果仓库id列表为空直接返回
+        if (ObjectUtil.isEmpty(warehouseIds)) {
+            return page;
+        }
+        List<Warehouse> warehouses = warehouseService.listByIds(warehouseIds);
+        Map<Long, String> warehouseMap = warehouses.stream().collect(Collectors.toMap(Warehouse::getId, Warehouse::getName));
+        for (StockVo stockVo : stockVos) {
+            String victoriatouristJson = stockVo.getVictoriatouristJson();
+            if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                JSONObject json = JSONObject.parseObject(victoriatouristJson);
+                String warehouseName = warehouseMap.get(json.getLong("warehouseId"));
+                json.put("warehouseName", warehouseName);
+                stockVo.setVictoriatouristJson(json.toJSONString());
+            }
+        }
+        return page;
+    }
 
+    @Override
+    public Page<StockVo> pageByProduct(StockSelectDto dto) {
+        IWrapper<Stock> wrapper = getWrapper();
+        wrapper.orderByDesc("s", Stock::getId);
+        wrapper.eq(Stock::getWarehouseId, dto.getId());
+        wrapper.like(Stock::getQuantity, dto.getKeyword());
 
+        Page<StockVo> page = this.baseMapper.pageByProduct(dto.getPage(), wrapper);
+        List<StockVo> stockVos = page.getRecords();
+        //获取产品id列表
+        List<Long> productIds = stockVos.stream().map(Stock::getProductId).collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(productIds)) {
+            //赋值产品名称
+            productInfoService.attributeAssign(stockVos, StockVo::getProductId, (item, productInfo) -> {
+                item.setType(productInfo.getType());
+                item.setProductName(productInfo.getName());
+                //赋值维多利亚扩展产品信息
+                String victoriatouristJson = item.getVictoriatouristJson();
+                if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                    JSONObject json = JSONObject.parseObject(victoriatouristJson);
+                    json.put("code", productInfo.getCode());
+                    json.put("spec", productInfo.getSpec());
+                    json.put("unit", productInfo.getUnit());
+                    item.setVictoriatouristJson(json.toJSONString());
+                }
+            });
+        }
         return page;
     }
 
     @Override
     public Stock detail(StockDto dto) {
-        return getOne(q->q.eq(Stock::getWarehouseId,dto.getWarehouseId()).eq(Stock::getProductId,dto.getProductId()));
+        return getOne(q -> q.eq(Stock::getWarehouseId, dto.getWarehouseId()).eq(Stock::getProductId, dto.getProductId()));
     }
 
     @Override
@@ -191,5 +274,45 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         return stockJournalDetailsList;
     }
 
+    /**
+     * 次品转良品
+     */
+    @Override
+    public void defectiveToQualified(Stock stock) {
+        if (ObjectUtil.isEmpty(stock.getId())) {
+            throw new ServiceException("库存id不能为空");
+        }
+        if (ObjectUtil.isEmpty(stock.getQuantity())) {
+            throw new ServiceException("要转换的数量不能为空");
+        }
+        Stock stock1 = getById(stock.getId());
+        String victoriatouristJson = stock1.getVictoriatouristJson();
+        JSONObject json = JSONObject.parseObject(victoriatouristJson);
+        json.put("quantity", json.getBigDecimal("quantity").add(stock.getQuantity()));
+        json.put("defectiveQuantity", json.getBigDecimal("defectiveQuantity").subtract(stock.getQuantity()));
+        stock1.setVictoriatouristJson(json.toJSONString());
+        updateById(stock1);
+    }
+
+    /**
+     * 良品转次品
+     */
+    @Override
+    public void qualifiedToDefective(Stock stock) {
+        if (ObjectUtil.isEmpty(stock.getId())) {
+            throw new ServiceException("库存id不能为空");
+        }
+        if (ObjectUtil.isEmpty(stock.getQuantity())) {
+            throw new ServiceException("要转换的数量不能为空");
+        }
+        Stock stock1 = getById(stock.getId());
+        String victoriatouristJson = stock1.getVictoriatouristJson();
+        JSONObject json = JSONObject.parseObject(victoriatouristJson);
+        json.put("quantity", json.getBigDecimal("quantity").subtract(stock.getQuantity()));
+        json.put("defectiveQuantity", json.getBigDecimal("defectiveQuantity").add(stock.getQuantity()));
+        stock1.setVictoriatouristJson(json.toJSONString());
+        updateById(stock1);
+    }
+
 
 }

+ 1 - 0
hx-wms/src/main/java/com/fjhx/wms/service/warehouse/impl/WarehouseServiceImpl.java

@@ -33,6 +33,7 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         IWrapper<Warehouse> wrapper = getWrapper();
         wrapper.orderByDesc("w", Warehouse::getId);
         wrapper.like("w",Warehouse::getName,dto.getKeyword());
+        wrapper.eq("w",Warehouse::getType,dto.getType());
         Page<WarehouseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         //赋值仓管员名称
         UserUtil.assignmentNickName(page.getRecords(),Warehouse::getKeeperId,WarehouseVo::setKeeperName);

+ 19 - 1
hx-wms/src/main/resources/mapper/stock/StockMapper.xml

@@ -10,9 +10,27 @@
             s.create_user,
             s.create_time,
             s.update_user,
-            s.update_time
+            s.update_time,
+            s.victoriatourist_json
         from stock s
             ${ew.customSqlSegment}
     </select>
+    <select id="pageByProduct" resultType="com.fjhx.wms.entity.stock.vo.StockVo">
+        SELECT
+            s.id,
+            s.warehouse_id,
+            s.product_id,
+            sum( s.quantity ) quantity,
+            s.create_user,
+            s.create_time,
+            s.update_user,
+            s.update_time,
+            JSON_REPLACE( victoriatourist_json, '$.frozenQuantity', sum( json_unquote( s.victoriatourist_json -> '$.frozenQuantity' )), '$.defectiveQuantity', sum( json_unquote( s.victoriatourist_json -> '$.defectiveQuantity' )) ) victoriatourist_json
+        FROM
+            stock s
+        GROUP BY
+            s.product_id
+            ${ew.customSqlSegment}
+    </select>
 
 </mapper>