huanglizhi 1 rok pred
rodič
commit
18114ec14a
54 zmenil súbory, kde vykonal 1405 pridanie a 528 odobranie
  1. 14 1
      framework/src/main/java/com/hys/app/framework/context/user/AdminUserContext.java
  2. 41 0
      module-erp/pom.xml
  3. 5 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/AdminUserOperationManagerController.java
  4. 12 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyController.java
  5. 58 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyPackageController.java
  6. 130 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java
  7. 2 2
      module-erp/src/main/java/com/hys/app/controller/system/AdminUserManagerController.java
  8. 18 0
      module-erp/src/main/java/com/hys/app/converter/erp/CompanyPackageConverter.java
  9. 1 0
      module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java
  10. 12 11
      module-erp/src/main/java/com/hys/app/framework/security/AdminSecurityMetadataSource.java
  11. 19 0
      module-erp/src/main/java/com/hys/app/mapper/erp/CompanyPackageMapper.java
  12. 3 14
      module-erp/src/main/java/com/hys/app/model/erp/dos/GoodsDO.java
  13. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java
  14. 0 6
      module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendDO.java
  15. 3 36
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductDO.java
  16. 3 0
      module-erp/src/main/java/com/hys/app/model/erp/dos/ProductStockDO.java
  17. 1 5
      module-erp/src/main/java/com/hys/app/model/erp/dos/WarehouseAreaDO.java
  18. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java
  19. 18 6
      module-erp/src/main/java/com/hys/app/model/erp/entity/Company.java
  20. 22 4
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyDO.java
  21. 43 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackage.java
  22. 42 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageDO.java
  23. 15 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageVO.java
  24. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyRenewDO.java
  25. 2 1
      module-erp/src/main/java/com/hys/app/model/erp/enums/SaleOrderSendStatusEnum.java
  26. 2 185
      module-erp/src/main/java/com/hys/app/model/system/dos/SmsTemplate.java
  27. 6 85
      module-erp/src/main/java/com/hys/app/model/system/vo/AdminLoginVO.java
  28. 3 16
      module-erp/src/main/java/com/hys/app/model/system/vo/AdminUserVO.java
  29. 1 2
      module-erp/src/main/java/com/hys/app/mq/core/erp/StockStatisticsConsumer.java
  30. 44 0
      module-erp/src/main/java/com/hys/app/pay/ali/AliConfig.java
  31. 64 0
      module-erp/src/main/java/com/hys/app/pay/ali/AliPayService.java
  32. 29 0
      module-erp/src/main/java/com/hys/app/pay/ali/AliReturnPay.java
  33. 24 0
      module-erp/src/main/java/com/hys/app/pay/ali/PayOrder.java
  34. 30 0
      module-erp/src/main/java/com/hys/app/pay/ali/PayTypeUrl.java
  35. 36 0
      module-erp/src/main/java/com/hys/app/pay/ali/WxConfig.java
  36. 47 0
      module-erp/src/main/java/com/hys/app/pay/ali/WxService.java
  37. 10 0
      module-erp/src/main/java/com/hys/app/service/erp/CompanyManager.java
  38. 13 0
      module-erp/src/main/java/com/hys/app/service/erp/CompanyPackageManager.java
  39. 2 1
      module-erp/src/main/java/com/hys/app/service/erp/ProductStockManager.java
  40. 39 6
      module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyManagerImpl.java
  41. 40 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyPackageManagerImpl.java
  42. 3 9
      module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java
  43. 42 29
      module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java
  44. 1 12
      module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java
  45. 134 70
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java
  46. 97 0
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/CreateStoreModel2.java
  47. 3 3
      module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/PreOrderModel.java
  48. 1 1
      module-erp/src/main/java/com/hys/app/service/system/AdminUserManager.java
  49. 36 18
      module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java
  50. 51 0
      module-erp/src/main/java/com/hys/app/util/AliEmailUtil.java
  51. 62 0
      module-erp/src/main/java/com/hys/app/util/AliSmsUtil.java
  52. 99 0
      module-erp/src/main/java/com/hys/app/util/MailSmtpUtil.java
  53. 19 1
      server/src/main/resources/application.yml
  54. 0 1
      sql/clearTable.sql

+ 14 - 1
framework/src/main/java/com/hys/app/framework/context/user/AdminUserContext.java

@@ -99,11 +99,24 @@ public class AdminUserContext {
      * @return
      */
     public static void compareCompany(Long companyId) {
-        if (ObjectUtil.isNull(getCompanyId())){
+        if (ObjectUtil.isNull(getCompanyId())) {
             throw new ServiceException("平台工作人员不允许操作公司内部业务");
         }
         if (!getCompanyId().equals(companyId)) {
             throw new ServiceException("你无权操作此数据");
         }
     }
+
+    /**
+     * 获取当前管理员
+     *
+     * @return
+     */
+    public static Boolean hasFound() {
+        Admin admin = getAdmin();
+        if (admin != null && admin.getFounder() == 1) {
+            return true;
+        }
+        return false;
+    }
 }

+ 41 - 0
module-erp/pom.xml

@@ -23,11 +23,52 @@
             <version>RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>4.38.0.ALL</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.wechatpay-apiv3</groupId>
+            <artifactId>wechatpay-java</artifactId>
+            <version>0.2.12</version>
+        </dependency>
         <dependency>
             <groupId>com.github.wechatpay-apiv3</groupId>
             <artifactId>wechatpay-java</artifactId>
             <version>0.2.12</version>
         </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibabacloud-dm20151123</artifactId>
+            <version>1.0.16</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.mail</groupId>
+            <artifactId>javax.mail</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dysmsapi20170525</artifactId>
+            <version>2.0.24</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 5 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/AdminUserOperationManagerController.java

@@ -1,6 +1,8 @@
 package com.hys.app.controller.erp.use;
 
+import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
 import com.hys.app.model.system.dos.AdminUser;
@@ -51,6 +53,9 @@ public class AdminUserOperationManagerController {
     @PostMapping
     @Log(client = LogClient.admin, detail = "添加用户编号为[${adminUserVO.sn}]的管理员")
     public AdminUser add(@Valid AdminUserVO adminUserVO) {
+        if (AdminUserContext.hasFound()) {
+            throw new ServiceException("平台工作人员不允许创建账号");
+        }
         return this.adminUserManager.add(adminUserVO);
     }
 

+ 12 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyController.java

@@ -1,6 +1,8 @@
 package com.hys.app.controller.erp.use;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.security.model.Admin;
 import com.hys.app.model.erp.entity.*;
 import com.hys.app.service.erp.CompanyManager;
 import com.hys.app.model.support.LogClient;
@@ -11,6 +13,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.math.BigDecimal;
 
 @Api(tags = "公司")
 @RestController
@@ -25,18 +28,27 @@ public class CompanyController {
     public Long createCompany(@Valid @RequestBody CompanyDO companyDO) {
         return companyManager.createCompany(companyDO);
     }
+
     @PostMapping("updateCompany/{id}")
     @ApiOperation(value = "更新公司")
     @Log(client = LogClient.admin, detail = "修改名称为[${companyDO.name}]的公司信息")
     public Long updateCompany(@Valid @RequestBody CompanyUpdateDO companyUpdateDO, @PathVariable Long id) {
         return companyManager.updateCompany(companyUpdateDO, id);
     }
+    @PostMapping("renewCompany/difference/{id}")
+    @ApiOperation(value = "公司续费未到期更换套餐")
+    @Log(client = LogClient.admin, detail = "名称为[${companyDO.name}]的公司进行了续费")
+    public BigDecimal renewCompanyDifference(@PathVariable Long id) {
+        return companyManager.renewCompanyDifference(id);
+    }
+
     @PostMapping("renewCompany/{id}")
     @ApiOperation(value = "公司续费")
     @Log(client = LogClient.admin, detail = "名称为[${companyDO.name}]的公司进行了续费")
     public Long renewCompany(@Valid @RequestBody CompanyRenewDO companyUpdateDO, @PathVariable Long id) {
         return companyManager.renewCompany(companyUpdateDO, id);
     }
+
     @GetMapping("getOne/{id}")
     @ApiOperation(value = "获取公司详情")
     public CompanyVO getOneCompany(@PathVariable Long id) {

+ 58 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyPackageController.java

@@ -0,0 +1,58 @@
+package com.hys.app.controller.erp.use;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.converter.erp.CompanyPackageConverter;
+import com.hys.app.framework.database.BaseQueryParam;
+import com.hys.app.model.erp.entity.*;
+import com.hys.app.model.support.LogClient;
+import com.hys.app.model.support.validator.annotation.Log;
+import com.hys.app.service.erp.CompanyPackageManager;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+@Api(tags = "套餐")
+@RestController
+@RequestMapping("/admin/erp/companyPackage")
+@AllArgsConstructor
+public class CompanyPackageController {
+
+    private CompanyPackageManager companyPackageManager;
+
+    @PostMapping("createCompanyPackage")
+    @ApiOperation(value = "创建套餐")
+    @Log(client = LogClient.admin, detail = "创建名称为[${companyDO.name}]的公司信息")
+    public Long createCompany(@Valid @RequestBody CompanyPackageDO packageDo) {
+        return companyPackageManager.createCompanyPackage(packageDo);
+    }
+
+    @PostMapping("disAbleUse/{id}")
+    @ApiOperation(value = "套餐启用禁用")
+    @Log(client = LogClient.admin, detail = "修改id为[${id}]套餐的状态")
+    public void disAbleUse(@PathVariable Long id) {
+        CompanyPackage byId = companyPackageManager.getById(id);
+        byId.setUseAble(!byId.getUseAble());
+        companyPackageManager.updateById(byId);
+    }
+
+    @GetMapping("{id}")
+    @ApiOperation(value = "获取套餐详情")
+    public CompanyPackageVO getPackage(@PathVariable Long id) {
+        return CompanyPackageConverter.INSTANCE.convert(companyPackageManager.getById(id));
+    }
+
+    @GetMapping()
+    @ApiOperation(value = "获取套餐列表")
+    public IPage<CompanyPackageVO> getPackageList(CompanyPackageDO packageDO, BaseQueryParam queryParam) {
+        return CompanyPackageConverter.INSTANCE.convert(companyPackageManager.page(new Page<>(queryParam.getPageNo(), queryParam.getPageSize()),
+                new LambdaQueryWrapper<CompanyPackage>().eq(ObjectUtil.isNotNull(packageDO.getUseAble()), CompanyPackage::getUseAble, packageDO.getUseAble())
+                        .like(StrUtil.isNotBlank(packageDO.getName()), CompanyPackage::getName, packageDO.getName())));
+    }
+}

+ 130 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java

@@ -0,0 +1,130 @@
+package com.hys.app.controller.erp.use;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.hys.app.framework.exception.ServiceException;
+
+import com.hys.app.framework.util.BeanUtil;
+import com.hys.app.framework.util.DateUtil;
+import com.hys.app.framework.util.StringUtil;
+import com.hys.app.mapper.system.AdminUserMapper;
+import com.hys.app.model.erp.dos.OrderDO;
+
+import com.hys.app.model.erp.entity.Company;
+import com.hys.app.model.system.dos.AdminUser;
+import com.hys.app.pay.ali.AliPayService;
+import com.hys.app.pay.ali.PayOrder;
+import com.hys.app.pay.ali.PayTypeUrl;
+import com.hys.app.pay.ali.WxService;
+
+import com.hys.app.service.erp.CompanyManager;
+import com.hys.app.service.erp.OrderManager;
+import com.hys.app.util.AliSmsUtil;
+import com.hys.app.util.MailSmtpUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.net.URLDecoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+@RestController
+@RequestMapping("/admin/erp/pay")
+@Api(tags = "订单支付")
+@Validated
+@AllArgsConstructor
+public class PayController {
+    private CompanyManager companyManager;
+    private AliPayService aliPayService;
+    private WxService wxService;
+    private AdminUserMapper adminUserMapper;
+
+
+    @ApiOperation(value = "扫描完获取拉起支付的url")
+    @PostMapping("/getCompanyPayUrl")
+    public Object getListByScan(@RequestBody @Validated PayTypeUrl payTypeUrl) {
+        Company company = companyManager.getById(payTypeUrl.getId());
+        if (ObjectUtil.isNull(company)) {
+            throw new ServiceException("未查询到公司信息");
+        }
+        PayOrder payOrder = new PayOrder();
+        payOrder.setTraceNo(company.getId().toString());
+        payOrder.setSubject("购买公司使用权账号");
+        payOrder.setTimeExpire(LocalDateTime.now().plusMinutes(30));
+        payOrder.setTotalAmount(company.getThisMoney().doubleValue());
+        payOrder.setOrderPayType("company");
+        switch (payTypeUrl.getPayType()) {
+            case "ali":
+                return aliPayService.pay(payOrder);
+            case "wx":
+                return "暂未开通";
+            default:
+                return "不支持的支付方式";
+        }
+    }
+
+    @PostMapping("/aliReturnCall")
+    @Transactional(rollbackFor = Exception.class)
+    public String aliReturnCall(HttpServletRequest request) throws Exception {
+        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)) {
+            String passbackParams = URLDecoder.decode(params.get("passback_params"), "UTF-8");
+            if ("company".equals(passbackParams)){
+                Company company = companyManager.getById(params.get("out_trade_no"));
+                company.setEndUseTime(company.getEndUseTime().plusDays(company.getThisDay()));
+                company.setThisDay(null);
+                company.setThisMoney(null);
+                companyManager.updateById(company);
+                //给公司创建初始账号
+                String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+                StringBuilder sb = new StringBuilder();
+                Random random = new Random();
+                for (int i = 0; i < 6; i++) {
+                    int index = random.nextInt(characters.length());
+                    sb.append(characters.charAt(index));
+                }
+                String password = sb.toString();
+
+                //管理员信息入库
+                AdminUser adminUser = new AdminUser();
+                adminUser.setCompanyId(company.getId());
+                adminUser.setUsername("admin");
+                adminUser.setRoleId(company.getRoleId());
+                adminUser.setFounder(0);
+                adminUser.setNickname(company.getName()+"管理员");
+                adminUser.setPassword(StringUtil.md5(password + adminUser.getUsername().toLowerCase()));
+                adminUser.setDateLine(DateUtil.getDateline());
+                adminUser.setUserState(0);
+                adminUserMapper.insert(adminUser);
+                //todo  用短信和邮件把账号密码发给用户
+            }
+        }
+        return "success";
+    }
+    @PostMapping("/sendmail")
+    public void sendmail(@RequestBody  Map<String,Object> map )  {
+        MailSmtpUtil.sendEmail(map.get("toMail").toString(),map.get("subject").toString(),map.get("content"));
+    }
+
+    @PostMapping("/senSms")
+    public void senSms(@RequestBody  Map<String,Object> map ) throws Exception {
+        AliSmsUtil.sendSms(map.get("rePhone").toString(),map.get("templateCode").toString(),(Map<String, String>) map.get("map"));
+    }
+}

+ 2 - 2
module-erp/src/main/java/com/hys/app/controller/system/AdminUserManagerController.java

@@ -51,11 +51,11 @@ public class AdminUserManagerController {
             @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String", paramType = "query")
     })
-    public AdminLoginVO login(@NotEmpty(message = "用户名不能为空") String username, @NotEmpty(message = "密码不能为空") String password) {
+    public AdminLoginVO login(@NotEmpty(message = "用户名不能为空") String username, @NotEmpty(message = "密码不能为空") String password, @NotEmpty(message = "公司不能为空") String companyName) {
         //验证登录参数是否正确
         this.validatorManager.validate();
 
-        return adminUserManager.login(username, password);
+        return adminUserManager.login(username, password,companyName);
     }
 
     @ApiOperation(value = "刷新token")

+ 18 - 0
module-erp/src/main/java/com/hys/app/converter/erp/CompanyPackageConverter.java

@@ -0,0 +1,18 @@
+package com.hys.app.converter.erp;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.model.erp.entity.*;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
+public interface CompanyPackageConverter {
+    CompanyPackageConverter INSTANCE = Mappers.getMapper(CompanyPackageConverter.class);
+
+    CompanyPackage convert(CompanyPackageDO bean);
+    CompanyPackageVO convert(CompanyPackage bean);
+    Page<CompanyPackageVO> convert(Page<CompanyPackage> bean);
+
+}

+ 1 - 0
module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java

@@ -45,6 +45,7 @@ public class AdminAccessDecisionManager implements org.springframework.security.
         result = result || matcher.match("/import-tpl/**", url);
         result = result || matcher.match("/admin/erp/kdn/returnBack/**", url);
 //        result = result || matcher.match("/admin/erp/scancode/**", url);
+        result = result || matcher.match("/admin/erp/pay/**", url);
         if (result) {
             return;
         }

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

@@ -84,17 +84,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;
     }
 
 

+ 19 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/CompanyPackageMapper.java

@@ -0,0 +1,19 @@
+package com.hys.app.mapper.erp;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.hys.app.framework.cache.MybatisRedisCache;
+import com.hys.app.model.erp.entity.Company;
+import com.hys.app.model.erp.entity.CompanyPackage;
+import org.apache.ibatis.annotations.CacheNamespace;
+
+
+/**
+ * 品牌BrandDO的Mapper
+ * @author fk
+ * @version 1.0
+ * @since 7.1.0
+ * 2020/7/21
+ */
+@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
+public interface CompanyPackageMapper extends BaseMapper<CompanyPackage> {
+}

+ 3 - 14
module-erp/src/main/java/com/hys/app/model/erp/dos/GoodsDO.java

@@ -37,9 +37,6 @@ public class GoodsDO extends BaseDO {
     @ApiModelProperty(hidden = true)
     private Long id;
 
-    @ApiModelProperty(name = "imageList", value = "商品相册")
-    private String hireOrSail;
-
     @ApiModelProperty(name = "name", value = "商品名称")
     private String name;
 
@@ -58,10 +55,6 @@ public class GoodsDO extends BaseDO {
     @ApiModelProperty(name = "marketEnable", value = "是否上架 true上架")
     private Boolean marketEnable;
 
-
-    @ApiModelProperty(name = "goodsUnit", value = "商品单位")
-    private String goodsUnit;
-
     @ApiModelProperty(name = "allowSn", value = "是否启用序列号1是2否")
     private Integer allowSn;
 
@@ -78,15 +71,11 @@ public class GoodsDO extends BaseDO {
     @ApiModelProperty(name = "haveSpec", value = "是否有规格")
     private Boolean spec;
 
-    @ApiModelProperty(name = "description", value = "商品详情")
-    private String description;
-
-    @ApiModelProperty(name = "freightTemplate_id", value = "运费模板id(0代表包邮)")
-    private Long freightTemplateId;
-
     @ApiModelProperty(name = "是否有序列号", value = "商品视频")
     private Boolean haveSn;
 
-    private Long  sort;
+    @ApiModelProperty(name = "has_hire", value = "是否可租赁")
+    private Boolean hasHire;
 
+    private  Integer sort;
 }

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

@@ -120,7 +120,7 @@ public class OrderItemDO implements Serializable {
     private Date endTime;
 
     @ApiModelProperty(name = "has_return", value = "租赁订单详情是否返回")
-    private Boolean hasReturn = false;
+    private Boolean hasReturn;
 
     private Integer  dayNum;
 

+ 0 - 6
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendDO.java

@@ -205,9 +205,6 @@ public class OrderSendDO extends BaseDO {
 
     private String receiveAddress;
 
-    @ApiModelProperty(name = "kdn_order_code", value = "快递鸟下单失败 0")
-    @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String, Object> createOrderFail = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "待接单状态 1")
     @TableField(typeHandler = FastjsonTypeHandler.class)
@@ -233,9 +230,6 @@ public class OrderSendDO extends BaseDO {
     @TableField(typeHandler = FastjsonTypeHandler.class)
     private Map<String, Object> signIn = new HashMap<>();
 
-    @ApiModelProperty(name = "kdn_order_code", value = "取消状态  0")
-    @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String, Object> cancelOrderKdn = new HashMap<>();
 
     @TableField(exist = false)
     private OrderDO orderVo;

+ 3 - 36
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductDO.java

@@ -49,8 +49,8 @@ public class ProductDO extends BaseDO {
 
     // ============= product自己的字段 =============
 
-    @ApiModelProperty(name = "sn", value = "产品编号")
-    private String sn;
+    @ApiModelProperty(name = "hire_or_sail", value = "租赁sku还是售卖sku")
+    private String hireOrSail;
 
     @ApiModelProperty(name = "price", value = "销售价格")
     private Double price;
@@ -64,18 +64,12 @@ public class ProductDO extends BaseDO {
     @ApiModelProperty(name = "mkt_price", value = "市场价格")
     private Double mktPrice;
 
-    @ApiModelProperty(name = "tax_rate", value = "税率")
-    private Double taxRate;
-
     @ApiModelProperty(name = "weight", value = "重量")
     private Double weight;
 
     @ApiModelProperty(name = "unit", value = "单位")
     private String unit;
 
-    @ApiModelProperty(name = "warning_value", value = "库存预警数")
-    private Integer warningValue;
-
     @ApiModelProperty(name = "spec_list", value = "规格列表")
     @TableField(typeHandler = FastjsonTypeHandler.class)
     private SpecList specList;
@@ -83,46 +77,19 @@ public class ProductDO extends BaseDO {
     @ApiModelProperty(name = "image", value = "产品图片")
     private String image;
 
-    // ============= 冗余GoodsDO的字段 =============
-
-    @ApiModelProperty(name = "name", value = "产品名称")
-    private String name;
-
-    @ApiModelProperty(name = "category_id", value = "分类id")
-    private Long categoryId;
-
-    @ApiModelProperty(name = "brand_id", value = "品牌id")
-    private String brandId;
-
-    @ApiModelProperty(name = "market_enable", value = "是否上架 true上架")
-    private Boolean marketEnable;
-
     @ApiModelProperty(name = "day_price", value = "日租金")
     private BigDecimal dayPrice;
 
-    @ApiModelProperty(name = "snCode", value = "商品序列号")
-    private String snCode;
-
     @ApiModelProperty(name = "barCode", value = "条码")
     private String barCode;
 
     @ApiModelProperty(name = "sku", value = "sku")
     private String sku;
 
-    @ApiModelProperty(name = "spec_name", value = "规格名")
-    @TableField(typeHandler = FastjsonTypeHandler.class)
-    private List<String> specName;
-
-    @ApiModelProperty(name = "spec_value", value = "规格值")
-    private String specValue;
-
     @ApiModelProperty(name = "是否有序列号", value = "商品视频")
     private Boolean haveSn;
 
-    @ApiModelProperty(name = "imageList", value = "商品相册")
-    private String hireOrSail;
-
-    @ApiModelProperty(name = "产品全局排序", value = "商品相册")
+    @ApiModelProperty(name = "sort", value = "排序")
     private Long sort;
 
     /**

+ 3 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductStockDO.java

@@ -42,6 +42,9 @@ public class ProductStockDO extends BaseDO implements Serializable  {
     @ApiModelProperty(name = "product_id", value = "产品id")
     private Long productId;
 
+    @ApiModelProperty(name = "hire_or_sail", value = "租赁sku还是售卖sku")
+    private String hireOrSail;
+
     @ApiModelProperty(name = "stock", value = "库存数量")
     private Integer num;
 

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

@@ -43,13 +43,9 @@ public class WarehouseAreaDO extends BaseDO implements Serializable {
     @ApiModelProperty(name = "type", value = "类型")
     private String type;
 
-    @ApiModelProperty(name = "create_time", value = "创建时间")
-    private Integer createTime;
-
-    @ApiModelProperty(name = "status", value = "状态")
+    @ApiModelProperty(name = "status", value = "状态")  
     private String status;
 
-
     @ApiModelProperty(name = "status", value = "库存ID")
     @TableField(exist = false)
     private List<Long> stockIdList;

+ 1 - 1
module-erp/src/main/java/com/hys/app/model/erp/dto/ProductDTO.java

@@ -66,7 +66,7 @@ public class ProductDTO {
     @ApiModelProperty(name = "是否有序列号", value = "商品视频")
     private Boolean haveSn;
 
-    @ApiModelProperty(name = "hireOrSail", value = "商品相册")
+    @ApiModelProperty(name = "hire_or_sail", value = "租赁sku还是售卖sku")
     private String hireOrSail;
 
 }

+ 18 - 6
module-erp/src/main/java/com/hys/app/model/erp/entity/Company.java

@@ -2,9 +2,11 @@ package com.hys.app.model.erp.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
@@ -80,11 +82,6 @@ public class Company extends BaseDO {
      * 最大创建账号数
      */
     private Integer userNum;
-    /**
-    /**
-     * 是否启用
-     */
-    private Boolean hasUse = false;
     /**
      * 累计付款金额
      */
@@ -92,5 +89,20 @@ public class Company extends BaseDO {
     /**
      * 权限id
      */
-    private Integer roleId;
+    private Long roleId;
+
+    /**
+     * 本次付款金额
+     */
+    private BigDecimal thisMoney;
+
+    /**
+     * 本次购买天数
+     */
+    private Integer thisDay;
+
+    /**
+     * 套餐id
+     */
+    private Long companyPackageId;
 }

+ 22 - 4
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyDO.java

@@ -14,7 +14,7 @@ import java.time.LocalDateTime;
  */
 @Getter
 @Setter
-public class CompanyDO  {
+public class CompanyDO {
     /**
      * 名称
      */
@@ -106,13 +106,31 @@ public class CompanyDO  {
     /**
      * 付款金额
      */
-    @ApiModelProperty("购买金额")
-    @NotNull(message = "购买金额不能为空")
+    @ApiModelProperty("累计付款金额")
     private BigDecimal money;
     /**
      * 权限id
      */
     @ApiModelProperty("套餐id")
     @NotNull(message = "套餐不能为空")
-    private Integer roleId;
+    private Long roleId;
+
+    /**
+     * 本次付款金额
+     */
+    @ApiModelProperty("本次付款金额")
+    @NotNull(message = "本次应付金额不能为空")
+    private BigDecimal thisMoney;
+
+    /**
+     * 本次购买天数
+     */
+    @ApiModelProperty("本次购买天数")
+    @NotNull(message = "本次购买天数不能为空")
+    private Integer thisDay;
+
+    @ApiModelProperty("套餐id")
+    @NotNull(message = "套餐不能为空")
+    private Long companyPackageId;
+
 }

+ 43 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackage.java

@@ -0,0 +1,43 @@
+package com.hys.app.model.erp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 部门表
+ */
+@TableName(value = "erp_company_package")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyPackage extends BaseDO {
+
+    public static final Long ROOT_ID = 0L;
+
+    private Long id;
+    /**
+     * 权限id
+     */
+    private Long roleId;
+    /**
+     * 套餐金额
+     */
+    private BigDecimal money;
+    /**
+     * 购买天数
+     */
+    private Integer day;
+
+    /**
+     * 状态
+     */
+    private Boolean useAble;
+
+    private String name;
+}

+ 42 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageDO.java

@@ -0,0 +1,42 @@
+package com.hys.app.model.erp.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 部门表
+ */
+@Data
+public class CompanyPackageDO {
+
+    /**
+     * 权限id
+     */
+    @ApiModelProperty("权限id")
+    @NotNull(message = "权限id不能为空")
+    private Long roleId;
+    /**
+     * 套餐金额
+     */
+    @ApiModelProperty("套餐金额")
+    @NotNull(message = "套餐金额不能为空")
+    private BigDecimal money;
+    /**
+     * 购买天数
+     */
+    @ApiModelProperty("购买天数")
+    @NotNull(message = "购买天数不能为空")
+    private Integer day;
+
+    @ApiModelProperty("状态")
+    @NotNull(message = "状态不能为空")
+    private Boolean useAble;
+
+    @ApiModelProperty("套餐名称")
+    @NotBlank(message = "套餐名称不能为空")
+    private String  name;
+}

+ 15 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageVO.java

@@ -0,0 +1,15 @@
+package com.hys.app.model.erp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 部门表
+ */
+@Data
+public class CompanyPackageVO extends CompanyPackage {
+}

+ 1 - 1
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyRenewDO.java

@@ -31,7 +31,7 @@ public class CompanyRenewDO {
      */
     @ApiModelProperty("购买金额")
     @NotNull(message = "购买金额不能为空")
-    private BigDecimal money;
+    private BigDecimal thisMoney;
     /**
      * 权限id
      */

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

@@ -13,7 +13,8 @@ public enum SaleOrderSendStatusEnum {
 
     TO_BE_SEND("TO_BE_SEND", "待发货"),
     SENDING("SENDING", "配送中"),
-    TO_BE_SINGE("TO_BE_SINGE", "已签收");
+    TO_BE_SINGE("TO_BE_SINGE", "已签收"),
+    TO_BE_SINGE_NOT("TO_BE_SINGE", "已拒收");
 
     SaleOrderSendStatusEnum(String value, String label) {
         this.value = value;

+ 2 - 185
module-erp/src/main/java/com/hys/app/model/system/dos/SmsTemplate.java

@@ -7,6 +7,7 @@ import com.hys.app.model.system.enums.SmsTemplateServiceTypeEnum;
 import com.hys.app.model.system.enums.SmsTemplateTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
 
@@ -24,6 +25,7 @@ import java.io.Serializable;
  */
 @TableName("es_sms_template")
 @ApiModel
+@Data
 public class SmsTemplate implements Serializable {
 
     private static final long serialVersionUID = 6526154401398092L;
@@ -110,189 +112,4 @@ public class SmsTemplate implements Serializable {
      */
     @ApiModelProperty(name = "create_time", value = "创建时间")
     private Long createTime;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getBeanId() {
-        return beanId;
-    }
-
-    public void setBeanId(String beanId) {
-        this.beanId = beanId;
-    }
-
-    public String getServiceType() {
-        return serviceType;
-    }
-
-    public void setServiceType(String serviceType) {
-        this.serviceType = serviceType;
-    }
-
-    public String getServiceCode() {
-        return serviceCode;
-    }
-
-    public void setServiceCode(String serviceCode) {
-        this.serviceCode = serviceCode;
-    }
-
-    public String getTemplateName() {
-        return templateName;
-    }
-
-    public void setTemplateName(String templateName) {
-        this.templateName = templateName;
-    }
-
-    public String getTemplateContent() {
-        return templateContent;
-    }
-
-    public void setTemplateContent(String templateContent) {
-        this.templateContent = templateContent;
-    }
-
-    public String getTemplateCode() {
-        return templateCode;
-    }
-
-    public void setTemplateCode(String templateCode) {
-        this.templateCode = templateCode;
-    }
-
-    public String getTemplateType() {
-        return templateType;
-    }
-
-    public void setTemplateType(String templateType) {
-        this.templateType = templateType;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public String getOrderId() {
-        return orderId;
-    }
-
-    public void setOrderId(String orderId) {
-        this.orderId = orderId;
-    }
-
-    public String getAuditStatus() {
-        return auditStatus;
-    }
-
-    public void setAuditStatus(String auditStatus) {
-        this.auditStatus = auditStatus;
-    }
-
-    public String getEnableStatus() {
-        return enableStatus;
-    }
-
-    public void setEnableStatus(String enableStatus) {
-        this.enableStatus = enableStatus;
-    }
-
-    public String getFailReason() {
-        return failReason;
-    }
-
-    public void setFailReason(String failReason) {
-        this.failReason = failReason;
-    }
-
-    public Long getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Long createTime) {
-        this.createTime = createTime;
-    }
-
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        SmsTemplate that = (SmsTemplate) o;
-
-        return new EqualsBuilder()
-                .append(id, that.id)
-                .append(beanId, that.beanId)
-                .append(serviceType, that.serviceType)
-                .append(serviceCode, that.serviceCode)
-                .append(templateName, that.templateName)
-                .append(templateContent, that.templateContent)
-                .append(templateCode, that.templateCode)
-                .append(templateType, that.templateType)
-                .append(remark, that.remark)
-                .append(orderId, that.orderId)
-                .append(auditStatus, that.auditStatus)
-                .append(enableStatus, that.enableStatus)
-                .append(failReason, that.failReason)
-                .append(createTime, that.createTime)
-                .isEquals();
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder(17, 37)
-                .append(id)
-                .append(beanId)
-                .append(serviceType)
-                .append(serviceCode)
-                .append(templateName)
-                .append(templateContent)
-                .append(templateCode)
-                .append(templateType)
-                .append(remark)
-                .append(orderId)
-                .append(auditStatus)
-                .append(enableStatus)
-                .append(failReason)
-                .append(createTime)
-                .toHashCode();
-    }
-
-    @Override
-    public String toString() {
-        return "SmsTemplate{" +
-                "id=" + id +
-                ", beanId='" + beanId + '\'' +
-                ", serviceType='" + serviceType + '\'' +
-                ", serviceCode='" + serviceCode + '\'' +
-                ", templateName='" + templateName + '\'' +
-                ", templateContent='" + templateContent + '\'' +
-                ", templateCode='" + templateCode + '\'' +
-                ", templateType='" + templateType + '\'' +
-                ", remark='" + remark + '\'' +
-                ", orderId='" + orderId + '\'' +
-                ", auditStatus='" + auditStatus + '\'' +
-                ", enableStatus='" + enableStatus + '\'' +
-                ", failReason='" + failReason + '\'' +
-                ", createTime=" + createTime +
-                '}';
-    }
-
-
 }

+ 6 - 85
module-erp/src/main/java/com/hys/app/model/system/vo/AdminLoginVO.java

@@ -1,5 +1,9 @@
 package com.hys.app.model.system.vo;
 
+import com.hys.app.model.erp.entity.Company;
+import com.hys.app.model.erp.entity.CompanyDO;
+import lombok.Data;
+
 /**
  * 管理员登录vo
  *
@@ -8,7 +12,7 @@ package com.hys.app.model.system.vo;
  * @date 18/6/27 上午9:28
  * @since v7.0
  */
-
+@Data
 public class AdminLoginVO {
     /**
      * 平台管理员id
@@ -48,89 +52,6 @@ public class AdminLoginVO {
      */
     private Long deptId;
 
-    public Long getUid() {
-        return uid;
-    }
-
-    public void setUid(Long uid) {
-        this.uid = uid;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getDepartment() {
-        return department;
-    }
-
-    public void setDepartment(String department) {
-        this.department = department;
-    }
-
-    public String getFace() {
-        return face;
-    }
-
-    public void setFace(String face) {
-        this.face = face;
-    }
-
-    public Long getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(Long roleId) {
-        this.roleId = roleId;
-    }
-
-    public Integer getFounder() {
-        return founder;
-    }
-
-    public void setFounder(Integer founder) {
-        this.founder = founder;
-    }
-
-    public String getAccessToken() {
-        return accessToken;
-    }
-
-    public void setAccessToken(String accessToken) {
-        this.accessToken = accessToken;
-    }
-
-    public String getRefreshToken() {
-        return refreshToken;
-    }
-
-    public void setRefreshToken(String refreshToken) {
-        this.refreshToken = refreshToken;
-    }
-
-    public Long getDeptId() {
-        return deptId;
-    }
-
-    public void setDeptId(Long deptId) {
-        this.deptId = deptId;
-    }
+    private Company  companyVo;
 
-    @Override
-    public String toString() {
-        return "AdminLoginVO{" +
-                "uid=" + uid +
-                ", username='" + username + '\'' +
-                ", department='" + department + '\'' +
-                ", face='" + face + '\'' +
-                ", roleId=" + roleId +
-                ", founder=" + founder +
-                ", accessToken='" + accessToken + '\'' +
-                ", refreshToken='" + refreshToken + '\'' +
-                '}';
-    }
 }

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

@@ -33,13 +33,7 @@ public class AdminUserVO {
      */
     @ApiModelProperty(name = "department", value = "部门", required = false)
     private String department;
-    /**
-     * 权限id
-     */
-    @Min(message = "权限id必须为数字", value = 0)
-    @NotNull(message = "权限不能为空")
-    @ApiModelProperty(name = "role_id", value = "权限id", required = false)
-    private Long roleId;
+
     /**
      * 备注
      */
@@ -91,11 +85,7 @@ public class AdminUserVO {
     @ApiModelProperty(name = "nickname", value = "昵称", required = false)
     private String nickname;
 
-    /**
-     * 所属岗位id
-     */
-    @ApiModelProperty(name = "company_id", value = "所属岗位id", required = false)
-    private Long companyId;
+
 
     @Override
     public boolean equals(Object o) {
@@ -115,9 +105,7 @@ public class AdminUserVO {
         if (department != null ? !department.equals(that.department) : that.department != null) {
             return false;
         }
-        if (roleId != null ? !roleId.equals(that.roleId) : that.roleId != null) {
-            return false;
-        }
+
         if (remark != null ? !remark.equals(that.remark) : that.remark != null) {
             return false;
         }
@@ -136,7 +124,6 @@ public class AdminUserVO {
         result = 31 * result + (username != null ? username.hashCode() : 0);
         result = 31 * result + (password != null ? password.hashCode() : 0);
         result = 31 * result + (department != null ? department.hashCode() : 0);
-        result = 31 * result + (roleId != null ? roleId.hashCode() : 0);
         result = 31 * result + (remark != null ? remark.hashCode() : 0);
         result = 31 * result + (realName != null ? realName.hashCode() : 0);
         result = 31 * result + (face != null ? face.hashCode() : 0);

+ 1 - 2
module-erp/src/main/java/com/hys/app/mq/core/erp/StockStatisticsConsumer.java

@@ -142,7 +142,6 @@ public class StockStatisticsConsumer implements StockStatisticsEvent, WarehouseE
                 statistics.setChangeNum(0);
                 //设置商品预警数量
                 ProductDO product = this.productManager.getById(batch.getProductId());
-                statistics.setWarningNum(product.getWarningValue());
                 //设置商品总库存
                 ProductStockDO stock = this.productStockManager.getStock(batch.getProductId(), batch.getWarehouseId());
                 statistics.setStockNum(stock.getNum());
@@ -344,7 +343,7 @@ public class StockStatisticsConsumer implements StockStatisticsEvent, WarehouseE
             List<ProductDO> productList = productManager.listByGoodsId(message.getId());
             for (ProductDO productDO : productList) {
                 //更新库存统计中的产品预警库存数量信息
-                this.stockStatisticsManager.updateStockWarningNum(productDO.getId(), productDO.getWarningValue());
+//                this.stockStatisticsManager.updateStockWarningNum(productDO.getId(), productDO.getWarningValue());
             }
         }
     }

+ 44 - 0
module-erp/src/main/java/com/hys/app/pay/ali/AliConfig.java

@@ -0,0 +1,44 @@
+package com.hys.app.pay.ali;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+@ConfigurationProperties(prefix = "alipay")
+@Data
+public class AliConfig {
+    /**
+     * APPID
+     */
+    private String appId;
+    /**
+     * 应用私钥
+     */
+    private String appPrivateKey;
+    /**
+     * 阿里公钥
+     */
+    private String alipayPublicKey;
+    /**
+     * 阿里调用我们的地址【内网穿透】
+     */
+    private String notifyUrl;
+    /**
+     * 网关地址
+     */
+    private String serverUrl;
+    /**
+     * 数据格式
+     */
+    private String format;
+    /**
+     * 编码格式
+     */
+    private String charset;
+    /**
+     * 签名方式,签名算法
+     */
+    private String signType;
+}

+ 64 - 0
module-erp/src/main/java/com/hys/app/pay/ali/AliPayService.java

@@ -0,0 +1,64 @@
+package com.hys.app.pay.ali;
+
+import com.alipay.api.AlipayClient;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayTradeWapPayModel;
+import com.alipay.api.internal.util.AlipaySignature;
+import com.alipay.api.request.AlipayTradeWapPayRequest;
+import com.alipay.api.response.AlipayTradeWapPayResponse;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.net.URLEncoder;
+import java.util.Map;
+
+@Service
+public class AliPayService {
+    @Resource
+    private AliConfig alipayConfig1;
+
+    public String pay(PayOrder payOrder) {
+        try {
+            AlipayConfig alipayConfig = new AlipayConfig();
+            alipayConfig.setServerUrl(alipayConfig1.getServerUrl());
+            alipayConfig.setAppId(alipayConfig1.getAppId());
+            alipayConfig.setPrivateKey(alipayConfig1.getAppPrivateKey());
+            alipayConfig.setFormat(alipayConfig1.getFormat());
+            alipayConfig.setAlipayPublicKey(alipayConfig1.getAlipayPublicKey());
+            alipayConfig.setCharset(alipayConfig1.getCharset());
+            alipayConfig.setSignType(alipayConfig1.getSignType());
+
+            AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
+            AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
+            AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
+            model.setPassbackParams( URLEncoder.encode(payOrder.getOrderPayType(), "UTF-8"));
+            model.setOutTradeNo(payOrder.getTraceNo());
+            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");
+            String pageRedirectionData = response.getBody();
+            System.out.println(pageRedirectionData);
+            if (response.isSuccess()) {
+                return response.getBody();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+        public Boolean checkReturnParam (Map < String, String > map){
+            try {
+                return AlipaySignature.rsaCheckV1(map, alipayConfig1.getAlipayPublicKey(), alipayConfig1.getCharset(), alipayConfig1.getSignType());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            return false;
+        }
+
+}

+ 29 - 0
module-erp/src/main/java/com/hys/app/pay/ali/AliReturnPay.java

@@ -0,0 +1,29 @@
+package com.hys.app.pay.ali;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+//支付宝的回调实体类
+@Data
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliReturnPay implements Serializable {
+    private static final long serialVersionUID = 8683949075381016639L;
+    // 开发者的app_id
+    private String app_id;
+    // 商户订单号
+    private String out_trade_no;
+    // 签名
+    private String sign;
+    // 交易状态
+    private String trade_status;
+    // 支付宝交易号
+    private String trade_no;
+    // 交易的金额
+    private String total_amount;
+}

+ 24 - 0
module-erp/src/main/java/com/hys/app/pay/ali/PayOrder.java

@@ -0,0 +1,24 @@
+package com.hys.app.pay.ali;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+//与阿里交互的对象
+@Data
+public class PayOrder {
+    private String traceNo;//我们的订单号
+
+    private Double totalAmount;//总金额
+
+    private String subject;//标题
+
+    private String alipayTraceNo;//阿里的流水号
+
+    private String[] queryOptions;//指定需要返回的参数
+
+    private LocalDateTime timeExpire;//绝对超时时间
+
+    private String orderPayType;//订单类型
+
+}

+ 30 - 0
module-erp/src/main/java/com/hys/app/pay/ali/PayTypeUrl.java

@@ -0,0 +1,30 @@
+package com.hys.app.pay.ali;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 商品新增/编辑DTO
+ *
+ * @author 张崧
+ * 2023-12-26 15:56:58
+ */
+@Data
+public class PayTypeUrl {
+
+    @ApiModelProperty(name = "pay_type", value = "支付方式")
+    @NotBlank(message = "支付方式不能为空")
+    private String payType;
+
+    @ApiModelProperty(name = "order_id", value = "订单ID")
+    @NotNull(message = "ID不能为空")
+    private Long id;
+
+    @ApiModelProperty(name = "order_id", value = "订单ID")
+    @NotNull(message = "ID不能为空")
+    private String orderPayType;
+}
+

+ 36 - 0
module-erp/src/main/java/com/hys/app/pay/ali/WxConfig.java

@@ -0,0 +1,36 @@
+package com.hys.app.pay.ali;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "wx")
+public class WxConfig {
+    /**
+     *  商户号
+     */
+    private String merchantId;
+    /**
+     * 商户API私钥路径
+     */
+    private String privateKeyPath;
+    /**
+     * 序列号
+     */
+    private String merchantSerialNumber;
+    /**
+     *  商户APIV3密钥
+     */
+    private String apiV3Key;
+    /**
+     *  APPID
+     */
+    private String appid;
+
+    /**
+     *  回调地址
+     */
+    private String notifyUrl;
+}

+ 47 - 0
module-erp/src/main/java/com/hys/app/pay/ali/WxService.java

@@ -0,0 +1,47 @@
+package com.hys.app.pay.ali;
+
+import com.hys.app.framework.exception.ServiceException;
+import com.wechat.pay.java.core.Config;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.core.auth.WechatPay2Validator;
+import com.wechat.pay.java.service.payments.h5.model.Amount;
+import com.wechat.pay.java.service.payments.h5.H5Service;
+import com.wechat.pay.java.service.payments.h5.model.PrepayRequest;
+import com.wechat.pay.java.service.payments.h5.model.PrepayResponse;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class WxService {
+    @Resource
+    private WxConfig wxConfig;
+
+    public PrepayResponse pay(PayOrder payOrder) {
+
+        try {
+            // 初始化SDK
+            Config config = new RSAAutoCertificateConfig.Builder()
+                    .merchantId(wxConfig.getMerchantId())
+                    .privateKeyFromPath(wxConfig.getPrivateKeyPath())
+                    .merchantSerialNumber(wxConfig.getMerchantSerialNumber())
+                    .apiV3Key(wxConfig.getApiV3Key())
+                    .build();
+            // 构建service
+            H5Service service = new H5Service.Builder().config(config).build();
+            PrepayRequest request = new PrepayRequest();
+            request.setAppid(wxConfig.getAppid());
+            request.setMchid(wxConfig.getMerchantId());
+            request.setOutTradeNo(payOrder.getTraceNo());
+            request.setTimeExpire(payOrder.getTimeExpire().toString());
+            Amount amount = new Amount();
+            amount.setTotal(payOrder.getTotalAmount().intValue()*100);
+            request.setAmount(amount);
+            request.setDescription(payOrder.getSubject());
+            return service.prepay(request);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        throw new ServiceException("拉起微信异常");
+    }
+}

+ 10 - 0
module-erp/src/main/java/com/hys/app/service/erp/CompanyManager.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.entity.*;
 
+import java.math.BigDecimal;
+
 /**
  * 部门 Service 接口
  */
@@ -49,4 +51,12 @@ public interface CompanyManager extends BaseService<Company> {
      * @return
      */
     IPage<CompanyVO> getPage(CompanyQuery query);
+
+    /**
+     * 更改套餐获取差价
+     *
+     * @param id
+     * @return
+     */
+    BigDecimal renewCompanyDifference(Long id);
 }

+ 13 - 0
module-erp/src/main/java/com/hys/app/service/erp/CompanyPackageManager.java

@@ -0,0 +1,13 @@
+package com.hys.app.service.erp;
+
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.entity.*;
+
+/**
+ * 部门 Service 接口
+ */
+public interface CompanyPackageManager extends BaseService<CompanyPackage> {
+
+    Long createCompanyPackage(CompanyPackageDO packageDo);
+
+}

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

@@ -2,6 +2,7 @@ package com.hys.app.service.erp;
 
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.GoodsDO;
 import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dto.ProductStockQueryParams;
@@ -120,7 +121,7 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
      *
      * @param bean
      */
-    void intStock(List<ProductDO> bean);
+    void intStock(List<ProductDO> bean, GoodsDO goodsDO);
 
     /**
      * 更新冻结库存

+ 39 - 6
module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyManagerImpl.java

@@ -1,5 +1,6 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -7,15 +8,23 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.hys.app.converter.erp.CompanyConverter;
+import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.mapper.erp.CompanyMapper;
 import com.hys.app.model.erp.entity.*;
 import com.hys.app.service.erp.CompanyManager;
 import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.service.erp.CompanyPackageManager;
 import com.hys.app.util.ValidateUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.regex.Pattern;
+
 /**
  * 平台管理员业务类
  *
@@ -29,19 +38,21 @@ import org.springframework.stereotype.Service;
 public class CompanyManagerImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyManager {
 
     private RedisTemplate redisTemplate;
+    private CompanyPackageManager companyPackageManager;
 
     @Override
     public Long createCompany(CompanyDO companyDO) {
         //todo 需要调起支付在支付的回调里面更改公司的使用状态
         Company convert = CompanyConverter.INSTANCE.convert(companyDO);
         checkParam(convert);
+        convert.setEndUseTime(LocalDateTime.now().plusDays(15));
         save(convert);
         return convert.getId();
     }
 
     @Override
     public Long updateCompany(CompanyUpdateDO companyUpdateDO, Long id) {
-        Company company = ValidateUtil.getOne(baseMapper, Company::getId, id,"企业");
+        Company company = ValidateUtil.getOne(baseMapper, Company::getId, id, "企业");
         CompanyConverter.INSTANCE.convert(company, companyUpdateDO);
         updateById(company);
         return id;
@@ -49,23 +60,24 @@ public class CompanyManagerImpl extends ServiceImpl<CompanyMapper, Company> impl
 
     @Override
     public Long renewCompany(CompanyRenewDO companyUpdateDO, Long id) {
-        redisTemplate.opsForHash().put("company",id,companyUpdateDO);
+        redisTemplate.opsForHash().put("company", id, companyUpdateDO);
         //todo  如果没到期就续费并更改了套餐和人数需要计算出来差价,在付款了之后再回调里面更改状态和到期时间
         return null;
     }
 
     @Override
     public CompanyVO getOneCompany(Long id) {
-        return CompanyConverter.INSTANCE.convert(ValidateUtil.getOne(baseMapper, Company::getId, id,"企业"));
+        return CompanyConverter.INSTANCE.convert(ValidateUtil.getOne(baseMapper, Company::getId, id, "企业"));
     }
 
     @Override
     public IPage<CompanyVO> getPage(CompanyQuery query) {
         Page<Company> page = page(new Page<>(query.getPageNo(), query.getPageSize()),
                 new LambdaQueryWrapper<Company>().like(StrUtil.isNotBlank(query.getName()), Company::getName, query.getName())
-                .like(StrUtil.isNotBlank(query.getIndustry()), Company::getIndustry, query.getIndustry())
-                .like(StrUtil.isNotBlank(query.getUserName()), Company::getUserName, query.getUserName())
-                .eq(ObjectUtil.isNotNull(query.getHasUse()), Company::getHasUse, query.getHasUse()));
+                        .like(StrUtil.isNotBlank(query.getIndustry()), Company::getIndustry, query.getIndustry())
+                        .like(StrUtil.isNotBlank(query.getUserName()), Company::getUserName, query.getUserName())
+                        .ge(ObjectUtil.isNotNull(query. getHasUse()), Company::getEndUseTime, LocalDateTime.now())
+                        .eq(!AdminUserContext.hasFound(),Company::getId,AdminUserContext.getCompanyId()));
         Page<CompanyVO> convert = CompanyConverter.INSTANCE.convert(page);
         for (CompanyVO vo : convert.getRecords()) {
             //todo 人员做好了之后统计人数
@@ -74,7 +86,28 @@ public class CompanyManagerImpl extends ServiceImpl<CompanyMapper, Company> impl
         return convert;
     }
 
+    @Override
+    public BigDecimal renewCompanyDifference(Long id) {
+        Company company =getById(AdminUserContext.getCompanyId());
+        CompanyPackage changePackage = companyPackageManager.getById(id);
+        CompanyPackage usePackage = companyPackageManager.getById(company.getCompanyPackageId());
+        BigDecimal subtract = changePackage.getMoney().divide(BigDecimal.valueOf(changePackage.getDay()))
+                .subtract(usePackage.getMoney().divide(BigDecimal.valueOf(usePackage.getDay())));
+        if (subtract.compareTo(BigDecimal.ZERO)<0){
+            return BigDecimal.ZERO;
+        }
+        long betweenDay = DateUtil.betweenDay(Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()),
+                Date.from(company.getEndUseTime().atZone(ZoneId.systemDefault()).toInstant()),
+                true);
+        return subtract.multiply(BigDecimal.valueOf(betweenDay));
+    }
+
+
+
     private void checkParam(Company convert) {
+        if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", convert.getCreditCode())){
+            throw new ServiceException("统一社会信用代码不能包含中文和特殊符号");
+        }
         if (ValidateUtil.checkRepeat(baseMapper, Company::getCreditCode, convert.getCreditCode(), Company::getId, convert.getId())) {
             throw new ServiceException("统一社会代码已存在");
         }

+ 40 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyPackageManagerImpl.java

@@ -0,0 +1,40 @@
+package com.hys.app.service.erp.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hys.app.converter.erp.CompanyPackageConverter;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.mapper.erp.CompanyPackageMapper;
+import com.hys.app.model.erp.entity.*;
+import com.hys.app.service.erp.CompanyPackageManager;
+import com.hys.app.util.ValidateUtil;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.regex.Pattern;
+
+/**
+ * 平台管理员业务类
+ *
+ * @author zh
+ * @version v7.0
+ * @since v7.0.0
+ * 2018-06-20 20:38:26
+ */
+@Service
+@AllArgsConstructor
+public class CompanyPackageManagerImpl extends ServiceImpl<CompanyPackageMapper, CompanyPackage> implements CompanyPackageManager {
+
+    @Override
+    public Long createCompanyPackage(CompanyPackageDO packageDo) {
+        CompanyPackage convert = CompanyPackageConverter.INSTANCE.convert(packageDo);
+        checkParam(convert);
+        save(convert);
+        return convert.getId();
+    }
+
+    private void checkParam(CompanyPackage convert) {
+        if (ValidateUtil.checkRepeat(baseMapper, CompanyPackage::getName, convert.getName(), CompanyPackage::getId, convert.getId())) {
+            throw new ServiceException("套餐名称重复");
+        }
+    }
+}

+ 3 - 9
module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java

@@ -73,17 +73,14 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
         GoodsGalleryDO goodsGallery = goodsGalleryManager.getGoodsGallery(goodsDTO.getImageList().get(0).getOriginal());
         goodsDO.setImageSmallList(goodsGallery.getSmall());
         super.save(goodsDO);
-        bean.forEach(item ->{
-            item.setGoodsId(goodsDO.getId());
-            item.setHireOrSail(goodsDO.getHireOrSail());
-        });
+        bean.forEach(item ->item.setGoodsId(goodsDO.getId()));
         productManager.saveBatch(bean);
         for (int i = 1; i <= bean.size(); i++) {
             bean.get(i-1).setSort(bean.get(i-1).getId()+100000000*i);
         }
         productManager.updateBatchById(bean);
         //初始化库存
-        productStockManager.intStock(bean);
+        productStockManager.intStock(bean,goodsDO);
         ;
 
         // 发送商品消息
@@ -111,10 +108,7 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
         GoodsGalleryDO goodsGallery = goodsGalleryManager.getGoodsGallery(goodsDTO.getImageList().get(0).getOriginal());
         goodsDO.setImageSmallList(goodsGallery.getSmall());
         updateById(goodsDO);
-        bean.forEach(item ->{
-            item.setGoodsId(goodsDO.getId());
-            item.setHireOrSail(goodsDO.getHireOrSail());
-        });
+        bean.forEach(item -> item.setGoodsId(goodsDO.getId()));
         productManager.saveBatch(bean);
         for (int i = 1; i <= bean.size(); i++) {
             bean.get(i-1).setSort(bean.get(i-1).getId()+100000000*i);

+ 42 - 29
module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java

@@ -13,7 +13,9 @@ import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
 import com.hys.app.framework.util.PageConvert;
 import com.hys.app.mapper.erp.ProductStockMapper;
+import com.hys.app.mapper.goods.GoodsMapper;
 import com.hys.app.mapper.goods.ProductMapper;
+import com.hys.app.model.erp.dos.GoodsDO;
 import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dos.WarehouseDO;
@@ -60,6 +62,9 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     @Autowired
     private ProductStockMapper productStockMapper;
 
+    @Autowired
+    private GoodsMapper goodsMapper;
+
     @Override
     public WebPage<ProductStockVO> list(ProductStockQueryParams queryParams) {
         WebPage<ProductStockDO> webPage = baseMapper.selectPage(queryParams);
@@ -116,12 +121,17 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void initStockByWarehouse(Long warehouseId) {
-        List<ProductDO> list = productMapper.selectList(new LambdaQueryWrapper<ProductDO>().eq(ProductDO::getCategoryId,AdminUserContext.hasCompany()));
+        List<ProductDO> list = productMapper.selectList(new LambdaQueryWrapper<ProductDO>().eq(ProductDO::getCompanyId, AdminUserContext.hasCompany()));
         List<ProductStockDO> arrayList = new ArrayList<>();
         for (ProductDO aDo : list) {
+            GoodsDO goodsDO = goodsMapper.selectById(aDo.getGoodsId());
             ProductStockDO aDo1 = new ProductStockDO();
             aDo1.setWarehouseId(warehouseId);
             aDo1.setGoodsId(aDo.getGoodsId());
+            aDo1.setGoodsName(goodsDO.getName());
+            aDo1.setGoodsBarCode(aDo.getSku());
+            aDo1.setGoodsSnCode(goodsDO.getSn());
+            aDo1.setHireOrSail(aDo.getHireOrSail());
             aDo1.setProductId(aDo.getId());
             arrayList.add(aDo1);
         }
@@ -227,54 +237,57 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     }
 
     @Override
-    public void intStock(List<ProductDO> bean) {
-        List<ProductStockDO> arrayList = new ArrayList<>();
-        List<WarehouseDO> list = warehouseManager.list(new LambdaQueryWrapper<WarehouseDO>().eq(WarehouseDO::getCompanyId,AdminUserContext.hasCompany()));
-        if (CollUtil.isEmpty(list)) {
-            throw new ServiceException("清先创建仓库");
-        }
-        for (ProductDO aDo : bean) {
-            for (WarehouseDO warehouseDO : list) {
-                ProductStockDO aDo1 = new ProductStockDO();
-                aDo1.setWarehouseId(warehouseDO.getId());
-                aDo1.setGoodsId(aDo.getGoodsId());
-                aDo1.setProductId(aDo.getId());
-                arrayList.add(aDo1);
+    public void intStock(List<ProductDO> bean, GoodsDO goodsDO) {
+        List<WarehouseDO> list = warehouseManager.list(new LambdaQueryWrapper<WarehouseDO>().eq(WarehouseDO::getCompanyId, AdminUserContext.hasCompany()));
+        if (CollUtil.isNotEmpty(list)) {
+            List<ProductStockDO> arrayList = new ArrayList<>();
+            for (ProductDO aDo : bean) {
+                for (WarehouseDO warehouseDO : list) {
+                    ProductStockDO aDo1 = new ProductStockDO();
+                    aDo1.setWarehouseId(warehouseDO.getId());
+                    aDo1.setGoodsId(aDo.getGoodsId());
+                    aDo1.setGoodsName(goodsDO.getName());
+                    aDo1.setGoodsBarCode(aDo.getSku());
+                    aDo1.setGoodsSnCode(goodsDO.getSn());
+                    aDo1.setHireOrSail(aDo.getHireOrSail());
+                    aDo1.setProductId(aDo.getId());
+                    arrayList.add(aDo1);
+                }
             }
+            saveBatch(arrayList);
         }
-        saveBatch(arrayList);
     }
 
     @Override
-    public void updateLockedStock(List<StockDTO>  ids ) {
+    public void updateLockedStock(List<StockDTO> ids) {
         List<Long> collect = ids.stream().map(StockDTO::getId).collect(Collectors.toList());
-        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId,collect));
-        if (list.size() != ids.size()){
+        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect));
+        if (list.size() != ids.size()) {
             throw new ServiceException("部分库存信息记录未查询到");
         }
         for (ProductStockDO aDo : list) {
             StockDTO stockDTO = ids.stream().filter(item -> item.getId().equals(aDo.getId())).findFirst().get();
-           Integer currentLocked = aDo.getLockedStock()+stockDTO.getNum();
+            Integer currentLocked = aDo.getLockedStock() + stockDTO.getNum();
             aDo.setLockedStock(currentLocked);
-            aDo.setUsableStock(aDo.getActualStock()-currentLocked);
+            aDo.setUsableStock(aDo.getActualStock() - currentLocked);
         }
         updateBatchById(list);
     }
 
     @Override
-    public void updateActualStock(List<StockDTO>  ids,String inventory) {
+    public void updateActualStock(List<StockDTO> ids, String inventory) {
         List<Long> collect = ids.stream().map(StockDTO::getId).collect(Collectors.toList());
-        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId,collect));
-        if (list.size() != ids.size()){
+        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect));
+        if (list.size() != ids.size()) {
             throw new ServiceException("部分库存信息记录未查询到");
         }
         for (ProductStockDO aDo : list) {
             StockDTO stockDTO = ids.stream().filter(item -> item.getId().equals(aDo.getId())).findFirst().get();
-            aDo.setActualStock(aDo.getActualStock()+stockDTO.getNum());
-            if (StrUtil.isNotBlank(inventory) && "inventory".equals(inventory)){
+            aDo.setActualStock(aDo.getActualStock() + stockDTO.getNum());
+            if (StrUtil.isNotBlank(inventory) && "inventory".equals(inventory)) {
                 aDo.setActualStock(stockDTO.getNum());
             }
-            aDo.setUsableStock(aDo.getActualStock()-aDo.getLockedStock());
+            aDo.setUsableStock(aDo.getActualStock() - aDo.getLockedStock());
         }
         updateBatchById(list);
     }
@@ -282,13 +295,13 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     @Override
     public void updateTransitStock(List<StockDTO> ids) {
         List<Long> collect = ids.stream().map(StockDTO::getId).collect(Collectors.toList());
-        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId,collect));
-        if (list.size() != ids.size()){
+        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect));
+        if (list.size() != ids.size()) {
             throw new ServiceException("部分库存信息记录未查询到");
         }
         for (ProductStockDO aDo : list) {
             StockDTO stockDTO = ids.stream().filter(item -> item.getId().equals(aDo.getId())).findFirst().get();
-            aDo.setTransitStock(aDo.getTransitStock()+stockDTO.getNum());
+            aDo.setTransitStock(aDo.getTransitStock() + stockDTO.getNum());
         }
         updateBatchById(list);
     }

+ 1 - 12
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java

@@ -427,18 +427,6 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         LambdaQueryWrapper<GoodsDO> wrapper = new LambdaQueryWrapper<GoodsDO>().eq(GoodsDO::getMarketEnable, true)
                 .eq(ObjectUtil.isNotNull(AdminUserContext.getCompanyId()),GoodsDO::getCompanyId,AdminUserContext.getCompanyId());
 
-        if (StrUtil.isNotBlank(orderType)) {
-            switch (orderType) {
-                case "TO_B":
-                    wrapper.eq(GoodsDO::getHireOrSail, "sail");
-                    break;
-                case "TO_C":
-                    wrapper.eq(GoodsDO::getHireOrSail, "hire");
-                    break;
-                default:
-                    break;
-            }
-        }
         List<GoodsDO> list = goodsMapper.selectList(wrapper);
         List<Long> goodsId = list.stream().map(GoodsDO::getId).collect(Collectors.toList());
         if (CollUtil.isEmpty(list)) {
@@ -447,6 +435,7 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         Page<ProductStockDO> page = new Page<>(queryParam.getPageNo(), queryParam.getPageSize());
         Page<ProductStockDO> page1 = productStockManager.page(page, new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ObjectUtil.isNotNull(warehouseId), ProductStockDO::getWarehouseId, warehouseId)
+                .eq(StrUtil.isNotBlank(orderType), ProductStockDO::getHireOrSail, orderType)
                 .eq(ObjectUtil.isNotNull(AdminUserContext.getCompanyId()),ProductStockDO::getCompanyId,AdminUserContext.getCompanyId())
                 .in(CollUtil.isNotEmpty(warehouseIds), ProductStockDO::getWarehouseId, warehouseIds)
                 .in(ProductStockDO::getGoodsId, goodsId)

+ 134 - 70
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -1,29 +1,32 @@
 package com.hys.app.service.kuaidiniao;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.alipay.api.domain.UserDTO;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.converter.erp.OrderConverter;
 import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.BeanUtils;
 import com.hys.app.framework.util.ScriptUtil;
 import com.hys.app.mapper.erp.KdnMapper;
+import com.hys.app.mapper.erp.WarehouseEntryMapper;
 import com.hys.app.mapper.goods.ProductMapper;
 import com.hys.app.model.erp.dos.*;
-import com.hys.app.model.erp.enums.OrderTypeEnum;
-import com.hys.app.model.erp.enums.SaleOrderSendStatusEnum;
-import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
-import com.hys.app.service.erp.ItemSnCodeManager;
-import com.hys.app.service.erp.OrderManager;
-import com.hys.app.service.erp.OrderSendManager;
+import com.hys.app.model.erp.dto.StockDTO;
+import com.hys.app.model.erp.enums.*;
+import com.hys.app.service.erp.*;
 import com.hys.app.service.kuaidiniao.entity.*;
+import lombok.AllArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,9 +34,12 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.net.URLEncoder;
+import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 @Service
 public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
@@ -73,33 +79,31 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
      */
     @Value("${kuaidianiao.kuaidi.apiUrl}")
     private String kuaiDiUrl;
-
     @Autowired
     private OrderSendManager orderSendManager;
-
     @Autowired
     private OrderManager orderManager;
-
     @Autowired
     private OrderConverter converter;
-
     @Autowired
-    private ItemSnCodeManager itemSnCodeManager;
-
+    private KdnMapper kdnMapper;
     @Autowired
-    private ProductMapper productMapper;
-
+    private WarehouseEntryMapper warehouseEntryMapper;
     @Autowired
-    private KdnMapper kdnMapper;
-
-
+    private OrderSendItemManager orderSendItemManager;
+    @Autowired
+    private  ProductStockManager productStockManager;
+    @Autowired
+    private LockedStockDetailManager lockedStockDetailManager;
     private static final Logger log = LoggerFactory.getLogger(ScriptUtil.class);
 
 
     @Override
     public String kdShip(PreOrderModelDTO preOrderModel, Long orderId, AddressDTO addressDTO) {
+        preOrderModel.setOrderCode(IdUtil.fastUUID());
         fillParam(preOrderModel);
-        String kdnCode = sendUrl(JSONUtil.toJsonStr(preOrderModel));
+        PreOrderModel model = BeanUtil.copyProperties(preOrderModel, PreOrderModel.class);
+        String kdnCode = sendUrl(JSONUtil.toJsonStr(model));
         if (StrUtil.isNotEmpty(kdnCode)) {
             //如果快递鸟下单成功保存 快递信息
             OrderSendDO aDo = orderSendManager.getById(orderId);
@@ -116,14 +120,21 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
 
     @Override
     public void createStore(CreateStoreModel createStoreModel, String constants) {
+        if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", createStoreModel.getStoreCode())){
+            throw new ServiceException("门店编码和统一社会信用代码不能包含中文和特殊符号");
+        }
+        if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", createStoreModel.getCreditCode())){
+            throw new ServiceException("门店编码和统一社会信用代码不能包含中文和特殊符号");
+        }
         Long modelId = createStoreModel.getId();
         createStoreModel.setId(null);
         fillParam(createStoreModel);
+        CreateStoreModel2 createStoreModel2 = BeanUtil.copyProperties(createStoreModel, CreateStoreModel2.class);
         try {
-            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(createStoreModel) + apiKey)), "UTF-8");
+            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(createStoreModel2) + apiKey)), "UTF-8");
             System.out.println("创建店铺签名--------------------------------------" + design);
             //拼接参数
-            String param = "interfaceType=" + constants + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(createStoreModel) + "&dataSign=" + design;
+            String param = "interfaceType=" + constants + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(createStoreModel2) + "&dataSign=" + design;
             //发请求
             String res = HttpUtil.post(url, param);
             Map map = JSON.parseObject(res, Map.class);
@@ -146,9 +157,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
 
     @Override
     public Page<CreateStoreModel> getStoreList(BaseQueryParam baseQueryParam) {
-        return kdnMapper.selectPage(new Page<>(baseQueryParam.getPageNo(), baseQueryParam.getPageSize()),
-                new LambdaQueryWrapper<CreateStoreModel>()
-                        .eq(ObjectUtil.isNotNull(AdminUserContext.getCompanyId()),CreateStoreModel::getCompanyId,AdminUserContext.getCompanyId()));
+        return kdnMapper.selectPage(new Page<>(baseQueryParam.getPageNo(), baseQueryParam.getPageSize()), new LambdaQueryWrapper<>());
     }
 
     @Override
@@ -172,16 +181,24 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 switch (statusMap.get("intraCode").toString()) {
                     case "SS":
                         createStoreModel.setSsStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
-                        createStoreModel.setSsReason(statusMap.get("operationFailReason").toString());
+                        if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
+                            createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
+                        }
                     case "DD":
                         createStoreModel.setDdStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
-                        createStoreModel.setDdReason(statusMap.get("operationFailReason").toString());
+                        if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
+                            createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
+                        }
                     case "FN":
                         createStoreModel.setFnStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
-                        createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
+                        if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
+                            createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
+                        }
                     case "MTPS":
                         createStoreModel.setMtStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
-                        createStoreModel.setMtReason(statusMap.get("operationFailReason").toString());
+                        if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
+                            createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
+                        }
                 }
             }
             kdnMapper.updateById(createStoreModel);
@@ -228,50 +245,56 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     }
 
 
+
     /**
      * @param dataJson 业务参数
      * @return 返回JSON
      */
     private String sendUrl(String dataJson) {
+        String design ="";
         try {
-            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(dataJson + apiKey)), "UTF-8");
-            System.out.println("--------------------------------------" + design);
+            design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(dataJson + apiKey)), "UTF-8");
+        }catch (Exception e){
+            throw new ServiceException("签名异常");
+        }
+        System.out.println("--------------------------------------" + design);
+        //拼接参数
+        String param = "interfaceType=" + KdConstants.preOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
+        //发请求
+        String res = HttpUtil.post(url, param);
+        Map map = JSON.parseObject(res, Map.class);
+        //resultCode == 100表示预下单成功,预下单郑工后立马调用下单接口
+        if (ObjectUtil.isNotNull(map.get("resultCode")) && 100 == Integer.valueOf(map.get("resultCode").toString())) {
             //拼接参数
-            String param = "interfaceType=" + KdConstants.preOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
+            String createParam = "interfaceType=" + KdConstants.createOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
             //发请求
-            String res = HttpUtil.post(url, param);
-            Map map = JSON.parseObject(res, Map.class);
-            //resultCode == 100表示预下单成功,预下单郑工后立马调用下单接口
-            if (ObjectUtil.isNotNull(map.get("resultCode")) && 100 == Integer.valueOf(map.get("resultCode").toString())) {
-                //拼接参数
-                String createParam = "interfaceType=" + KdConstants.createOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
-                //发请求
-                String resCreate = HttpUtil.post(url, createParam);
-                Map mapCreate = JSON.parseObject(resCreate, Map.class);
-                //resultCode == 100表示下单成功,预下单成功后立马调用下单接口
-                if (ObjectUtil.isNotNull(mapCreate.get("resultCode")) && 100 == Integer.valueOf(mapCreate.get("resultCode").toString())) {
-                    Map mapData = JSON.parseObject(mapCreate.get("data").toString(), Map.class);
-                    log.info("快递鸟下单成功 单号:--------------------------------" + mapData.get("kdnOrderCode").toString());
-                    return mapData.get("kdnOrderCode").toString();
-                }
-            } else {
-                throw new ServiceException(map.get("reason").toString());
+            String resCreate = HttpUtil.post(url, createParam);
+            Map mapCreate = JSON.parseObject(resCreate, Map.class);
+            //resultCode == 100表示下单成功,预下单成功后立马调用下单接口
+            if (ObjectUtil.isNotNull(mapCreate.get("resultCode")) && 100 == Integer.valueOf(mapCreate.get("resultCode").toString())) {
+                Map mapData = JSON.parseObject(mapCreate.get("data").toString(), Map.class);
+                log.info("快递鸟下单成功 单号:--------------------------------" + mapData.get("kdnOrderCode").toString());
+                return mapData.get("kdnOrderCode").toString();
             }
-        } catch (Exception e) {
-            e.printStackTrace();
-//            return "1234567899";
-            throw new ServiceException("请求快递鸟发货异常,请联系客服");
+        } else {
+            throw new ServiceException(map.get("reason").toString());
         }
         return null;
+
     }
 
-    private void fillParam(PreOrderModel preOrderModel) {
+    private void fillParam(PreOrderModelDTO preOrderModel) {
+        if (preOrderModel.getAppointmentType() == 1 ){
+            if (LocalDateTime.now().plusHours(2).isAfter(preOrderModel.getAppointmentTime())){
+                throw new ServiceException("预约单必须在当前时间完后2小时");
+            }
+        }
         //填充送货人的经纬度
-        LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceCityAreaAddress());
+        LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceName()+preOrderModel.getSender().getCityName()+preOrderModel.getSender().getAreaName()+preOrderModel.getSender().getAddress());
         preOrderModel.getSender().setLongitude(longitudeLatitudeSender.getLongitude());
         preOrderModel.getSender().setLatitude(longitudeLatitudeSender.getLatitude());
         //填充收货人的经纬度
-        LongitudeLatitude longitudeLatitudeReceiver = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceCityAreaAddress());
+        LongitudeLatitude longitudeLatitudeReceiver = GaoDeUtil.getLongitudeLatitude(preOrderModel.getReceiver().getProvinceName()+preOrderModel.getReceiver().getCityName()+preOrderModel.getReceiver().getAreaName()+preOrderModel.getReceiver().getAddress());
         preOrderModel.getReceiver().setLongitude(longitudeLatitudeReceiver.getLongitude());
         preOrderModel.getReceiver().setLatitude(longitudeLatitudeReceiver.getLatitude());
         //获取下单人信息
@@ -306,14 +329,20 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         resReturnBackBase base = new resReturnBackBase();
         base.setKdnOrderCode(map.get("kdnOrderCode").toString());
         //验签
-        OrderSendDO aDo = orderSendManager.getById(Long.valueOf(map.get("orderCode").toString()));
+        OrderSendDO aDo = orderSendManager.getOne(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getKdnOrderCode,map.get("kdnOrderCode").toString()));
+        if (ObjectUtil.isNull(aDo)){
+//            base.setRequestData("验签失败");
+            base.setResultCode(1002);
+            base.setReason("未找到对应的商家订单");
+            return base;
+        }
         OrderDO orderDO = orderManager.getById(aDo.getOrderId());
         //        if (!checkDesign(aDo, returnBackBase.getDataSign())) {
 //            base.setRequestData("验签失败");
 //            base.setResultCode(1002);
 //            return base;
 //        }
-        if (ObjectUtil.isNull(aDo)) {
+        if (ObjectUtil.isNull(aDo) || ObjectUtil.isNull(orderDO)) {
             base.setReason("未找到对应的订单");
             log.error("未找到对应的订单-------------------------------" + map.get("orderCode").toString());
             base.setResultCode(1002);
@@ -345,7 +374,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 break;
             case KdConstants.callBackSignRefuse:
                 aDo.setSignIn(map);
-                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE);
+                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE_NOT);
                 if (OrderTypeEnum.TO_B.equals(orderDO.getType())) {
                     orderDO.setStatus(SaleOrderStatusEnum.ORDER_END);
                 }
@@ -354,10 +383,12 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 }
                 break;
             case KdConstants.callBackCancelStatus:
-                aDo.setCancelOrderKdn(map);
+                //如果推送取消状态,需要重新下单
+                cancelKdnOrder(orderDO,aDo);
                 break;
             case KdConstants.callBackCreateOrderFail:
-                aDo.setCreateOrderFail(map);
+                //如果下单失败更爱订单状态,清空快递鸟单号,让用户可以重新下单
+                cancelKdnOrder(orderDO,aDo);
                 break;
             case KdConstants.callBackFeeStatus:
                 aDo.setOrderFee(map);
@@ -367,23 +398,56 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 base.setReason("内部业务异常,麻烦尽快通知商家,tel:13127911751");
         }
         orderSendManager.updateById(aDo);
+        orderManager.updateById(orderDO);
         return base;
     }
 
-    private Boolean checkDesign(OrderSendDO aDo, String dataSign) {
-        try {
-            PreOrderModel model = new PreOrderModel();
-            converter.copyProperties(model, aDo);
-            model.setGoodsList(aDo.getGoodsList());
-            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(model) + apiKey)), "UTF-8");
-            if (dataSign.equals(design)) {
-                return true;
+    private void cancelKdnOrder(OrderDO orderDO,OrderSendDO orderSendDO){
+        //更爱订单状态
+        orderDO.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
+        //删除有订单生成的入库单不管是不是租赁的
+        warehouseEntryMapper.delete(new LambdaQueryWrapper<WarehouseEntryDO>().eq(WarehouseEntryDO::getOrderId,orderDO.getId()));
+        //还原发货单状态
+        orderSendDO.setStatus(SaleOrderSendStatusEnum.TO_BE_SEND);
+        orderSendDO.setKdnOrderCode("");
+        //更改库存,增加实际库存,增加冻结库存,如果是租赁订单减少在途库存
+        List<OrderSendItemDO> sendItemDOS = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, orderSendDO.getId()));
+        List<ProductStockDO> productStockDOS = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, sendItemDOS.stream().map(OrderSendItemDO::getProductStockId).collect(Collectors.toList())));
+        for (ProductStockDO stockDO : productStockDOS) {
+            OrderSendItemDO orderSendItemDO = sendItemDOS.stream().filter(item -> item.getProductStockId().equals(stockDO.getId())).findFirst().get();
+            stockDO.setActualStock(stockDO.getActualStock() + orderSendItemDO.getNum());
+            stockDO.setLockedStock(stockDO.getLockedStock() + orderSendItemDO.getNum());
+            stockDO.setUsableStock(stockDO.getActualStock() - stockDO.getLockedStock());
+            if (OrderTypeEnum.TO_C.equals(orderDO.getType())) {
+                stockDO.setTransitStock(stockDO.getTransitStock() - orderSendItemDO.getNum());
             }
-            return false;
-        } catch (Exception e) {
-            return false;
         }
+        productStockManager.updateBatchById(productStockDOS);
+        //更改冻结库存明细
+        List<LockedStockDetailDO> list = lockedStockDetailManager.list(new LambdaQueryWrapper<LockedStockDetailDO>()
+                .in(LockedStockDetailDO::getOrderItemId, sendItemDOS.stream().map(OrderSendItemDO::getOrderItemId).collect(Collectors.toList())));
+        for (LockedStockDetailDO detailDO : list) {
+            detailDO.setUnLockedNum(0);
+            detailDO.setUnLockedTime(null);
+        }
+        lockedStockDetailManager.updateBatchById(list);
     }
 
 
+//    private Boolean checkDesign(OrderSendDO aDo, String dataSign) {
+//        try {
+//            PreOrderModel model = new PreOrderModel();
+//            converter.copyProperties(model, aDo);
+//            model.setGoodsList(aDo.getGoodsList());
+//            String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(model) + apiKey)), "UTF-8");
+//            if (dataSign.equals(design)) {
+//                return true;
+//            }
+//            return false;
+//        } catch (Exception e) {
+//            return false;
+//        }
+//    }
+
+
 }

+ 97 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/CreateStoreModel2.java

@@ -0,0 +1,97 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 预下单参数
+ */
+@Data
+@TableName("erp_store_kdn")
+public class CreateStoreModel2 {
+
+    private Long id;
+
+    @ApiModelProperty(value = "1、storeCode平台门店编码(商家自定义门店编码,唯一),个人即时配编码固定传storeCode;2、merchantCode快递鸟门店编码(商家门店编码映射KDN门店编码)个人即时配编码固传merchantCode”;3、平台门店编码和快递鸟门店编码必填一项,且两者只能同时填一项。")
+    @NotBlank
+    private String storeCode;
+
+    @ApiModelProperty(value = "门店名称(自定义且不可重复,不允许出现“测试”、“test”等字眼)")
+    @NotBlank
+    private String storeName;
+
+    @ApiModelProperty(value = "门店物品类型")
+    @NotBlank
+    private String storeGoodsType;
+
+    @ApiModelProperty(value = "省")
+    @NotBlank
+    private String provinceName;
+
+    @ApiModelProperty(value = "市")
+    @NotBlank
+    private String cityName;
+
+    @ApiModelProperty(value = "县")
+    @NotBlank
+    private String areaName;
+
+    @ApiModelProperty(value = "门店详细地址")
+    @NotBlank
+    private String address;
+
+    @ApiModelProperty(value = "坐标类型1:百度地图、 2:高德地图 、3:腾讯地图")
+    private Integer lbsType = 2;
+
+    @ApiModelProperty(value = "经度,精确到小数点后5位")
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度,精确到小数点后5位")
+    private String latitude;
+
+    @ApiModelProperty(value = "门店联系人姓名,存在配送员上门前联系门店场景,如没有找到门店,联系门店联系人进行确认")
+    @NotBlank
+    private String contactName;
+
+    @ApiModelProperty(value = "门店联系人电话(门店联系人手机号和座机号必填一项)")
+    @NotBlank
+    private String mobile;
+
+    @ApiModelProperty(value = "附件类型(有上传附件时,该字段必填)1:URL地址2:Base64(不支持) 3:图片hash值")
+    private Integer attachType = 1;
+
+    @ApiModelProperty(value = "身份证正面图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCardFront;
+
+    @ApiModelProperty(value = "身份证反面图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCardBack;
+
+    @ApiModelProperty(value = "身份证号(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCard;
+
+    @ApiModelProperty(value = "身份证姓名(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String idCardName;
+
+    @ApiModelProperty(value = "营业执照图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String license;
+
+    @ApiModelProperty(value = "社会统一信用代码(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String creditCode;
+
+    @ApiModelProperty(value = "门店照图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String shopPicture;
+
+    @ApiModelProperty(value = "门店拥有人手持身份证、营业执照图片(使用美团、蜂鸟必填)")
+    @NotBlank
+    private String handheldLicencePic;
+}

+ 3 - 3
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/PreOrderModel.java

@@ -41,9 +41,9 @@ public class PreOrderModel {
     private Integer appointmentType;
 
     @ApiModelProperty(value = "预约上门单必填预约上门时间格式:YYYY-MM-DD  hh:mm:ss说明:当前时间+2小时,10分钟间隔向上取整。")
-//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private String appointmentTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime appointmentTime;
 
     @ApiModelProperty(value = "交通方式,默认0:未指定。指定交通方式会产生额外的费用。暂不支持")
     private Integer travelWay = 0;

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

@@ -75,7 +75,7 @@ public interface AdminUserManager {
      * @param password 管理员密码
      * @return
      */
-    AdminLoginVO login(String name, String password);
+    AdminLoginVO login(String name, String password,String companyName);
 
     /**
      * 通过refreshToken重新获取accessToken

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

@@ -20,6 +20,7 @@ import com.hys.app.framework.security.model.Admin;
 import com.hys.app.framework.security.model.Role;
 import com.hys.app.framework.util.*;
 import com.hys.app.mapper.system.AdminUserMapper;
+import com.hys.app.model.erp.entity.Company;
 import com.hys.app.model.errorcode.SystemErrorCode;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.LogLevel;
@@ -30,6 +31,7 @@ import com.hys.app.model.system.dos.SystemLogs;
 import com.hys.app.model.system.dto.AdminUserDTO;
 import com.hys.app.model.system.vo.AdminLoginVO;
 import com.hys.app.model.system.vo.AdminUserVO;
+import com.hys.app.service.erp.CompanyManager;
 import com.hys.app.service.system.AdminUserManager;
 import com.hys.app.service.system.DeptManager;
 import com.hys.app.service.system.RoleManager;
@@ -40,6 +42,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -65,7 +68,8 @@ public class AdminUserManagerImpl implements AdminUserManager {
     private TokenManager tokenManager;
     @Autowired
     private SystemLogsManager systemLogsManager;
-
+    @Autowired
+    private CompanyManager companyManager;
     private List<Long> ids = new ArrayList<>();
 
     /**
@@ -106,15 +110,18 @@ public class AdminUserManagerImpl implements AdminUserManager {
             throw new ServiceException(SystemErrorCode.E915.code(), "管理员名称重复");
         }
         //不是超级管理员的情况下再校验权限是否存在
-        if (!adminUserVO.getFounder().equals(1)) {
-            RoleDO roleDO = roleManager.getModel(adminUserVO.getRoleId());
-            if (roleDO == null) {
-                throw new ResourceNotFoundException("所属权限不存在");
-            }
-        }
+//        if (!adminUserVO.getFounder().equals(1)) {
+//            RoleDO roleDO = roleManager.getModel(adminUserVO.getRoleId());
+//            if (roleDO == null) {
+//                throw new ResourceNotFoundException("所属权限不存在");
+//            }
+//        }
+        Company company = companyManager.getById(AdminUserContext.getCompanyId());
         //管理员信息入库
         String password = adminUserVO.getPassword();
         AdminUser adminUser = new AdminUser();
+        adminUser.setCompanyId(company.getId());
+        adminUser.setRoleId(company.getRoleId());
         BeanUtil.copyProperties(adminUserVO, adminUser);
         adminUser.setPassword(StringUtil.md5(password + adminUser.getUsername().toLowerCase()));
         adminUser.setDateLine(DateUtil.getDateline());
@@ -150,14 +157,14 @@ public class AdminUserManagerImpl implements AdminUserManager {
                 throw new ServiceException(SystemErrorCode.E916.code(), "必须保留一个超级管理员");
             }
         }
-        if (!adminUserVO.getFounder().equals(1)) {
-            RoleDO roleDO = roleManager.getModel(adminUserVO.getRoleId());
-            if (roleDO == null) {
-                throw new ResourceNotFoundException("所属权限不存在");
-            }
-        } else {
-            adminUserVO.setRoleId(0L);
-        }
+//        if (!adminUserVO.getFounder().equals(1)) {
+//            RoleDO roleDO = roleManager.getModel(adminUserVO.getRoleId());
+//            if (roleDO == null) {
+//                throw new ResourceNotFoundException("所属权限不存在");
+//            }
+//        } else {
+//            adminUserVO.setRoleId(0L);
+//        }
         //管理员原密码
         String password = adminUser.getPassword();
         //对管理员是否修改密码进行校验
@@ -172,7 +179,6 @@ public class AdminUserManagerImpl implements AdminUserManager {
         }
         //修改管理员名称
         adminUserVO.setUsername(adminUser.getUsername());
-        adminUserVO.setCompanyId(adminUser.getCompanyId());
         BeanUtil.copyProperties(adminUserVO, adminUser);
         adminUserMapper.updateById(adminUser);
         return adminUser;
@@ -192,6 +198,9 @@ public class AdminUserManagerImpl implements AdminUserManager {
         if (adminUser == null) {
             throw new ResourceNotFoundException("当前管理员不存在");
         }
+        if ("admin".equals(adminUser.getUsername())){
+            throw new ResourceNotFoundException("管理员不能删除");
+        }
         //校验要删除的管理员是否是最后一个超级管理员
         QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
         wrapper.eq("founder", 1).eq("user_state", 0);
@@ -238,10 +247,17 @@ public class AdminUserManagerImpl implements AdminUserManager {
      * @return
      */
     @Override
-    public AdminLoginVO login(String name, String password) {
+    public AdminLoginVO login(String name, String password,String companyName) {
+        Company company = companyManager.getOne(new LambdaQueryWrapper<Company>().eq(Company::getName,companyName));
+        if (ObjectUtil.isNull(company)){
+            throw new ServiceException("该公司未注册");
+        }
+        if (LocalDateTime.now().isAfter(company.getEndUseTime())){
+            throw new ServiceException("该公司使用已到期,请续费");
+        }
         //查询管理员信息
         QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
-        wrapper.eq("username", name).eq("password", StringUtil.md5(password + name.toLowerCase())).eq("user_state", 0);
+        wrapper.eq("username", name).eq("password", StringUtil.md5(password + name.toLowerCase())).eq("user_state", 0).eq("company_id",company.getId());
         AdminUser adminUser = adminUserMapper.selectOne(wrapper);
         //管理员信息不存在
         if (adminUser == null || !StringUtil.equals(adminUser.getUsername(), name)) {
@@ -251,6 +267,7 @@ public class AdminUserManagerImpl implements AdminUserManager {
         AdminLoginVO adminLoginVO = new AdminLoginVO();
         adminLoginVO.setUid(adminUser.getId());
         adminLoginVO.setUsername(name);
+        adminLoginVO.setCompanyVo(company);
         adminLoginVO.setDepartment(adminUser.getDepartment());
         adminLoginVO.setFace(adminUser.getFace());
         adminLoginVO.setRoleId(adminUser.getRoleId());
@@ -317,6 +334,7 @@ public class AdminUserManagerImpl implements AdminUserManager {
     private Token createToken(AdminUser adminUser) {
         Admin admin = new Admin();
         admin.setUid(adminUser.getId());
+        admin.setCompanyId(adminUser.getCompanyId());
         admin.setUsername(adminUser.getUsername());
 //        admin.setPlatformShopId(platform.getShopId());
 //        admin.setPlatformShopName(platform.getShopName());

+ 51 - 0
module-erp/src/main/java/com/hys/app/util/AliEmailUtil.java

@@ -0,0 +1,51 @@
+package com.hys.app.util;
+
+import com.aliyun.auth.credentials.Credential;
+import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
+import com.aliyun.sdk.service.dm20151123.AsyncClient;
+import com.aliyun.sdk.service.dm20151123.models.SingleSendMailRequest;
+import com.aliyun.sdk.service.dm20151123.models.SingleSendMailResponse;
+import com.google.gson.Gson;
+import darabonba.core.client.ClientOverrideConfiguration;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+
+public class AliEmailUtil {
+    private static String  accountName ="136560217@qq.com";
+
+    public static void sendEmail() {
+        try {
+            StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
+                    .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
+                    .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
+                    .build());
+
+            AsyncClient client = AsyncClient.builder()
+                    .region("cn-hangzhou")
+                    .credentialsProvider(provider)
+                    .overrideConfiguration(ClientOverrideConfiguration.create().setEndpointOverride("dm.aliyuncs.com"))
+                    .build();
+            SingleSendMailRequest singleSendMailRequest = SingleSendMailRequest
+                    .builder()
+                    .accountName(accountName)
+                    .tagName("test")
+                    .replyToAddress(false)
+                    .toAddress("136560217@qq.com")
+                    .subject("测试邮件")
+                    .htmlBody("测试邮件")
+                    .addressType(1)
+                    .addressType(1)
+                    .build();
+
+            CompletableFuture<SingleSendMailResponse> response = client.singleSendMail(singleSendMailRequest);
+            SingleSendMailResponse resp = response.get();
+            System.out.println(new Gson().toJson(resp));
+            client.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
+
+

+ 62 - 0
module-erp/src/main/java/com/hys/app/util/AliSmsUtil.java

@@ -0,0 +1,62 @@
+package com.hys.app.util;
+
+
+import cn.hutool.json.JSONUtil;
+import com.aliyun.tea.TeaException;
+
+import java.util.Map;
+
+public class AliSmsUtil {
+    private static String signName = "上海瑞赢旷视科技";
+    private static String access_id = "LTAI5t9RbXSuirMa8AkvHxQf";
+    private static String access_secret = "VCmMZvMKrcN2tBHXdenyEKJIoKbwQf";
+
+
+    /**
+     * <b>description</b> :
+     * <p>使用AK&amp;SK初始化账号Client</p>
+     * @return Client
+     *
+     * @throws Exception
+     */
+    public static com.aliyun.dysmsapi20170525.Client createClient() throws Exception {
+        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
+                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+                .setAccessKeyId(access_id)
+                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+                .setAccessKeySecret(access_secret);
+        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
+        config.endpoint = "dysmsapi.aliyuncs.com";
+        return new com.aliyun.dysmsapi20170525.Client(config);
+    }
+
+    public static void sendSms(String rePhone, String templateCode, Map<String ,String> map) throws Exception {
+        com.aliyun.dysmsapi20170525.Client client = AliSmsUtil.createClient();
+        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
+                .setPhoneNumbers(rePhone)
+                .setTemplateCode(templateCode)
+                .setTemplateParam(JSONUtil.toJsonStr(map))
+                .setSignName(signName);
+        try {
+            // 复制代码运行请自行打印 API 的返回值
+            client.sendSmsWithOptions(sendSmsRequest, new com.aliyun.teautil.models.RuntimeOptions());
+        } catch (TeaException error) {
+            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+            // 错误 message
+            System.out.println(error.getMessage());
+            // 诊断地址
+            System.out.println(error.getData().get("Recommend"));
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+            // 错误 message
+            System.out.println(error.getMessage());
+            // 诊断地址
+            System.out.println(error.getData().get("Recommend"));
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        }
+    }
+}

+ 99 - 0
module-erp/src/main/java/com/hys/app/util/MailSmtpUtil.java

@@ -0,0 +1,99 @@
+package com.hys.app.util;
+
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.util.Date;
+import java.util.Properties;
+import java.util.UUID;
+
+public class MailSmtpUtil {
+
+    private static String user="service@mail.raycos.com.cn";
+    private static String pwd="RayCos20230801";
+
+
+    /**
+     *
+     * @param toMail
+     * @param subject
+     * @param content
+     */
+
+    public static void sendEmail(String toMail,String subject,Object content) {
+        // 配置发送邮件的环境属性
+        final Properties props = new Properties();
+
+        // 表示SMTP发送邮件,需要进行身份验证
+        props.put("mail.smtp.auth", "true");
+        props.put("mail.smtp.host", "smtpdm.aliyun.com");
+        //设置端口:
+        props.put("mail.smtp.port", "80");//或"25", 如果使用ssl,则去掉使用80或25端口的配置,进行如下配置:
+        //加密方式:
+        //props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
+        //props.put("mail.smtp.socketFactory.port", "465");
+        //props.put("mail.smtp.port", "465");
+
+        props.put("mail.smtp.from", user);    //mailfrom 参数
+        props.put("mail.user", user);// 发件人的账号(在控制台创建的发信地址)
+        props.put("mail.password", pwd);// 发信地址的smtp密码(在控制台选择发信地址进行设置)
+        //props.setProperty("mail.smtp.ssl.enable", "true");  //请配合465端口使用
+        System.setProperty("mail.mime.splitlongparameters", "false");//用于解决附件名过长导致的显示异常
+        //props.put("mail.smtp.connectiontimeout", 1000);
+
+        // 构建授权信息,用于进行SMTP进行身份验证
+        Authenticator authenticator = new Authenticator() {
+            @Override
+            protected PasswordAuthentication getPasswordAuthentication() {
+                // 用户名、密码
+                String userName = props.getProperty("mail.user");
+                String password = props.getProperty("mail.password");
+                return new PasswordAuthentication(userName, password);
+            }
+        };
+        //使用环境属性和授权信息,创建邮件会话
+        Session mailSession = Session.getInstance(props, authenticator);
+        //mailSession.setDebug(true);//开启debug模式
+        final String messageIDValue = genMessageID(props.getProperty("mail.user"));
+        //创建邮件消息
+        MimeMessage message = new MimeMessage(mailSession) {
+            @Override
+            protected void updateMessageID() throws MessagingException {
+                //设置自定义Message-ID值
+                setHeader("Message-ID", messageIDValue);//创建Message-ID
+            }
+        };
+
+        try {
+            // 设置发件人邮件地址和名称。填写控制台配置的发信地址。和上面的mail.user保持一致。名称用户可以自定义填写。
+            InternetAddress from = new InternetAddress(user, "上海瑞赢旷视科技");//from 参数,可实现代发,注意:代发容易被收信方拒信或进入垃圾箱。
+            message.setFrom(from);
+            // 设置收件人邮件地址
+            InternetAddress to = new InternetAddress(toMail);
+            message.setRecipient(MimeMessage.RecipientType.TO, to);
+            message.setSentDate(new Date()); //设置时间
+            //设置邮件标题
+            message.setSubject(subject);
+            message.setContent("测试<br> 内容", "text/html;charset=UTF-8");//html超文本;// "text/plain;charset=UTF-8" //纯文本。
+            // 发送邮件
+            Transport.send(message);
+        } catch (Exception e) {
+            String err = e.getMessage();
+            // 在这里处理message内容, 格式是固定的
+            System.out.println(err);
+        }
+    }
+    protected static String genMessageID(String mailFrom) {
+        // message-id 用于唯一地标识每一封邮件,其格式需要遵循RFC 5322标准,通常如 <uniquestring@example.com>,其中uniquestring是邮件服务器生成的唯一标识,可能包含时间戳、随机数等信息。
+        String[] mailInfo = mailFrom.split("@");
+        String domain = mailFrom;
+        int index = mailInfo.length - 1;
+        if (index >= 0) {
+            domain = mailInfo[index];
+        }
+        UUID uuid = UUID.randomUUID();
+        StringBuffer messageId = new StringBuffer();
+        messageId.append('<').append(uuid.toString()).append('@').append(domain).append('>');
+        return messageId.toString();
+    }
+}

+ 19 - 1
server/src/main/resources/application.yml

@@ -1,5 +1,5 @@
 server:
-  port: 9999
+  port: 9998
 spring:
   application:
     name: erp-server
@@ -59,5 +59,23 @@ kuaidianiao:
     key: 9dc8ced0-8079-4b01-9c16-32a6e8b46677
     apiUrl: https://api.kdniao.com/api/dist
 
+alipay:
+  #APPID
+  appId: 2021004150628230
+  #沙箱应用-->应用信息-->开发信息-->接口加签方式-->系统默认密钥-->公钥模式-->查看-->应用私钥
+  appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCAg9tPZe2hPnUSIqF+hb9CP+D5pZ+dm1kbFsHrEEP1Vj7rDotaJz1clyjuewvUzXUbBVRUk2zViseze9msoZbz58W9ormvUSivczBx/+rfIAV6CPdNIXa+UpSZLnaumIAoT4CtiTZwnm5QzIhJZdlM7ZVf70ye61/9uWQV74x+d6TsQxQ6iUlyeq6BfSO0LI/7S3iTEUVoJM4szo4bSe44COyExMG2csqdSVwEgmiJVUTocXbOElAsogqHMfl7hj0A/wXBKH9922N1OXTxlhhuEV5oHPUXBmCs+yEfFgh/KkKez584rOoch+6scZLAlqgr5uzl0Wh6yIOsq/9i72EdAgMBAAECggEAVDcTxenjWGCXUvUCouh+Nqmpga649AzSzV+SX7le7yw/OsVjKAbCvSQJHI3haOfiL3zEkE+zaBPzXXhxYiDZzKc6+1PhHjOu15pCStILVX+kVx39ALxHFd0Dp4W9HBivErtWdWGPHSmU3LnLLV3ikfi2hBFKQnG3i4qrPXymslBDN85HWZhdSctUXxNRCbwnee8XOffYt+NNHAwI6pveOW5HnXOaUzjRcoepYXOBBkDIrwx/5W1hgaUv4jIu5v4LG35C2IEy1d+6fHvvjQhK2y29eEpJ889n9Gb1lrvsuqHS/knDiFq66GaTSzIl/qJjMpYLEcNcefpIqB/bmw9dgQKBgQC1yBvpaprNDcE1i5hZANvdjryIkXKwfMi6XO5IXxHLqxNYXQV1KSLABA8PzBtCWYFnlGXiNh+06QxPnCRRrB6YgVQYi4d7rjHVaKegHkPHHR3/hMm8CXQwKpjLutEMu3QVprtZl4wPT/VU6ggnhxUpi36YfD5SwOrzRLVVTmqPkQKBgQC0/E0JT/N/8fvmjnwOir/o2/EVgaegWqakquY3OO4bS1mMygJ394GuLvkDgHEmGtWNSQvQMRnxgFK1L/lGO+OSFQF6WU+jvNupIm6XASBpvErWj3GWLL0lSroda4JNHdaX+tQiCqv57rhfBXbS7dKyLuc3kwlZYxTCSPy7+DLKzQKBgQCGgDC+zYUKkdHSd55axHrp/RHcjpnoofu3gMlCPS2in8sph3JhVPWEU7x9OM02k5le9XtJHDjrl7/nK6Xn1E2zE4YQvzSYu7PdrpjQrXQC4LVweWT2v5v7g5kYrPq+y/hBiON4j9wu/D+O+7ba4GU1HySlWNCYVGvDYaQ2IVZRMQKBgAasu2aZhUB1uzWQkbCzm0pKOkTxyC3YygaOqvjkZ5uoFsBjft3Pyf+TiemAJiwilzejtwTRmsRWWDaIc2gMs2Li1XAetRozz+IX+/4js39Sy2vIVIcWVU93xw9otKCFdjGatZIf1KHeFPykJfK3hKq/ohVhndmnFs/ngzKnf7ANAoGAJ6obEOg3StqXvKATsXNClHYbqSEi73rMSUhvfj5StxfXiMwta99zq5R5nLXWXI6DqCsVstIugqNbDsWQmffzHl+MSUnBWnkZYl5EzBhoz6w0Q/16Gn20dqvLCdkVADnHowzVnT8tWCif6kcD5NG89kwCkdUN7GESc/Y1+9t+OWI=
+  #沙箱应用-->应用信息-->开发信息-->接口加签方式-->系统默认密钥-->公钥模式-->查看-->支付宝公钥
+  alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjbDKtCtW9OHHGfOfbDV0Jn5cVSjTZglJpbRqmVLnWs1U51QQuOoB1ilriqWJDpmd0YApslxw13eGCAgdIuSwo2fBJiDdG8fLYzHuopQVNxIENK1WNL8ispnBuo8z+HrwheR2sTfFPXxEqTYyMQdtkbNu1PJ9GJD1EuJRXlvCkieFFlNklulzCCmOtzR2gFRoDaccTqBddbI8E4fpTAK9vDkrinRAbQsoWs6vdfth0qfMZFyvQFQtSRiX8JPfsMVgNsqOErPu0HqFrKPvhf3ZLJylRkEiY5+AzRO91OxsmhmQcNsdz+fpFCz2hJ5igVhssG0hHWn3o6cH5nqw4E7MwIDAQAB
+  #回调地址
+  notifyUrl: http://529920wmvp80.vicp.fun:52722/admin/erp/pay/aliReturnCall
+  #网关地址
+  serverUrl: https://openapi.alipay.com/gateway.do
+  #数据格式,推荐:json
+  format: json
+  #编码格式 推荐:utf-8
+  charset: UTF-8
+  #签名方式,签名算法,推荐:RSA2
+  signType: RSA2
+
 
 

+ 0 - 1
sql/clearTable.sql

@@ -10,7 +10,6 @@ truncate erp_warehouse;                     -- 仓库
 truncate erp_warehouse_area;                -- 库位
 -- truncate erp_warehouse_area_type;           -- 库位类型
 
-
 truncate erp_order;                         -- 订单
 truncate erp_order_item;                    -- 订单明细
 truncate erp_order_return;                  -- 退货