lym 1 тиждень тому
батько
коміт
e9e343666b
100 змінених файлів з 6170 додано та 0 видалено
  1. 23 0
      forest-portal/pom.xml
  2. 26 0
      forest-portal/portal-common/pom.xml
  3. 63 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/client/MemberFeign.java
  4. 22 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/CmsPrefrenceAreaProductRelationInput.java
  5. 26 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/CmsSubjectProductRelationInput.java
  6. 79 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsIntegrationConsumeSetting.java
  7. 331 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMember.java
  8. 173 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberLevel.java
  9. 99 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberLoginLog.java
  10. 51 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberMemberTagRelation.java
  11. 201 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberPlatform.java
  12. 51 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberProductCategoryRelation.java
  13. 137 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberReceiveAddress.java
  14. 104 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberRuleSetting.java
  15. 207 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberStatisticsInfo.java
  16. 67 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberTag.java
  17. 78 0
      forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberTask.java
  18. 165 0
      forest-portal/portal-server/pom.xml
  19. 17 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/ForestPortalApplication.java
  20. 26 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/component/CancelOrderReceiver.java
  21. 35 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/component/CancelOrderSender.java
  22. 29 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/component/OrderTimeOutCancelTask.java
  23. 34 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/GlobalCorsConfig.java
  24. 45 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/JacksonConfig.java
  25. 31 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/MallSecurityConfig.java
  26. 15 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/MyBatisConfig.java
  27. 79 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/RabbitMqConfig.java
  28. 28 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/SmsConfiguration.java
  29. 12 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/SpringTaskConfig.java
  30. 83 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/Swagger2Config.java
  31. 42 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxMpConfiguration.java
  32. 42 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxMpProperties.java
  33. 48 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxPayConfiguration.java
  34. 97 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxPayProperties.java
  35. 25 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/exception/GlobalExceptionHandler.java
  36. 38 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/redis/RedissonConfig.java
  37. 13 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/redis/RedissonProperties.java
  38. 185 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/CouponController.java
  39. 36 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/FileUploadController.java
  40. 116 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/HomeController.java
  41. 73 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/MemberAttentionController.java
  42. 86 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/MemberProductCollectionController.java
  43. 67 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/MemberReadHistoryController.java
  44. 90 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmePreItemController.java
  45. 119 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmsCartItemController.java
  46. 124 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmsPortalOrderController.java
  47. 35 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmsPortalOrderReturnApplyController.java
  48. 37 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PmsBasePositiontController.java
  49. 145 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PmsPortalProductController.java
  50. 54 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PortalBrandController.java
  51. 73 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PortalProductPublishController.java
  52. 36 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/SubjectController.java
  53. 72 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsCompanyInfoController.java
  54. 147 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsMemberController.java
  55. 70 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsMemberCouponController.java
  56. 84 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsMemberReceiveAddressController.java
  57. 232 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/WechatH5Controller.java
  58. 229 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/WechatH5PayController.java
  59. 43 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/HomeDao.java
  60. 9 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/OmsOrderDao.java
  61. 14 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/OmsPreItemDao.java
  62. 18 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsMemberPriceDao.java
  63. 18 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductAttributeValueDao.java
  64. 16 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductDao.java
  65. 17 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductFullReductionDao.java
  66. 17 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductLadderDao.java
  67. 17 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductVertifyRecordDao.java
  68. 23 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsSkuStockDao.java
  69. 46 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PortalOrderDao.java
  70. 19 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PortalOrderItemDao.java
  71. 25 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PortalProductDao.java
  72. 29 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/SmsCouponHistoryDao.java
  73. 21 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/SubjectDao.java
  74. 41 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/UmsCompanyInfoDao.java
  75. 9 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/UmsMemberDao.java
  76. 13 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/AreaVo.java
  77. 18 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/BrandVO.java
  78. 20 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/CartProduct.java
  79. 61 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/CartPromotionItem.java
  80. 118 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/ConfirmOrderResult.java
  81. 19 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/FlashPromotionProduct.java
  82. 39 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/HomeContentResult.java
  83. 22 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/HomeFlashPromotion.java
  84. 99 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberBrandAttention.java
  85. 61 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberDetails.java
  86. 106 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberProductCollection.java
  87. 108 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberReadHistory.java
  88. 18 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsOrderDetail.java
  89. 13 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsOrderDomain.java
  90. 49 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsOrderReturnApplyParam.java
  91. 15 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsPreItemDto.java
  92. 26 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OrderParam.java
  93. 45 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PmsPortalProductDetail.java
  94. 17 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PmsProductCategoryNode.java
  95. 34 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PmsProductVo.java
  96. 25 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PromotionProduct.java
  97. 38 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/QueueEnum.java
  98. 34 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/SmsCouponHistoryDetail.java
  99. 28 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/UmsCompanyInfoDto.java
  100. 10 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/UmsMemberCert.java

+ 23 - 0
forest-portal/pom.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>forest-mall-cloud</artifactId>
+        <groupId>com.hwrj.cloud</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.hwrj.cloud.portal</groupId>
+    <artifactId>forest-portal</artifactId>
+    <packaging>pom</packaging>
+    <description>前端服务</description>
+    <modules>
+        <module>portal-common</module>
+        <module>portal-mbg</module>
+        <module>portal-server</module>
+    </modules>
+
+
+</project>

+ 26 - 0
forest-portal/portal-common/pom.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>forest-portal</artifactId>
+        <groupId>com.hwrj.cloud.portal</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>portal-common</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>com.hwrj.cloud.common</groupId>
+            <artifactId>forest-common</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>

+ 63 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/client/MemberFeign.java

@@ -0,0 +1,63 @@
+package com.hwrj.cloud.portal.client;
+
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.UmsIntegrationConsumeSetting;
+import com.hwrj.cloud.portal.model.UmsMemberReceiveAddress;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * @author mtcarpenter
+ * @github https://github.com/mtcarpenter/mall-cloud-alibaba
+ * @desc 微信公众号:山间木匠
+ */
+@FeignClient(name = "forest-portal")
+public interface MemberFeign {
+
+    /**
+     * 显示所有收货地址
+     *
+     * @param memberId
+     * @return
+     */
+    @RequestMapping(value = "/member/address/list", method = RequestMethod.GET)
+    CommonResult<List<UmsMemberReceiveAddress>> list(@RequestParam(value = "memberId", required = false) Long memberId);
+
+
+    /**
+     * 获取积分使用规则
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/member/productCollection/integrationConsumeSetting", method = RequestMethod.GET)
+    CommonResult<UmsIntegrationConsumeSetting> integrationConsumeSetting(@RequestParam(value = "id", defaultValue = "1") Long id);
+
+
+    /**
+     * 获取收货地址详情
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/member/address/{id}", method = RequestMethod.GET)
+    CommonResult<UmsMemberReceiveAddress> getItem(@PathVariable Long id);
+
+
+    /**
+     * 根据会员id修改会员积分
+     *
+     * @param id
+     * @param integration
+     * @return
+     */
+    @RequestMapping(value = "/sso/updateIntegration", method = RequestMethod.GET)
+    CommonResult updateIntegration(@RequestParam("id") Long id, @RequestParam("integration") Integer integration);
+
+}

+ 22 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/CmsPrefrenceAreaProductRelationInput.java

@@ -0,0 +1,22 @@
+package com.hwrj.cloud.portal.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author mtcarpenter
+ * @github https://github.com/mtcarpenter/mall-cloud-alibaba
+ * @desc 微信公众号:山间木匠
+ */
+@Setter
+@Getter
+public class CmsPrefrenceAreaProductRelationInput implements Serializable {
+    private static final long serialVersionUID = -8635290899991174718L;
+    private Long id;
+
+    private Long prefrenceAreaId;
+
+    private Long productId;
+}

+ 26 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/CmsSubjectProductRelationInput.java

@@ -0,0 +1,26 @@
+package com.hwrj.cloud.portal.model;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author mtcarpenter
+ * @github https://github.com/mtcarpenter/mall-cloud-alibaba
+ * @desc 微信公众号:山间木匠
+ */
+@Getter
+@Setter
+public class CmsSubjectProductRelationInput implements Serializable {
+
+    private static final long serialVersionUID = -4079484815593829058L;
+    private Long id;
+
+    private Long subjectId;
+
+    private Long productId;
+
+
+}

+ 79 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsIntegrationConsumeSetting.java

@@ -0,0 +1,79 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+public class UmsIntegrationConsumeSetting implements Serializable {
+    private Long id;
+
+    @ApiModelProperty(value = "每一元需要抵扣的积分数量")
+    private Integer deductionPerAmount;
+
+    @ApiModelProperty(value = "每笔订单最高抵用百分比")
+    private Integer maxPercentPerOrder;
+
+    @ApiModelProperty(value = "每次使用积分最小单位100")
+    private Integer useUnit;
+
+    @ApiModelProperty(value = "是否可以和优惠券同用;0->不可以;1->可以")
+    private Integer couponStatus;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getDeductionPerAmount() {
+        return deductionPerAmount;
+    }
+
+    public void setDeductionPerAmount(Integer deductionPerAmount) {
+        this.deductionPerAmount = deductionPerAmount;
+    }
+
+    public Integer getMaxPercentPerOrder() {
+        return maxPercentPerOrder;
+    }
+
+    public void setMaxPercentPerOrder(Integer maxPercentPerOrder) {
+        this.maxPercentPerOrder = maxPercentPerOrder;
+    }
+
+    public Integer getUseUnit() {
+        return useUnit;
+    }
+
+    public void setUseUnit(Integer useUnit) {
+        this.useUnit = useUnit;
+    }
+
+    public Integer getCouponStatus() {
+        return couponStatus;
+    }
+
+    public void setCouponStatus(Integer couponStatus) {
+        this.couponStatus = couponStatus;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", deductionPerAmount=").append(deductionPerAmount);
+        sb.append(", maxPercentPerOrder=").append(maxPercentPerOrder);
+        sb.append(", useUnit=").append(useUnit);
+        sb.append(", couponStatus=").append(couponStatus);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 331 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMember.java

@@ -0,0 +1,331 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class UmsMember implements Serializable {
+    private Long id;
+
+    private Long memberLevelId;
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "密码")
+    private String password;
+
+    @ApiModelProperty(value = "昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "手机号码")
+    private String phone;
+
+    @ApiModelProperty(value = "帐号启用状态:0->禁用;1->启用")
+    private Integer status;
+
+    @ApiModelProperty(value = "注册时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "头像")
+    private String icon;
+
+    @ApiModelProperty(value = "性别:0->未知;1->男;2->女")
+    private Integer gender;
+
+    @ApiModelProperty(value = "生日")
+    private Date birthday;
+
+    @ApiModelProperty(value = "所做城市")
+    private String city;
+
+    @ApiModelProperty(value = "职业")
+    private String job;
+
+    @ApiModelProperty(value = "个性签名")
+    private String personalizedSignature;
+
+    @ApiModelProperty(value = "用户来源")
+    private Integer sourceType;
+
+    @ApiModelProperty(value = "积分")
+    private Integer integration;
+
+    @ApiModelProperty(value = "成长值")
+    private Integer growth;
+
+    @ApiModelProperty(value = "剩余抽奖次数")
+    private Integer luckeyCount;
+
+    @ApiModelProperty(value = "历史积分数量")
+    private Integer historyIntegration;
+
+    @ApiModelProperty(value = "会员类型")
+    private String type;
+
+    @ApiModelProperty(value = "供应商")
+    private String companyInfo;
+
+    @ApiModelProperty(value = "认证方式")
+    private String way;
+
+    @ApiModelProperty(value = "认证类型0、普通1、其他职业2、供应商")
+    private Integer cert;
+
+    @ApiModelProperty(value = "详细地址")
+    private String address;
+
+    @ApiModelProperty(value = "邮箱")
+    private String mail;
+
+    @ApiModelProperty(value = "供应商id")
+    private Long compId;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMemberLevelId() {
+        return memberLevelId;
+    }
+
+    public void setMemberLevelId(Long memberLevelId) {
+        this.memberLevelId = memberLevelId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+
+    public Integer getGender() {
+        return gender;
+    }
+
+    public void setGender(Integer gender) {
+        this.gender = gender;
+    }
+
+    public Date getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(Date birthday) {
+        this.birthday = birthday;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getJob() {
+        return job;
+    }
+
+    public void setJob(String job) {
+        this.job = job;
+    }
+
+    public String getPersonalizedSignature() {
+        return personalizedSignature;
+    }
+
+    public void setPersonalizedSignature(String personalizedSignature) {
+        this.personalizedSignature = personalizedSignature;
+    }
+
+    public Integer getSourceType() {
+        return sourceType;
+    }
+
+    public void setSourceType(Integer sourceType) {
+        this.sourceType = sourceType;
+    }
+
+    public Integer getIntegration() {
+        return integration;
+    }
+
+    public void setIntegration(Integer integration) {
+        this.integration = integration;
+    }
+
+    public Integer getGrowth() {
+        return growth;
+    }
+
+    public void setGrowth(Integer growth) {
+        this.growth = growth;
+    }
+
+    public Integer getLuckeyCount() {
+        return luckeyCount;
+    }
+
+    public void setLuckeyCount(Integer luckeyCount) {
+        this.luckeyCount = luckeyCount;
+    }
+
+    public Integer getHistoryIntegration() {
+        return historyIntegration;
+    }
+
+    public void setHistoryIntegration(Integer historyIntegration) {
+        this.historyIntegration = historyIntegration;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getCompanyInfo() {
+        return companyInfo;
+    }
+
+    public void setCompanyInfo(String companyInfo) {
+        this.companyInfo = companyInfo;
+    }
+
+    public String getWay() {
+        return way;
+    }
+
+    public void setWay(String way) {
+        this.way = way;
+    }
+
+    public Integer getCert() {
+        return cert;
+    }
+
+    public void setCert(Integer cert) {
+        this.cert = cert;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getMail() {
+        return mail;
+    }
+
+    public void setMail(String mail) {
+        this.mail = mail;
+    }
+
+    public Long getCompId() {
+        return compId;
+    }
+
+    public void setCompId(Long compId) {
+        this.compId = compId;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", memberLevelId=").append(memberLevelId);
+        sb.append(", username=").append(username);
+        sb.append(", password=").append(password);
+        sb.append(", nickname=").append(nickname);
+        sb.append(", phone=").append(phone);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", icon=").append(icon);
+        sb.append(", gender=").append(gender);
+        sb.append(", birthday=").append(birthday);
+        sb.append(", city=").append(city);
+        sb.append(", job=").append(job);
+        sb.append(", personalizedSignature=").append(personalizedSignature);
+        sb.append(", sourceType=").append(sourceType);
+        sb.append(", integration=").append(integration);
+        sb.append(", growth=").append(growth);
+        sb.append(", luckeyCount=").append(luckeyCount);
+        sb.append(", historyIntegration=").append(historyIntegration);
+        sb.append(", type=").append(type);
+        sb.append(", companyInfo=").append(companyInfo);
+        sb.append(", way=").append(way);
+        sb.append(", cert=").append(cert);
+        sb.append(", address=").append(address);
+        sb.append(", mail=").append(mail);
+        sb.append(", compId=").append(compId);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 173 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberLevel.java

@@ -0,0 +1,173 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+public class UmsMemberLevel implements Serializable {
+    private Long id;
+
+    private String name;
+
+    private Integer growthPoint;
+
+    @ApiModelProperty(value = "是否为默认等级:0->不是;1->是")
+    private Integer defaultStatus;
+
+    @ApiModelProperty(value = "免运费标准")
+    private BigDecimal freeFreightPoint;
+
+    @ApiModelProperty(value = "每次评价获取的成长值")
+    private Integer commentGrowthPoint;
+
+    @ApiModelProperty(value = "是否有免邮特权")
+    private Integer priviledgeFreeFreight;
+
+    @ApiModelProperty(value = "是否有签到特权")
+    private Integer priviledgeSignIn;
+
+    @ApiModelProperty(value = "是否有评论获奖励特权")
+    private Integer priviledgeComment;
+
+    @ApiModelProperty(value = "是否有专享活动特权")
+    private Integer priviledgePromotion;
+
+    @ApiModelProperty(value = "是否有会员价格特权")
+    private Integer priviledgeMemberPrice;
+
+    @ApiModelProperty(value = "是否有生日特权")
+    private Integer priviledgeBirthday;
+
+    private String note;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getGrowthPoint() {
+        return growthPoint;
+    }
+
+    public void setGrowthPoint(Integer growthPoint) {
+        this.growthPoint = growthPoint;
+    }
+
+    public Integer getDefaultStatus() {
+        return defaultStatus;
+    }
+
+    public void setDefaultStatus(Integer defaultStatus) {
+        this.defaultStatus = defaultStatus;
+    }
+
+    public BigDecimal getFreeFreightPoint() {
+        return freeFreightPoint;
+    }
+
+    public void setFreeFreightPoint(BigDecimal freeFreightPoint) {
+        this.freeFreightPoint = freeFreightPoint;
+    }
+
+    public Integer getCommentGrowthPoint() {
+        return commentGrowthPoint;
+    }
+
+    public void setCommentGrowthPoint(Integer commentGrowthPoint) {
+        this.commentGrowthPoint = commentGrowthPoint;
+    }
+
+    public Integer getPriviledgeFreeFreight() {
+        return priviledgeFreeFreight;
+    }
+
+    public void setPriviledgeFreeFreight(Integer priviledgeFreeFreight) {
+        this.priviledgeFreeFreight = priviledgeFreeFreight;
+    }
+
+    public Integer getPriviledgeSignIn() {
+        return priviledgeSignIn;
+    }
+
+    public void setPriviledgeSignIn(Integer priviledgeSignIn) {
+        this.priviledgeSignIn = priviledgeSignIn;
+    }
+
+    public Integer getPriviledgeComment() {
+        return priviledgeComment;
+    }
+
+    public void setPriviledgeComment(Integer priviledgeComment) {
+        this.priviledgeComment = priviledgeComment;
+    }
+
+    public Integer getPriviledgePromotion() {
+        return priviledgePromotion;
+    }
+
+    public void setPriviledgePromotion(Integer priviledgePromotion) {
+        this.priviledgePromotion = priviledgePromotion;
+    }
+
+    public Integer getPriviledgeMemberPrice() {
+        return priviledgeMemberPrice;
+    }
+
+    public void setPriviledgeMemberPrice(Integer priviledgeMemberPrice) {
+        this.priviledgeMemberPrice = priviledgeMemberPrice;
+    }
+
+    public Integer getPriviledgeBirthday() {
+        return priviledgeBirthday;
+    }
+
+    public void setPriviledgeBirthday(Integer priviledgeBirthday) {
+        this.priviledgeBirthday = priviledgeBirthday;
+    }
+
+    public String getNote() {
+        return note;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", name=").append(name);
+        sb.append(", growthPoint=").append(growthPoint);
+        sb.append(", defaultStatus=").append(defaultStatus);
+        sb.append(", freeFreightPoint=").append(freeFreightPoint);
+        sb.append(", commentGrowthPoint=").append(commentGrowthPoint);
+        sb.append(", priviledgeFreeFreight=").append(priviledgeFreeFreight);
+        sb.append(", priviledgeSignIn=").append(priviledgeSignIn);
+        sb.append(", priviledgeComment=").append(priviledgeComment);
+        sb.append(", priviledgePromotion=").append(priviledgePromotion);
+        sb.append(", priviledgeMemberPrice=").append(priviledgeMemberPrice);
+        sb.append(", priviledgeBirthday=").append(priviledgeBirthday);
+        sb.append(", note=").append(note);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 99 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberLoginLog.java

@@ -0,0 +1,99 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class UmsMemberLoginLog implements Serializable {
+    private Long id;
+
+    private Long memberId;
+
+    private Date createTime;
+
+    private String ip;
+
+    private String city;
+
+    @ApiModelProperty(value = "登录类型:0->PC;1->android;2->ios;3->小程序")
+    private Integer loginType;
+
+    private String province;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public Integer getLoginType() {
+        return loginType;
+    }
+
+    public void setLoginType(Integer loginType) {
+        this.loginType = loginType;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", memberId=").append(memberId);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", ip=").append(ip);
+        sb.append(", city=").append(city);
+        sb.append(", loginType=").append(loginType);
+        sb.append(", province=").append(province);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 51 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberMemberTagRelation.java

@@ -0,0 +1,51 @@
+package com.hwrj.cloud.portal.model;
+
+import java.io.Serializable;
+
+public class UmsMemberMemberTagRelation implements Serializable {
+    private Long id;
+
+    private Long memberId;
+
+    private Long tagId;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public Long getTagId() {
+        return tagId;
+    }
+
+    public void setTagId(Long tagId) {
+        this.tagId = tagId;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", memberId=").append(memberId);
+        sb.append(", tagId=").append(tagId);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 201 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberPlatform.java

@@ -0,0 +1,201 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class UmsMemberPlatform implements Serializable {
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @ApiModelProperty(value = "外联厂商id")
+    private String companyId;
+
+    @ApiModelProperty(value = "用户的唯一标识")
+    private String openid;
+
+    @ApiModelProperty(value = "用户第三方平台昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "用户的性别,值为1时是男性,值为2时是女性,值为0时是未知")
+    private Integer sex;
+
+    @ApiModelProperty(value = "用户个人资料填写的省份")
+    private String province;
+
+    @ApiModelProperty(value = "普通用户个人资料填写的城市")
+    private String city;
+
+    @ApiModelProperty(value = "国家,如中国为CN")
+    private String country;
+
+    @ApiModelProperty(value = "用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。")
+    private String headimgurl;
+
+    @ApiModelProperty(value = "用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)")
+    private String privilege;
+
+    @ApiModelProperty(value = "只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。")
+    private String unionid;
+
+    @ApiModelProperty(value = "1:微信;2:支付宝;3:微博")
+    private Integer platformType;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "1启用0禁用")
+    private Integer status;
+
+    @ApiModelProperty(value = "成员id")
+    private Long memberId;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(String companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getOpenid() {
+        return openid;
+    }
+
+    public void setOpenid(String openid) {
+        this.openid = openid;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public Integer getSex() {
+        return sex;
+    }
+
+    public void setSex(Integer sex) {
+        this.sex = sex;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getCountry() {
+        return country;
+    }
+
+    public void setCountry(String country) {
+        this.country = country;
+    }
+
+    public String getHeadimgurl() {
+        return headimgurl;
+    }
+
+    public void setHeadimgurl(String headimgurl) {
+        this.headimgurl = headimgurl;
+    }
+
+    public String getPrivilege() {
+        return privilege;
+    }
+
+    public void setPrivilege(String privilege) {
+        this.privilege = privilege;
+    }
+
+    public String getUnionid() {
+        return unionid;
+    }
+
+    public void setUnionid(String unionid) {
+        this.unionid = unionid;
+    }
+
+    public Integer getPlatformType() {
+        return platformType;
+    }
+
+    public void setPlatformType(Integer platformType) {
+        this.platformType = platformType;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", companyId=").append(companyId);
+        sb.append(", openid=").append(openid);
+        sb.append(", nickname=").append(nickname);
+        sb.append(", sex=").append(sex);
+        sb.append(", province=").append(province);
+        sb.append(", city=").append(city);
+        sb.append(", country=").append(country);
+        sb.append(", headimgurl=").append(headimgurl);
+        sb.append(", privilege=").append(privilege);
+        sb.append(", unionid=").append(unionid);
+        sb.append(", platformType=").append(platformType);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", status=").append(status);
+        sb.append(", memberId=").append(memberId);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 51 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberProductCategoryRelation.java

@@ -0,0 +1,51 @@
+package com.hwrj.cloud.portal.model;
+
+import java.io.Serializable;
+
+public class UmsMemberProductCategoryRelation implements Serializable {
+    private Long id;
+
+    private Long memberId;
+
+    private Long productCategoryId;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public Long getProductCategoryId() {
+        return productCategoryId;
+    }
+
+    public void setProductCategoryId(Long productCategoryId) {
+        this.productCategoryId = productCategoryId;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", memberId=").append(memberId);
+        sb.append(", productCategoryId=").append(productCategoryId);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 137 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberReceiveAddress.java

@@ -0,0 +1,137 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+public class UmsMemberReceiveAddress implements Serializable {
+    private Long id;
+
+    private Long memberId;
+
+    @ApiModelProperty(value = "收货人名称")
+    private String name;
+
+    private String phoneNumber;
+
+    @ApiModelProperty(value = "是否为默认")
+    private Integer defaultStatus;
+
+    @ApiModelProperty(value = "邮政编码")
+    private String postCode;
+
+    @ApiModelProperty(value = "省份/直辖市")
+    private String province;
+
+    @ApiModelProperty(value = "城市")
+    private String city;
+
+    @ApiModelProperty(value = "区")
+    private String region;
+
+    @ApiModelProperty(value = "详细地址(街道)")
+    private String detailAddress;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public Integer getDefaultStatus() {
+        return defaultStatus;
+    }
+
+    public void setDefaultStatus(Integer defaultStatus) {
+        this.defaultStatus = defaultStatus;
+    }
+
+    public String getPostCode() {
+        return postCode;
+    }
+
+    public void setPostCode(String postCode) {
+        this.postCode = postCode;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getRegion() {
+        return region;
+    }
+
+    public void setRegion(String region) {
+        this.region = region;
+    }
+
+    public String getDetailAddress() {
+        return detailAddress;
+    }
+
+    public void setDetailAddress(String detailAddress) {
+        this.detailAddress = detailAddress;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", memberId=").append(memberId);
+        sb.append(", name=").append(name);
+        sb.append(", phoneNumber=").append(phoneNumber);
+        sb.append(", defaultStatus=").append(defaultStatus);
+        sb.append(", postCode=").append(postCode);
+        sb.append(", province=").append(province);
+        sb.append(", city=").append(city);
+        sb.append(", region=").append(region);
+        sb.append(", detailAddress=").append(detailAddress);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 104 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberRuleSetting.java

@@ -0,0 +1,104 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+public class UmsMemberRuleSetting implements Serializable {
+    private Long id;
+
+    @ApiModelProperty(value = "连续签到天数")
+    private Integer continueSignDay;
+
+    @ApiModelProperty(value = "连续签到赠送数量")
+    private Integer continueSignPoint;
+
+    @ApiModelProperty(value = "每消费多少元获取1个点")
+    private BigDecimal consumePerPoint;
+
+    @ApiModelProperty(value = "最低获取点数的订单金额")
+    private BigDecimal lowOrderAmount;
+
+    @ApiModelProperty(value = "每笔订单最高获取点数")
+    private Integer maxPointPerOrder;
+
+    @ApiModelProperty(value = "类型:0->积分规则;1->成长值规则")
+    private Integer type;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getContinueSignDay() {
+        return continueSignDay;
+    }
+
+    public void setContinueSignDay(Integer continueSignDay) {
+        this.continueSignDay = continueSignDay;
+    }
+
+    public Integer getContinueSignPoint() {
+        return continueSignPoint;
+    }
+
+    public void setContinueSignPoint(Integer continueSignPoint) {
+        this.continueSignPoint = continueSignPoint;
+    }
+
+    public BigDecimal getConsumePerPoint() {
+        return consumePerPoint;
+    }
+
+    public void setConsumePerPoint(BigDecimal consumePerPoint) {
+        this.consumePerPoint = consumePerPoint;
+    }
+
+    public BigDecimal getLowOrderAmount() {
+        return lowOrderAmount;
+    }
+
+    public void setLowOrderAmount(BigDecimal lowOrderAmount) {
+        this.lowOrderAmount = lowOrderAmount;
+    }
+
+    public Integer getMaxPointPerOrder() {
+        return maxPointPerOrder;
+    }
+
+    public void setMaxPointPerOrder(Integer maxPointPerOrder) {
+        this.maxPointPerOrder = maxPointPerOrder;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", continueSignDay=").append(continueSignDay);
+        sb.append(", continueSignPoint=").append(continueSignPoint);
+        sb.append(", consumePerPoint=").append(consumePerPoint);
+        sb.append(", lowOrderAmount=").append(lowOrderAmount);
+        sb.append(", maxPointPerOrder=").append(maxPointPerOrder);
+        sb.append(", type=").append(type);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 207 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberStatisticsInfo.java

@@ -0,0 +1,207 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class UmsMemberStatisticsInfo implements Serializable {
+    private Long id;
+
+    private Long memberId;
+
+    @ApiModelProperty(value = "累计消费金额")
+    private BigDecimal consumeAmount;
+
+    @ApiModelProperty(value = "订单数量")
+    private Integer orderCount;
+
+    @ApiModelProperty(value = "优惠券数量")
+    private Integer couponCount;
+
+    @ApiModelProperty(value = "评价数")
+    private Integer commentCount;
+
+    @ApiModelProperty(value = "退货数量")
+    private Integer returnOrderCount;
+
+    @ApiModelProperty(value = "登录次数")
+    private Integer loginCount;
+
+    @ApiModelProperty(value = "关注数量")
+    private Integer attendCount;
+
+    @ApiModelProperty(value = "粉丝数量")
+    private Integer fansCount;
+
+    private Integer collectProductCount;
+
+    private Integer collectSubjectCount;
+
+    private Integer collectTopicCount;
+
+    private Integer collectCommentCount;
+
+    private Integer inviteFriendCount;
+
+    @ApiModelProperty(value = "最后一次下订单时间")
+    private Date recentOrderTime;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public BigDecimal getConsumeAmount() {
+        return consumeAmount;
+    }
+
+    public void setConsumeAmount(BigDecimal consumeAmount) {
+        this.consumeAmount = consumeAmount;
+    }
+
+    public Integer getOrderCount() {
+        return orderCount;
+    }
+
+    public void setOrderCount(Integer orderCount) {
+        this.orderCount = orderCount;
+    }
+
+    public Integer getCouponCount() {
+        return couponCount;
+    }
+
+    public void setCouponCount(Integer couponCount) {
+        this.couponCount = couponCount;
+    }
+
+    public Integer getCommentCount() {
+        return commentCount;
+    }
+
+    public void setCommentCount(Integer commentCount) {
+        this.commentCount = commentCount;
+    }
+
+    public Integer getReturnOrderCount() {
+        return returnOrderCount;
+    }
+
+    public void setReturnOrderCount(Integer returnOrderCount) {
+        this.returnOrderCount = returnOrderCount;
+    }
+
+    public Integer getLoginCount() {
+        return loginCount;
+    }
+
+    public void setLoginCount(Integer loginCount) {
+        this.loginCount = loginCount;
+    }
+
+    public Integer getAttendCount() {
+        return attendCount;
+    }
+
+    public void setAttendCount(Integer attendCount) {
+        this.attendCount = attendCount;
+    }
+
+    public Integer getFansCount() {
+        return fansCount;
+    }
+
+    public void setFansCount(Integer fansCount) {
+        this.fansCount = fansCount;
+    }
+
+    public Integer getCollectProductCount() {
+        return collectProductCount;
+    }
+
+    public void setCollectProductCount(Integer collectProductCount) {
+        this.collectProductCount = collectProductCount;
+    }
+
+    public Integer getCollectSubjectCount() {
+        return collectSubjectCount;
+    }
+
+    public void setCollectSubjectCount(Integer collectSubjectCount) {
+        this.collectSubjectCount = collectSubjectCount;
+    }
+
+    public Integer getCollectTopicCount() {
+        return collectTopicCount;
+    }
+
+    public void setCollectTopicCount(Integer collectTopicCount) {
+        this.collectTopicCount = collectTopicCount;
+    }
+
+    public Integer getCollectCommentCount() {
+        return collectCommentCount;
+    }
+
+    public void setCollectCommentCount(Integer collectCommentCount) {
+        this.collectCommentCount = collectCommentCount;
+    }
+
+    public Integer getInviteFriendCount() {
+        return inviteFriendCount;
+    }
+
+    public void setInviteFriendCount(Integer inviteFriendCount) {
+        this.inviteFriendCount = inviteFriendCount;
+    }
+
+    public Date getRecentOrderTime() {
+        return recentOrderTime;
+    }
+
+    public void setRecentOrderTime(Date recentOrderTime) {
+        this.recentOrderTime = recentOrderTime;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", memberId=").append(memberId);
+        sb.append(", consumeAmount=").append(consumeAmount);
+        sb.append(", orderCount=").append(orderCount);
+        sb.append(", couponCount=").append(couponCount);
+        sb.append(", commentCount=").append(commentCount);
+        sb.append(", returnOrderCount=").append(returnOrderCount);
+        sb.append(", loginCount=").append(loginCount);
+        sb.append(", attendCount=").append(attendCount);
+        sb.append(", fansCount=").append(fansCount);
+        sb.append(", collectProductCount=").append(collectProductCount);
+        sb.append(", collectSubjectCount=").append(collectSubjectCount);
+        sb.append(", collectTopicCount=").append(collectTopicCount);
+        sb.append(", collectCommentCount=").append(collectCommentCount);
+        sb.append(", inviteFriendCount=").append(inviteFriendCount);
+        sb.append(", recentOrderTime=").append(recentOrderTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 67 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberTag.java

@@ -0,0 +1,67 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+public class UmsMemberTag implements Serializable {
+    private Long id;
+
+    private String name;
+
+    @ApiModelProperty(value = "自动打标签完成订单数量")
+    private Integer finishOrderCount;
+
+    @ApiModelProperty(value = "自动打标签完成订单金额")
+    private BigDecimal finishOrderAmount;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getFinishOrderCount() {
+        return finishOrderCount;
+    }
+
+    public void setFinishOrderCount(Integer finishOrderCount) {
+        this.finishOrderCount = finishOrderCount;
+    }
+
+    public BigDecimal getFinishOrderAmount() {
+        return finishOrderAmount;
+    }
+
+    public void setFinishOrderAmount(BigDecimal finishOrderAmount) {
+        this.finishOrderAmount = finishOrderAmount;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", name=").append(name);
+        sb.append(", finishOrderCount=").append(finishOrderCount);
+        sb.append(", finishOrderAmount=").append(finishOrderAmount);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 78 - 0
forest-portal/portal-common/src/main/java/com/hwrj/cloud/portal/model/UmsMemberTask.java

@@ -0,0 +1,78 @@
+package com.hwrj.cloud.portal.model;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+public class UmsMemberTask implements Serializable {
+    private Long id;
+
+    private String name;
+
+    @ApiModelProperty(value = "赠送成长值")
+    private Integer growth;
+
+    @ApiModelProperty(value = "赠送积分")
+    private Integer intergration;
+
+    @ApiModelProperty(value = "任务类型:0->新手任务;1->日常任务")
+    private Integer type;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getGrowth() {
+        return growth;
+    }
+
+    public void setGrowth(Integer growth) {
+        this.growth = growth;
+    }
+
+    public Integer getIntergration() {
+        return intergration;
+    }
+
+    public void setIntergration(Integer intergration) {
+        this.intergration = intergration;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", name=").append(name);
+        sb.append(", growth=").append(growth);
+        sb.append(", intergration=").append(intergration);
+        sb.append(", type=").append(type);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 165 - 0
forest-portal/portal-server/pom.xml

@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>forest-portal</artifactId>
+        <groupId>com.hwrj.cloud.portal</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>portal-server</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.hwrj.cloud.portal</groupId>
+            <artifactId>portal-common</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.hwrj.cloud.portal</groupId>
+            <artifactId>portal-mbg</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.hwrj.cloud.security</groupId>
+            <artifactId>forest-security</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!--mongodb依赖配置-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
+        <!--redis依赖配置-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <!-- nacos discovery-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+        <!-- nacos config -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+        <!--zipkin-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-zipkin</artifactId>
+        </dependency>
+        <!-- spring boot admin client -->
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-starter-client</artifactId>
+        </dependency>        <!-- nacos discovery-->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+        <!-- nacos config -->
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+        <!--zipkin-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-zipkin</artifactId>
+        </dependency>
+        <!-- spring boot admin client -->
+        <dependency>
+            <groupId>de.codecentric</groupId>
+            <artifactId>spring-boot-admin-starter-client</artifactId>
+        </dependency>
+        <!--微信小程序开源封装sdk-->
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-miniapp</artifactId>
+            <version>3.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+            <version>7.2.28</version>
+        </dependency>
+
+        <!--微信公众号开发登录-->
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>3.1.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-io</artifactId>
+                    <groupId>commons-io</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!--微信开发支付-->
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-pay</artifactId>
+            <version>3.1.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>commons-io</artifactId>
+                    <groupId>commons-io</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!--redis-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson</artifactId>
+            <version>3.5.0</version>
+        </dependency>
+        <!--redis-->
+        <!--集成消息队列-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+
+        </plugins>
+    </build>
+
+</project>

+ 17 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/ForestPortalApplication.java

@@ -0,0 +1,17 @@
+package com.hwrj.cloud.portal;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+@SpringBootApplication
+@ComponentScan(basePackages = {"com.hwrj.cloud.portal","com.hwrj.cloud.security"})
+public class ForestPortalApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(ForestPortalApplication.class, args);
+        System.out.println("---------------------移动端启动成功!---------------------");
+    }
+}
+

+ 26 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/component/CancelOrderReceiver.java

@@ -0,0 +1,26 @@
+package com.hwrj.cloud.portal.component;
+
+import com.hwrj.cloud.portal.service.OmsPortalOrderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 取消订单消息的处理者
+ * Created by macro on 2018/9/14.
+ */
+@Component
+@RabbitListener(queues = "forest.order.cancel")
+public class CancelOrderReceiver {
+    private static Logger LOGGER = LoggerFactory.getLogger(CancelOrderReceiver.class);
+    @Autowired
+    private OmsPortalOrderService portalOrderService;
+    @RabbitHandler
+    public void handle(Long orderId){
+        portalOrderService.cancelOrderByOne(orderId);
+        LOGGER.info("process orderId:{}",orderId);
+    }
+}

+ 35 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/component/CancelOrderSender.java

@@ -0,0 +1,35 @@
+package com.hwrj.cloud.portal.component;
+
+import com.hwrj.cloud.portal.domain.QueueEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.AmqpException;
+import org.springframework.amqp.core.AmqpTemplate;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessagePostProcessor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 取消订单消息的发出者
+ * Created by macro on 2018/9/14.
+ */
+@Component
+public class CancelOrderSender {
+    private static Logger LOGGER = LoggerFactory.getLogger(CancelOrderSender.class);
+    @Autowired
+    private AmqpTemplate amqpTemplate;
+
+    public void sendMessage(Long orderId,final long delayTimes){
+        //给延迟队列发送消息
+        amqpTemplate.convertAndSend(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getExchange(), QueueEnum.QUEUE_TTL_ORDER_CANCEL.getRouteKey(), orderId, new MessagePostProcessor() {
+            @Override
+            public Message postProcessMessage(Message message) throws AmqpException {
+                //给消息设置延迟毫秒值
+                message.getMessageProperties().setExpiration(String.valueOf(delayTimes));
+                return message;
+            }
+        });
+        LOGGER.info("send orderId:{}",orderId);
+    }
+}

+ 29 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/component/OrderTimeOutCancelTask.java

@@ -0,0 +1,29 @@
+package com.hwrj.cloud.portal.component;
+
+import com.hwrj.cloud.portal.service.OmsPortalOrderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by macro on 2018/8/24.
+ * 订单超时取消并解锁库存的定时器
+ */
+@Component
+public class OrderTimeOutCancelTask {
+    private Logger LOGGER = LoggerFactory.getLogger(OrderTimeOutCancelTask.class);
+    @Autowired
+    private OmsPortalOrderService portalOrderService;
+
+    /**
+     * cron表达式:Seconds Minutes Hours DayofMonth Month DayofWeek [Year]
+     * 每10分钟扫描一次,扫描设定超时时间之前下的订单,如果没支付则取消该订单
+     */
+    @Scheduled(cron = "0 0/10 * ? * ?")
+    private void cancelTimeOutOrder(){
+        Integer count = portalOrderService.cancelTimeOutOrder();
+        LOGGER.info("取消订单,并根据sku编号释放锁定库存,取消订单数量:{}",count);
+    }
+}

+ 34 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/GlobalCorsConfig.java

@@ -0,0 +1,34 @@
+package com.hwrj.cloud.portal.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+/**
+ * 全局跨域相关配置
+ * Created by macro on 2019/7/27.
+ */
+//@Configuration
+public class GlobalCorsConfig {
+
+    /**
+     * 允许跨域调用的过滤器
+     */
+//    @Bean
+//    public CorsFilter corsFilter() {
+////        CorsConfiguration config = new CorsConfiguration();
+////        //允许所有域名进行跨域调用
+////        config.addAllowedOrigin("*");
+////        //允许跨越发送cookie
+////        config.setAllowCredentials(true);
+////        //放行全部原始头信息
+////        config.addAllowedHeader("*");
+////        //允许所有请求方法跨域调用
+////        config.addAllowedMethod("*");
+////        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+////        source.registerCorsConfiguration("/**", config);
+////        return new CorsFilter(source);
+//    }
+}

+ 45 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/JacksonConfig.java

@@ -0,0 +1,45 @@
+package com.hwrj.cloud.portal.config;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+
+
+/**
+ * Jackson相关配置类
+ * json不返回null的字段
+ * Created by macro on 2018/8/2.
+ */
+@Configuration
+public class JacksonConfig {
+    @Bean
+    @Primary
+    @ConditionalOnMissingBean(ObjectMapper.class)
+    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
+        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
+
+        // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
+        // Include.Include.ALWAYS 默认
+        // Include.NON_DEFAULT 属性为默认值不序列化
+        // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量
+        // Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化
+        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+        // 字段保留,将null值转为""
+//        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()
+//        {
+//            @Override
+//            public void serialize(Object o, JsonGenerator jsonGenerator,
+//                                  SerializerProvider serializerProvider)
+//                    throws IOException, JsonProcessingException
+//            {
+//                jsonGenerator.writeString("");
+//            }
+//        });
+        return objectMapper;
+    }
+}

+ 31 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/MallSecurityConfig.java

@@ -0,0 +1,31 @@
+package com.hwrj.cloud.portal.config;
+
+
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import com.hwrj.cloud.security.config.SecurityConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.core.userdetails.UserDetailsService;
+
+/**
+ * mall-security模块相关配置
+ * Created by macro on 2019/11/5.
+ */
+@Configuration
+@EnableWebSecurity
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class MallSecurityConfig extends SecurityConfig {
+
+    @Autowired
+    private UmsMemberService memberService;
+
+    @Override
+    @Bean
+    public UserDetailsService userDetailsService() {
+        //获取登录用户信息
+        return username -> memberService.loadUserByUsername(username);
+    }
+}

+ 15 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/MyBatisConfig.java

@@ -0,0 +1,15 @@
+package com.hwrj.cloud.portal.config;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * MyBatis相关配置
+ * Created by macro on 2019/4/8.
+ */
+@Configuration
+@EnableTransactionManagement
+@MapperScan({"com.hwrj.cloud.portal.mapper", "com.hwrj.cloud.portal.dao"})
+public class MyBatisConfig {
+}

+ 79 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/RabbitMqConfig.java

@@ -0,0 +1,79 @@
+package com.hwrj.cloud.portal.config;
+
+import com.hwrj.cloud.portal.domain.QueueEnum;
+import org.springframework.amqp.core.*;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 消息队列相关配置
+ * Created by macro on 2018/9/14.
+ */
+@Configuration
+public class RabbitMqConfig {
+
+    /**
+     * 订单消息实际消费队列所绑定的交换机
+     */
+    @Bean
+    DirectExchange orderDirect() {
+        return (DirectExchange) ExchangeBuilder
+                .directExchange(QueueEnum.QUEUE_ORDER_CANCEL.getExchange())
+                .durable(true)
+                .build();
+    }
+
+    /**
+     * 订单延迟队列队列所绑定的交换机
+     */
+    @Bean
+    DirectExchange orderTtlDirect() {
+        return (DirectExchange) ExchangeBuilder
+                .directExchange(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getExchange())
+                .durable(true)
+                .build();
+    }
+
+    /**
+     * 订单实际消费队列
+     */
+    @Bean
+    public Queue orderQueue() {
+        return new Queue(QueueEnum.QUEUE_ORDER_CANCEL.getName());
+    }
+
+    /**
+     * 订单延迟队列(死信队列)
+     */
+    @Bean
+    public Queue orderTtlQueue() {
+        return QueueBuilder
+                .durable(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getName())
+                .withArgument("x-dead-letter-exchange", QueueEnum.QUEUE_ORDER_CANCEL.getExchange())//到期后转发的交换机
+                .withArgument("x-dead-letter-routing-key", QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey())//到期后转发的路由键
+                .build();
+    }
+
+    /**
+     * 将订单队列绑定到交换机
+     */
+    @Bean
+    Binding orderBinding(DirectExchange orderDirect, Queue orderQueue){
+        return BindingBuilder
+                .bind(orderQueue)
+                .to(orderDirect)
+                .with(QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey());
+    }
+
+    /**
+     * 将订单延迟队列绑定到交换机
+     */
+    @Bean
+    Binding orderTtlBinding(DirectExchange orderTtlDirect, Queue orderTtlQueue){
+        return BindingBuilder
+                .bind(orderTtlQueue)
+                .to(orderTtlDirect)
+                .with(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getRouteKey());
+    }
+
+}

+ 28 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/SmsConfiguration.java

@@ -0,0 +1,28 @@
+package com.hwrj.cloud.portal.config;
+
+
+import com.hwrj.cloud.common.util.SMSUtil;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author xiezt
+ */
+@Configuration
+public class SmsConfiguration {
+
+    @Value("${sms.accessKeyId}")
+    private String accessKeyId;
+
+    @Value("${sms.accessKeySecret}")
+    private String accessKeySecret;
+
+    @Value("${sms.signName}")
+    private String signName;
+
+    @Bean
+    SMSUtil getSMSUtil(){
+        return new SMSUtil(accessKeyId, accessKeySecret, signName);
+    }
+}

+ 12 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/SpringTaskConfig.java

@@ -0,0 +1,12 @@
+package com.hwrj.cloud.portal.config;
+
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 定时任务相关配置
+ * Created by macro on 2019/4/8.
+ */
+@Configuration
+//@EnableScheduling
+public class SpringTaskConfig {
+}

+ 83 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/Swagger2Config.java

@@ -0,0 +1,83 @@
+package com.hwrj.cloud.portal.config;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Swagger API文档相关配置
+ * Created by macro on 2018/4/26.
+ */
+@Configuration
+@EnableSwagger2
+@EnableKnife4j
+@Import(BeanValidatorPluginsConfiguration.class)
+public class Swagger2Config {
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.hwrj.cloud.portal.controller"))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("forest前台系统")
+                .description("forest前台模块")
+                .contact("macro")
+                .version("1.0")
+                .build();
+    }
+
+    private List<ApiKey> securitySchemes() {
+        //设置请求头信息
+        List<ApiKey> result = new ArrayList<>();
+        ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");
+        result.add(apiKey);
+        return result;
+    }
+
+    private List<SecurityContext> securityContexts() {
+        //设置需要登录认证的路径
+        List<SecurityContext> result = new ArrayList<>();
+        result.add(getContextByPath("/*/.*"));
+        return result;
+    }
+
+    private SecurityContext getContextByPath(String pathRegex) {
+        return SecurityContext.builder()
+                .securityReferences(defaultAuth())
+                .forPaths(PathSelectors.regex(pathRegex))
+                .build();
+    }
+
+    private List<SecurityReference> defaultAuth() {
+        List<SecurityReference> result = new ArrayList<>();
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        result.add(new SecurityReference("Authorization", authorizationScopes));
+        return result;
+    }
+}

+ 42 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxMpConfiguration.java

@@ -0,0 +1,42 @@
+package com.hwrj.cloud.portal.config;
+
+
+
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Slf4j
+@Configuration
+@ConditionalOnClass(WxMpService.class)
+@EnableConfigurationProperties(WxMpProperties.class)
+public class WxMpConfiguration {
+
+    private WxMpProperties properties;
+
+    @Autowired
+    public WxMpConfiguration(WxMpProperties properties) {
+        this.properties = properties;
+    }
+
+    @Bean
+    @ConditionalOnMissingBean
+    public WxMpService wxMpService() {
+        WxMpInMemoryConfigStorage configStorage = new WxMpInMemoryConfigStorage();
+        configStorage.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
+        configStorage.setSecret(StringUtils.trimToNull(this.properties.getSecret()));
+        configStorage.setToken(StringUtils.trimToNull(this.properties.getToken()));
+        configStorage.setAesKey(StringUtils.trimToNull(this.properties.getAesKey()));
+        WxMpService wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(configStorage);
+        return wxMpService;
+    }
+}

+ 42 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxMpProperties.java

@@ -0,0 +1,42 @@
+package com.hwrj.cloud.portal.config;
+
+
+
+import com.hwrj.cloud.common.util.JsonUtils;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @author xiezt
+ */
+@Data
+@ConfigurationProperties(prefix = "wx.mp")
+@Component("properties")
+public class WxMpProperties {
+    /**
+     * 设置微信公众号的appid
+     */
+    private String appId;
+
+    /**
+     * 设置微信公众号的app secret
+     */
+    private String secret;
+
+    /**
+     * 设置微信公众号的token
+     */
+    private String token;
+
+    /**
+     * 设置微信公众号的EncodingAESKey
+     */
+    private String aesKey;
+
+    @Override
+    public String toString() {
+        return JsonUtils.toJson(this);
+    }
+}

+ 48 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxPayConfiguration.java

@@ -0,0 +1,48 @@
+package com.hwrj.cloud.portal.config;
+
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Binary Wang
+ */
+@Configuration
+@ConditionalOnClass(WxPayService.class)
+@EnableConfigurationProperties(WxPayProperties.class)
+public class WxPayConfiguration {
+
+  private WxPayProperties properties;
+
+  @Autowired
+  public WxPayConfiguration(WxPayProperties properties) {
+    this.properties = properties;
+  }
+
+  @Bean
+  @ConditionalOnMissingBean
+  public WxPayService wxService() {
+    WxPayConfig payConfig = new WxPayConfig();
+    payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
+    payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
+    payConfig.setMchKey(StringUtils.trimToNull(this.properties.getMchKey()));
+    payConfig.setSubAppId(StringUtils.trimToNull(this.properties.getSubAppId()));
+    payConfig.setSubMchId(StringUtils.trimToNull(this.properties.getSubMchId()));
+    payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
+
+    // 可以指定是否使用沙箱环境
+    payConfig.setUseSandboxEnv(false);
+
+    WxPayService wxPayService = new WxPayServiceImpl();
+    wxPayService.setConfig(payConfig);
+    return wxPayService;
+  }
+
+}

+ 97 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/WxPayProperties.java

@@ -0,0 +1,97 @@
+package com.hwrj.cloud.portal.config;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * wxpay pay properties
+ *
+ * @author Binary Wang
+ */
+@ConfigurationProperties(prefix = "wx.pay")
+public class WxPayProperties {
+  /**
+   * 设置微信公众号或者小程序等的appid
+   */
+  private String appId;
+
+  /**
+   * 微信支付商户号
+   */
+  private String mchId;
+
+  /**
+   * 微信支付商户密钥
+   */
+  private String mchKey;
+
+  /**
+   * 服务商模式下的子商户公众账号ID,普通模式请不要配置,请在配置文件中将对应项删除
+   */
+  private String subAppId;
+
+  /**
+   * 服务商模式下的子商户号,普通模式请不要配置,最好是请在配置文件中将对应项删除
+   */
+  private String subMchId;
+
+  /**
+   * apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
+   */
+  private String keyPath;
+
+  public String getAppId() {
+    return this.appId;
+  }
+
+  public void setAppId(String appId) {
+    this.appId = appId;
+  }
+
+  public String getMchId() {
+    return mchId;
+  }
+
+  public void setMchId(String mchId) {
+    this.mchId = mchId;
+  }
+
+  public String getMchKey() {
+    return mchKey;
+  }
+
+  public void setMchKey(String mchKey) {
+    this.mchKey = mchKey;
+  }
+
+  public String getSubAppId() {
+    return subAppId;
+  }
+
+  public void setSubAppId(String subAppId) {
+    this.subAppId = subAppId;
+  }
+
+  public String getSubMchId() {
+    return subMchId;
+  }
+
+  public void setSubMchId(String subMchId) {
+    this.subMchId = subMchId;
+  }
+
+  public String getKeyPath() {
+    return this.keyPath;
+  }
+
+  public void setKeyPath(String keyPath) {
+    this.keyPath = keyPath;
+  }
+
+  @Override
+  public String toString() {
+    return ToStringBuilder.reflectionToString(this,
+        ToStringStyle.MULTI_LINE_STYLE);
+  }
+}

+ 25 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/exception/GlobalExceptionHandler.java

@@ -0,0 +1,25 @@
+package com.hwrj.cloud.portal.config.exception;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 全局异常捕获
+ * @author 大仙
+ */
+@ControllerAdvice
+public class GlobalExceptionHandler {
+    /**
+     * 处理自定义异常
+     * @param ex
+     * @return
+     */
+    @ExceptionHandler(RuntimeException.class)
+    @ResponseBody
+    public CommonResult handleOrderException(RuntimeException ex) {
+        ex.printStackTrace();
+        return CommonResult.failed(500 ,ex.getMessage());
+    }
+}

+ 38 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/redis/RedissonConfig.java

@@ -0,0 +1,38 @@
+package com.hwrj.cloud.portal.config.redis;
+
+import com.hwrj.cloud.portal.config.WxPayProperties;
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
+/**
+ * redisson通用化配置
+ **/
+@Configuration
+@EnableConfigurationProperties(RedissonProperties.class)
+public class RedissonConfig {
+
+
+    private RedissonProperties properties;
+
+    @Autowired
+    public RedissonConfig(RedissonProperties properties) {
+        this.properties = properties;
+    }
+
+    @Bean
+    public RedissonClient redissonClient() {
+        Config config = new Config();
+        config.useSingleServer()
+                .setAddress(properties.getAddress())
+                .setPassword(properties.getPassword());
+        RedissonClient client = Redisson.create(config);
+        return client;
+    }
+}

+ 13 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/redis/RedissonProperties.java

@@ -0,0 +1,13 @@
+package com.hwrj.cloud.portal.config.redis;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@ConfigurationProperties(prefix = "myredis")
+public class RedissonProperties {
+    private String address;
+
+    private String password;
+}

+ 185 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/CouponController.java

@@ -0,0 +1,185 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.CartPromotionItem;
+import com.hwrj.cloud.portal.domain.SmsCouponHistoryDetail;
+import com.hwrj.cloud.portal.model.*;
+import com.hwrj.cloud.portal.service.CouponService;
+import com.hwrj.cloud.portal.service.OmsCartItemService;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author mtcarpenter
+ * @github https://github.com/mtcarpenter/mall-cloud-alibaba
+ * @desc 微信公众号:山间木匠
+ */
+@RestController
+@RequestMapping("/coupon")
+@Api(tags = "用户优惠券管理")
+public class CouponController {
+
+    @Autowired
+    private CouponService couponService;
+
+
+    @Autowired
+    private OmsCartItemService cartItemService;
+
+    @Autowired
+    private UmsMemberService memberService;
+
+    @ApiOperation("领取指定优惠券")
+    @RequestMapping(value = "/add/{couponId}", method = RequestMethod.POST)
+    public CommonResult add(@PathVariable Long couponId,
+                            @RequestParam("memberId") Long memberId,
+                            @RequestParam("nickName") String nickName) {
+        couponService.add(couponId, memberId, nickName);
+        return CommonResult.success(null, "领取成功");
+    }
+
+    @ApiOperation("获取用户优惠券历史列表")
+    @ApiImplicitParam(name = "useStatus", value = "优惠券筛选类型:0->未使用;1->已使用;2->已过期",
+            allowableValues = "0,1,2", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/listHistory", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<SmsCouponHistory>> listHistory(@RequestParam(value = "memberId", required = false) Long memberId,
+                                                            @RequestParam(value = "useStatus", required = false) Integer useStatus) {
+        List<SmsCouponHistory> couponHistoryList = couponService.listHistory(memberId, useStatus);
+        return CommonResult.success(couponHistoryList);
+    }
+
+    @ApiOperation("获取用户优惠券列表")
+    @ApiImplicitParam(name = "useStatus", value = "优惠券筛选类型:0->未使用;1->已使用;2->已过期",
+            allowableValues = "0,1,2", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<List<SmsCoupon>> list(@RequestParam(value = "memberId", required = false) Long memberId,
+                                              @RequestParam(value = "useStatus", required = false) Integer useStatus) {
+        List<SmsCoupon> couponHistoryList = couponService.list(memberId, useStatus);
+        return CommonResult.success(couponHistoryList);
+    }
+
+    @ApiOperation("获取登录会员购物车的相关优惠券")
+    @ApiImplicitParam(name = "type", value = "使用可用:0->不可用;1->可用",
+            defaultValue = "1", allowableValues = "0,1", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/list/cart/{type}", method = RequestMethod.GET)
+    public CommonResult<List<SmsCouponHistoryDetail>> listCart(@PathVariable Integer type,
+                                                               @RequestParam(value = "memberId", required = false) Long memberId) {
+        UmsMember currentMember = memberService.getCurrentMember();
+        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(),null);
+        List<SmsCouponHistoryDetail> couponHistoryList = couponService.listCart(cartPromotionItemList, memberId, type);
+        return CommonResult.success(couponHistoryList);
+    }
+
+    @ApiOperation("获取登录会员购物车的相关优惠券")
+    @ApiImplicitParam(name = "type", value = "使用可用:0->不可用;1->可用",
+            defaultValue = "1", allowableValues = "0,1", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/list/cart/{type}", method = RequestMethod.POST)
+    public CommonResult<List<SmsCouponHistoryDetail>> listCartPromotion(@PathVariable Integer type,
+                                                                        List<CartPromotionItem> cartPromotionItemList,
+                                                                        @RequestParam(value = "memberId", required = false) Long memberId) {
+        List<SmsCouponHistoryDetail> couponHistoryList = couponService.listCart(cartPromotionItemList, memberId, type);
+        return CommonResult.success(couponHistoryList);
+    }
+
+    /**
+     * 将优惠券信息更改为指定状态
+     *
+     * @param couponId  优惠券id
+     * @param memberId  会员id
+     * @param useStatus 0->未使用;1->已使用
+     */
+    @ApiOperation("将优惠券信息更改为指定状态")
+    @RequestMapping(value = "/updateCouponStatus", method = RequestMethod.GET)
+    public CommonResult updateCouponStatus(@RequestParam(value = "couponId") Long couponId,
+                                           @RequestParam(value = "memberId") Long memberId,
+                                           @RequestParam(value = "useStatus") Integer useStatus) {
+        couponService.updateCouponStatus(couponId, memberId, useStatus);
+        return CommonResult.success(null);
+    }
+
+
+    /**
+     * 商品可用优惠券
+     *
+     * @param productId
+     * @param productCategoryId
+     * @return
+     */
+    @ApiOperation("商品优惠券")
+    @RequestMapping(value = "/getAvailableCouponList", method = RequestMethod.GET)
+    public CommonResult<List<SmsCoupon>> getAvailableCouponList(@RequestParam(value = "productId") Long productId,
+                                                                @RequestParam(value = "productCategoryId") Long productCategoryId) {
+        List<SmsCoupon> smsCouponList = couponService.getAvailableCouponList(productId, productCategoryId);
+        return CommonResult.success(smsCouponList);
+    }
+
+    /**
+     * 获取下一个场次信息
+     *
+     * @param date
+     * @return
+     */
+    @ApiOperation("获取下一个场次信息")
+    @RequestMapping(value = "/getNextFlashPromotionSession", method = RequestMethod.GET)
+    public CommonResult<SmsFlashPromotionSession> getNextFlashPromotionSession(@RequestParam(value = "date") Date date) {
+        SmsFlashPromotionSession smsFlashPromotionSession = couponService.getNextFlashPromotionSession(date);
+        return CommonResult.success(smsFlashPromotionSession);
+    }
+
+
+    /**
+     * 获取下一个场次信息
+     *
+     * @return
+     */
+    @ApiOperation("获取首页广告")
+    @RequestMapping(value = "/getHomeAdvertiseList", method = RequestMethod.GET)
+    public CommonResult<List<SmsHomeAdvertise>> getHomeAdvertiseList() {
+        List<SmsHomeAdvertise> smsHomeAdvertise = couponService.getHomeAdvertiseList();
+        return CommonResult.success(smsHomeAdvertise);
+    }
+
+
+    /**
+     * 根据时间获取秒杀活动
+     *
+     * @param date
+     * @return
+     */
+    @ApiOperation("根据时间获取秒杀活动")
+    @RequestMapping(value = "/getFlashPromotion", method = RequestMethod.GET)
+    public CommonResult<SmsFlashPromotion> getFlashPromotion(@RequestParam(value = "date") Date date) {
+        SmsFlashPromotion smsFlashPromotion = couponService.getFlashPromotion(date);
+        return CommonResult.success(smsFlashPromotion);
+    }
+
+    /**
+     * 根据时间获取秒杀场次
+     *
+     * @param date
+     * @return
+     */
+    @ApiOperation("根据时间获取秒杀场次")
+    @RequestMapping(value = "/getFlashPromotionSession", method = RequestMethod.GET)
+    public CommonResult<SmsFlashPromotionSession> getFlashPromotionSession(@RequestParam(value = "date") Date date) {
+        SmsFlashPromotionSession smsFlashPromotion = couponService.getFlashPromotionSession(date);
+        return CommonResult.success(smsFlashPromotion);
+    }
+
+    @ApiOperation("获取当前商品相关优惠券")
+    @RequestMapping(value = "/listByProduct/{productId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<SmsCoupon>> listByProduct(@PathVariable Long productId) {
+        List<SmsCoupon> couponHistoryList = couponService.listByProduct(productId);
+        return CommonResult.success(couponHistoryList);
+    }
+
+}

+ 36 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/FileUploadController.java

@@ -0,0 +1,36 @@
+package com.hwrj.cloud.portal.controller;
+
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.util.OrderNo;
+import com.hwrj.cloud.portal.util.UploadFileUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+@Api(tags = "图片上传接口",description = "FileUploadController")
+@RestController
+@RequestMapping("/upload")
+public class FileUploadController {
+
+    @Autowired
+    private UploadFileUtil uploadFileUtil;
+
+    @ApiOperation("上传接口")
+    @PostMapping("/fileImg")
+    public CommonResult uploadFile(@RequestParam(value = "file") MultipartFile file,String type){
+        type =1+"";
+        if ((!"123456".contains(type))||type.length()>1){
+            return CommonResult.failed("上传失败");
+        }
+        String s = uploadFileUtil.uploadQiNiuFiles(file, "0/" + type + "/" + OrderNo.NextOrderNo());
+        return CommonResult.success(s);
+    }
+
+
+}

+ 116 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/HomeController.java

@@ -0,0 +1,116 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.CmsSubject;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.model.PmsProductCategory;
+import com.hwrj.cloud.portal.domain.HomeContentResult;
+import com.hwrj.cloud.portal.model.UmsRollBuy;
+import com.hwrj.cloud.portal.service.HomeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页内容管理Controller
+ */
+@Controller
+@Api(tags = "首页内容管理", description = "首页内容管理")
+@RequestMapping("/home")
+public class HomeController {
+    @Autowired
+    private HomeService homeService;
+
+    @ApiOperation("首页内容页信息展示")
+    @RequestMapping(value = "/content", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<HomeContentResult> content() {
+        HomeContentResult contentResult = homeService.content();
+        return CommonResult.success(contentResult);
+    }
+
+
+
+
+    @ApiOperation("分页获取推荐商品")
+    @RequestMapping(value = "/recommendProductList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProduct>> recommendProductList(@RequestParam(value = "pageSize", defaultValue = "4") Integer pageSize,
+                                                               @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<PmsProduct> productList = homeService.recommendProductList(pageSize, pageNum);
+        return CommonResult.success(productList);
+    }
+
+
+    @ApiOperation("分页获取优选推介产品")
+    @RequestMapping(value = "/better-select", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProduct>> hotProduct(@RequestParam(value = "pageSize", defaultValue = "4") Integer pageSize,
+                                                               @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<PmsProduct> productList = homeService.hotProductPage(pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(productList));
+    }
+
+    @ApiOperation("分页获取专题产品")
+    @RequestMapping(value = "/subjectProductList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProduct>> subjectProductList(@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
+                                                               @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                                @RequestParam(value = "subjectId",required = true)Long subjectId) {
+        List<PmsProduct> productList = homeService.getSubjectProductList(subjectId,pageSize, pageNum);
+        if (productList == null){
+            return CommonResult.failed();
+        }
+        return CommonResult.success(productList);
+    }
+
+    @ApiOperation("获取首页商品分类")
+    @RequestMapping(value = "/productCateList/{parentId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProductCategory>> getProductCateList(@PathVariable Long parentId) {
+        List<PmsProductCategory> productCategoryList = homeService.getProductCateList(parentId);
+        return CommonResult.success(productCategoryList);
+    }
+
+    @ApiOperation("根据分类获取专题")
+    @RequestMapping(value = "/subjectList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<CmsSubject>> getSubjectList(@RequestParam(required = false) Long cateId,
+                                                         @RequestParam(value = "pageSize", defaultValue = "4") Integer pageSize,
+                                                         @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<CmsSubject> subjectList = homeService.getSubjectList(cateId, pageSize, pageNum);
+        return CommonResult.success(subjectList);
+    }
+
+    @ApiOperation("分页获取人气推荐商品")
+    @RequestMapping(value = "/hotProductList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProduct>> hotProductList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                         @RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize) {
+        List<PmsProduct> productList = homeService.hotProductList(pageNum, pageSize);
+        return CommonResult.success(productList);
+    }
+
+    @ApiOperation("分页获取新品推荐商品")
+    @RequestMapping(value = "/newProductList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProduct>> newProductList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                         @RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize) {
+        List<PmsProduct> productList = homeService.newProductList(pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(productList));
+    }
+
+    @ApiOperation("分页获取走马灯")
+    @RequestMapping(value = "/roll-buy", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<UmsRollBuy>> rollBuy(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
+        List<UmsRollBuy> buys = homeService.rollBuy(pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(buys));
+    }
+}

+ 73 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/MemberAttentionController.java

@@ -0,0 +1,73 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.MemberBrandAttention;
+import com.hwrj.cloud.portal.service.MemberAttentionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 会员关注品牌管理Controller
+ * Created by macro on 2018/8/2.
+ */
+@Controller
+@Api(tags = "会员关注品牌管理", description = "MemberAttentionController")
+@RequestMapping("/member/attention")
+public class MemberAttentionController {
+    @Autowired
+    private MemberAttentionService memberAttentionService;
+
+    @ApiOperation("添加品牌关注")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult add(@RequestBody MemberBrandAttention memberBrandAttention) {
+        int count = memberAttentionService.add(memberBrandAttention);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("取消关注")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(Long brandId) {
+        int count = memberAttentionService.delete(brandId);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("显示关注列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<MemberBrandAttention>> list(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                               @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {
+        Page<MemberBrandAttention> page = memberAttentionService.list(pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(page));
+    }
+
+    @ApiOperation("显示关注品牌详情")
+    @RequestMapping(value = "/detail", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<MemberBrandAttention> detail(@RequestParam Long brandId) {
+        MemberBrandAttention memberBrandAttention = memberAttentionService.detail(brandId);
+        return CommonResult.success(memberBrandAttention);
+    }
+
+    @ApiOperation("清空关注列表")
+    @RequestMapping(value = "/clear", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult clear() {
+        memberAttentionService.clear();
+        return CommonResult.success(null);
+    }
+}

+ 86 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/MemberProductCollectionController.java

@@ -0,0 +1,86 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.UmsIntegrationConsumeSetting;
+import com.hwrj.cloud.portal.domain.MemberProductCollection;
+import com.hwrj.cloud.portal.service.MemberCollectionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 会员收藏管理Controller
+ * Created by macro on 2018/8/2.
+ */
+@Controller
+@Api(tags = "会员收藏管理", description = "MemberProductCollectionController")
+@RequestMapping("/member/productCollection")
+public class MemberProductCollectionController {
+    @Autowired
+    private MemberCollectionService memberCollectionService;
+
+    @ApiOperation("添加商品收藏")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult add(@RequestBody MemberProductCollection productCollection) {
+        int count = memberCollectionService.add(productCollection);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("删除收藏商品")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(Long productId) {
+        int count = memberCollectionService.delete(productId);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("显示收藏列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<MemberProductCollection>> list(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                                  @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {
+        Page<MemberProductCollection> page = memberCollectionService.list(pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(page));
+    }
+
+
+    @ApiOperation("获取积分使用规则")
+    @RequestMapping(value = "/integrationConsumeSetting", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<UmsIntegrationConsumeSetting> integrationConsumeSetting(@RequestParam(value = "id", defaultValue = "1") Long id) {
+        UmsIntegrationConsumeSetting integrationConsumeSetting = memberCollectionService.integrationConsumeSetting(id);
+        return CommonResult.success(integrationConsumeSetting);
+    }
+
+
+    @ApiOperation("显示收藏商品详情")
+    @RequestMapping(value = "/detail", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<MemberProductCollection> detail(@RequestParam Long productId) {
+        MemberProductCollection memberProductCollection = memberCollectionService.detail(productId);
+        return CommonResult.success(memberProductCollection);
+    }
+
+    @ApiOperation("清空收藏列表")
+    @RequestMapping(value = "/clear", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult clear() {
+        memberCollectionService.clear();
+        return CommonResult.success(null);
+    }
+
+
+}

+ 67 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/MemberReadHistoryController.java

@@ -0,0 +1,67 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.MemberReadHistory;
+import com.hwrj.cloud.portal.service.MemberReadHistoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 会员商品浏览记录管理Controller
+ * Created by macro on 2018/8/3.
+ */
+@Controller
+@Api(tags = "会员商品浏览记录管理", description = "MemberReadHistoryController")
+@RequestMapping("/member/readHistory")
+public class MemberReadHistoryController {
+    @Autowired
+    private MemberReadHistoryService memberReadHistoryService;
+
+    @ApiOperation("创建浏览记录")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody MemberReadHistory memberReadHistory) {
+        int count = memberReadHistoryService.create(memberReadHistory);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("删除浏览记录")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<String> ids) {
+        int count = memberReadHistoryService.delete(ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("清空除浏览记录")
+    @RequestMapping(value = "/clear", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult clear() {
+        memberReadHistoryService.clear();
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("分页获取用户浏览记录")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<MemberReadHistory>> list(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                            @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {
+        Page<MemberReadHistory> page = memberReadHistoryService.list(pageNum, pageSize);
+        return CommonResult.success(CommonPage.restPage(page));
+    }
+}

+ 90 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmePreItemController.java

@@ -0,0 +1,90 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.dao.OmsPreItemDao;
+import com.hwrj.cloud.portal.model.OmsPreItem;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.model.UmsMemberPlatform;
+import com.hwrj.cloud.portal.service.OmsPreItemService;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import com.hwrj.cloud.portal.util.MemberUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+@Controller
+@Api(tags = "预购信息处理", description = "OmePreItemController")
+@RequestMapping("/pre")
+public class OmePreItemController {
+
+
+    @Autowired
+    private OmsPreItemService omsPreItemService;
+
+    @Autowired
+    private UmsMemberService umsMemberService;
+
+
+    @PutMapping(value = "/add")
+    @ApiOperation("添加有意向商品")
+    @ResponseBody
+    public CommonResult add(@RequestBody OmsPreItem omsPreItem){
+
+        UmsMember currentMember = umsMemberService.getCurrentMember();
+        if (StringUtils.isEmpty(currentMember.getId())){
+            return CommonResult.unauthorized(null);
+        }
+        omsPreItem.setMemberId(currentMember.getId());
+        omsPreItem.setMemberNickname(currentMember.getNickname());
+        omsPreItemService.addOmsPreItem(omsPreItem);
+        return CommonResult.success(null);
+
+
+    }
+
+    @GetMapping(value = "/detail")
+    @ApiOperation("获取有意向详情")
+    @ResponseBody
+    public CommonResult detail(@RequestParam(value = "意向id") Long preId){
+
+        OmsPreItem omsPreItemDetail = omsPreItemService.getOmsPreItemDetail(preId);
+        return CommonResult.success(omsPreItemDetail);
+    }
+    @Autowired
+    private UmsMemberService memberService;
+    @GetMapping(value = "/own")
+    @ApiOperation("获取有意向详情")
+    @ResponseBody
+    public CommonResult getOwn(@RequestParam(defaultValue = "10") int pageSize,
+                               @RequestParam(defaultValue = "1") int pageNO,HttpServletRequest request){
+        Map<String,Object> map = memberService.getCurrentWxUser();
+        UmsMemberPlatform wxUsers = memberService.getWxUser();
+        List<OmsPreItemDao> omsPreItemListOwn = omsPreItemService.getOmsPreItemListOwn(wxUsers.getId(), pageSize, pageNO);
+        return CommonResult.success(CommonPage.restPage(omsPreItemListOwn));
+    }
+
+    @GetMapping(value = "/other")
+    @ApiOperation("获取有意向详情")
+    @ResponseBody
+    public CommonResult getOtherToOwn(@RequestParam(defaultValue = "10") int pageSize,
+                               @RequestParam(defaultValue = "1") int pageNO,HttpServletRequest request){
+        UmsMember currentMember = umsMemberService.getCurrentMember();
+
+        List<OmsPreItemDao> omsPreItemListOwn = omsPreItemService.getOmsPreItemListOther(currentMember.getId(), pageSize, pageNO);
+
+
+
+        return CommonResult.success(CommonPage.restPage(omsPreItemListOwn));
+    }
+
+
+}

+ 119 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmsCartItemController.java

@@ -0,0 +1,119 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.CartProduct;
+import com.hwrj.cloud.portal.domain.CartPromotionItem;
+import com.hwrj.cloud.portal.model.OmsCartItem;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.service.OmsCartItemService;
+import com.hwrj.cloud.portal.util.MemberUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * 购物车管理Controller
+ */
+@Controller
+@Api(tags = "购物车管理", description = "OmsCartItemController")
+@RequestMapping("/cart")
+public class OmsCartItemController {
+    @Autowired
+    private OmsCartItemService cartItemService;
+
+    @Autowired
+    private HttpServletRequest request;
+
+    @Autowired
+    private MemberUtil memberUtil;
+
+    @ApiOperation("添加商品到购物车")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult add(@RequestBody OmsCartItem cartItem) {
+        int count = cartItemService.add(cartItem);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取某个会员的购物车列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<OmsCartItem>> list() {
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        List<OmsCartItem> cartItemList = cartItemService.list(umsMember.getId());
+        return CommonResult.success(cartItemList);
+    }
+
+    @ApiOperation("获取某个会员的购物车列表,包括促销信息")
+    @RequestMapping(value = "/list/promotion", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<CartPromotionItem>> listPromotion(@RequestParam(required = false) List<Long> cartIds) {
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(umsMember.getId(), cartIds);
+        return CommonResult.success(cartPromotionItemList);
+    }
+
+    @ApiOperation("修改购物车中某个商品的数量")
+    @RequestMapping(value = "/update/quantity", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult updateQuantity(@RequestParam Long id,
+                                       @RequestParam Integer quantity) {
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        int count = cartItemService.updateQuantity(id, umsMember.getId(), quantity);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("获取购物车中某个商品的规格,用于重选规格")
+    @RequestMapping(value = "/getProduct/{productId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CartProduct> getCartProduct(@PathVariable Long productId) {
+        CartProduct cartProduct = cartItemService.getCartProduct(productId);
+        return CommonResult.success(cartProduct);
+    }
+
+    @ApiOperation("修改购物车中商品的规格")
+    @RequestMapping(value = "/update/attr", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updateAttr(@RequestBody OmsCartItem cartItem) {
+        int count = cartItemService.updateAttr(cartItem);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除购物车中的某个商品")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        int count = cartItemService.delete(umsMember.getId(), ids);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("清空购物车")
+    @RequestMapping(value = "/clear", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult clear() {
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        int count = cartItemService.clear(umsMember.getId());
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+}

+ 124 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmsPortalOrderController.java

@@ -0,0 +1,124 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.ConfirmOrderResult;
+import com.hwrj.cloud.portal.domain.OmsOrderDetail;
+import com.hwrj.cloud.portal.domain.OrderParam;
+import com.hwrj.cloud.portal.from.OrderFrom;
+import com.hwrj.cloud.portal.service.OmsPortalOrderService;
+import com.hwrj.cloud.portal.service.OmsPreItemService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 订单管理Controller
+ * Created by macro on 2018/8/30.
+ */
+@Controller
+@Api(tags = "订单管理", description = "OmsPortalOrderController")
+@RequestMapping("/order")
+public class OmsPortalOrderController {
+    @Autowired
+    private OmsPortalOrderService portalOrderService;
+
+    @ApiOperation("根据产品id和数量下订单")
+    @PostMapping("/insert")
+    @ResponseBody
+    public CommonResult<Map<String, Object>> save(@RequestBody OrderFrom orderFrom) {
+        Map<String, Object> save = portalOrderService.save(orderFrom);
+        return CommonResult.success(save);
+    }
+
+
+    @ApiOperation("根据购物车信息生成确认单信息")
+    @RequestMapping(value = "/generateConfirmOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult<ConfirmOrderResult> generateConfirmOrder(@RequestBody List<Long> cartIds) {
+        ConfirmOrderResult confirmOrderResult = portalOrderService.generateConfirmOrder(cartIds);
+        return CommonResult.success(confirmOrderResult);
+    }
+
+    @ApiOperation("根据购物车信息生成订单")
+    @RequestMapping(value = "/generateOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult generateOrder(@RequestBody OrderParam orderParam) {
+        Map<String, Object> result = portalOrderService.generateOrder(orderParam);
+        return CommonResult.success(result, "下单成功");
+    }
+
+    @ApiOperation("用户支付成功的回调")
+    @RequestMapping(value = "/paySuccess", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult paySuccess(@RequestParam Long orderId, @RequestParam Integer payType) {
+        Integer count = portalOrderService.paySuccess(orderId,payType);
+        return CommonResult.success(count, "支付成功");
+    }
+
+    @ApiOperation("自动取消超时订单")
+    @RequestMapping(value = "/cancelTimeOutOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult cancelTimeOutOrder() {
+        portalOrderService.cancelTimeOutOrder();
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("取消单个超时订单")
+    @RequestMapping(value = "/cancelOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult cancelOrder(Long orderId) {
+        portalOrderService.sendDelayMessageCancelOrder(orderId);
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("按状态分页获取用户订单列表")
+    @ApiImplicitParam(name = "status", value = "订单状态:-1->全部;0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭",
+            defaultValue = "-1", allowableValues = "-1,0,1,2,3,4", paramType = "query", dataType = "int")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<OmsOrderDetail>> list(@RequestParam Integer status,
+                                                   @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                                                   @RequestParam(required = false, defaultValue = "5") Integer pageSize) {
+        CommonPage<OmsOrderDetail> orderPage = portalOrderService.list(status,pageNum,pageSize);
+        return CommonResult.success(orderPage);
+    }
+
+    @ApiOperation("根据ID获取订单详情")
+    @RequestMapping(value = "/detail/{orderId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<OmsOrderDetail> detail(@PathVariable Long orderId) {
+        OmsOrderDetail orderDetail = portalOrderService.detail(orderId);
+        return CommonResult.success(orderDetail);
+    }
+
+    @ApiOperation("用户取消订单")
+    @RequestMapping(value = "/cancelUserOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult cancelUserOrder(Long orderId) {
+        portalOrderService.cancelOrder(orderId);
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("用户确认收货")
+    @RequestMapping(value = "/confirmReceiveOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult confirmReceiveOrder(Long orderId) {
+        portalOrderService.confirmReceiveOrder(orderId);
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("用户删除订单")
+    @RequestMapping(value = "/deleteOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult deleteOrder(Long orderId) {
+        portalOrderService.deleteOrder(orderId);
+        return CommonResult.success(null);
+    }
+}

+ 35 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmsPortalOrderReturnApplyController.java

@@ -0,0 +1,35 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.OmsOrderReturnApplyParam;
+import com.hwrj.cloud.portal.service.OmsPortalOrderReturnApplyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 申请退货管理Controller
+ */
+@Controller
+@Api(tags = "申请退货管理", description = "OmsPortalOrderReturnApplyController")
+@RequestMapping("/returnApply")
+public class OmsPortalOrderReturnApplyController {
+    @Autowired
+    private OmsPortalOrderReturnApplyService returnApplyService;
+
+    @ApiOperation("申请退货")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody OmsOrderReturnApplyParam returnApply) {
+        int count = returnApplyService.create(returnApply);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+}

+ 37 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PmsBasePositiontController.java

@@ -0,0 +1,37 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.AreaVo;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.service.PmsBasePositiontService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+@Controller
+@Api(tags = "地址管理")
+@RequestMapping("/positiont")
+public class PmsBasePositiontController {
+    @Autowired
+    private PmsBasePositiontService pmsBasePositiontService;
+
+    @ApiOperation(value = "综合搜索、筛选、排序")
+    @ApiImplicitParam(name = "sort", value = "排序字段:0->按相关度;1->按新品;2->按销量;3->价格从低到高;4->价格从高到低",
+            defaultValue = "0", allowableValues = "0,1,2,3,4", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/search", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult search(String parentId) {
+        List<AreaVo> list = pmsBasePositiontService.search(parentId);
+        return CommonResult.success(list);
+    }
+
+}

+ 145 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PmsPortalProductController.java

@@ -0,0 +1,145 @@
+package com.hwrj.cloud.portal.controller;
+
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.*;
+import com.hwrj.cloud.portal.model.OmsPreItem;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 前台商品管理Controller
+ * Created by macro on 2020/4/6.
+ */
+@Controller
+@Api(tags = "前台商品管理", description = "前台商品管理")
+@RequestMapping("/product")
+public class PmsPortalProductController {
+
+    @Autowired
+    private PmsPortalProductService portalProductService;
+
+    @Autowired
+    private UmsMemberOriginService umsMemberOriginService;
+
+    @Autowired
+    private UmsCompanyInfoService umsCompanyInfoService;
+
+    @Autowired
+    private OmsPreItemService omsPreItemService;
+
+    @Autowired
+    private UmsMemberService umsMemberService;
+
+
+    @ApiOperation(value = "综合搜索、筛选、排序")
+    @ApiImplicitParam(name = "sort", value = "排序字段:0->按相关度;1->按新品;2->按销量;3->价格从低到高;4->价格从高到低",
+            defaultValue = "0", allowableValues = "0,1,2,3,4", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/search", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProduct>> search(@RequestParam(required = false) String keyword,
+                                                       @RequestParam(required = false) Long brandId,
+                                                       @RequestParam(required = false) Long productCategoryId,
+                                                       @RequestParam(required = false, defaultValue = "0") Integer pageNum,
+                                                       @RequestParam(required = false, defaultValue = "5") Integer pageSize,
+                                                       @RequestParam(required = false, defaultValue = "0") Integer sort) {
+        List<PmsProduct> productList = portalProductService.search(keyword, brandId, productCategoryId, pageNum, pageSize, sort);
+        return CommonResult.success(CommonPage.restPage(productList));
+    }
+
+    @ApiOperation("以树形结构获取所有商品分类")
+    @RequestMapping(value = "/categoryTreeList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProductCategoryNode>> categoryTreeList() {
+        List<PmsProductCategoryNode> list = portalProductService.categoryTreeList();
+        return CommonResult.success(list);
+    }
+
+    @ApiOperation("搜索商品类型")
+    @RequestMapping(value = "/categorySearch", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProductCategoryNode>> searchCategoryTreeList(@RequestParam(value = "key",required = false) String key) {
+        List<PmsProductCategoryNode> list = portalProductService.categorySearchTreeList(key);
+        return CommonResult.success(list);
+    }
+
+    @ApiOperation("获取前台商品详情")
+    @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsPortalProductDetail> detail(@PathVariable Long id) {
+
+        PmsPortalProductDetail productDetail = portalProductService.detail(id);
+        Long placeOfProductionId = productDetail.getProduct().getPlaceOfProductionId();
+        if (placeOfProductionId != null){
+            UmsMemberOriginDto originDto = umsMemberOriginService.detail(placeOfProductionId);
+            productDetail.setOrigin(originDto);
+        }
+        Long companyInfoId = productDetail.getProduct().getCompId();
+        if (companyInfoId != null){
+            UmsCompanyInfoDto umsCompanyInfoDto = umsCompanyInfoService.detailInfo(companyInfoId);
+            productDetail.setCompanyInfo(umsCompanyInfoDto);
+        }
+        productDetail.setIsPred(0);
+        try{
+            UmsMember currentMember = umsMemberService.getCurrentMember();
+            if (currentMember != null){
+                List<OmsPreItem> productId = omsPreItemService.getOmsPreByMyAndProductId(id, currentMember.getId());
+                if (productId != null&& productId.size()>0){
+                    productDetail.setIsPred(1);
+                }
+            }
+        }catch (Exception e){
+
+        }
+
+        return CommonResult.success(productDetail);
+    }
+
+
+
+    @ApiOperation("获取商品详情")
+    @RequestMapping(value = "/getPmsProductById/{productId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsProduct> getPmsProductById(@PathVariable Long productId) {
+        PmsProduct pmsProduct = portalProductService.getPmsProductById(productId);
+        return CommonResult.success(pmsProduct);
+    }
+
+
+    @ApiOperation("获取购物车中某个商品的规格,用于重选规格")
+    @RequestMapping(value = "/getProduct/{productId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CartProduct> getCartProduct(@PathVariable Long productId) {
+        CartProduct cartProduct = portalProductService.getCartProduct(productId);
+        return CommonResult.success(cartProduct);
+    }
+
+    @ApiOperation("获取促销商品")
+    @RequestMapping(value = "/getPromotionProductList", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult<List<PromotionProduct>> getPromotionProductList(@RequestBody List<Long> productIdList) {
+        List<PromotionProduct> promotionProductOutput = portalProductService.getPromotionProductList(productIdList);
+        return CommonResult.success(promotionProductOutput);
+    }
+
+    @ApiOperation("锁定下单商品的所有库存")
+    @RequestMapping(value = "/lockStock", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult lockStock(@RequestParam(required = false) Long productSkuId,
+                                  @RequestParam(required = false) Integer quantity) {
+        portalProductService.lockStock(productSkuId, quantity);
+        return CommonResult.success(null);
+    }
+
+
+}

+ 54 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PortalBrandController.java

@@ -0,0 +1,54 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.PmsBrand;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.service.PortalBrandService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页品牌推荐管理Controller
+ * Created by macro on 2020/5/15.
+ */
+@Controller
+@Api(tags = "前台品牌管理", description = "前台品牌管理")
+@RequestMapping("/brand")
+public class PortalBrandController {
+
+    @Autowired
+    private PortalBrandService homeBrandService;
+
+    @ApiOperation("分页获取推荐品牌")
+    @RequestMapping(value = "/recommendList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsBrand>> recommendList(@RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize,
+                                                      @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<PmsBrand> brandList = homeBrandService.recommendList(pageNum, pageSize);
+        return CommonResult.success(brandList);
+    }
+
+    @ApiOperation("获取品牌详情")
+    @RequestMapping(value = "/detail/{brandId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsBrand> detail(@PathVariable Long brandId) {
+        PmsBrand brand = homeBrandService.detail(brandId);
+        return CommonResult.success(brand);
+    }
+
+    @ApiOperation("分页获取品牌相关商品")
+    @RequestMapping(value = "/productList", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProduct>> productList(@RequestParam Long brandId,
+                                                            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                            @RequestParam(value = "pageSize", defaultValue = "6") Integer pageSize) {
+        CommonPage<PmsProduct> result = homeBrandService.productList(brandId, pageNum, pageSize);
+        return CommonResult.success(result);
+    }
+}

+ 73 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PortalProductPublishController.java

@@ -0,0 +1,73 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.PmsProductVo;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.service.PortalProductPulishService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Slf4j
+@Api(tags = "h5端产品发布接口",description = "h5端产品发布接口")
+@RestController
+@RequestMapping("/prod/pub")
+public class PortalProductPublishController {
+
+    @Autowired
+    private PortalProductPulishService portalProductPulishService;
+
+
+    @ApiOperation("发布产品")
+    @PostMapping("add")
+    public CommonResult addProd(@RequestBody PmsProductVo productVo){
+
+        int i = portalProductPulishService.create(productVo);
+        if (i==0){
+            return CommonResult.failed("发布失败");
+        }
+
+        return CommonResult.success();
+    }
+
+
+    @ApiOperation("修改产品")
+    @PostMapping("update")
+    public CommonResult updateProd(@RequestBody PmsProductVo productVo){
+        Long id = productVo.getId();
+        if (id==null){
+            return CommonResult.failed("修改失败");
+        }
+        int i = portalProductPulishService.update(id,productVo);
+        if (i==0){
+            return CommonResult.failed("发布失败");
+        }
+
+        return CommonResult.success();
+    }
+
+    @ApiOperation("产品列表")
+    @GetMapping("list")
+    public CommonResult listProd(@RequestParam(value = "pageNo",required = false,defaultValue = "0")int pageNo,@RequestParam(value = "pageSize",required = false,defaultValue = "10")int pageSize){
+
+        List<PmsProduct> list = portalProductPulishService.list(pageSize, pageNo);
+
+        return CommonResult.success(CommonPage.restPage(list));
+    }
+
+
+    @ApiOperation("修改产品")
+    @GetMapping("detail")
+    public CommonResult detailProd(@RequestParam(value = "id",required = true,defaultValue = "0")Long id){
+
+        PmsProduct detail = portalProductPulishService.detail(id);
+
+        return CommonResult.success(detail);
+    }
+
+}

+ 36 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/SubjectController.java

@@ -0,0 +1,36 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.CmsSubject;
+import com.hwrj.cloud.portal.service.SubjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author mtcarpenter
+ * @desc 微信公众号:山间木匠
+ */
+@RestController
+@Api(tags = "专题", description = "SubjectController")
+@RequestMapping("/member/subject")
+public class SubjectController {
+
+    @Autowired
+    private SubjectService subjectService;
+
+
+    @ApiOperation("获取推荐专题")
+    @RequestMapping(value = "/getRecommendSubjectList", method = RequestMethod.GET)
+    public CommonResult<List<CmsSubject>> getRecommendSubjectList(@RequestParam("offset") Integer offset, @RequestParam("limit") Integer limit) {
+        List<CmsSubject> cmsSubjects = subjectService.getRecommendSubjectList(offset, limit);
+        return CommonResult.success(cmsSubjects);
+    }
+
+}

+ 72 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsCompanyInfoController.java

@@ -0,0 +1,72 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.BrandVO;
+import com.hwrj.cloud.portal.domain.UmsCompanyInfoDto;
+import com.hwrj.cloud.portal.domain.UmsMemberOriginDto;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.model.UmsCompanyInfo;
+import com.hwrj.cloud.portal.service.PmsPortalProductService;
+import com.hwrj.cloud.portal.service.UmsCompanyInfoService;
+import com.hwrj.cloud.portal.service.UmsMemberOriginService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("company")
+@Api(tags = "供应商信息",description = "UmsCompanyInfoController")
+public class UmsCompanyInfoController {
+    @Autowired
+    private UmsCompanyInfoService umsCompanyInfoService;
+
+    @Autowired
+    private UmsMemberOriginService umsMemberOriginService;
+
+    @Autowired
+    private PmsPortalProductService productService;
+
+    @ApiOperation("获取供应商详情")
+    @GetMapping("/cp/detail")
+    public CommonResult detail(@RequestParam(value = "compId",required = true)Long compId){
+        UmsCompanyInfoDto infoDto = umsCompanyInfoService.detailInfo(compId);
+        List<UmsMemberOriginDto> umsMemberOriginDtos = umsMemberOriginService.detailListOfCompany(infoDto.getId());
+        infoDto.setOrigines(umsMemberOriginDtos);
+        List<PmsProduct> productByCompanyId = productService.getProductByCompanyId(infoDto.getId());
+        infoDto.setProducts(productByCompanyId);
+        List<BrandVO> brands= productService.getPmsPrands(compId);
+        infoDto.setBrands(brands);
+        return CommonResult.success(infoDto);
+    }
+    @ApiOperation("搜索供应商列表")
+    @GetMapping("/cp/search")
+    public CommonResult search(@RequestParam(value = "key",required = false)String key){
+        List<UmsCompanyInfo> infos = umsCompanyInfoService.searchCompanyInfo(key);
+        return CommonResult.success(infos);
+    }
+
+    @ApiOperation("搜索供应商列表")
+    @GetMapping("/cp/page")
+    public CommonResult<CommonPage<UmsCompanyInfoDto>> search(@RequestParam(value = "key",required = false)String key,
+                                           @RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum,
+                                           @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize){
+        List<UmsCompanyInfoDto> infos = umsCompanyInfoService.searchCompanyInfo(key,pageNum,pageSize);
+        return CommonResult.success(CommonPage.restPage(infos));
+    }
+
+    @ApiOperation("获取生产地")
+    @GetMapping("/cp/origin")
+    public CommonResult searchOrigin(@RequestParam(value = "compId",required = true)Long compId){
+        List<UmsMemberOriginDto> umsMemberOriginDtos = umsMemberOriginService.detailListOfCompany(compId);
+        return CommonResult.success(umsMemberOriginDtos);
+    }
+
+
+}

+ 147 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsMemberController.java

@@ -0,0 +1,147 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.common.util.SMSEnum;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import com.hwrj.cloud.portal.util.SmsComponent;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import java.security.Principal;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 会员登录注册管理Controller
+ * Created by macro on 2018/8/3.
+ */
+@Controller
+@Api(tags = "会员登录注册管理", description = "会员登录注册管理")
+@RequestMapping("/sso")
+public class UmsMemberController {
+    @Value("${jwt.tokenHeader}")
+    private String tokenHeader;
+    @Value("${jwt.tokenHead}")
+    private String tokenHead;
+    @Autowired
+    private UmsMemberService memberService;
+
+    @ApiOperation("会员注册")
+    @RequestMapping(value = "/register", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult register(@RequestParam String username,
+                                 @RequestParam String password,
+                                 @RequestParam String telephone,
+                                 @RequestParam String authCode) {
+        memberService.register(username, password, telephone, authCode);
+        return CommonResult.success(null, "注册成功");
+    }
+
+    @ApiOperation("会员登录")
+    @RequestMapping(value = "/login", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult login(@RequestParam String username,
+                              @RequestParam String password) {
+        String token = memberService.login(username, password);
+        if (token == null) {
+            return CommonResult.validateFailed("用户名或密码错误");
+        }
+        Map<String, String> tokenMap = new HashMap<>();
+        tokenMap.put("token", token);
+        tokenMap.put("tokenHead", tokenHead);
+        return CommonResult.success(tokenMap);
+    }
+
+    @ApiOperation("会员登录")
+    @RequestMapping(value = "/loginPhone", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult loginPhone(@RequestParam String phone,
+                              @RequestParam String code) {
+        String token = memberService.loginPhone(phone, code);
+        if (token == null) {
+            return CommonResult.validateFailed("用户名或密码错误");
+        }
+        Map<String, String> tokenMap = new HashMap<>();
+        tokenMap.put("token", token);
+        tokenMap.put("tokenHead", tokenHead);
+        return CommonResult.success(tokenMap);
+    }
+
+    @ApiOperation("获取会员信息")
+    @RequestMapping(value = "/info", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult info(Principal principal) {
+        if (principal == null) {
+            return CommonResult.unauthorized(null);
+        }
+        UmsMember member = memberService.getCurrentMember();
+        return CommonResult.success(member);
+    }
+
+    @ApiOperation("获取验证码")
+    @RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult getAuthCode(@RequestParam String telephone) {
+        String authCode = memberService.generateAuthCode(telephone);
+        return CommonResult.success(authCode, "获取验证码成功");
+    }
+
+    @Autowired
+    private SmsComponent smsComponent;
+
+    @ApiOperation("获取登录验证码")
+    @RequestMapping(value = "/getLoginCode", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult getLoginCode(@RequestParam String telephone) {
+        String authCode = memberService.generateLoginCode(telephone);
+        return smsComponent.sendPhoneMsm(telephone,authCode, SMSEnum.CHANGE_PASSWORD);
+
+    }
+
+    @ApiOperation("修改密码")
+    @RequestMapping(value = "/updatePassword", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult updatePassword(@RequestParam String telephone,
+                                       @RequestParam String password,
+                                       @RequestParam String authCode) {
+        memberService.updatePassword(telephone, password, authCode);
+        return CommonResult.success(null, "密码修改成功");
+    }
+
+
+    @ApiOperation(value = "刷新token")
+    @RequestMapping(value = "/refreshToken", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult refreshToken(HttpServletRequest request) {
+        String token = request.getHeader(tokenHeader);
+        String refreshToken = memberService.refreshToken(token);
+        if (refreshToken == null) {
+            return CommonResult.failed("token已经过期!");
+        }
+        Map<String, String> tokenMap = new HashMap<>();
+        tokenMap.put("token", refreshToken);
+        tokenMap.put("tokenHead", tokenHead);
+        return CommonResult.success(tokenMap);
+    }
+
+    @ApiOperation(value = "根据会员id修改会员积分")
+    @RequestMapping(value = "/updateIntegration", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult updateIntegration(@RequestParam("id") Long id,
+                                          @RequestParam("integration") Integer integration) {
+        UmsMember member = memberService.getById(id);
+        memberService.updateIntegration(id, member.getIntegration() + integration);
+        return CommonResult.success(null);
+    }
+
+
+}

+ 70 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsMemberCouponController.java

@@ -0,0 +1,70 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.SmsCouponHistoryDetail;
+import com.hwrj.cloud.portal.model.SmsCoupon;
+import com.hwrj.cloud.portal.model.SmsCouponHistory;
+import com.hwrj.cloud.portal.service.UmsMemberCouponService;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 用户优惠券管理Controller
+ * Created by macro on 2018/8/29.
+ */
+@Controller
+@Api(tags = "用户优惠券管理", description = "用户优惠券管理")
+@RequestMapping("/member/coupon")
+public class UmsMemberCouponController {
+    @Autowired
+    private UmsMemberCouponService memberCouponService;
+
+    @Autowired
+    private UmsMemberService memberService;
+
+    @ApiOperation("领取指定优惠券")
+    @RequestMapping(value = "/add/{couponId}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult add(@PathVariable Long couponId) {
+        memberCouponService.add(couponId);
+        return CommonResult.success(null, "领取成功");
+    }
+
+    @ApiOperation("获取用户优惠券历史列表")
+    @ApiImplicitParam(name = "useStatus", value = "优惠券筛选类型:0->未使用;1->已使用;2->已过期",
+            allowableValues = "0,1,2", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/listHistory", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<SmsCouponHistory>> listHistory(@RequestParam(value = "useStatus", required = false) Integer useStatus) {
+        List<SmsCouponHistory> couponHistoryList = memberCouponService.listHistory(useStatus);
+        return CommonResult.success(couponHistoryList);
+    }
+
+
+    @ApiOperation("获取用户优惠券列表")
+    @ApiImplicitParam(name = "useStatus", value = "优惠券筛选类型:0->未使用;1->已使用;2->已过期",
+            allowableValues = "0,1,2", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<SmsCoupon>> list(@RequestParam(value = "useStatus", required = false) Integer useStatus) {
+        List<SmsCoupon> couponHistoryList = memberCouponService.list(useStatus);
+        return CommonResult.success(couponHistoryList);
+    }
+
+    @ApiOperation("获取登录会员购物车的相关优惠券")
+    @ApiImplicitParam(name = "type", value = "使用可用:0->不可用;1->可用",
+            defaultValue = "1", allowableValues = "0,1", paramType = "query", dataType = "integer")
+    @RequestMapping(value = "/list/cart/{type}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<SmsCouponHistoryDetail>> listCart(@PathVariable Integer type) {
+        List<SmsCouponHistoryDetail> couponHistoryList = memberCouponService.listCart(type);
+        return CommonResult.success(couponHistoryList);
+    }
+}

+ 84 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/UmsMemberReceiveAddressController.java

@@ -0,0 +1,84 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.UmsMemberReceiveAddress;
+import com.hwrj.cloud.portal.service.UmsMemberReceiveAddressService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 会员收货地址管理Controller
+ * Created by macro on 2018/8/28.
+ */
+@Controller
+@Api(tags = "会员收货地址管理", description = "会员收货地址管理")
+@RequestMapping("/member/address")
+public class UmsMemberReceiveAddressController {
+    @Autowired
+    private UmsMemberReceiveAddressService memberReceiveAddressService;
+
+    @ApiOperation("添加收货地址")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult add(@RequestBody UmsMemberReceiveAddress address) {
+        int count = memberReceiveAddressService.add(address);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("删除收货地址")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = memberReceiveAddressService.delete(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改收货地址")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.PUT)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id, @RequestBody UmsMemberReceiveAddress address) {
+        int count = memberReceiveAddressService.update(id, address);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("修改收货地址")
+    @RequestMapping(value = "/default/{id}", method = RequestMethod.PUT)
+    @ResponseBody
+    public CommonResult defaultStatus(@PathVariable Long id) {
+        int count = memberReceiveAddressService.defaultStatus(id);
+        if (count > 0) {
+            return CommonResult.success(count);
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation("显示所有收货地址")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsMemberReceiveAddress>> list(@RequestParam(value = "memberId", required = false) Long memberId) {
+        List<UmsMemberReceiveAddress> addressList = memberReceiveAddressService.list(memberId);
+        return CommonResult.success(addressList);
+    }
+
+    @ApiOperation("获取收货地址详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<UmsMemberReceiveAddress> getItem(@PathVariable Long id) {
+        UmsMemberReceiveAddress address = memberReceiveAddressService.getItem(id);
+        return CommonResult.success(address);
+    }
+}

+ 232 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/WechatH5Controller.java

@@ -0,0 +1,232 @@
+package com.hwrj.cloud.portal.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.domain.UmsMemberCert;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.model.UmsMemberPlatform;
+import com.hwrj.cloud.portal.service.UmsMemberPlatformService;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import com.hwrj.cloud.portal.util.EmojiUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
+import me.chanjar.weixin.mp.bean.result.WxMpUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.security.GeneralSecurityException;
+import java.util.Map;
+
+@Slf4j
+@Controller
+@Api(tags = "微信登录", description = "微信登录")
+@RequestMapping("/wechat/h5")
+public class WechatH5Controller {
+    /**
+     * h5
+     */
+    @Autowired
+    private WxMpService wxMpService;
+
+    @Value("${jwt.tokenHeader}")
+    private String tokenHeader;
+    @Value("${jwt.tokenHead}")
+    private String tokenHead;
+
+    @Autowired
+    private UmsMemberPlatformService umsMemberPlatformService;
+
+    @Autowired
+    private UmsMemberService memberService;
+
+    private static final String WECHAT_USER_INFO = "wechatUserInfo";
+
+    /**
+     * 请求微信服务器认证授权
+     *
+     * @param returnUrl 微信认证授权时的state参数
+     * @return
+     */
+
+    @Value("${wx.mp.url}")
+    private String url;
+    @Value("${wx.mp.before}")
+    private String reUrl;
+
+    @ApiOperation(value = "微信认证")
+    @GetMapping("/authorize")
+    public void authorize(@RequestParam("returnUrl") String returnUrl, HttpServletResponse response) throws IOException {
+        if(!StringUtils.isEmpty(returnUrl)){
+            reUrl = returnUrl;
+        }
+        // 用户授权完成后的重定向链接,441aca54.ngrok.io为使用ngrok代理后的公网域名,该域名需要替换为在微信公众号后台设置的域名,否则请求微信服务器不成功,一般都是采用将本地服务代理映射到一个可以访问的公网进行开发调试
+        String redirectURL = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, URLEncoder.encode(returnUrl,"utf-8"));
+        log.info("【微信网页授权】获取code,redirectURL={}", redirectURL);
+//        redirectURL ="https://www.baidu.com/";
+        response.sendRedirect(redirectURL);
+    }
+    @Autowired
+    ApplicationContext applicationContext;
+    /**
+     * 认证授权成功后返回微信用户信息
+     *
+     * @param code      微信授权成功后重定向地址后的code参数
+     * @param returnUrl 请求微信授权时携带的state参数
+     * @return
+     * @throws Exception
+     */
+    @ApiOperation(value = "微信认证成功后回调")
+    @GetMapping("/userInfo")
+    public String userInfo(@RequestParam("code") String code,
+                           @RequestParam("state") String returnUrl) throws Exception {
+        log.info("【微信网页授权】code={}", code);
+        log.info("【微信网页授权】state={}", returnUrl);
+        WxMpOAuth2AccessToken wxMpOAuth2AccessToken;
+        try {
+            // 获取accessToken
+            wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
+        } catch (WxErrorException e) {
+            log.error("【微信网页授权】{}", e);
+            throw new Exception(e.getError().getErrorMsg());
+        }
+        // 根据accessToken获取openId
+        String openId = wxMpOAuth2AccessToken.getOpenId();
+        log.info("【微信网页授权】openId={}", openId);
+        //applicationContext.publishEvent(new LoginOutEvent(this,wxMpOAuth2AccessToken.getAccessToken()));
+        // 获取用户信息
+        WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
+        log.info("【微信网页授权】wxMpUser={}", wxMpUser);
+        // 刷新accessToken
+        wxMpService.oauth2refreshAccessToken(wxMpOAuth2AccessToken.getRefreshToken());
+        // 验证accessToken是否有效
+        wxMpService.oauth2validateAccessToken(wxMpOAuth2AccessToken);
+
+
+        UmsMemberPlatform umsMemberPlatform= new UmsMemberPlatform();
+        String nickname = wxMpUser.getNickname();
+        wxMpUser.setNickname(EmojiUtil.filterEmoji(nickname));
+        BeanUtil.copyProperties(wxMpUser,umsMemberPlatform);
+        umsMemberPlatform.setOpenid(wxMpUser.getOpenId());
+        umsMemberPlatform.setUnionid(wxMpUser.getUnionId());
+        umsMemberPlatform.setHeadimgurl(wxMpUser.getHeadImgUrl());
+
+        String token = umsMemberPlatformService.addUmsMemberPlatformService(umsMemberPlatform);
+        String trueUrl = null;
+        if (StringUtils.isEmpty(returnUrl)){
+            trueUrl= reUrl+"?token="+token+"&tokenHead="+tokenHead;
+        }else if (!returnUrl.contains("?")){
+            trueUrl=returnUrl+"?token="+token+"&tokenHead="+tokenHead;
+        }else {
+            trueUrl=returnUrl+"&token="+token+"&tokenHead="+tokenHead;
+        }
+//        MyWxMpUser myWxMpUser =new MyWxMpUser();
+//        BeanUtils.copyProperties(wxMpUser,myWxMpUser);
+//        //后台新增用户成功
+//        ResultVO<String> wxlogin = customerClient.wxlogin(myWxMpUser);
+//        Integer codeRe = wxlogin.getCode();
+//        if (0!=codeRe){
+//            log.error("登录出现错误!");
+//            return  "登录出现错误!远程服务失败!";
+//        }else{
+//            String customerId = wxlogin.getData();
+//            log.info(returnUrl+"?customerId="+customerId+"--------customerId================>{}",customerId);
+//            //是否是发起跳转
+//            return "redirect:" + returnUrl+"?customerId="+customerId;
+//        }
+        return "redirect:" + trueUrl;
+
+    }
+
+
+
+
+    @GetMapping("/info")
+    @ResponseBody
+    public CommonResult<Map<String,Object>> loginInfo() {
+        Map<String,Object> map = memberService.getCurrentWxUser();
+        return CommonResult.success(map);
+
+    }
+
+    @ApiOperation(value = "认证类型")
+    @PutMapping("/cert")
+    @ResponseBody
+    public CommonResult cert(@RequestBody UmsMemberCert cert) {
+        UmsMember member = memberService.getCurrentMember();
+        cert.setId(member.getId());
+        umsMemberPlatformService.certMember(cert);
+        return CommonResult.success();
+
+    }
+
+    /**
+     * //签名成功生成支付订单
+     *
+     * @return
+     * @throws GeneralSecurityException
+     */
+    private void insertPayOrder(Object object) {
+
+
+    }
+
+    public static String setXML(String return_code, String return_msg) {
+        return "<xml><return_code><![CDATA[" + return_code + "]]></return_code><return_msg><![CDATA[" + return_msg + "]]></return_msg></xml>";
+    }
+
+    public static String getIpAddress(HttpServletRequest request) {
+        String ip = request.getHeader("x-forwarded-for");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        String[] split = ip.split(",");
+        ip = split[0];
+        return ip;
+    }
+
+
+//    /**
+//     * 上线更新用户数据
+//     * @return
+//     * @throws Exception
+//     */
+//    @GetMapping("/update")
+//    @ResponseBody
+//    public Object userInfo() throws Exception {
+//        applicationContext.publishEvent(new LoginOutEvent(this,"1"));
+//        // 获取用户信息
+//        WxMpUser wxMpUser = wxMpService.getUserService().userInfo("o_8t0t24aCWyepdPCbR3xO5uz4Rg");
+//        log.info("【微信网页授权】wxMpUser={}", wxMpUser);
+//        return wxMpUser;
+//    }
+
+
+
+
+
+}

+ 229 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/WechatH5PayController.java

@@ -0,0 +1,229 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.common.exception.Asserts;
+import com.hwrj.cloud.portal.from.WxPayFrom;
+import com.hwrj.cloud.portal.model.OmsOrder;
+import com.hwrj.cloud.portal.service.OmsOrderPayService;
+import com.hwrj.cloud.portal.service.OmsPortalOrderService;
+import com.hwrj.cloud.portal.util.GeneratorIdUtils;
+import com.hwrj.cloud.portal.util.UUIDUtils;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.bean.WxJsapiSignature;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.math.BigDecimal;
+
+@Slf4j
+@Controller
+@Api(tags = "支付", description = "支付")
+@RequestMapping("/app")
+public class WechatH5PayController {
+
+    @Value("${wx.pay.wxpayAppcallbackurl}")
+    private String wxpayCallbackUrl;
+
+    @Autowired
+    private WxPayService wxPayService;
+
+    @Autowired
+    private OmsPortalOrderService omsPortalOrderService;
+
+    @Autowired
+    private OmsOrderPayService omsOrderPayService;
+
+    @PostMapping("/pay")
+    @ResponseBody
+    public CommonResult pay(@RequestBody WxPayFrom wxPayFrom, HttpServletRequest request) {
+        Long orderId = wxPayFrom.getOrderId();
+        String openid = wxPayFrom.getOpenid();
+        String tradeType = wxPayFrom.getTradeType();
+        OmsOrder omsOrder = omsPortalOrderService.selectById(orderId);
+        Integer status = omsOrder.getPayType();
+        //查询订单是否支付
+        if (status != 0) {
+            throw new RuntimeException("订单已支付");
+        }
+        WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
+        //随机字符串
+        String s = UUIDUtils.randomUUID();
+
+        orderRequest.setNonceStr(s);
+        //商品描述
+        String productName = null;
+        try {
+            productName = omsPortalOrderService.getProductName(orderId);
+        } catch (Exception e) {
+            productName = "购买林产品!";
+        }
+        orderRequest.setBody(productName);
+        //商户订单号(支付编号)
+        GeneratorIdUtils generatorIdUtils = new GeneratorIdUtils();
+        String orderNum = generatorIdUtils.nextId();
+        log.info("orderNum:" + orderNum);
+        //设置商户订单号
+        orderRequest.setOutTradeNo(orderNum);
+        //设置金额
+        //data.getTotalPrice();
+        BigDecimal money = omsOrder.getPayAmount();
+        //元转成分
+        money = money.multiply(new BigDecimal(100));
+        int i = money.intValue();
+//        if ("test".equals(tradeType)) {
+//            //测试环境一分钱
+//            orderRequest.setTotalFee(1);
+//        } else {
+//            orderRequest.setTotalFee(i);
+//        }
+        orderRequest.setTotalFee(i);
+        //终端ip
+        String ipAddress = getIpAddress(request);
+        orderRequest.setSpbillCreateIp(ipAddress);
+        // 通知地址 支付成功后回调地址
+        log.info("wxpayCallbackUrl=================>{}", wxpayCallbackUrl);
+        orderRequest.setNotifyUrl(wxpayCallbackUrl);
+        //交易类型
+        orderRequest.setTradeType(WxPayConstants.TradeType.JSAPI);
+        //用户标识 获取用户openid
+        orderRequest.setOpenid(openid);
+        // 这个可能是偏向原生一点的统一下单,返回的参数有很多没用的 或者null值 建议使用 createOrder下单
+        Object unOrder = null;
+        try {
+            unOrder = wxPayService.createOrder(orderRequest);
+        } catch (WxPayException e) {
+            //e.printStackTrace();
+            log.error(e.getMessage());
+            //签名完成新增支付订单
+            Asserts.fail("微信支付签名失败!");
+        }
+        //更新本地订单支付id
+        //orderClient.update(data);
+        omsOrderPayService.insert(omsOrder, orderNum);
+        //签名完成新增支付订单
+        return CommonResult.success(unOrder);
+    }
+
+    @Autowired
+    private WxMpService wxMpService;
+
+    /*微信js签名接口*/
+    @GetMapping("/getJsapiTicket")
+    @ResponseBody
+    public CommonResult getJsapiTicket(String url) {
+        WxJsapiSignature jsapiSignature = null;
+        try {
+            jsapiSignature = wxMpService.createJsapiSignature(url);
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+            System.err.print(e.getError());
+        }
+        return CommonResult.success(jsapiSignature);
+    }
+
+    /**
+     * wx支付成功回调接口
+     *
+     * @param request
+     * @param response
+     * @throws IOException
+     */
+    @RequestMapping("payResult")
+    public void payResult(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        log.info("微信支付返回通知函数开始---------------------");
+
+        InputStream inStream = request.getInputStream();
+        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        int len = 0;
+        while ((len = inStream.read(buffer)) != -1) {
+            outSteam.write(buffer, 0, len);
+        }
+        outSteam.close();
+        inStream.close();
+        String result = new String(outSteam.toByteArray(), "utf-8");
+        boolean isPayOk = false;
+        WxPayOrderNotifyResult wxPayOrderNotifyResult = null;
+        // 此处调用订单查询接口验证是否交易成功
+        try {
+            wxPayOrderNotifyResult = wxPayService.parseOrderNotifyResult(result);
+            if ("SUCCESS".equals(wxPayOrderNotifyResult.getResultCode())) {
+                isPayOk = true;
+            }
+        } catch (WxPayException e) {
+            e.printStackTrace();
+        }
+        String noticeStr = "";
+        // 支付成功,商户处理后同步返回给微信参数
+        PrintWriter writer = response.getWriter();
+        if (isPayOk) {
+            //建议在这里处理付款完成的业务(虽然前端也可以处理后续业务,但是前端处理并不安全,例如:客户突然关闭浏览器了等情况,付款成功后续的业务将中断)
+            //支付订单支付编号
+            System.out.println("===============付款成功,业务开始处理==============");
+            String orderNum = wxPayOrderNotifyResult.getOutTradeNo();
+            log.info("orderNum:" + orderNum);
+            //将订单更新为支付
+            log.info("解析数据:" + wxPayOrderNotifyResult.toString());
+            omsOrderPayService.update(orderNum);
+            /**
+             * 自己的业务
+             */
+            System.out.println("===============付款成功,业务处理完毕==============");
+            // 通知微信已经收到消息,不要再给我发消息了,否则微信会8连击调用本接口
+            noticeStr = setXML("SUCCESS", "OK");
+            log.info("收到通知返回给微信api信息:-----------" + noticeStr);
+            writer.write(noticeStr);
+            writer.flush();
+        } else {
+            // 支付失败, 记录流水失败
+            noticeStr = setXML("FAIL", "");
+            writer.write(noticeStr);
+            writer.flush();
+            System.out.println("===============支付失败==============");
+        }
+    }
+
+
+    public static String setXML(String return_code, String return_msg) {
+        return "<xml><return_code><![CDATA[" + return_code + "]]></return_code><return_msg><![CDATA[" + return_msg + "]]></return_msg></xml>";
+    }
+
+    public static String getIpAddress(HttpServletRequest request) {
+        String ip = request.getHeader("x-forwarded-for");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        String[] split = ip.split(",");
+        ip = split[0];
+        return ip;
+    }
+
+}

+ 43 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/HomeDao.java

@@ -0,0 +1,43 @@
+package com.hwrj.cloud.portal.dao;
+
+//import com.hwrj.cloud.portal.model.CmsSubject;
+
+import com.hwrj.cloud.portal.model.PmsBrand;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.domain.FlashPromotionProduct;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 首页内容管理自定义Dao
+ * Created by macro on 2019/1/28.
+ */
+public interface HomeDao {
+
+    /**
+     * 获取推荐品牌
+     */
+    List<PmsBrand> getRecommendBrandList(@Param("offset") Integer offset, @Param("limit") Integer limit);
+
+    /**
+     * 获取秒杀商品
+     */
+    List<FlashPromotionProduct> getFlashProductList(@Param("flashPromotionId") Long flashPromotionId, @Param("sessionId") Long sessionId);
+
+    /**
+     * 获取新品推荐
+     */
+    List<PmsProduct> getNewProductList(@Param("offset") Integer offset, @Param("limit") Integer limit);
+
+    /**
+     * 获取人气推荐
+     */
+    List<PmsProduct> getHotProductList(@Param("offset") Integer offset, @Param("limit") Integer limit);
+
+    /**
+     * 获取人气推荐
+     */
+    List<PmsProduct> getHotProductPage();
+
+}

+ 9 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/OmsOrderDao.java

@@ -0,0 +1,9 @@
+package com.hwrj.cloud.portal.dao;
+
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+@Mapper
+public interface OmsOrderDao {
+    String getProductName(@Param("orderId") Long orderId);
+}

+ 14 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/OmsPreItemDao.java

@@ -0,0 +1,14 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.model.PmsProduct;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface OmsPreItemDao {
+
+    public List<OmsPreItemDao> selectOmsPreItemDao(@Param("memberId")Long memberId,@Param("pushId")Long pushId);
+
+    public PmsProduct selectByProductId(@Param("productId")Long productId);
+
+}

+ 18 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsMemberPriceDao.java

@@ -0,0 +1,18 @@
+package com.hwrj.cloud.portal.dao;
+
+
+import com.hwrj.cloud.portal.model.PmsMemberPrice;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 自定义会员价格Dao
+ * Created by macro on 2018/4/26.
+ */
+public interface PmsMemberPriceDao {
+    /**
+     * 批量创建
+     */
+    int insertList(@Param("list") List<PmsMemberPrice> memberPriceList);
+}

+ 18 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductAttributeValueDao.java

@@ -0,0 +1,18 @@
+package com.hwrj.cloud.portal.dao;
+
+
+import com.hwrj.cloud.portal.model.PmsProductAttributeValue;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 商品参数,商品自定义规格属性Dao
+ * Created by macro on 2018/4/26.
+ */
+public interface PmsProductAttributeValueDao {
+    /**
+     * 批量创建
+     */
+    int insertList(@Param("list") List<PmsProductAttributeValue> productAttributeValueList);
+}

+ 16 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductDao.java

@@ -0,0 +1,16 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.domain.BrandVO;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PmsProductDao {
+
+    List<BrandVO> selectBandList(@Param("compId") Long compId);
+
+    List<PmsProduct> subjectProduct(Long subjectId);
+}

+ 17 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductFullReductionDao.java

@@ -0,0 +1,17 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.model.PmsProductFullReduction;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 自定义商品满减Dao
+ * Created by macro on 2018/4/26.
+ */
+public interface PmsProductFullReductionDao {
+    /**
+     * 批量创建
+     */
+    int insertList(@Param("list") List<PmsProductFullReduction> productFullReductionList);
+}

+ 17 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductLadderDao.java

@@ -0,0 +1,17 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.model.PmsProductLadder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 自定义会员阶梯价格Dao
+ * Created by macro on 2018/4/26.
+ */
+public interface PmsProductLadderDao {
+    /**
+     * 批量创建
+     */
+    int insertList(@Param("list") List<PmsProductLadder> productLadderList);
+}

+ 17 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsProductVertifyRecordDao.java

@@ -0,0 +1,17 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.model.PmsProductVertifyRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 自定义商品审核日志管理Dao
+ * Created by macro on 2018/4/27.
+ */
+public interface PmsProductVertifyRecordDao {
+    /**
+     * 批量创建
+     */
+    int insertList(@Param("list") List<PmsProductVertifyRecord> list);
+}

+ 23 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PmsSkuStockDao.java

@@ -0,0 +1,23 @@
+package com.hwrj.cloud.portal.dao;
+
+
+import com.hwrj.cloud.portal.model.PmsSkuStock;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 自定义商品SKU管理Dao
+ * Created by macro on 2018/4/26.
+ */
+public interface PmsSkuStockDao {
+    /**
+     * 批量插入操作
+     */
+    int insertList(@Param("list") List<PmsSkuStock> skuStockList);
+
+    /**
+     * 批量插入或替换操作
+     */
+    int replaceList(@Param("list") List<PmsSkuStock> skuStockList);
+}

+ 46 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PortalOrderDao.java

@@ -0,0 +1,46 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.model.OmsOrderItem;
+import com.hwrj.cloud.portal.domain.OmsOrderDetail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 前台订单自定义Dao
+ * Created by macro on 2018/9/4.
+ */
+public interface PortalOrderDao {
+    /**
+     * 获取订单及下单商品详情
+     */
+    OmsOrderDetail getDetail(@Param("orderId") Long orderId);
+
+    /**
+     * 修改 pms_sku_stock表的锁定库存及真实库存
+     */
+    int updateSkuStock(@Param("itemList") List<OmsOrderItem> orderItemList);
+
+    /**
+     * 获取超时订单
+     * @param minute 超时时间(分)
+     */
+    List<OmsOrderDetail> getTimeOutOrders(@Param("minute") Integer minute);
+
+
+    /**
+     * 获取个人支付成功没有收获的订单
+     * @param id 个人id(分)
+     */
+    List<OmsOrderDetail> getOwnOrders(@Param("id") Long id);
+    /**
+     * 批量修改订单状态
+     */
+    int updateOrderStatus(@Param("ids") List<Long> ids, @Param("status") Integer status);
+
+    /**
+     * 解除取消订单的库存锁定
+     */
+    int releaseSkuStockLock(@Param("itemList") List<OmsOrderItem> orderItemList);
+
+}

+ 19 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PortalOrderItemDao.java

@@ -0,0 +1,19 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.model.OmsOrderItem;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 订单商品信息自定义Dao
+ * Created by macro on 2018/9/3.
+ */
+public interface PortalOrderItemDao {
+    /**
+     * 批量插入
+     * @param list
+     * @return
+     */
+    int insertList(@Param("list") List<OmsOrderItem> list);
+}

+ 25 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/PortalProductDao.java

@@ -0,0 +1,25 @@
+package com.hwrj.cloud.portal.dao;
+
+
+import com.hwrj.cloud.portal.domain.CartProduct;
+import com.hwrj.cloud.portal.domain.PromotionProduct;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 前台系统自定义商品Dao
+ * Created by macro on 2018/8/2.
+ */
+public interface PortalProductDao {
+    /**
+     * 获取购物车商品信息
+     */
+    CartProduct getCartProduct(@Param("id") Long id);
+
+    /**
+     * 获取促销商品信息列表
+     */
+    List<PromotionProduct> getPromotionProductList(@Param("ids") List<Long> ids);
+
+}

+ 29 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/SmsCouponHistoryDao.java

@@ -0,0 +1,29 @@
+package com.hwrj.cloud.portal.dao;
+
+
+import com.hwrj.cloud.portal.domain.SmsCouponHistoryDetail;
+import com.hwrj.cloud.portal.model.SmsCoupon;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 会员优惠券领取历史自定义Dao
+ * Created by macro on 2018/8/29.
+ */
+public interface SmsCouponHistoryDao {
+    List<SmsCouponHistoryDetail> getDetailList(@Param("memberId") Long memberId);
+
+    /**
+     * 获取可用优惠券列表
+     * @param productId
+     * @param productCategoryId
+     * @return
+     */
+    List<SmsCoupon> getAvailableCouponList(@Param("productId") Long productId, @Param("productCategoryId") Long productCategoryId);
+
+    /**
+     * 获取指定会员优惠券列表
+     */
+    List<SmsCoupon> getCouponList(@Param("memberId") Long memberId, @Param("useStatus") Integer useStatus);
+}

+ 21 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/SubjectDao.java

@@ -0,0 +1,21 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.model.CmsSubject;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author mtcarpenter
+ * @github https://github.com/mtcarpenter/mall-cloud-alibaba
+ * @desc 微信公众号:山间木匠
+ */
+public interface SubjectDao {
+
+    /**
+     *
+     * 获取推荐专题
+     */
+    List<CmsSubject> getRecommendSubjectList(@Param("offset") Integer offset, @Param("limit") Integer limit);
+
+}

+ 41 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/UmsCompanyInfoDao.java

@@ -0,0 +1,41 @@
+package com.hwrj.cloud.portal.dao;
+
+import com.hwrj.cloud.portal.domain.UmsCompanyInfoDto;
+import com.hwrj.cloud.portal.model.UmsCompanyFile;
+import com.hwrj.cloud.portal.model.UmsCompanyInfo;
+import com.hwrj.cloud.portal.model.UmsCompanyInfoExample;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface UmsCompanyInfoDao {
+    long countByExample(UmsCompanyInfoExample example);
+
+    int deleteByExample(UmsCompanyInfoExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(UmsCompanyInfo record);
+
+    int insertSelective(UmsCompanyInfo record);
+
+    List<UmsCompanyInfoDto> selectByExampleWithBLOBs(UmsCompanyInfoExample example);
+
+    List<UmsCompanyInfoDto> selectByExample(UmsCompanyInfoExample example);
+
+    UmsCompanyInfoDto selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") UmsCompanyInfo record, @Param("example") UmsCompanyInfoExample example);
+
+    int updateByExampleWithBLOBs(@Param("record") UmsCompanyInfo record, @Param("example") UmsCompanyInfoExample example);
+
+    int updateByExample(@Param("record") UmsCompanyInfo record, @Param("example") UmsCompanyInfoExample example);
+
+    int updateByPrimaryKeySelective(UmsCompanyInfo record);
+
+    int updateByPrimaryKeyWithBLOBs(UmsCompanyInfo record);
+
+    int updateByPrimaryKey(UmsCompanyInfo record);
+
+    public UmsCompanyFile companyFile(Long compId);
+}

+ 9 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/dao/UmsMemberDao.java

@@ -0,0 +1,9 @@
+package com.hwrj.cloud.portal.dao;
+
+import io.lettuce.core.dynamic.annotation.Param;
+
+import java.util.Map;
+
+public interface UmsMemberDao {
+    public Map<String,Object> getOwnData(@Param("memberId")Long memberId,@Param("wxUserId")Long wxUserId);
+}

+ 13 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/AreaVo.java

@@ -0,0 +1,13 @@
+package com.hwrj.cloud.portal.domain;
+
+import lombok.Data;
+
+@Data
+public class AreaVo {
+
+    private String areaId;
+
+    private String areaName;
+
+    private String parentId;
+}

+ 18 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/BrandVO.java

@@ -0,0 +1,18 @@
+package com.hwrj.cloud.portal.domain;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@Api
+public class BrandVO implements Serializable {
+
+    @ApiModelProperty(value = "品牌id")
+    private Long brandId;
+
+    @ApiModelProperty(value = "品牌名称")
+    private String brandName;
+}

+ 20 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/CartProduct.java

@@ -0,0 +1,20 @@
+package com.hwrj.cloud.portal.domain;
+
+
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.model.PmsProductAttribute;
+import com.hwrj.cloud.portal.model.PmsSkuStock;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 购物车中选择规格的商品信息
+ * Created by macro on 2018/8/2.
+ */
+@Data
+public class CartProduct extends PmsProduct {
+    private List<PmsProductAttribute> productAttributeList;
+    private List<PmsSkuStock> skuStockList;
+
+}

+ 61 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/CartPromotionItem.java

@@ -0,0 +1,61 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.OmsCartItem;
+
+import java.math.BigDecimal;
+
+/**
+ * Created by macro on 2018/8/27.
+ * 购物车中促销信息的封装
+ */
+public class CartPromotionItem extends OmsCartItem{
+    //促销活动信息
+    private String promotionMessage;
+    //促销活动减去的金额,针对每个商品
+    private BigDecimal reduceAmount;
+    //商品的真实库存(剩余库存-锁定库存)
+    private Integer realStock;
+    //购买商品赠送积分
+    private Integer integration;
+    //购买商品赠送成长值
+    private Integer growth;
+    public String getPromotionMessage() {
+        return promotionMessage;
+    }
+
+    public void setPromotionMessage(String promotionMessage) {
+        this.promotionMessage = promotionMessage;
+    }
+
+    public BigDecimal getReduceAmount() {
+        return reduceAmount;
+    }
+
+    public void setReduceAmount(BigDecimal reduceAmount) {
+        this.reduceAmount = reduceAmount;
+    }
+
+    public Integer getRealStock() {
+        return realStock;
+    }
+
+    public void setRealStock(Integer realStock) {
+        this.realStock = realStock;
+    }
+
+    public Integer getIntegration() {
+        return integration;
+    }
+
+    public void setIntegration(Integer integration) {
+        this.integration = integration;
+    }
+
+    public Integer getGrowth() {
+        return growth;
+    }
+
+    public void setGrowth(Integer growth) {
+        this.growth = growth;
+    }
+}

+ 118 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/ConfirmOrderResult.java

@@ -0,0 +1,118 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.domain.CartPromotionItem;
+import com.hwrj.cloud.portal.model.UmsIntegrationConsumeSetting;
+import com.hwrj.cloud.portal.model.UmsMemberReceiveAddress;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 确认单信息封装
+ * Created by macro on 2018/8/30.
+ */
+public class ConfirmOrderResult {
+    //包含优惠信息的购物车信息
+    private List<CartPromotionItem> cartPromotionItemList;
+    //用户收货地址列表
+    private List<UmsMemberReceiveAddress> memberReceiveAddressList;
+    //用户可用优惠券列表
+    private List<SmsCouponHistoryDetail> couponHistoryDetailList;
+    //积分使用规则
+    private UmsIntegrationConsumeSetting integrationConsumeSetting;
+    //会员持有的积分
+    private Integer memberIntegration;
+    //计算的金额
+    private CalcAmount calcAmount;
+
+    public List<CartPromotionItem> getCartPromotionItemList() {
+        return cartPromotionItemList;
+    }
+
+    public void setCartPromotionItemList(List<CartPromotionItem> cartPromotionItemList) {
+        this.cartPromotionItemList = cartPromotionItemList;
+    }
+
+    public List<UmsMemberReceiveAddress> getMemberReceiveAddressList() {
+        return memberReceiveAddressList;
+    }
+
+    public void setMemberReceiveAddressList(List<UmsMemberReceiveAddress> memberReceiveAddressList) {
+        this.memberReceiveAddressList = memberReceiveAddressList;
+    }
+
+    public List<SmsCouponHistoryDetail> getCouponHistoryDetailList() {
+        return couponHistoryDetailList;
+    }
+
+    public void setCouponHistoryDetailList(List<SmsCouponHistoryDetail> couponHistoryDetailList) {
+        this.couponHistoryDetailList = couponHistoryDetailList;
+    }
+
+    public UmsIntegrationConsumeSetting getIntegrationConsumeSetting() {
+        return integrationConsumeSetting;
+    }
+
+    public void setIntegrationConsumeSetting(UmsIntegrationConsumeSetting integrationConsumeSetting) {
+        this.integrationConsumeSetting = integrationConsumeSetting;
+    }
+
+    public Integer getMemberIntegration() {
+        return memberIntegration;
+    }
+
+    public void setMemberIntegration(Integer memberIntegration) {
+        this.memberIntegration = memberIntegration;
+    }
+
+    public CalcAmount getCalcAmount() {
+        return calcAmount;
+    }
+
+    public void setCalcAmount(CalcAmount calcAmount) {
+        this.calcAmount = calcAmount;
+    }
+
+    public static class CalcAmount{
+        //订单商品总金额
+        private BigDecimal totalAmount;
+        //运费
+        private BigDecimal freightAmount;
+        //活动优惠
+        private BigDecimal promotionAmount;
+        //应付金额
+        private BigDecimal payAmount;
+
+        public BigDecimal getTotalAmount() {
+            return totalAmount;
+        }
+
+        public void setTotalAmount(BigDecimal totalAmount) {
+            this.totalAmount = totalAmount;
+        }
+
+        public BigDecimal getFreightAmount() {
+            return freightAmount;
+        }
+
+        public void setFreightAmount(BigDecimal freightAmount) {
+            this.freightAmount = freightAmount;
+        }
+
+        public BigDecimal getPromotionAmount() {
+            return promotionAmount;
+        }
+
+        public void setPromotionAmount(BigDecimal promotionAmount) {
+            this.promotionAmount = promotionAmount;
+        }
+
+        public BigDecimal getPayAmount() {
+            return payAmount;
+        }
+
+        public void setPayAmount(BigDecimal payAmount) {
+            this.payAmount = payAmount;
+        }
+    }
+}

+ 19 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/FlashPromotionProduct.java

@@ -0,0 +1,19 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.PmsProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 秒杀信息和商品对象封装
+ * Created by macro on 2019/1/28.
+ */
+@Getter
+@Setter
+public class FlashPromotionProduct extends PmsProduct {
+    private BigDecimal flashPromotionPrice;
+    private Integer flashPromotionCount;
+    private Integer flashPromotionLimit;
+}

+ 39 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/HomeContentResult.java

@@ -0,0 +1,39 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.CmsSubject;
+import com.hwrj.cloud.portal.model.PmsBrand;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.model.SmsHomeAdvertise;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 首页内容返回信息封装
+ * Created by macro on 2019/1/28.
+ */
+@Getter
+@Setter
+public class HomeContentResult {
+    //   轮播广告
+    private List<SmsHomeAdvertise> advertiseList;
+    //推荐品牌
+    private List<PmsBrand> brandList;
+    //当前秒杀场次
+    private HomeFlashPromotion homeFlashPromotion;
+    //新品推荐
+    private List<PmsProduct> newProductList;
+    //人气推荐
+    private List<PmsProduct> hotProductList;
+    //推荐专题
+    private List<CmsSubject> subjectList;
+    //首页推广
+    private List<SmsHomeAdvertise> promote;
+
+    //供应商
+    private List<UmsCompanyInfoDto> companyInfos;
+
+    //个人订单
+    private List<OmsOrderDetail> ownOrderDetails;
+}

+ 22 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/HomeFlashPromotion.java

@@ -0,0 +1,22 @@
+package com.hwrj.cloud.portal.domain;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 首页当前秒杀场次信息
+ * Created by macro on 2019/1/28.
+ */
+@Getter
+@Setter
+public class HomeFlashPromotion {
+    private Date startTime;
+    private Date endTime;
+    private Date nextStartTime;
+    private Date nextEndTime;
+    //属于该秒杀活动的商品
+    private List<FlashPromotionProduct> productList;
+}

+ 99 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberBrandAttention.java

@@ -0,0 +1,99 @@
+package com.hwrj.cloud.portal.domain;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * 会员关注的品牌
+ * Created by macro on 2018/8/2.
+ */
+@Document
+public class MemberBrandAttention {
+    @Id
+    private String id;
+    @Indexed
+    private Long memberId;
+    private String memberNickname;
+    private String memberIcon;
+    @Indexed
+    private Long brandId;
+    private String brandName;
+    private String brandLogo;
+    private String brandCity;
+    private Date createTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public String getMemberNickname() {
+        return memberNickname;
+    }
+
+    public void setMemberNickname(String memberNickname) {
+        this.memberNickname = memberNickname;
+    }
+
+    public String getMemberIcon() {
+        return memberIcon;
+    }
+
+    public void setMemberIcon(String memberIcon) {
+        this.memberIcon = memberIcon;
+    }
+
+    public Long getBrandId() {
+        return brandId;
+    }
+
+    public void setBrandId(Long brandId) {
+        this.brandId = brandId;
+    }
+
+    public String getBrandName() {
+        return brandName;
+    }
+
+    public void setBrandName(String brandName) {
+        this.brandName = brandName;
+    }
+
+    public String getBrandLogo() {
+        return brandLogo;
+    }
+
+    public void setBrandLogo(String brandLogo) {
+        this.brandLogo = brandLogo;
+    }
+
+    public String getBrandCity() {
+        return brandCity;
+    }
+
+    public void setBrandCity(String brandCity) {
+        this.brandCity = brandCity;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 61 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberDetails.java

@@ -0,0 +1,61 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.UmsMember;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * 会员详情封装
+ * Created by macro on 2018/8/3.
+ */
+public class MemberDetails implements UserDetails {
+    private UmsMember umsMember;
+
+    public MemberDetails(UmsMember umsMember) {
+        this.umsMember = umsMember;
+    }
+
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        //返回当前用户的权限
+        return Arrays.asList(new SimpleGrantedAuthority("TEST"));
+    }
+
+    @Override
+    public String getPassword() {
+        return umsMember.getPassword();
+    }
+
+    @Override
+    public String getUsername() {
+        return umsMember.getUsername();
+    }
+
+    @Override
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    @Override
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return umsMember.getStatus() == 1;
+    }
+
+    public UmsMember getUmsMember() {
+        return umsMember;
+    }
+}

+ 106 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberProductCollection.java

@@ -0,0 +1,106 @@
+package com.hwrj.cloud.portal.domain;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.index.Indexed;
+
+import java.util.Date;
+
+/**
+ * 用户收藏的商品
+ * Created by macro on 2018/8/2.
+ */
+public class MemberProductCollection {
+    @Id
+    private String id;
+    @Indexed
+    private Long memberId;
+    private String memberNickname;
+    private String memberIcon;
+    @Indexed
+    private Long productId;
+    private String productName;
+    private String productPic;
+    private String productSubTitle;
+    private String productPrice;
+    private Date createTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public String getMemberNickname() {
+        return memberNickname;
+    }
+
+    public void setMemberNickname(String memberNickname) {
+        this.memberNickname = memberNickname;
+    }
+
+    public String getMemberIcon() {
+        return memberIcon;
+    }
+
+    public void setMemberIcon(String memberIcon) {
+        this.memberIcon = memberIcon;
+    }
+
+    public Long getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Long productId) {
+        this.productId = productId;
+    }
+
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    public String getProductPic() {
+        return productPic;
+    }
+
+    public void setProductPic(String productPic) {
+        this.productPic = productPic;
+    }
+
+    public String getProductSubTitle() {
+        return productSubTitle;
+    }
+
+    public void setProductSubTitle(String productSubTitle) {
+        this.productSubTitle = productSubTitle;
+    }
+
+    public String getProductPrice() {
+        return productPrice;
+    }
+
+    public void setProductPrice(String productPrice) {
+        this.productPrice = productPrice;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 108 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/MemberReadHistory.java

@@ -0,0 +1,108 @@
+package com.hwrj.cloud.portal.domain;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * 用户商品浏览历史记录
+ * Created by macro on 2018/8/3.
+ */
+@Document
+public class MemberReadHistory {
+    @Id
+    private String id;
+    @Indexed
+    private Long memberId;
+    private String memberNickname;
+    private String memberIcon;
+    @Indexed
+    private Long productId;
+    private String productName;
+    private String productPic;
+    private String productSubTitle;
+    private String productPrice;
+    private Date createTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
+
+    public String getMemberNickname() {
+        return memberNickname;
+    }
+
+    public void setMemberNickname(String memberNickname) {
+        this.memberNickname = memberNickname;
+    }
+
+    public String getMemberIcon() {
+        return memberIcon;
+    }
+
+    public void setMemberIcon(String memberIcon) {
+        this.memberIcon = memberIcon;
+    }
+
+    public Long getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Long productId) {
+        this.productId = productId;
+    }
+
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    public String getProductPic() {
+        return productPic;
+    }
+
+    public void setProductPic(String productPic) {
+        this.productPic = productPic;
+    }
+
+    public String getProductSubTitle() {
+        return productSubTitle;
+    }
+
+    public void setProductSubTitle(String productSubTitle) {
+        this.productSubTitle = productSubTitle;
+    }
+
+    public String getProductPrice() {
+        return productPrice;
+    }
+
+    public void setProductPrice(String productPrice) {
+        this.productPrice = productPrice;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 18 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsOrderDetail.java

@@ -0,0 +1,18 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.OmsOrder;
+import com.hwrj.cloud.portal.model.OmsOrderItem;
+
+import java.util.List;
+
+public class OmsOrderDetail extends OmsOrder {
+    private List<OmsOrderItem> orderItemList;
+
+    public List<OmsOrderItem> getOrderItemList() {
+        return orderItemList;
+    }
+
+    public void setOrderItemList(List<OmsOrderItem> orderItemList) {
+        this.orderItemList = orderItemList;
+    }
+}

+ 13 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsOrderDomain.java

@@ -0,0 +1,13 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.OmsOrder;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OmsOrderDomain extends OmsOrder {
+
+    private List<OmsOrderDetail> details;
+
+}

+ 49 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsOrderReturnApplyParam.java

@@ -0,0 +1,49 @@
+package com.hwrj.cloud.portal.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 申请退货参数
+ * Created by macro on 2018/10/17.
+ */
+@Getter
+@Setter
+public class OmsOrderReturnApplyParam {
+    @ApiModelProperty("订单id")
+    private Long orderId;
+    @ApiModelProperty("退货商品id")
+    private Long productId;
+    @ApiModelProperty("订单编号")
+    private String orderSn;
+    @ApiModelProperty("会员用户名")
+    private String memberUsername;
+    @ApiModelProperty("退货人姓名")
+    private String returnName;
+    @ApiModelProperty("退货人电话")
+    private String returnPhone;
+    @ApiModelProperty("商品图片")
+    private String productPic;
+    @ApiModelProperty("商品名称")
+    private String productName;
+    @ApiModelProperty("商品品牌")
+    private String productBrand;
+    @ApiModelProperty("商品销售属性:颜色:红色;尺码:xl;")
+    private String productAttr;
+    @ApiModelProperty("退货数量")
+    private Integer productCount;
+    @ApiModelProperty("商品单价")
+    private BigDecimal productPrice;
+    @ApiModelProperty("商品实际支付单价")
+    private BigDecimal productRealPrice;
+    @ApiModelProperty("原因")
+    private String reason;
+    @ApiModelProperty("描述")
+    private String description;
+    @ApiModelProperty("凭证图片,以逗号隔开")
+    private String proofPics;
+
+}

+ 15 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OmsPreItemDto.java

@@ -0,0 +1,15 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.OmsPreItem;
+import com.hwrj.cloud.portal.model.PmsProduct;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public @Data class OmsPreItemDto extends OmsPreItem {
+
+    @ApiModelProperty("产品信息")
+    private PmsProduct pmsProduct;
+
+    private String headimgurl;
+}

+ 26 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/OrderParam.java

@@ -0,0 +1,26 @@
+package com.hwrj.cloud.portal.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 生成订单时传入的参数
+ * Created by macro on 2018/8/30.
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OrderParam {
+    @ApiModelProperty("收货地址ID")
+    private Long memberReceiveAddressId;
+    @ApiModelProperty("优惠券ID")
+    private Long couponId;
+    @ApiModelProperty("使用的积分数")
+    private Integer useIntegration;
+    @ApiModelProperty("支付方式")
+    private Integer payType;
+    @ApiModelProperty("被选中的购物车商品ID")
+    private List<Long> cartIds;
+}

+ 45 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PmsPortalProductDetail.java

@@ -0,0 +1,45 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.*;
+import com.hwrj.cloud.portal.model.SmsCoupon;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 前台商品详情
+ * Created by macro on 2020/4/6.
+ */
+@Getter
+@Setter
+public class PmsPortalProductDetail {
+    @ApiModelProperty("商品信息")
+    private PmsProduct product;
+    @ApiModelProperty("商品品牌")
+    private PmsBrand brand;
+    @ApiModelProperty("商品属性与参数")
+    private List<PmsProductAttribute> productAttributeList;
+    @ApiModelProperty("手动录入的商品属性与参数值")
+    private List<PmsProductAttributeValue> productAttributeValueList;
+    @ApiModelProperty("商品的sku库存信息")
+    private List<PmsSkuStock> skuStockList;
+    @ApiModelProperty("商品阶梯价格设置")
+    private List<PmsProductLadder> productLadderList;
+    @ApiModelProperty("商品满减价格设置")
+    private List<PmsProductFullReduction> productFullReductionList;
+    @ApiModelProperty("商品可用优惠券")
+    private List<SmsCoupon> couponList;
+
+    @ApiModelProperty("商品供应商")
+    private UmsCompanyInfoDto companyInfo;
+
+    @ApiModelProperty("商品生产基地")
+    private UmsMemberOriginDto origin;
+
+    @ApiModelProperty("是否曾经关注过")
+    private int isPred;
+
+
+}

+ 17 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PmsProductCategoryNode.java

@@ -0,0 +1,17 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.PmsProductCategory;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 商品分类,包含子分类
+ * Created by macro on 2020/4/6.
+ */
+@Getter
+@Setter
+public class PmsProductCategoryNode extends PmsProductCategory {
+    private List<PmsProductCategoryNode> children;
+}

+ 34 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PmsProductVo.java

@@ -0,0 +1,34 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 创建和修改商品时使用的参数
+ * Created by macro on 2018/4/26.
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class PmsProductVo extends PmsProduct {
+    @ApiModelProperty("商品阶梯价格设置")
+    private List<PmsProductLadder> productLadderList;
+    @ApiModelProperty("商品满减价格设置")
+    private List<PmsProductFullReduction> productFullReductionList;
+    @ApiModelProperty("商品会员价格设置")
+    private List<PmsMemberPrice> memberPriceList;
+    @ApiModelProperty("商品的sku库存信息")
+    private List<PmsSkuStock> skuStockList;
+    @ApiModelProperty("商品参数及自定义规格属性")
+    private List<PmsProductAttributeValue> productAttributeValueList;
+
+    @ApiModelProperty("专题和商品关系")
+    private List<CmsSubjectProductRelationInput> subjectProductRelationList;
+    @ApiModelProperty("优选专区和商品的关系")
+    private List<CmsPrefrenceAreaProductRelationInput> prefrenceAreaProductRelationList;
+
+
+}

+ 25 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/PromotionProduct.java

@@ -0,0 +1,25 @@
+package com.hwrj.cloud.portal.domain;
+
+
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.model.PmsProductFullReduction;
+import com.hwrj.cloud.portal.model.PmsProductLadder;
+import com.hwrj.cloud.portal.model.PmsSkuStock;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mtcarpenter
+ * @github https://github.com/mtcarpenter/mall-cloud-alibaba
+ * @desc 微信公众号:山间木匠
+ */
+@Data
+public class PromotionProduct extends PmsProduct {
+    //商品库存信息
+    private List<PmsSkuStock> skuStockList;
+    //商品打折信息
+    private List<PmsProductLadder> productLadderList;
+    //商品满减信息
+    private List<PmsProductFullReduction> productFullReductionList;
+}

+ 38 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/QueueEnum.java

@@ -0,0 +1,38 @@
+package com.hwrj.cloud.portal.domain;
+
+import lombok.Getter;
+
+/**
+ * 消息队列枚举配置
+ * Created by macro on 2018/9/14.
+ */
+@Getter
+public enum QueueEnum {
+    /**
+     * 消息通知队列
+     */
+    QUEUE_ORDER_CANCEL("forest.order.direct", "forest.order.cancel", "forest.order.cancel"),
+    /**
+     * 消息通知ttl队列
+     */
+    QUEUE_TTL_ORDER_CANCEL("forest.order.direct.ttl", "forest.order.cancel.ttl", "forest.order.cancel.ttl");
+
+    /**
+     * 交换名称
+     */
+    private String exchange;
+    /**
+     * 队列名称
+     */
+    private String name;
+    /**
+     * 路由键
+     */
+    private String routeKey;
+
+    QueueEnum(String exchange, String name, String routeKey) {
+        this.exchange = exchange;
+        this.name = name;
+        this.routeKey = routeKey;
+    }
+}

+ 34 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/SmsCouponHistoryDetail.java

@@ -0,0 +1,34 @@
+package com.hwrj.cloud.portal.domain;
+
+
+import com.hwrj.cloud.portal.model.SmsCoupon;
+import com.hwrj.cloud.portal.model.SmsCouponHistory;
+import com.hwrj.cloud.portal.model.SmsCouponProductCategoryRelation;
+import com.hwrj.cloud.portal.model.SmsCouponProductRelation;
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+ * @author mtcarpenter
+ * @github https://github.com/mtcarpenter/mall-cloud-alibaba
+ * @desc 微信公众号:山间木匠
+ */
+@Data
+public class SmsCouponHistoryDetail extends SmsCouponHistory {
+    /**
+     * 相关优惠券信息
+     */
+    private SmsCoupon coupon;
+    /**
+     * 优惠券关联商品
+     */
+    private List<SmsCouponProductRelation> productRelationList;
+    /**
+     * 优惠券关联商品分类
+     */
+    private List<SmsCouponProductCategoryRelation> categoryRelationList;
+
+
+}

+ 28 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/UmsCompanyInfoDto.java

@@ -0,0 +1,28 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.PmsProduct;
+import com.hwrj.cloud.portal.model.UmsCompanyFile;
+import com.hwrj.cloud.portal.model.UmsCompanyInfo;
+import com.hwrj.cloud.portal.model.UmsCompanyShop;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+@Data
+@ApiModel(description = "供应商更详细信息")
+public class UmsCompanyInfoDto extends UmsCompanyInfo {
+    @ApiModelProperty("文件集合")
+    private List<UmsCompanyFile> files;
+    @ApiModelProperty("商店集合")
+    private List<UmsCompanyShop> shops;
+    @ApiModelProperty("生产基地集合")
+    private List<UmsMemberOriginDto> origines;
+
+    @ApiModelProperty("产品集合")
+    private List<PmsProduct> products;
+
+    @ApiModelProperty("品牌集合")
+    private List<BrandVO> brands;
+
+}

+ 10 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/UmsMemberCert.java

@@ -0,0 +1,10 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.UmsMember;
+import lombok.Data;
+
+@Data
+public class UmsMemberCert extends UmsMember {
+    private String companyName;
+    private String certNo;
+}

Деякі файли не було показано, через те що забагато файлів було змінено