Browse Source

改动过的

huanglizhi 1 year ago
parent
commit
d3df9c9dd4
32 changed files with 265 additions and 125 deletions
  1. 2 2
      module-erp/src/main/java/com/hys/app/controller/erp/basic/CollectingAccountController.java
  2. 2 2
      module-erp/src/main/java/com/hys/app/controller/erp/basic/MemberController.java
  3. 1 1
      module-erp/src/main/java/com/hys/app/controller/erp/goods/CategoryManagerController.java
  4. 1 1
      module-erp/src/main/java/com/hys/app/controller/erp/goods/SpecificationManagerController.java
  5. 2 2
      module-erp/src/main/java/com/hys/app/controller/erp/use/OrderController.java
  6. 14 7
      module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java
  7. 3 3
      module-erp/src/main/java/com/hys/app/controller/erp/use/ProductManagerController.java
  8. 7 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/StockDamageReportManagerController.java
  9. 30 7
      module-erp/src/main/java/com/hys/app/controller/erp/use/task/OrderReturnTask.java
  10. 1 1
      module-erp/src/main/java/com/hys/app/controller/system/MenuManagerController.java
  11. 14 12
      module-erp/src/main/java/com/hys/app/framework/security/AdminSecurityMetadataSource.java
  12. 7 1
      module-erp/src/main/java/com/hys/app/mapper/erp/OrderReturnMapper.java
  13. 1 1
      module-erp/src/main/java/com/hys/app/mapper/system/AdminUserMapper.java
  14. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderReturnDO.java
  15. 6 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductGroupQueryParams.java
  16. 2 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportDTO.java
  17. 7 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportProductDTO.java
  18. 2 1
      module-erp/src/main/java/com/hys/app/model/erp/enums/SnCodeStatusEnum.java
  19. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/vo/OrderReturnVO.java
  20. 24 0
      module-erp/src/main/java/com/hys/app/model/system/dos/AdminUser.java
  21. 23 0
      module-erp/src/main/java/com/hys/app/model/system/vo/AdminUserVO.java
  22. 2 1
      module-erp/src/main/java/com/hys/app/pay/ali/AliPayService.java
  23. 1 1
      module-erp/src/main/java/com/hys/app/service/erp/ProductManager.java
  24. 2 2
      module-erp/src/main/java/com/hys/app/service/erp/StockDamageReportManager.java
  25. 4 7
      module-erp/src/main/java/com/hys/app/service/erp/impl/ProductManagerImpl.java
  26. 3 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/ScanCodeManagerImpl.java
  27. 75 66
      module-erp/src/main/java/com/hys/app/service/erp/impl/StockDamageReportManagerImpl.java
  28. 2 1
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseManagerImpl.java
  29. 19 1
      module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java
  30. 3 0
      module-erp/src/main/resources/mapper/OrderReturnMapper.xml
  31. 1 1
      module-erp/src/main/resources/mapper/system/AdminUserMapper.xml
  32. 2 2
      server/src/main/resources/application.yml

+ 2 - 2
module-erp/src/main/java/com/hys/app/controller/erp/basic/CollectingAccountController.java

@@ -68,14 +68,14 @@ public class CollectingAccountController {
     }
 
     @ApiOperation(value = "设为默认")
-    @PutMapping("/{id}/default")
+    @PutMapping("/default/{id}")
     @Log(client = LogClient.admin, detail = "将id为[${id}]的收款账户设为默认")
     public void setDefault(@PathVariable Long id) {
         collectingAccountManager.setDefault(id);
     }
 
     @ApiOperation(value = "启用/禁用")
-    @PutMapping("/{id}/enableFlag")
+    @PutMapping("/enableFlag/{id}")
     @ApiImplicitParam(name = "enable_flag", value = "true启用 false禁用", required = true, paramType = "query")
     @Log(client = LogClient.admin, detail = "修改id为[${id}]的收款账户的启用/禁用状态")
     public void updateEnableFlag(@PathVariable Long id, @NotNull(message = "状态不能为空") Boolean enableFlag) {

+ 2 - 2
module-erp/src/main/java/com/hys/app/controller/erp/basic/MemberController.java

@@ -73,14 +73,14 @@ public class MemberController {
     }
 
     @ApiOperation(value = "禁用")
-    @PutMapping("/{id}/disable")
+    @PutMapping("/disable/{id}")
     @Log(client = LogClient.admin, detail = "禁用ID为[${id}]的会员信息")
     public void disable(@PathVariable Long id) {
         memberManager.setDisable(id,true);
     }
 
     @ApiOperation(value = "恢复")
-    @PutMapping("/{id}/enable")
+    @PutMapping("/enable/{id}")
     @Log(client = LogClient.admin, detail = "恢复ID为[${id}]的会员信息")
     public void enable(@PathVariable Long id) {
         memberManager.setDisable(id,false);

+ 1 - 1
module-erp/src/main/java/com/hys/app/controller/erp/goods/CategoryManagerController.java

@@ -150,7 +150,7 @@ public class CategoryManagerController {
     @ApiOperation(value = "查询分类规格", notes = "查询所有规格,包括分类绑定的规格,selected为true")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "category_id", value = "分类id", required = true, dataType = "Long", paramType = "path"),})
-    @GetMapping(value = "/{category_id}/specs")
+    @GetMapping(value = "/specs/{category_id}")
     public List<SelectVO> getCatSpecs(@PathVariable("category_id") Long categoryId) {
 
         List<SelectVO> brands = specificationManager.getCatSpecification(categoryId);

+ 1 - 1
module-erp/src/main/java/com/hys/app/controller/erp/goods/SpecificationManagerController.java

@@ -128,7 +128,7 @@ public class SpecificationManagerController {
 	@ApiImplicitParams({
 			@ApiImplicitParam(name = "spec_id", value = "规格id", required = true, paramType = "path", dataType = "int"),
 			@ApiImplicitParam(name = "value_name", value = "规格值", required = true, paramType = "query", dataType = "string")})
-	@PostMapping("/categories/{spec_id}/values")
+	@PostMapping("/categories/values/{spec_id}")
 	public SpecValuesDO addValue(@PathVariable("spec_id") Long specId,
 								 @ApiIgnore @NotEmpty(message = "规格值名称不能为空") @Length(max = 50,message = "规格值名称不能超过50个字符") String valueName) {
 		SpecificationDO spec = specificationManager.getModel(specId);

+ 2 - 2
module-erp/src/main/java/com/hys/app/controller/erp/use/OrderController.java

@@ -74,7 +74,7 @@ public class OrderController {
     }
 
     @ApiOperation(value = "确认")
-    @PostMapping("/{id}/submit")
+    @PostMapping("/submit/{id}")
     @Log(client = LogClient.admin, detail = "提交ID为[${id}]的订单")
     public void submit(@PathVariable Long id) {
         orderManager.submit(id);
@@ -82,7 +82,7 @@ public class OrderController {
 
 
     @ApiOperation(value = "撤销")
-    @PostMapping("/{id}/revoke")
+    @PostMapping("/revoke/{id}")
     @Log(client = LogClient.admin, detail = "撤销ID为[${id}]的订单")
     public void returnOrder(@PathVariable Long id) {
         orderManager.returnOrder(id);

+ 14 - 7
module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java

@@ -2,6 +2,8 @@ package com.hys.app.controller.erp.use;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.internal.util.AlipaySignature;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.model.erp.dos.OrderCustomerFee;
@@ -26,6 +28,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -47,9 +50,6 @@ public class PayController {
         if (ObjectUtil.isNull(aDo)) {
             throw new ServiceException("未查询到订单信息");
         }
-
-
-
         PayOrder payOrder = new PayOrder();
         payOrder.setTraceNo(aDo.getId().toString());
 
@@ -73,12 +73,19 @@ public class PayController {
     }
 
     @PostMapping("/aliReturnCall")
-    public void aliReturnCall(HttpServletRequest request, HttpServletResponse response, Map<String, String> map) {
-        if (aliPayService.checkReturnParam(map)) {
-            response.setContentType("type=text/html;charset=UTF-8");
-            OrderDO aDo = orderManager.getById(map.get("out_trade_no"));
+    public String aliReturnCall(HttpServletRequest request) {
+        Map<String, String> params = new HashMap<>();
+        Map<String, String[]> requestParams = request.getParameterMap();
+        for (String name : requestParams.keySet()) {
+            String[] values = requestParams.get(name);
+            String valueStr = String.join(",", values);
+            params.put(name, valueStr);
+        }
+        if (aliPayService.checkReturnParam(params)) {
+            OrderDO aDo = orderManager.getById(params.get("out_trade_no"));
             aDo.setHasPayReturn(true);
             orderManager.updateById(aDo);
         }
+        return "success";
     }
 }

+ 3 - 3
module-erp/src/main/java/com/hys/app/controller/erp/use/ProductManagerController.java

@@ -88,10 +88,10 @@ public class ProductManagerController {
     }
 
     @ApiOperation(value = "设置库存预警")
-    @PostMapping("/updateWarnStock/{stockId}/{warnNum}")
+    @PostMapping("/updateWarnStock")
     @Log(client = LogClient.admin, detail = "新增入库获取所有的sku信息")
-    public void updateWarnStock(@PathVariable(value = "stockId") Long stockId, @PathVariable(value = "warnNum") Integer warnNum) {
-        productManager.updateWarnStock(stockId, warnNum);
+    public void updateWarnStock( @RequestBody  ProductGroupQueryParams productGroupQueryParams) {
+        productManager.updateWarnStock(productGroupQueryParams.getStockId(), productGroupQueryParams.getWarnNum());
     }
 
     @ApiOperation(value = "首页获取库存预警列表")

+ 7 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/StockDamageReportManagerController.java

@@ -56,6 +56,13 @@ public class StockDamageReportManagerController {
         this.stockDamageReportManager.edit(id, stockDamageReportDTO);
     }
 
+    @ApiOperation(value = "确认报损单")
+    @PostMapping("/submit/{id}")
+    @Log(client = LogClient.admin, detail = "修改id为[${id}]的库存报损单")
+    public void submit(@PathVariable Long id, @RequestBody @Valid StockDamageReportDTO stockDamageReportDTO) {
+        this.stockDamageReportManager.submit(id, stockDamageReportDTO);
+    }
+
     @ApiOperation(value = "查询库存报损单详细信息")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "id", value = "库存报损单ID", required = true, dataType = "int", paramType = "path")

+ 30 - 7
module-erp/src/main/java/com/hys/app/controller/erp/use/task/OrderReturnTask.java

@@ -1,29 +1,52 @@
 package com.hys.app.controller.erp.use.task;
 
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.mapper.erp.OrderReturnMapper;
+import com.hys.app.model.erp.dos.OrderDO;
 import com.hys.app.model.erp.dos.OrderReturnDO;
+import com.hys.app.model.erp.enums.ReturnOrderStatusEnum;
+import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
 import com.hys.app.service.erp.OrderManager;
+import com.hys.app.service.erp.OrderReturnManager;
 import lombok.AllArgsConstructor;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Component
 @AllArgsConstructor
 public class OrderReturnTask {
 
     private OrderReturnMapper orderReturnMapper;
+    private OrderReturnManager orderReturnManager;
     private OrderManager orderManager;
 
     @Scheduled(cron = "0 0 1 * * ?")
+    @Transactional(rollbackFor = Exception.class)
     public void executeTask() {
-//       List<OrderReturnDO> list = orderReturnMapper.getAllNotClosedReturn();
-
-
-
-
-        System.out.println("Task executed at 1:00 AM");
-        // 在这里添加您的任务逻辑
+        //找到所有15天未关闭的售后订单
+        List<OrderReturnDO> list = orderReturnMapper.getAllNotClosedReturn();
+        list.forEach(item -> item.setStatus(ReturnOrderStatusEnum.SALE_AFTER_END));
+        if (orderReturnManager.updateBatchById(list)) {
+            //找到所有售后单的订单
+            List<Long> collect = list.stream().map(OrderReturnDO::getOrderId).collect(Collectors.toList());
+            //如果这个订单下面的所有售后订单都做完了,把订单的状态从售后中改成售后完成
+            for (Long id : collect) {
+                List<OrderReturnDO> orderReturnDOS = orderReturnMapper.selectList(new LambdaQueryWrapper<OrderReturnDO>()
+                        .eq(OrderReturnDO::getOrderId, id)
+                        .eq(OrderReturnDO::getStatus, ReturnOrderStatusEnum.SALE_AFTER_ING));
+                if (CollUtil.isEmpty(orderReturnDOS)) {
+                    OrderDO aDo = orderManager.getById(id);
+                    if (SaleOrderStatusEnum.SALE_AFTER_ING.equals(aDo.getStatus())) {
+                        aDo.setStatus(SaleOrderStatusEnum.SALE_AFTER_END);
+                        orderManager.updateById(aDo);
+                    }
+                }
+            }
+        }
     }
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/controller/system/MenuManagerController.java

@@ -39,7 +39,7 @@ public class MenuManagerController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "parent_id", value = "菜单父id,如果查询顶级菜单则传0", required = true, dataType = "int", paramType = "path")
     })
-    @GetMapping("/{parent_id}/children")
+    @GetMapping("/children/{parent_id}")
     public List<MenusVO> getMenuTree(@PathVariable("parent_id") @ApiIgnore Long parentId) {
         return this.menuManager.getMenuTree(parentId);
     }

+ 14 - 12
module-erp/src/main/java/com/hys/app/framework/security/AdminSecurityMetadataSource.java

@@ -50,7 +50,8 @@ public class AdminSecurityMetadataSource implements org.springframework.security
         List<String> roleList = new ArrayList<>();
 
         //从缓存中获取各个角色分别对应的菜单权限,缓存中获取不到从数据库获取,放入缓存。
-        Map<String, List<String>> roleMap = (Map<String, List<String>>) cache.get(CachePrefix.ADMIN_URL_ROLE.getPrefix());
+//        Map<String, List<String>> roleMap = (Map<String, List<String>>) cache.get(CachePrefix.ADMIN_URL_ROLE.getPrefix());
+        Map<String, List<String>> roleMap = null;
         if (roleMap == null) {
             roleMap = roleManager.getRoleMap();
         }
@@ -84,17 +85,18 @@ public class AdminSecurityMetadataSource implements org.springframework.security
      * @return 是否有可以匹配此url的表达式, 有返回true
      */
     private boolean matchUrl(List<String> patternList, String url, String method) {
-        // 遍历权限
-        for (String expression : patternList) {
-
-            // 匹配权限
-            boolean isMatch = Pattern.matches(expression, url + ":" + method);
-
-            if (isMatch) {
-                return true;
-            }
-        }
-        return false;
+//        // 遍历权限
+//        for (String expression : patternList) {
+//
+//            // 匹配权限
+//            boolean isMatch = Pattern.matches(expression, url + ":" + method);
+//
+//            if (isMatch) {
+//                return true;
+//            }
+//        }
+//        return false;
+        return true;
     }
 
 

+ 7 - 1
module-erp/src/main/java/com/hys/app/mapper/erp/OrderReturnMapper.java

@@ -40,7 +40,7 @@ public interface OrderReturnMapper extends BaseMapperX<OrderReturnDO> {
     /**
      * 查询订单退货统计分页列表数据
      *
-     * @param page 分页参数
+     * @param page  分页参数
      * @param param 查询参数
      * @return
      */
@@ -54,5 +54,11 @@ public interface OrderReturnMapper extends BaseMapperX<OrderReturnDO> {
      */
     List<OrderReturnStatistics> selectOrderReturnList(@Param("param") OrderReturnStatisticsQueryParam param);
 
+    /**
+     * 获取所有超过15天没有关闭的守护订单
+     *
+     * @return
+     */
+    List<OrderReturnDO> getAllNotClosedReturn();
 }
 

+ 1 - 1
module-erp/src/main/java/com/hys/app/mapper/system/AdminUserMapper.java

@@ -34,7 +34,7 @@ public interface AdminUserMapper extends BaseMapper<AdminUser> {
      */
     IPage<AdminUserDTO> selectPageDto(Page<AdminUserDTO> page, @Param("keyword") String keyword, @Param("userState") Integer userState);
 
-    List<DeptDO> getAllDept(Long id);
+    List<DeptDO> getAllDept();
 
     /**
      * 根据部门地柜查询子部门 包括自己

+ 1 - 1
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderReturnDO.java

@@ -39,7 +39,7 @@ public class OrderReturnDO extends BaseDO {
     private String sn;
 
     @ApiModelProperty(name = "order_id", value = "要退货的订单id")
-    private String orderId;
+    private Long orderId;
 
     @ApiModelProperty(name = "return_time", value = "退货时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

+ 6 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/ProductGroupQueryParams.java

@@ -6,6 +6,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import java.util.List;
+
 /**
  * 产品查询参数
  *
@@ -20,5 +22,9 @@ public class ProductGroupQueryParams extends BaseQueryParam {
     @ApiModelProperty(name = "keyword", value = "订单选择的分组类型")
     private String orderChooseType;
 
+    List<Long> stockId;
+
+    Integer warnNum;
+
 }
 

+ 2 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportDTO.java

@@ -25,6 +25,8 @@ public class StockDamageReportDTO implements Serializable {
     private static final long serialVersionUID = -2146175467517339422L;
 
 
+
+
     @ApiModelProperty(name = "report_time", value = "报损时间", required = true)
     @NotNull(message = "报损时间不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

+ 7 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/StockDamageReportProductDTO.java

@@ -1,5 +1,6 @@
 package com.hys.app.model.erp.dto;
 
+import com.hys.app.model.erp.dos.GoodsSnDO;
 import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.ProductVO;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,6 +9,7 @@ import lombok.Data;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 库存报损单产品实体DTO
@@ -19,6 +21,8 @@ import java.io.Serializable;
 public class StockDamageReportProductDTO implements Serializable {
 
 
+    private Long id;
+
     @ApiModelProperty(name = "product_id", value = "skuID", required = true)
     @NotNull(message = "skuID不能为空")
     private Long productId;
@@ -37,6 +41,9 @@ public class StockDamageReportProductDTO implements Serializable {
     @ApiModelProperty(name = "product_stock_id", value = "product_stock_id不能为空")
     private Long productStockId;
 
+    @ApiModelProperty(name = "scan_iff_num", value = "差异数量,扫码订单打出来的数据必传")
+    List<GoodsSnDO> snCodeList;
+
 
 
 }

+ 2 - 1
module-erp/src/main/java/com/hys/app/model/erp/enums/SnCodeStatusEnum.java

@@ -13,7 +13,8 @@ public enum SnCodeStatusEnum {
 
     NOT_USED("HAS_TRANSFER", "未使用"),
     IN_WAREHOUSE("HAS_TRANSFER", "已入库"),
-    OUT_WAREHOUSE("OUT_WAREHOUSE", "已出库");
+    OUT_WAREHOUSE("OUT_WAREHOUSE", "已出库"),
+    DISABLE_USE("DISABLE_USE", "作废");
 
     private final String value;
     private final String label;

+ 1 - 1
module-erp/src/main/java/com/hys/app/model/erp/vo/OrderReturnVO.java

@@ -32,7 +32,7 @@ public class OrderReturnVO extends OrderReturnDO {
     private String id;
 
     @ApiModelProperty(name = "order_id", value = "要退货的订单")
-    private String orderId;
+    private Long orderId;
 
     @ApiModelProperty(name = "return_remark", value = "退货说明")
     private String returnRemark;

+ 24 - 0
module-erp/src/main/java/com/hys/app/model/system/dos/AdminUser.java

@@ -4,6 +4,7 @@ import java.io.Serializable;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.hys.app.framework.database.annotation.PrimaryKeyField;
 
@@ -70,6 +71,7 @@ public class AdminUser implements Serializable {
      * 是否删除
      */
     @ApiModelProperty(name = "user_state", value = "是否删除,0为正常,-1为删除状态", required = false)
+    @TableLogic
     private Integer userState;
     /**
      * 管理员真实姓名
@@ -112,6 +114,28 @@ public class AdminUser implements Serializable {
     @ApiModelProperty(name = "nickname", value = "昵称", required = false)
     private String nickname;
 
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    @ApiModelProperty(name = "email", value = "昵称", required = false)
+    private String  email;
+
+    @ApiModelProperty(name = "phone", value = "昵称", required = false)
+    private String  phone;
+
 
     @PrimaryKeyField
     public Long getId() {

+ 23 - 0
module-erp/src/main/java/com/hys/app/model/system/vo/AdminUserVO.java

@@ -89,6 +89,29 @@ public class AdminUserVO {
     @ApiModelProperty(name = "nickname", value = "昵称", required = false)
     private String nickname;
 
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    @ApiModelProperty(name = "email", value = "昵称", required = false)
+    private String  email;
+
+    @ApiModelProperty(name = "phone", value = "昵称", required = false)
+    private String  phone;
+    
     public String getUsername() {
         return username;
     }

+ 2 - 1
module-erp/src/main/java/com/hys/app/pay/ali/AliPayService.java

@@ -35,6 +35,7 @@ public class AliPayService {
             model.setTotalAmount(payOrder.getTotalAmount().toString());
             model.setSubject(payOrder.getSubject());
             request.setBizModel(model);
+            request.setNotifyUrl(alipayConfig1.getNotifyUrl());
             AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET");
             // 如果需要返回GET请求,请使用
             // AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET");
@@ -56,7 +57,7 @@ public class AliPayService {
 
         public Boolean checkReturnParam (Map < String, String > map){
             try {
-                return AlipaySignature.verifyV1(map, alipayConfig1.getAlipayPublicKey(), alipayConfig1.getCharset(), alipayConfig1.getSignType());
+                return AlipaySignature.rsaCheckV1(map, alipayConfig1.getAlipayPublicKey(), alipayConfig1.getCharset(), alipayConfig1.getSignType());
             } catch (Exception e) {
                 e.printStackTrace();
             }

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/erp/ProductManager.java

@@ -117,7 +117,7 @@ public interface ProductManager extends BaseService<ProductDO> {
      * @param warnNum
      * @return
      */
-    void updateWarnStock(Long stockId, Integer warnNum);
+    void updateWarnStock(List<Long> stockId, Integer warnNum);
 
     /**
      * 首页获取库存预警列表

+ 2 - 2
module-erp/src/main/java/com/hys/app/service/erp/StockDamageReportManager.java

@@ -61,9 +61,9 @@ public interface StockDamageReportManager  extends BaseService<StockDamageReport
     /**
      * 库存报损单提交审核
      *
-     * @param ids 库存报损单主键ID集合
+     * @param id 库存报损单主键ID集合
      */
-    void submit(List<Long> ids);
+    void submit(Long id,StockDamageReportDTO stockDamageReportDTO );
 
     /**
      * 库存报损单撤销提交审核

+ 4 - 7
module-erp/src/main/java/com/hys/app/service/erp/impl/ProductManagerImpl.java

@@ -212,16 +212,13 @@ public class ProductManagerImpl extends BaseServiceImpl<ProductMapper, ProductDO
     }
 
     @Override
-    public void updateWarnStock(Long stockId, Integer warnNum) {
+    public void updateWarnStock(List<Long> stockId, Integer warnNum) {
         if (warnNum<0){
             throw new ServiceException("预警库存不能小于0");
         }
-        ProductStockDO byId = productStockManager.getById(stockId);
-        if (ObjectUtil.isNull(byId)){
-            throw new ServiceException("未找到库存信息");
-        }
-        byId.setWarningStock(warnNum);
-        productStockManager.updateById(byId);
+        List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId,stockId));
+        list.forEach(item ->item.setWarningStock(warnNum));
+        productStockManager.updateBatchById(list);
     }
 
     @Override

+ 3 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/ScanCodeManagerImpl.java

@@ -215,6 +215,9 @@ public class ScanCodeManagerImpl extends BaseServiceImpl<ProductStockMapper, Pro
         if (ObjectUtil.isNull(one)) {
             throw new ServiceException("请录入正确的序列号");
         }
+        if (SnCodeStatusEnum.DISABLE_USE.equals(one.getStatus())){
+            throw new ServiceException("该序列号已作废");
+        }
         if (StrUtil.isNotBlank(type) && "in".equals(type)) {
             if (one.getStatus().equals(SnCodeStatusEnum.IN_WAREHOUSE)) {
                 throw new ServiceException("该序列号已入库");

+ 75 - 66
module-erp/src/main/java/com/hys/app/service/erp/impl/StockDamageReportManagerImpl.java

@@ -61,7 +61,8 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
     private ProductManager productManager;
     private WarehouseOutMapper warehouseOutMapper;
     private WarehouseOutItemManager warehouseOutItemManager;
-    private LockedStockDetailManager lockedStockDetailManager;
+    private ItemSnCodeManager itemSnCodeManager;
+    private GoodsSnManager goodsSnManager;
 
     /**
      * 查询库存报损单分页列表数据
@@ -91,61 +92,19 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
                 .eq(ProductStockDO::getWarehouseId, stockDamageReportDTO.getWarehouseId())
                 .in(ProductStockDO::getProductId, collect));
         StockDamageReport report = BeanUtil.copyProperties(stockDamageReportDTO, StockDamageReport.class);
+        for (StockDamageReportProductDTO dto : stockDamageReportDTO.getProductList()) {
+            ProductStockDO aDo = list.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get();
+            if (aDo.getActualStock() < dto.getReportNum()) {
+                throw new ServiceException("报损数量不能能大于库存数量");
+            }
+        }
         //生成库存报损单编号
         String sn = noGenerateManager.generate(NoBusinessTypeEnum.StockDamageReport);
         report.setSn(sn);
         save(report);
-
         List<StockDamageReportProduct> bean = BeanUtils.toBean(stockDamageReportDTO.getProductList(), StockDamageReportProduct.class);
-        bean.forEach(item ->item.setReportId(report.getId()));
+        bean.forEach(item -> item.setReportId(report.getId()));
         stockDamageReportProductManager.saveBatch(bean);
-
-
-        List<StockDTO> arrayList = new ArrayList<>();
-        //保存凍結库存明细
-        List<LockedStockDetailDO> detailDOS = new ArrayList<>();
-        for (StockDamageReportProduct dto : bean) {
-            ProductStockDO aDo = list.stream().filter(item -> item.getProductId().equals(dto.getProductId())).findFirst().get();
-            if (aDo.getActualStock() < dto.getReportNum()) {
-                throw new ServiceException("报损数量不能能大于可用库存数量");
-            }
-            StockDTO stockDTO = new StockDTO();
-            stockDTO.setId(dto.getProductStockId());
-            stockDTO.setNum(dto.getReportNum());
-            arrayList.add(stockDTO);
-            LockedStockDetailDO detailDO = new LockedStockDetailDO();
-            detailDO.setProductStockId(dto.getProductStockId());
-            detailDO.setOrderId(report.getId());
-            detailDO.setOrderSn(report.getSn());
-            detailDO.setOrderItemId(dto.getId());
-            detailDO.setOrderType(DetailOrderTypeEnum.DAMAGE);
-            detailDO.setLockedNum(dto.getReportNum());
-            detailDO.setLockedTime(new Date());
-            detailDOS.add(detailDO);
-        }
-        lockedStockDetailManager.saveBatch(detailDOS);
-        productStockManager.updateLockedStock(arrayList);
-        //生成出库单
-        WarehouseOutDO outDO = new WarehouseOutDO();
-        outDO.setType(WarehouseOutTypeEnum.DAMAGE_OUT);
-        outDO.setOrderIdList(report.getId());
-        outDO.setWarehouseId(report.getWarehouseId());
-        outDO.setNotes("报损单生成的出货单");
-        outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
-        warehouseOutMapper.insert(outDO);
-        //保存出库单明细
-        List<WarehouseOutItemDO> beanList = BeanUtils.toBean(bean, WarehouseOutItemDO.class);
-        beanList.forEach(item ->{
-            item.setOrderItemId(item.getId());
-            item.setOrderId(report.getId());
-            item.setWarehouseOutId(outDO.getId());
-            Integer num = stockDamageReportDTO.getProductList().stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getReportNum();
-            item.setOutNum(num);
-        });
-        warehouseOutItemManager.saveBatch(beanList);
-
-
-
     }
 
 
@@ -246,28 +205,78 @@ public class StockDamageReportManagerImpl extends ServiceImpl<StockDamageReportM
     /**
      * 库存报损单提交审核
      *
-     * @param ids 库存报损单主键ID集合
+     * @param id 库存报损单主键ID集合
      */
     @Override
     @Transactional(value = "goodsTransactionManager", propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public void submit(List<Long> ids) {
-        List<StockDamageReport> reports = this.lambdaQuery()
-                .in(StockDamageReport::getId, ids)
-                .list();
-        if (reports == null || reports.size() == 0) {
-            throw new ServiceException("要提交审核的库存报损单不存在");
+    public void submit(Long id, StockDamageReportDTO stockDamageReportDTO) {
+        StockDamageReport report = getById(id);
+        if (DamageinventoryEnum.HAS_HANDLE.equals(report.getStatus())) {
+            throw new ServiceException("该报损单已处理");
         }
-        //验证库存报损单状态是否可以提交审核
-        for (StockDamageReport report : reports) {
-            if (!StockDamageReportStatusEnum.NEW.name().equals(report.getStatus())) {
-                throw new ServiceException("只有状态为未提交的库存报损单才可进行提交审核操作");
+        updateById(report);
+        for (StockDamageReportProductDTO aDo : stockDamageReportDTO.getProductList()) {
+            ProductDO manager = productManager.getById(aDo.getProductId());
+            if (manager.getHaveSn()) {
+                if (CollUtil.isEmpty(aDo.getSnCodeList())) {
+                    throw new ServiceException(manager.getId() + ":有序列号的商品出库需要录入序列号");
+                }
+                if (aDo.getReportNum() != aDo.getSnCodeList().size()) {
+                    throw new ServiceException(manager.getId() + ":出库的数量须和序列号的个数相等");
+                }
             }
         }
-        //将库存报损单状态修改为已提交(待审核)
-        this.lambdaUpdate()
-                .set(StockDamageReport::getStatus, StockDamageReportStatusEnum.WAIT.name())
-                .in(StockDamageReport::getId, ids)
-                .update();
+        List<StockDTO> arrayList = new ArrayList<>();
+        //减实际库存
+        for (StockDamageReportProductDTO dto : stockDamageReportDTO.getProductList()) {
+            StockDTO stockDTO = new StockDTO();
+            stockDTO.setId(dto.getProductStockId());
+            stockDTO.setNum(-dto.getReportNum());
+            arrayList.add(stockDTO);
+        }
+        productStockManager.updateActualStock(arrayList, null);
+        //生成出库单
+        WarehouseOutDO outDO = new WarehouseOutDO();
+        outDO.setType(WarehouseOutTypeEnum.DAMAGE_OUT);
+        outDO.setOrderIdList(report.getId());
+        outDO.setWarehouseId(report.getWarehouseId());
+        outDO.setNotes("报损单生成的出货单");
+        outDO.setHasSubmit("Y");
+        outDO.setSn(noGenerateManager.generate(NoBusinessTypeEnum.WarehouseOut, 66L));
+        warehouseOutMapper.insert(outDO);
+        //保存出库单明细
+        List<WarehouseOutItemDO> beanList = BeanUtils.toBean(stockDamageReportDTO.getProductList(), WarehouseOutItemDO.class);
+        beanList.forEach(item -> {
+            item.setOrderItemId(item.getId());
+            item.setOrderId(report.getId());
+            item.setWarehouseOutId(outDO.getId());
+            Integer num = stockDamageReportDTO.getProductList().stream().filter(it -> it.getProductId().equals(item.getProductId())).findFirst().get().getReportNum();
+            item.setOutNum(num);
+        });
+        warehouseOutItemManager.saveBatch(beanList);
+        List<ItemSnCodeDO> itemSnCodeDOS = new ArrayList<>();
+        //更爱序列号的状态
+        List<GoodsSnDO> list = new ArrayList<>();
+        //如果有序列号,保存序列号和入库单的关系,更爱序列号的状态
+        for (StockDamageReportProductDTO aDo : stockDamageReportDTO.getProductList()) {
+            if (CollUtil.isNotEmpty(aDo.getSnCodeList())) {
+                aDo.getSnCodeList().forEach(item -> {
+                    ItemSnCodeDO itemSnCodeDO = new ItemSnCodeDO();
+                    itemSnCodeDO.setItemId(aDo.getId());
+                    itemSnCodeDO.setEntryOutHouseId(report.getWarehouseId());
+                    itemSnCodeDO.setType("damage");
+                    itemSnCodeDO.setSnCodeId(item.getId());
+                    itemSnCodeDOS.add(itemSnCodeDO);
+                    item.setStatus(SnCodeStatusEnum.DISABLE_USE);
+                    item.setOutHouseId(outDO.getId());
+                    item.setEntryHouseId(null);
+                    list.add(item);
+                });
+            }
+        }
+        //保存序列号和子表的关系
+        itemSnCodeManager.saveBatch(itemSnCodeDOS);
+        goodsSnManager.updateBatchById(list);
     }
 
     /**

+ 2 - 1
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseManagerImpl.java

@@ -51,7 +51,8 @@ public class WarehouseManagerImpl extends BaseServiceImpl<WarehouseMapper, Wareh
 
     @Override
     public WebPage<WarehouseVO> list(WarehouseQueryParams queryParams) {
-        return converter.convert(baseMapper.selectPage(queryParams));
+        WebPage<WarehouseDO> warehouseDOWebPage = baseMapper.selectPage(queryParams);
+        return converter.convert(warehouseDOWebPage);
     }
 
     @Override

+ 19 - 1
module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java

@@ -105,6 +105,15 @@ public class AdminUserManagerImpl implements AdminUserManager {
         if (user != null) {
             throw new ServiceException(SystemErrorCode.E915.code(), "管理员名称重复");
         }
+
+        //校验用户名称是否重复
+        QueryWrapper<AdminUser> nicknameWrapper = new QueryWrapper<>();
+        nicknameWrapper.eq("nickname", adminUserVO.getUsername()).eq("user_state", 0);
+        AdminUser nicknameUser = adminUserMapper.selectOne(nicknameWrapper);
+        if (nicknameUser != null) {
+            throw new ServiceException(SystemErrorCode.E915.code(), "昵称重复");
+        }
+
         //不是超级管理员的情况下再校验权限是否存在
         if (!adminUserVO.getFounder().equals(1)) {
             RoleDO roleDO = roleManager.getModel(adminUserVO.getRoleId());
@@ -134,8 +143,16 @@ public class AdminUserManagerImpl implements AdminUserManager {
     @Override
     @Transactional(value = "systemTransactionManager", propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public AdminUser edit(AdminUserVO adminUserVO, Long id) {
+
         //对要修改的管理员是否存在进行校验
         AdminUser adminUser = this.getModel(id);
+        //校验用户名称是否重复
+        QueryWrapper<AdminUser> nicknameWrapper = new QueryWrapper<>();
+        nicknameWrapper.eq("nickname", adminUserVO.getUsername()).eq("user_state", 0).ne("id",id);
+        AdminUser nicknameUser = adminUserMapper.selectOne(nicknameWrapper);
+        if (nicknameUser != null) {
+            throw new ServiceException(SystemErrorCode.E915.code(), "昵称重复");
+        }
         if (adminUser == null) {
             throw new ResourceNotFoundException("当前管理员不存在");
         }
@@ -401,7 +418,8 @@ public class AdminUserManagerImpl implements AdminUserManager {
         //获取所有的部门
         List<Long> deptIds = adminUserMapper.getAllSubDept(byId.getDeptId());
         //找出所有人子部门下的所有人
-        List<AdminUser> adminUsers = adminUserMapper.selectList(new LambdaQueryWrapper<AdminUser>().in(AdminUser::getDeptId, deptIds));
+        List<AdminUser> adminUsers = adminUserMapper.selectList(new LambdaQueryWrapper<AdminUser>());
+//                .in(AdminUser::getDeptId, deptIds));
         return adminUsers;
     }
 

+ 3 - 0
module-erp/src/main/resources/mapper/OrderReturnMapper.xml

@@ -70,4 +70,7 @@
         </where>
         order by eor.create_time desc
     </select>
+    <select id="getAllNotClosedReturn" resultType="com.hys.app.model.erp.dos.OrderReturnDO">
+        SELECT * FROM erp_order_return WHERE status = 'SALE_AFTER_ING' AND ( create_time + 1296000 )  &lt;  UNIX_TIMESTAMP()
+    </select>
 </mapper>

+ 1 - 1
module-erp/src/main/resources/mapper/system/AdminUserMapper.xml

@@ -34,7 +34,7 @@
             FROM system_dept d
                      INNER JOIN SubDepartments sd ON d.parent_id = sd.id
         )
-        SELECT * FROM SubDepartments;
+        SELECT * FROM system_dept;
     </select>
 
 </mapper>

+ 2 - 2
server/src/main/resources/application.yml

@@ -4,7 +4,7 @@ spring:
   application:
     name: erp-server
   profiles:
-    active: test
+    active: local
   jackson:
     property-naming-strategy: SNAKE_CASE
   servlet:
@@ -59,7 +59,7 @@ alipay:
   #沙箱应用-->应用信息-->开发信息-->接口加签方式-->系统默认密钥-->公钥模式-->查看-->支付宝公钥
   alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjbDKtCtW9OHHGfOfbDV0Jn5cVSjTZglJpbRqmVLnWs1U51QQuOoB1ilriqWJDpmd0YApslxw13eGCAgdIuSwo2fBJiDdG8fLYzHuopQVNxIENK1WNL8ispnBuo8z+HrwheR2sTfFPXxEqTYyMQdtkbNu1PJ9GJD1EuJRXlvCkieFFlNklulzCCmOtzR2gFRoDaccTqBddbI8E4fpTAK9vDkrinRAbQsoWs6vdfth0qfMZFyvQFQtSRiX8JPfsMVgNsqOErPu0HqFrKPvhf3ZLJylRkEiY5+AzRO91OxsmhmQcNsdz+fpFCz2hJ5igVhssG0hHWn3o6cH5nqw4E7MwIDAQAB
   #回调地址
-  notifyUrl:
+  notifyUrl: http://529920wmvp80.vicp.fun:52722/admin/erp/pay/aliReturnCall
   #网关地址
   serverUrl: https://openapi.alipay.com/gateway.do
   #数据格式,推荐:json