Przeglądaj źródła

会员积分:
1:判断是否为会员
2:完善个人资料-注册,奖励100积分,新增积分记录
3:生日赠送优惠券,推送模板消息提醒
4:10积分支付时抵现1元
5:爱贝源会员: 1、购买除滤芯外产品,下单享受95折 2、购买滤芯产品,下单享受88折
6:1.消费10元获得1积分 2.(生日当天3倍积分) 3.活动期间双倍或者三倍
7:超过多少天无退货换货,默认待入转为入账积分
8:订单超时自动取消订单(爱贝源微商城)
9:双十一遗留问题-优惠券能够查出所有的优惠券(双十一禁用掉其他优惠券)
10:积分记录页面接口

wangxiaoming 5 lat temu
rodzic
commit
cc6b633bc5
56 zmienionych plików z 2898 dodań i 204 usunięć
  1. 3 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ResultMsg.java
  2. 73 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/agent/AgentMemberDto.java
  3. 10 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/cart/CartDto.java
  4. 13 6
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/cart/OrderPayDto.java
  5. 12 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/eo/Promotions.java
  6. 103 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ism/IntegralConfig.java
  7. 173 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ism/IntegralLog.java
  8. 29 4
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/member/Member.java
  9. 10 2
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/order/Order.java
  10. 63 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/page/PageRequest.java
  11. 69 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/page/PagedResult.java
  12. 22 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/tools/SendMessageUtil.java
  13. 6 1
      iamberry-common-tool/src/main/java/com/iamberry/app/config/ImberryConfig.java
  14. 96 0
      iamberry-common-tool/src/main/java/com/iamberry/util/RandomUtil.java
  15. 13 2
      iamberry-common-tool/src/main/java/com/iamberry/wechat/tools/ResultInfo.java
  16. 1 0
      iamberry-common-tool/src/main/java/com/iamberry/wechat/tools/loadResultUtil.java
  17. 2 0
      iamberry-common-tool/src/main/resources/iamberry-app-service-config.properties
  18. 31 0
      iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/ism/IntegralConfigService.java
  19. 102 0
      iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/ism/IntegralLogService.java
  20. 19 4
      iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/member/MemberService.java
  21. 14 0
      iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/order/AdminOrderService.java
  22. 1 0
      iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/sendmsg/CodeService.java
  23. 60 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/PageUtil.java
  24. 9 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/agent/AgentMemberServiceImpl.java
  25. 9 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/cart/CartServiceImpl.java
  26. 8 1
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/eo/PromotionsServiceImpl.java
  27. 44 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/ism/IntegralConfigServiceImpl.java
  28. 407 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/ism/IntegralLogServiceImpl.java
  29. 7 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/AdminOrderMapper.java
  30. 31 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/IntegralConfigMapper.java
  31. 57 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/IntegralLogMapper.java
  32. 193 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/IntegralLogMapper.xml
  33. 13 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/MemberMapper.java
  34. 24 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/adminOrderMapper.xml
  35. 4 2
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/cartMapper.xml
  36. 0 1
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/couponItemMapper.xml
  37. 68 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/integralConfigMapper.xml
  38. 93 4
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/memberMapper.xml
  39. 15 7
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/orderMapper.xml
  40. 42 4
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/member/MemberServiceImpl.java
  41. 20 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/member/dao/MemberDao.java
  42. 35 2
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/member/dao/imp/MemberDaoImpl.java
  43. 10 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/order/AdminOrderServiceImpl.java
  44. 13 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/order/dao/AdminOrderDao.java
  45. 55 3
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/order/dao/impl/AdminOrderDaoImpl.java
  46. 1 44
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/admin/AdminOrderHandlers.java
  47. 230 32
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/agent/AgentHandler.java
  48. 14 52
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/cart/CartHandlers.java
  49. 2 0
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/coupon/CouponTypeHandler.java
  50. 40 4
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/home/HomeHandler.java
  51. 79 0
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/ism/IntegralLogHandler.java
  52. 144 13
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/mq/MQTask.java
  53. 29 8
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/order/OrderHandler.java
  54. 82 7
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/ResponseWechatPayHandler.java
  55. 179 0
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/utils/StitchAttrUtil.java
  56. 16 1
      iamberry-wechat-web/src/main/resources/iamberry-wechat-service-mybatis.xml

+ 3 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ResultMsg.java

@@ -9,6 +9,9 @@ public class ResultMsg implements java.io.Serializable{
 
 	private static final long serialVersionUID = 8987614804726091566L;
 
+	public static final String SUCCESS = "SUCCESS";
+	public static final String ERROR = "ERROR";
+
 	private boolean status;
 	
 	private String ResultCode;

+ 73 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/agent/AgentMemberDto.java

@@ -1,6 +1,10 @@
 package com.iamberry.wechat.core.entity.agent;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 微代理会员中心 实体类
@@ -20,6 +24,8 @@ public class AgentMemberDto implements Serializable{
 	private String userNickname;			//用户昵称
 	
 	private Integer userSurplusIntegral;	//剩余积分
+
+	private Integer userPendIntegral;	//待入积分
 	
 	private Integer userIncome;				//收入金额,单位为分
 	
@@ -30,9 +36,20 @@ public class AgentMemberDto implements Serializable{
 	private Integer applyIsRead;			//是否已读	 	1:已读	2:未读
 
 	private Integer userStatus;				//用户状态		1:未关注,默认  2:已关注     0:已取消关注
+
+	private Integer userIsVip;				//是否为vip :1:非vip  2:vip
+
+	private String userTel;					//用户电话
+	@DateTimeFormat(pattern="yyyy-MM-dd")
+	@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+	private Date userBirthDate;				//生日
+	private String userName;				//姓名
+	private Integer userSex;				//用户性别		default 1; 1:男   2:女   0:未知
 	
 	private OrderStatusDto orderStatusDto;	//订单状态
 
+	private Integer couponCount;	//优惠券数量
+
 	public Integer getUserId() {
 		return userId;
 	}
@@ -120,6 +137,62 @@ public class AgentMemberDto implements Serializable{
 		this.userStatus = userStatus;
 	}
 
+	public Integer getUserPendIntegral() {
+		return userPendIntegral;
+	}
+
+	public void setUserPendIntegral(Integer userPendIntegral) {
+		this.userPendIntegral = userPendIntegral;
+	}
+
+	public Integer getUserIsVip() {
+		return userIsVip;
+	}
+
+	public void setUserIsVip(Integer userIsVip) {
+		this.userIsVip = userIsVip;
+	}
+
+	public String getUserTel() {
+		return userTel;
+	}
+
+	public void setUserTel(String userTel) {
+		this.userTel = userTel;
+	}
+
+	public Date getUserBirthDate() {
+		return userBirthDate;
+	}
+
+	public void setUserBirthDate(Date userBirthDate) {
+		this.userBirthDate = userBirthDate;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public Integer getUserSex() {
+		return userSex;
+	}
+
+	public void setUserSex(Integer userSex) {
+		this.userSex = userSex;
+	}
+
+	public Integer getCouponCount() {
+		return couponCount;
+	}
+
+	public void setCouponCount(Integer couponCount) {
+		this.couponCount = couponCount;
+	}
+
 	@Override
 	public String toString() {
 		return "AgentMemberDto [userId=" + userId + ", userOpenid="

+ 10 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/cart/CartDto.java

@@ -55,6 +55,8 @@ public class CartDto implements Serializable{
 
 	private Integer cartIsSource;	//商品来源   1:产品颜色表   2:配件表
 
+	private Integer colorType;	//商品类型  1:产品  2:滤芯
+
 	private List<SalesUserGift> salesUserGiftList; //赠品集合
 
 	private List<ItemGift> itemGiftList;		//订单项关联赠品
@@ -219,4 +221,12 @@ public class CartDto implements Serializable{
 	public void setItemGiftList(List<ItemGift> itemGiftList) {
 		this.itemGiftList = itemGiftList;
 	}
+
+	public Integer getColorType() {
+		return colorType;
+	}
+
+	public void setColorType(Integer colorType) {
+		this.colorType = colorType;
+	}
 }

+ 13 - 6
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/cart/OrderPayDto.java

@@ -28,7 +28,9 @@ public class OrderPayDto implements java.io.Serializable{
 	
 	private String errorInfo; // 错误信息
 	
-	private int meonyProportion; // 积分和人民币的比例 一个积分抵扣多少元人民币
+	private String meonyProportion; // 积分和人民币的比例 一个积分抵扣多少元人民币
+
+	private Integer userIsVip;		//是否为vip :1:非vip  2:vip
 	
 	private String cartId; // 购物车ID,点击去支付时,需要传回来
 	
@@ -46,11 +48,11 @@ public class OrderPayDto implements java.io.Serializable{
 		this.cartId = cartId;
 	}
 
-	public int getMeonyProportion() {
+	public String getMeonyProportion() {
 		return meonyProportion;
 	}
 
-	public void setMeonyProportion(int meonyProportion) {
+	public void setMeonyProportion(String meonyProportion) {
 		this.meonyProportion = meonyProportion;
 	}
 
@@ -118,7 +120,12 @@ public class OrderPayDto implements java.io.Serializable{
 		this.addressInfo = addressInfo;
 	}
 
-	
-	
-	
+
+	public Integer getUserIsVip() {
+		return userIsVip;
+	}
+
+	public void setUserIsVip(Integer userIsVip) {
+		this.userIsVip = userIsVip;
+	}
 }

+ 12 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/eo/Promotions.java

@@ -1,5 +1,7 @@
 package com.iamberry.wechat.core.entity.eo;
 
+import com.iamberry.wechat.core.entity.ism.IntegralConfig;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
@@ -32,6 +34,8 @@ public class Promotions  implements  Serializable{
     private List<SettlementGift> settlementGiftList = new ArrayList<>();
     //结算赠品
     private List<Spike> spikeList = new ArrayList<>();
+    //结算获取积分
+    private List<IntegralConfig> integralConfigList = new ArrayList<>();
 
     public Integer getPromotionsId(){
         return promotionsId;
@@ -112,4 +116,12 @@ public class Promotions  implements  Serializable{
     public void setSpikeList(List<Spike> spikeList) {
         this.spikeList = spikeList;
     }
+
+    public List<IntegralConfig> getIntegralConfigList() {
+        return integralConfigList;
+    }
+
+    public void setIntegralConfigList(List<IntegralConfig> integralConfigList) {
+        this.integralConfigList = integralConfigList;
+    }
 }

+ 103 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ism/IntegralConfig.java

@@ -0,0 +1,103 @@
+package com.iamberry.wechat.core.entity.ism;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * @author Administrator
+ * @Date 2019-11-07
+ */
+public class IntegralConfig  implements  Serializable{
+    private static final long serialVersionUID = -3892657843914692767L;
+    //积分配置id
+    private Integer inteConfId;
+    //活动id
+    private Integer promotionsId;
+    //积分配置名称
+    private String inteConfName;
+    //积分变动数量
+    private String inteConfCalculation;
+    //状态 1:使用中 2:未使用
+    private Integer inteConfStatus;
+    //排序
+    private Integer inteConfSort;
+    //
+    private String inteConfDesc;
+    //创建时间
+    private Date inteConfCreateTime;
+    //修改时间'
+    private Date inteConfUpdateTime;
+
+    public Integer getInteConfId(){
+        return inteConfId;
+    }
+
+    public void setInteConfId(Integer  inteConfId){
+        this.inteConfId=inteConfId;
+    }
+
+    public String getInteConfName(){
+        return inteConfName;
+    }
+
+    public void setInteConfName(String  inteConfName){
+        this.inteConfName=inteConfName;
+    }
+
+    public String getInteConfCalculation(){
+        return inteConfCalculation;
+    }
+
+    public void setInteConfCalculation(String  inteConfCalculation){
+        this.inteConfCalculation=inteConfCalculation;
+    }
+
+    public Integer getInteConfStatus(){
+        return inteConfStatus;
+    }
+
+    public void setInteConfStatus(Integer  inteConfStatus){
+        this.inteConfStatus=inteConfStatus;
+    }
+
+    public Date getInteConfCreateTime(){
+        return inteConfCreateTime;
+    }
+
+    public void setInteConfCreateTime(Date  inteConfCreateTime){
+        this.inteConfCreateTime=inteConfCreateTime;
+    }
+
+    public Date getInteConfUpdateTime(){
+        return inteConfUpdateTime;
+    }
+
+    public void setInteConfUpdateTime(Date  inteConfUpdateTime){
+        this.inteConfUpdateTime=inteConfUpdateTime;
+    }
+
+    public Integer getPromotionsId() {
+        return promotionsId;
+    }
+
+    public void setPromotionsId(Integer promotionsId) {
+        this.promotionsId = promotionsId;
+    }
+
+    public Integer getInteConfSort() {
+        return inteConfSort;
+    }
+
+    public void setInteConfSort(Integer inteConfSort) {
+        this.inteConfSort = inteConfSort;
+    }
+
+    public String getInteConfDesc() {
+        return inteConfDesc;
+    }
+
+    public void setInteConfDesc(String inteConfDesc) {
+        this.inteConfDesc = inteConfDesc;
+    }
+}

+ 173 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ism/IntegralLog.java

@@ -0,0 +1,173 @@
+package com.iamberry.wechat.core.entity.ism;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *  积分记录表类
+ * @author Administrator
+ * @Date 2019-11-13
+ */
+public class IntegralLog  implements  Serializable{
+    private static final long serialVersionUID = 8736025949126608349L;
+    //积分记录id
+    private Integer inteLogId;
+    //用户openid
+    private String userOpenId;
+    //日志名称
+    private String inteLogName;
+    //积分配置id
+    private Integer inteConfId;
+    //积分类型 1:添加积分2:使用积分3:待入账积分
+    private Integer inteLogType;
+    //待入账积分转入时间 只有inte_log_type=3才有这个时间
+    private Date inteLogWaitingDate;
+    //待入账绑定订单
+    private String inteLogWaitingOrderId;
+    //使用积分,记录的订单号,只有inte_log_type=2才有这个时间
+    private String inteLogUseOrderId;
+    //待入账->入账会记录过去的待入账id
+    private Integer inteLogOldId;
+    //积分变动数量
+    private Integer inteLogChangeNum;
+    //积分变动前数量
+    private Integer inteLogBeforeNum;
+    //积分变动后数量
+    private Integer inteLogAfterNum;
+    //状态 1:使用中 2:删除
+    private Integer inteLogStatus;
+    //备注
+    private String inteLogDesc;
+    //创建时间'
+    private Date inteLogCreateTime;
+    //积分使用名称
+    private String inteConfName;
+
+    public Integer getInteLogId(){
+        return inteLogId;
+    }
+
+    public void setInteLogId(Integer  inteLogId){
+        this.inteLogId=inteLogId;
+    }
+
+    public String getUserOpenId(){
+        return userOpenId;
+    }
+
+    public void setUserOpenId(String  userOpenId){
+        this.userOpenId=userOpenId;
+    }
+
+    public Integer getInteConfId(){
+        return inteConfId;
+    }
+
+    public void setInteConfId(Integer  inteConfId){
+        this.inteConfId=inteConfId;
+    }
+
+    public Integer getInteLogType(){
+        return inteLogType;
+    }
+
+    public void setInteLogType(Integer  inteLogType){
+        this.inteLogType=inteLogType;
+    }
+
+    public Date getInteLogWaitingDate(){
+        return inteLogWaitingDate;
+    }
+
+    public void setInteLogWaitingDate(Date  inteLogWaitingDate){
+        this.inteLogWaitingDate=inteLogWaitingDate;
+    }
+
+    public String getInteLogWaitingOrderId(){
+        return inteLogWaitingOrderId;
+    }
+
+    public void setInteLogWaitingOrderId(String  inteLogWaitingOrderId){
+        this.inteLogWaitingOrderId=inteLogWaitingOrderId;
+    }
+
+    public Integer getInteLogChangeNum(){
+        return inteLogChangeNum;
+    }
+
+    public void setInteLogChangeNum(Integer  inteLogChangeNum){
+        this.inteLogChangeNum=inteLogChangeNum;
+    }
+
+    public Integer getInteLogBeforeNum(){
+        return inteLogBeforeNum;
+    }
+
+    public void setInteLogBeforeNum(Integer  inteLogBeforeNum){
+        this.inteLogBeforeNum=inteLogBeforeNum;
+    }
+
+    public Integer getInteLogAfterNum(){
+        return inteLogAfterNum;
+    }
+
+    public void setInteLogAfterNum(Integer  inteLogAfterNum){
+        this.inteLogAfterNum=inteLogAfterNum;
+    }
+
+    public Integer getInteLogStatus(){
+        return inteLogStatus;
+    }
+
+    public void setInteLogStatus(Integer  inteLogStatus){
+        this.inteLogStatus=inteLogStatus;
+    }
+
+    public String getInteLogDesc(){
+        return inteLogDesc;
+    }
+
+    public void setInteLogDesc(String  inteLogDesc){
+        this.inteLogDesc=inteLogDesc;
+    }
+
+    public Date getInteLogCreateTime(){
+        return inteLogCreateTime;
+    }
+
+    public void setInteLogCreateTime(Date  inteLogCreateTime){
+        this.inteLogCreateTime=inteLogCreateTime;
+    }
+
+    public String getInteLogUseOrderId() {
+        return inteLogUseOrderId;
+    }
+
+    public void setInteLogUseOrderId(String inteLogUseOrderId) {
+        this.inteLogUseOrderId = inteLogUseOrderId;
+    }
+
+    public Integer getInteLogOldId() {
+        return inteLogOldId;
+    }
+
+    public void setInteLogOldId(Integer inteLogOldId) {
+        this.inteLogOldId = inteLogOldId;
+    }
+
+    public String getInteLogName() {
+        return inteLogName;
+    }
+
+    public void setInteLogName(String inteLogName) {
+        this.inteLogName = inteLogName;
+    }
+
+    public String getInteConfName() {
+        return inteConfName;
+    }
+
+    public void setInteConfName(String inteConfName) {
+        this.inteConfName = inteConfName;
+    }
+}

Plik diff jest za duży
+ 29 - 4
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/member/Member.java


+ 10 - 2
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/order/Order.java

@@ -65,6 +65,8 @@ public class Order implements java.io.Serializable{
 	private Date beginDate;	//开始时间
 	@DateTimeFormat(pattern="yyyy-MM-dd")
 	private Date endDate;		//结束时间
+
+	private Date cancelDate;		//取消时间
 	
 	private int deadline;		//返利期限,以秒为单位,必须大于此时间才能返利
 	
@@ -337,6 +339,12 @@ public class Order implements java.io.Serializable{
 	public void setSalesChangeOrderid(String salesChangeOrderid) {
 		this.salesChangeOrderid = salesChangeOrderid;
 	}
-	
-	
+
+	public Date getCancelDate() {
+		return cancelDate;
+	}
+
+	public void setCancelDate(Date cancelDate) {
+		this.cancelDate = cancelDate;
+	}
 }

+ 63 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/page/PageRequest.java

@@ -0,0 +1,63 @@
+package com.iamberry.wechat.core.entity.page;
+
+import java.io.Serializable;
+
+/**
+ * 请求的分页数据
+ * @author 献
+ * @company 深圳爱贝源科技有限公司
+ * @website www.iamberry.com
+ * @tel 18271840547
+ * @date 2017/5/18
+ */
+public class PageRequest<T> implements Serializable {
+
+    private static final long serialVersionUID = -6003006551112186750L;
+
+    private T data;                   // 实例数据
+
+    private Integer pageNO;           // 请求的页数
+
+    private Integer pageSize;         // 每页的数据大小
+
+    private boolean isPageTotal;      // 是否需要总的页数
+
+    public PageRequest(T data, Integer pageNO, Integer pageSize, boolean isPageTotal) {
+        this.data = data;
+        this.pageNO = pageNO;
+        this.pageSize = pageSize;
+        this.isPageTotal = isPageTotal;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public void setPageNO(Integer pageNO) {
+        this.pageNO = pageNO;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public void setPageTotal(boolean pageTotal) {
+        isPageTotal = pageTotal;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public Integer getPageNO() {
+        return pageNO;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public boolean isPageTotal() {
+        return isPageTotal;
+    }
+}

+ 69 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/page/PagedResult.java

@@ -0,0 +1,69 @@
+package com.iamberry.wechat.core.entity.page;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分页返回的数据
+ * @author 献
+ * @company 深圳爱贝源科技有限公司
+ * @website www.iamberry.com
+ * @tel 18271840547
+ * @date 2017/5/12
+ */
+public class PagedResult<T> implements Serializable {
+
+
+	private static final long serialVersionUID = 8272802698002051352L;
+
+	private List<T> dataList;		// 数据
+	
+	private long pageNO;			// 当前页
+	
+	private long pageSize;			// 每页数据
+	
+	private long total;				// 总条数
+	
+	private long pages;				// 总页面数目
+
+	public List<T> getDataList() {
+		return dataList;
+	}
+
+	public void setDataList(List<T> dataList) {
+		this.dataList = dataList;
+	}
+
+	public long getPageNO() {
+		return pageNO;
+	}
+
+	public void setPageNO(long pageNO) {
+		this.pageNO = pageNO;
+	}
+
+	public long getPageSize() {
+		return pageSize;
+	}
+
+	public void setPageSize(long pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public long getTotal() {
+		return total;
+	}
+
+	public void setTotal(long total) {
+		this.total = total;
+	}
+
+	public long getPages() {
+		return pages;
+	}
+
+	public void setPages(long pages) {
+		this.pages = pages;
+	}
+	
+}

+ 22 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/tools/SendMessageUtil.java

@@ -97,6 +97,9 @@ public class SendMessageUtil {
 			case 11:  //11、推送模板
 				WeixinUtil.sendTemplateMessage(NameUtils.getConfig("appId"), NameUtils.getConfig("appSecret"), openId, ResultInfo.service_push, date, url);
 				break;
+			case 12:
+				WeixinUtil.sendTemplateMessage(NameUtils.getConfig("appId"), NameUtils.getConfig("appSecret"), openId, ResultInfo.member_activation, date, url);
+				break;
 			default:
 				break;
 			}
@@ -252,4 +255,23 @@ public class SendMessageUtil {
 				.replaceFirst("remarkValue",remark);
 		sendTemplateMessageToOpenid(temp, openId, url,11);
 	}
+
+
+	/**
+	 * 会员激活-生日提醒
+	 * @param first
+	 * @param keyword1
+	 * @param keyword2
+	 * @param remark
+	 * @param openId
+	 * @param url
+	 */
+	public void memberActivation(String first,String keyword1,String keyword2,String remark,String openId,String url){
+		String temp = ResultInfo.MEMBERACTIVATION;
+		temp = temp.replaceFirst("firstValueIamberry", first)
+				.replaceFirst("keyword1Value",keyword1)
+				.replaceFirst("keyword2Value",keyword2)
+				.replaceFirst("remarkValue",remark);
+		sendTemplateMessageToOpenid(temp, openId, url,12);
+	}
 }

+ 6 - 1
iamberry-common-tool/src/main/java/com/iamberry/app/config/ImberryConfig.java

@@ -19,6 +19,9 @@ public class ImberryConfig {
 	public static String INTER_SMS_TEXT=""; //文字
 	public static String INTER_SMS_KEY=""; //云片key
 
+	/**   发送验证码      */
+	public static String PROBATION_VERIFICATION_CODE="";
+
 	/**发送待处理订单信息**/
 	public static String PENDING_ORDER_REMINDER = "";
 
@@ -41,7 +44,9 @@ public class ImberryConfig {
 			INTER_SMS_KEY=pro.getProperty("INTER_SMS_KEY");
 
 			PENDING_ORDER_REMINDER = pro.getProperty("PENDING_ORDER_REMINDER");
-			
+
+			PROBATION_VERIFICATION_CODE = pro.getProperty("PROBATION_VERIFICATION_CODE");
+
 			System.out.println("这里需要打印"+BASE_URL);
 
 		} catch (Exception e) {

+ 96 - 0
iamberry-common-tool/src/main/java/com/iamberry/util/RandomUtil.java

@@ -0,0 +1,96 @@
+package com.iamberry.util;
+
+import java.util.Random;
+
+/**
+ * 创建时间:2016年5月13日 下午2:48:48
+ * 
+ * 随机字符串
+ * 
+ * @author andy
+ * @version 2.2
+ */
+
+public class RandomUtil {
+
+	public static final String ALL_CHAR = "-_#&$@+-*/%()[]0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+	public static final String LETTER_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+	public static final String NUMBER_CHAR = "0123456789";
+
+	public static final String SPECIAL_CHAR = "-_#&$@+-*/%()[]";
+	
+	public static final String LETTER_NUMBER_CHAR = LETTER_CHAR + NUMBER_CHAR;
+
+	/**
+	 * 返回一个定长的随机字符串
+	 * 
+	 * @param chars
+	 *            模型串
+	 * @param length
+	 *            随机长度
+	 * @return
+	 */
+	public static String randomString(String chars, int length) {
+		StringBuffer sb = new StringBuffer();
+		Random random = new Random();
+		for (int i = 0; i < length; i++) {
+			sb.append(chars.charAt(random.nextInt(chars.length())));
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 返回一个定长的随机字符串字母全部大写
+	 * 
+	 * @param chars
+	 *            模型串
+	 * @param length
+	 *            随机字符串长度
+	 * @return 随机字符串
+	 */
+	public static String randomLowerString(String chars, int length) {
+		return randomString(chars, length).toLowerCase();
+	}
+
+	/**
+	 * 返回一个定长的随机字符串字母全部小写
+	 * 
+	 * @param chars
+	 *            模型串
+	 * @param length
+	 *            随机字符串长度
+	 * @return 随机字符串
+	 */
+	public static String randomUpperString(String chars, int length) {
+		return randomString(chars, length).toLowerCase();
+	}
+
+	/**
+	 * 生成一个定长的纯0字符串
+	 * 
+	 * @param length
+	 *            字符串长度
+	 * @return 纯0字符串
+	 */
+	public static String randomZeroString(int length) {
+		StringBuffer sb = new StringBuffer();
+		for (int i = 0; i < length; i++) {
+			sb.append("0");
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * 6为短信验证码
+	 * @return
+	 */
+	public static String getRandom(){
+		String randNum = new Random().nextInt(1000000)+"";
+		if(randNum.length()!=4){
+			return getRandom();
+		}
+		return randNum;
+	}
+}

+ 13 - 2
iamberry-common-tool/src/main/java/com/iamberry/wechat/tools/ResultInfo.java

@@ -15,7 +15,8 @@ public class ResultInfo {
 	public static String drpBookAthorNoEnough="分销商订货权限不足";
 	public static String getMoneyconditionGT = "提现金额必须大于";
 	public static String getMoneyconditionLT = ",小于";
-	
+	public static String ORDER_NO_INTEGRAL="积分不足";
+
 	public static int getMoneyLimitDown=10000;
 	public static int getMoneyLimitTop=1000000000;
 	
@@ -59,6 +60,8 @@ public class ResultInfo {
 	public static String rebateOrderText = "";												//定时任务返利模板
 	public static String yearMsg = "";												//定时任务返利模板
 
+	public static String  COUPON_URL = "https://s.iamberry.com/aiberle/wechat/coupon_list.html";
+
 	/**
 	 * 活动过期
 	 */
@@ -86,7 +89,12 @@ public class ResultInfo {
 	public static String QRCODE_IMAGE = "/common/qrcode_images";		//下载二维码图片保存路径
 	
 	public static String DRP_INDEX_PAGE = "http://h5.iamberry.com/iamberry/wechat/drp/indexPage";
-	
+
+	/**
+	 * 会员激活
+	 */
+	public static String member_activation="";	//会员激活-生日提醒
+
 		//测试环境
 		// 商城首页
 		public static String INDEX_PAGE = "http://h5.iamberry.com/iamberry/wechat/index";
@@ -151,6 +159,9 @@ public class ResultInfo {
 	/** 退款申请通知 **/
 	//public static String ORDERREFUNDMSG= "{'first':{'color':'#173177','value':'firstValueIamberry'}, 'keyword1':{'color':'#173177','value':'keyword1Value'}, 'keyword2':{'color':'#173177', 'value':'keyword2Value'}, 'keyword3':{'color':'#173177', 'value':'keyword3Value'},'remark':{'color':'colorValue','value':'remarkValue'}}";
 
+	/** 	会员积分 	*/
+	public static String MEMBERACTIVATION = "{'first':{'color':'#173177','value':'firstValueIamberry'}, 'keyword1':{'color':'#173177','value':'keyword1Value'}, 'keyword2':{'color':'#173177', 'value':'keyword2Value'},'remark':{'color':'#173177','value':'remarkValue'}}";
+
 	//微信模板消息提示语
 	public static final String REWARDSWILLMESSAGE = "尊敬的客户您好~您有新的返现即将入账~";
 	public static final String REWARDSHASMESSAGE  = "您有新的返现已入账~";

+ 1 - 0
iamberry-common-tool/src/main/java/com/iamberry/wechat/tools/loadResultUtil.java

@@ -103,6 +103,7 @@ public class loadResultUtil {
 			ResultInfo.yearMsg = prop.getProperty("yearMsg");
 
 			ResultInfo.service_push = prop.getProperty("service_push");			//服务推送模板
+			ResultInfo.member_activation = prop.getProperty("member_activation");			//服务推送模板
 
 		} catch (IOException e) {
 			ResultInfo.SUCCESSINFO="操作成功!";

+ 2 - 0
iamberry-common-tool/src/main/resources/iamberry-app-service-config.properties

@@ -16,3 +16,5 @@ INTER_SMS_TEXT=\u60A8\u7684\u9A8C\u8BC1\u7801\u662F{0}\uFF0C3\u5206\u949F\u5185\
 INTER_SMS_KEY=2d3cc4afa42ec747b43a09ab89151133
 
 PENDING_ORDER_REMINDER=\u3010\u7231\u8D1D\u6E90\u3011\u60A8\u6709{0}\u4E2A\u8BA2\u5355\u5F85\u5904\u7406\uFF0C\u8BF7\u767B\u9646\u540E\u53F0\u53CA\u65F6\u5904\u7406(https://h5.iamberry.com/)\u3002
+
+PROBATION_VERIFICATION_CODE=\u3010\u7231\u8d1d\u6e90\u3011\u60a8\u7684\u9a8c\u8bc1\u7801\u662f\u007b\u0030\u007d\uff0c\u0033\u5206\u949f\u5185\u6709\u6548\u3002\u5982\u975e\u672c\u4eba\u64cd\u4f5c\uff0c\u8bf7\u5ffd\u7565\u672c\u77ed\u4fe1

+ 31 - 0
iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/ism/IntegralConfigService.java

@@ -0,0 +1,31 @@
+package com.iamberry.wechat.face.ism;
+
+import com.iamberry.wechat.core.entity.ism.IntegralConfig;
+
+import java.util.List;
+
+/**
+ *  积分配置表接口
+ * @author Administrator
+ * @Date 2019-11-10
+ */
+public interface IntegralConfigService {
+    /**
+     * 获取集合
+     * @param  integralConfig
+     * @return List
+     */
+    List<IntegralConfig> getIntegralConfigList(IntegralConfig integralConfig);
+    /**
+     * 获取集合
+     * @param  str
+     * @return List
+     */
+    List<IntegralConfig> getSpikeListAllByPromo(int[] str);
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  integralConfig
+     */
+    IntegralConfig getIntegralConfigById(Integer id);
+}

+ 102 - 0
iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/ism/IntegralLogService.java

@@ -0,0 +1,102 @@
+package com.iamberry.wechat.face.ism;
+
+import com.iamberry.wechat.core.entity.ism.IntegralLog;
+import com.iamberry.wechat.core.entity.order.Order;
+import com.iamberry.wechat.core.entity.page.PageRequest;
+import com.iamberry.wechat.core.entity.page.PagedResult;
+
+import java.util.List;
+
+/**
+ *  积分记录表接口
+ * @author Administrator
+ * @Date 2019-11-10
+ */
+public interface IntegralLogService {
+    /**
+     * 获取集合
+     * @param  integralLog
+     * @return List
+     */
+    List<IntegralLog> getIntegralLogList(IntegralLog integralLog);
+    /**
+     * 获取集合 - 前端页面,获取增加积分和消费积分记录
+     * @param  integralLog
+     * @return List
+     */
+    List<IntegralLog> getIntegralLogListByAccoUser(IntegralLog integralLog);
+
+    /*分页 -- 前台专用*/
+    PagedResult<IntegralLog> listIntegralLog(PageRequest<IntegralLog> pageRequest);
+
+    /**
+     * 获取集合-定时器,获取所有待入账记录
+     * @param
+     * @return List
+     */
+    List<IntegralLog> getIntegralLogListByWaitUser();
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  integralLog
+     */
+    IntegralLog getIntegralLogById(Integer id);
+    /**
+     * 增加数据
+     * @param  integralLog
+     * @return Integer
+     */
+    Integer  save(IntegralLog integralLog);
+    /**
+     * 修改数据
+     * @param  integralLog
+     * @return Integer
+     */
+    Integer  update(IntegralLog integralLog);
+    /**
+     * 删除数据
+     * @param  id
+     * @return Integer
+     */
+    Integer  delete(Integer id);
+
+    /**
+     * 订单结算获得积分
+     * @return Integer
+     */
+    Integer addOrderChangIntegra(String orderId, Integer integraConfigId);
+
+    /**
+     * 订单结算使用积分
+     * @return Integer
+     */
+    Integer muOrderChangIntegra(Order order);
+
+    /**
+     * 直接加减积分
+     * @param  openId
+     * @return Integer
+     */
+    Integer  updateIntegral(String openId, Integer inteConfId, Integer inteLogType);
+
+    /**
+     * 取消订单待入账积分
+     * @param  orderId
+     * @return Integer
+     */
+    Integer cancelSurplusIntegral(String orderId);
+
+    /**
+     * 积分操作
+     * @param  openId
+     * @return Integer
+     */
+    Integer  changeIntegral(String openId, Integer inteConfId, Integer integralNum, Integer inteLogType, String waitingOrderId, String useOrderId, String remake);
+
+    /**
+     * 定时器-处理待入账-》已入账
+     * @param  integralLog
+     * @return Integer
+     */
+    Integer  waitUser(IntegralLog integralLog);
+}

+ 19 - 4
iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/member/MemberService.java

@@ -34,8 +34,6 @@ public interface MemberService{
 	Integer getCount();
 	/**
 	 * 分页显示用户信息
-	 * @param pageSize
-	 * @param PageNo
 	 * @return
 	 */
 	List<Member> getMemberByPage(Page page);
@@ -44,7 +42,6 @@ public interface MemberService{
 	 * 根据 userid 修改会员信息
 	 * 2016年4月21日
 	 * @author 穆再兴
-	 * @param userId
 	 * @return
 	 */
 	public Integer updateMemberByUserId(Member member);
@@ -103,7 +100,6 @@ public interface MemberService{
 	/**
 	 * 根据userid获取当前用户的“下线人数”和“已购买人数”
 	 * 2016年5月11日
-	 * @param openId
 	 * @return
 	 */
 	public List<Integer> selectDownCountByUserId(Integer userId);
@@ -123,4 +119,23 @@ public interface MemberService{
 	 * @return
 	 */
 	public Map<String, Object> getDownInfoAndBuyedCount(Page page);
+
+	/**
+	 * 修改
+	 * @param member
+	 * @return
+	 */
+	Integer nowUpdateUserByOpenId(Member member);
+
+	/**
+	 * 成为会员
+	 * @return
+	 */
+	public Integer becomeVipByOpenId(Member member);
+
+	/**
+	 * 获取今天生日的用户
+	 * @return
+	 */
+	List<Member> getNowBirthDate();
 }

+ 14 - 0
iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/order/AdminOrderService.java

@@ -109,4 +109,18 @@ public interface AdminOrderService {
 	 * @return
 	 */
 	List<Order> getOrderListToExcel(Order order);
+
+	/**
+	 * 定时任务取消订单
+	 * @param order
+	 * @return
+	 */
+	List<Order> cancelOrderList(Order order);
+
+	/**
+	 * 定时任务取消订单
+	 * @return
+	 */
+	Integer cancelOrder(String salesOrderid);
+
 }

+ 1 - 0
iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/sendmsg/CodeService.java

@@ -14,4 +14,5 @@ public interface CodeService {
 
 	//向特定手机发送验证码
 	public String informShipping(String phone, String text);
+
 }

+ 60 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/PageUtil.java

@@ -0,0 +1,60 @@
+package com.iamberry.wechat.service;
+
+import com.github.pagehelper.Page;
+import com.iamberry.wechat.core.entity.page.PagedResult;
+
+import java.util.List;
+
+/**
+ * 分页工具类
+ * @author 献
+ * @company 深圳爱贝源科技有限公司
+ * @website www.iamberry.com
+ * @tel 18271840547
+ * @date 2017/5/18
+ */
+public class PageUtil {
+
+    /**
+     * 根据 List 获取分页数据
+     * @param datas
+     * @param <T>
+     * @return
+     */
+    public static <T> PagedResult<T> getPage(List<T> datas) {
+        PagedResult<T> result = new PagedResult<T>();
+        if (datas instanceof Page) {
+            Page page = (Page) datas;
+            result.setPageNO(page.getPageNum());
+            result.setPageSize(page.getPageSize());
+            result.setDataList(page.getResult());
+            result.setTotal(page.getTotal());
+            result.setPages(page.getPages());
+        }
+        else {
+            result.setPageNO(1);
+            result.setPageSize(datas.size());
+            result.setDataList(datas);
+            result.setTotal(datas.size());
+        }
+        return result;
+    }
+
+    /**
+     * 根据Page 对象分页
+     * @param page
+     * @param <T>
+     * @return
+     */
+    public static <T> PagedResult<T> getPage(Page page) {
+        PagedResult<T> result = new PagedResult<T>();
+        result.setPageNO(page.getPageNum());
+        result.setPageSize(page.getPageSize());
+        result.setDataList(page.getResult());
+        result.setTotal(page.getTotal());
+        result.setPages(page.getPages());
+
+        return result;
+    }
+
+}

+ 9 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/agent/AgentMemberServiceImpl.java

@@ -36,6 +36,7 @@ public class AgentMemberServiceImpl implements AgentMemberService{
 	 * @return
 	 */
 	
+	@Override
 	public List<Map<String, Integer>> getMyOrderStatusCount(String openid) {
 		return agentMemberDAO.getMyOrderStatusCount(openid);
 	}
@@ -46,6 +47,7 @@ public class AgentMemberServiceImpl implements AgentMemberService{
 	 * @return
 	 */
 	
+	@Override
 	public AgentMemberDto getAgentMemberInfo(String openid) {
 		return agentMemberDAO.getAgentMemberInfo(openid);
 	}
@@ -56,6 +58,7 @@ public class AgentMemberServiceImpl implements AgentMemberService{
 	 * @author mzx
 	 * @return
 	 */
+	@Override
 	public Integer getWillIncomeByOpenId(String openid){
 		return agentMemberDAO.getWillIncomeByOpenId(openid);
 	}
@@ -68,6 +71,12 @@ public class AgentMemberServiceImpl implements AgentMemberService{
 		agentMember.setUserIncome(member.getUserIncome() == null ? 0 : member.getUserIncome());
 		agentMember.setUserOpenid(StrUtils.checkStr(member.getUserOpenid()));
 		agentMember.setUserStatus(member.getUserStatus());
+		agentMember.setUserIsVip(member.getUserIsVip());
+		agentMember.setUserTel(member.getUserTel());
+		agentMember.setUserSex(member.getUserSex());
+		agentMember.setUserName(member.getUserName());
+		agentMember.setUserBirthDate(member.getUserBirthDate());
+		agentMember.setUserSurplusIntegral(member.getUserSurplusIntegral());
 		//各种状态订单的数量
 		List<Map<String, Integer>> list = agentMemberDAO.getMyOrderStatusCount(member.getUserOpenid());
 		OrderStatusDto statusDto = getOrderStatusDtoByMap(list);

+ 9 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/cart/CartServiceImpl.java

@@ -14,6 +14,7 @@ import com.iamberry.wechat.core.entity.product.ProductFittings;
 import com.iamberry.wechat.core.entity.product.SalesUserGift;
 import com.iamberry.wechat.face.eo.GiftPoolService;
 import com.iamberry.wechat.face.eo.ItemGiftService;
+import com.iamberry.wechat.face.ism.IntegralLogService;
 import com.iamberry.wechat.face.order.AdminOrderService;
 import com.iamberry.wechat.tools.ResultInfo;
 import com.iamberry.wechat.tools.SendMessageUtil;
@@ -72,6 +73,8 @@ public class CartServiceImpl implements CartService {
 	private GiftPoolService giftPoolService;
 	@Autowired
 	private ItemGiftService itemGiftService;
+	@Autowired
+	private IntegralLogService integralLogService;
 	
 	
 	@Override
@@ -211,6 +214,12 @@ public class CartServiceImpl implements CartService {
 				}
 			}
 		}
+
+		//订单结算使用积分
+		if(order.getSalesIntegralNum() > 0){
+			integralLogService.muOrderChangIntegra(order);
+		}
+
 		// 删除购物车项目
 		cartDao.deleteBatchCartListById(cartIds);
 		return true;

+ 8 - 1
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/eo/PromotionsServiceImpl.java

@@ -2,9 +2,11 @@ package com.iamberry.wechat.service.eo;
 import com.iamberry.wechat.core.entity.eo.Promotions;
 import com.iamberry.wechat.core.entity.eo.SettlementGift;
 import com.iamberry.wechat.core.entity.eo.Spike;
+import com.iamberry.wechat.core.entity.ism.IntegralConfig;
 import com.iamberry.wechat.face.eo.PromotionsService;
 import com.iamberry.wechat.face.eo.SettlementGiftService;
 import com.iamberry.wechat.face.eo.SpikeService;
+import com.iamberry.wechat.face.ism.IntegralConfigService;
 import com.iamberry.wechat.service.mapper.PromotionsMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -20,11 +22,12 @@ import java.util.List;
 public class PromotionsServiceImpl  implements PromotionsService {
     @Autowired
     private PromotionsMapper promotionsMapper;
-
     @Autowired
     private SettlementGiftService settlementGiftService;
     @Autowired
     private SpikeService spikeService;
+    @Autowired
+    private IntegralConfigService integralConfigService;
     /**
      * 获取集合
      * @param  promotions
@@ -55,6 +58,10 @@ public class PromotionsServiceImpl  implements PromotionsService {
         List<Spike> spikeList = spikeService.getSpikeListAll(str);
         promotions.setSpikeList(spikeList);
 
+        //获取当前活动积分兑换
+        List<IntegralConfig> integralConfigList = integralConfigService.getSpikeListAllByPromo(str);
+        promotions.setIntegralConfigList(integralConfigList);
+
         //获取当前活动所有满减
         return promotions;
     }

+ 44 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/ism/IntegralConfigServiceImpl.java

@@ -0,0 +1,44 @@
+package com.iamberry.wechat.service.ism;
+
+import com.iamberry.wechat.core.entity.ism.IntegralConfig;
+import com.iamberry.wechat.face.ism.IntegralConfigService;
+import com.iamberry.wechat.service.mapper.IntegralConfigMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *  积分配置表接口
+ * @author Administrator
+ * @Date 2019-11-10
+ */
+@Service
+public class IntegralConfigServiceImpl  implements IntegralConfigService {
+    @Autowired
+    private IntegralConfigMapper integralConfigMapper;
+    /**
+     * 获取集合
+     * @param  integralConfig
+     * @return List
+     */
+    @Override
+    public List<IntegralConfig> getIntegralConfigList(IntegralConfig integralConfig){
+        return  integralConfigMapper.getIntegralConfigList(integralConfig);
+    }
+
+    @Override
+    public List<IntegralConfig> getSpikeListAllByPromo(int[] str) {
+        return  integralConfigMapper.getSpikeListAllByPromo(str);
+    }
+
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  integralConfig
+     */
+    @Override
+    public IntegralConfig getIntegralConfigById(Integer  id){
+        return  integralConfigMapper.getIntegralConfigById(id);
+    }
+}

+ 407 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/ism/IntegralLogServiceImpl.java

@@ -0,0 +1,407 @@
+package com.iamberry.wechat.service.ism;
+
+import com.github.pagehelper.PageHelper;
+import com.iamberry.wechat.core.entity.admin.ShopSystemRule;
+import com.iamberry.wechat.core.entity.ism.IntegralConfig;
+import com.iamberry.wechat.core.entity.ism.IntegralLog;
+import com.iamberry.wechat.core.entity.member.Member;
+import com.iamberry.wechat.core.entity.order.Order;
+import com.iamberry.wechat.core.entity.page.PageRequest;
+import com.iamberry.wechat.core.entity.page.PagedResult;
+import com.iamberry.wechat.face.cart.CartService;
+import com.iamberry.wechat.face.ism.IntegralLogService;
+import com.iamberry.wechat.face.order.AdminOrderService;
+import com.iamberry.wechat.service.PageUtil;
+import com.iamberry.wechat.service.mapper.IntegralConfigMapper;
+import com.iamberry.wechat.service.mapper.IntegralLogMapper;
+import com.iamberry.wechat.service.mapper.MemberMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.Format;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *  积分记录表接口
+ * @author Administrator
+ * @Date 2019-11-10
+ */
+@Service
+public class IntegralLogServiceImpl  implements IntegralLogService {
+    Logger logger = LoggerFactory.getLogger(IntegralLogServiceImpl.class);
+    @Autowired
+    private IntegralLogMapper integralLogMapper;
+    @Autowired
+    private IntegralConfigMapper integralConfigMapper;
+    @Autowired
+    private MemberMapper memberMapper;
+    @Autowired
+    private IntegralLogService integralLogService;
+    @Autowired
+    private AdminOrderService adminOrderService;
+    @Autowired
+    private CartService cartService;
+    /**
+     * 获取集合
+     * @param  integralLog
+     * @return List
+     */
+    @Override
+    public List<IntegralLog> getIntegralLogList(IntegralLog integralLog){
+        return  integralLogMapper.getIntegralLogList(integralLog);
+    }
+
+    @Override
+    public List<IntegralLog> getIntegralLogListByAccoUser(IntegralLog integralLog) {
+        return  integralLogMapper.getIntegralLogListByAccoUser(integralLog);
+    }
+
+    @Override
+    public PagedResult<IntegralLog> listIntegralLog(PageRequest<IntegralLog> pageRequest) {
+        PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
+        List<IntegralLog> detedctList = integralLogMapper.getIntegralLogListByAccoUser(pageRequest.getData());
+        return PageUtil.getPage(detedctList);
+    }
+
+    @Override
+    public List<IntegralLog> getIntegralLogListByWaitUser() {
+        return  integralLogMapper.getIntegralLogListByWaitUser();
+    }
+
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  integralLog
+     */
+    @Override
+    public IntegralLog getIntegralLogById(Integer  id){
+        return  integralLogMapper.getIntegralLogById(id);
+    }
+    /**
+     * 增加数据
+     * @param  integralLog
+     * @return Integer
+     */
+    @Override
+    public  Integer  save(IntegralLog integralLog){
+        return  integralLogMapper.save(integralLog);
+    }
+    /**
+     * 修改数据
+     * @param  integralLog
+     * @return Integer
+     */
+    @Override
+    public  Integer  update(IntegralLog integralLog){
+        return  integralLogMapper.update(integralLog);
+    }
+    /**
+     * 删除数据
+     * @param  id
+     * @return Integer
+     */
+    @Override
+    public  Integer  delete(Integer  id){
+        return  integralLogMapper.delete(id);
+    }
+
+    /**
+     * 订单结算只能获得待入账积分
+     * @param orderId
+     * @return
+     */
+    @Override
+    @Transactional
+    public Integer addOrderChangIntegra(String orderId,Integer integraConfigId) {
+        Integer flag = 0;
+        Order order = new Order();
+        order.setSalesOrderid(orderId);
+        order = cartService.selectOrderInfoById(order);
+
+        Format f = new SimpleDateFormat("MM-dd");
+        Member member = memberMapper.getMemberByUserOpenId(order.getSalesOpenid());
+        String date1 = f.format(member.getUserBirthDate());
+        String date2 = f.format(new Date());
+
+        IntegralConfig integralConfig = null;
+        if(date1.equals(date2)){
+            //生日当天订单结算获取积分X*0.3
+            integralConfig = integralConfigMapper.getIntegralConfigById(3);
+        }else{
+            //订单结算获取积分 按照传入的值计算
+            integralConfig = integralConfigMapper.getIntegralConfigById(integraConfigId);
+        }
+        if(integralConfig == null || integralConfig.getInteConfCalculation()==null || "".equals(integralConfig.getInteConfCalculation())){
+            return flag;
+        }
+        Double num = Double.valueOf(integralConfig.getInteConfCalculation());
+        num = num*(order.getSalesYetAmount()/100);
+        return integralLogService.changeIntegral(order.getSalesOpenid(),integralConfig.getInteConfId(),num.intValue(),
+                3,orderId,"",integralConfig.getInteConfDesc());
+    }
+
+    /**
+     * 订单结算使用积分
+     * @param order
+     * @return
+     */
+    @Override
+    public Integer muOrderChangIntegra(Order order) {
+        IntegralConfig integralConfig = integralConfigMapper.getIntegralConfigById(4);
+        Integer num = order.getSalesIntegralNum();   //setSalesIntegralNum
+        return integralLogService.changeIntegral(order.getSalesOpenid(),integralConfig.getInteConfId(),num.intValue(),2,
+                "",order.getSalesOrderid(),integralConfig.getInteConfDesc());
+    }
+
+    /**
+     * 添加&&使用积分 - 简洁版
+     * @param  openId
+     * @param inteConfId 积分配置id
+     * @param inteLogType  积分类型 1:添加积分2:使用积分3:待入账积分
+     * @return
+     */
+    @Override
+    @Transactional
+    public Integer updateIntegral(String openId,Integer inteConfId,Integer inteLogType){
+        Integer flag = 0;
+        IntegralConfig integralConfig = integralConfigMapper.getIntegralConfigById(inteConfId);
+        if(integralConfig == null || integralConfig.getInteConfCalculation()==null || "".equals(integralConfig.getInteConfCalculation())){
+            return flag;
+        }
+        Integer num = Integer.valueOf(integralConfig.getInteConfCalculation());
+        return integralLogService.changeIntegral(openId,inteConfId,num,inteLogType,"","",integralConfig.getInteConfDesc());
+    }
+
+    /**
+     * 取消订单-减去积分
+     * @param  orderId
+     * @return
+     */
+    @Override
+    @Transactional
+    public Integer cancelSurplusIntegral(String orderId){
+        Integer flag = 0;
+
+        Order order = new Order();
+        order.setSalesOrderid(orderId);
+        order = cartService.selectOrderInfoById(order);
+
+        if(order.getSalesStatus() != 0 ){   //取消订单
+            throw  new RuntimeException("该订单未取消");
+        }
+
+        //退回使用积分
+        IntegralLog usedintegralLog = new IntegralLog();
+        usedintegralLog.setInteLogUseOrderId(orderId);
+        List<IntegralLog> usedintegralLogList = integralLogService.getIntegralLogList(usedintegralLog);
+        if(usedintegralLogList!=null && usedintegralLogList.size() > 0){
+            usedintegralLog = usedintegralLogList.get(0);
+            IntegralLog newusedintegralLog = new IntegralLog();
+            newusedintegralLog.setInteLogId(usedintegralLog.getInteLogId());
+            newusedintegralLog.setInteLogStatus(2);
+            newusedintegralLog.setInteLogDesc(usedintegralLog.getInteLogDesc()+"===订单取消");
+            flag = integralLogService.update(newusedintegralLog);
+            if(flag < 1){
+                throw  new RuntimeException("取消订单退回积分-使用积分取消");
+            }
+
+            Member member = memberMapper.getMemberByUserOpenId(usedintegralLog.getUserOpenId());
+            Member newMember = new Member();
+            newMember.setUserOpenid(member.getUserOpenid());
+            newMember.setUserSurplusIntegral(member.getUserSurplusIntegral() + usedintegralLog.getInteLogChangeNum());
+            newMember.setUserUseIntegral(member.getUserUseIntegral() - usedintegralLog.getInteLogChangeNum());
+            flag = memberMapper.nowUpdateUserByOpenId(newMember);
+            if(flag < 1){
+                throw  new RuntimeException("取消订单待入账更改失败-变更用户积分失败");
+            }
+            return flag;
+        }
+        return 1;
+    }
+
+    /**
+     * 积分操作 - 核心入口
+     * @param  openId 必填 *
+     * @param inteConfId 必填 * 积分配置id
+     * @param inteLogType  必填 * 积分类型 1:添加积分2:使用积分3:待入账积分
+     * @param waitingOrderId 订单支付获得积分,待入账需要订单编号
+     * @param useOrderId 订单支付使用积分/积分商城下单使用积分都需要订单编号
+     * @param remake 备注
+     * @return
+     */
+    @Override
+    @Transactional
+    public Integer changeIntegral(String openId, Integer inteConfId,Integer integralNum, Integer inteLogType,
+                                  String waitingOrderId,String useOrderId,String remake) {
+        Integer flag = 0;
+
+        IntegralConfig integralConfig = integralConfigMapper.getIntegralConfigById(inteConfId);
+
+        if(integralNum <= 0){
+            throw  new RuntimeException("需要添加/减少的积分为0");
+        }
+        Member member = memberMapper.getMemberByUserOpenId(openId);
+
+        Member newMember = new Member();
+        newMember.setUserOpenid(member.getUserOpenid());
+        IntegralLog integralLog = new IntegralLog();
+        integralLog.setUserOpenId(openId);
+        integralLog.setInteConfId(inteConfId);
+        integralLog.setInteLogType(inteLogType);
+        integralLog.setInteLogStatus(1);
+        if(inteLogType == 1 || inteLogType == 2){
+            integralLog.setInteLogChangeNum(integralNum);
+            integralLog.setInteLogBeforeNum(member.getUserIntegral());
+
+            if(inteLogType == 1){
+                integralLog.setInteLogAfterNum(member.getUserIntegral()+integralNum);
+                integralLog.setInteLogDesc(remake+"--积分新增:"+integralNum);
+                newMember.setUserIntegral(member.getUserIntegral()+integralNum);
+                newMember.setUserSurplusIntegral(member.getUserSurplusIntegral()+integralNum);
+            }else{
+                Integer num = member.getUserIntegral()-integralNum;
+                if(num < 0){
+                    throw  new RuntimeException("积分不足");
+                }
+                integralLog.setInteLogAfterNum(num);
+                integralLog.setInteLogDesc(remake+"--积分使用:"+integralNum);
+                if(useOrderId != null && !"".equals(useOrderId)){
+                    integralLog.setInteLogUseOrderId(useOrderId);
+                }
+                newMember.setUserSurplusIntegral(member.getUserSurplusIntegral()-integralNum);
+                newMember.setUserUseIntegral(member.getUserUseIntegral()+integralNum);
+            }
+        }else if(inteLogType == 3){
+            if(member.getUserPendIntegral() == null){
+                member.setUserPendIntegral(0);
+            }
+            integralLog.setInteLogChangeNum(integralNum);
+            integralLog.setInteLogBeforeNum(member.getUserPendIntegral());
+            integralLog.setInteLogAfterNum(member.getUserPendIntegral()+integralNum);
+
+            ShopSystemRule shopSystemRule = adminOrderService.getReluByRid(102);
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DATE, shopSystemRule.getRuleNum().intValue());  //待入账
+            integralLog.setInteLogWaitingDate(calendar.getTime()); //inteLogWaitingDate //待入账时间
+
+            if(waitingOrderId == null || "".equals(waitingOrderId)){
+                throw  new RuntimeException("待入账没有订单编号");
+            }
+            integralLog.setInteLogWaitingOrderId(waitingOrderId);
+            integralLog.setInteLogDesc(remake+"--待入账:"+integralNum+",关联订单ID:"+waitingOrderId);
+            newMember.setUserPendIntegral(member.getUserPendIntegral()+integralNum);
+        }else{
+            throw  new RuntimeException("inteLogType积分类型不正确");
+        }
+
+        logger.info("积分调整-类型:"+integralLog.getInteLogType()+";数量:"+integralLog.getInteLogChangeNum()+";userOpenId:"+integralLog.getUserOpenId());
+
+        integralLog.setInteLogName(integralConfig.getInteConfName());
+        flag = integralLogMapper.save(integralLog);
+        if(flag < 1){
+            throw  new RuntimeException("添加积分记录失败");
+        }
+
+        flag = memberMapper.nowUpdateUserByOpenId(newMember);
+        if(flag < 1){
+            throw  new RuntimeException("变更用户积分失败");
+        }
+        return flag;
+    }
+
+    /**
+     * 待入账转入-积分从待入账转为已入账
+     * @param  integralLog
+     * @return
+     */
+    @Override
+    @Transactional
+    public Integer waitUser(IntegralLog integralLog) {
+        //0:校验订单状态
+        //1.给用户减去待入账积分
+        //2.添加一条新纪录,添加剩余积分和总积分
+        //3.将该积分记录置位删除标志
+        Integer flag = 0;
+
+        Order order = new Order();
+        order.setSalesOrderid(integralLog.getInteLogWaitingOrderId());
+        order = cartService.selectOrderInfoById(order);
+        if(order.getSalesStatus() == 0 ){
+            //状态  0:取消订单
+            //cancelSurplusIntegral(order.getSalesOrderid());  理论不存在
+        }else if(order.getSalesStatus() == 1 || order.getSalesStatus() == 2){
+            //状态 1:待支付 2:已支付、待发货
+            throw  new RuntimeException("订单异常-订单状态未支付,或代发货-待入账转为已入账任务");
+        }else if(order.getSalesStatus() == 4 || order.getSalesStatus() == 8){
+             //8:订单退货,订单关闭  4:已退款  -- 退款退货,直接结束这个待入账积分
+            //将该积分记录置位删除标志-并且减去待入账 - 订单退货/退款
+            IntegralLog newIntegralLog = new IntegralLog();
+            newIntegralLog.setInteLogId(integralLog.getInteLogId());
+            newIntegralLog.setInteLogStatus(2);
+            newIntegralLog.setInteLogDesc(integralLog.getInteLogDesc()+"===订单退货/退款");
+            flag = integralLogService.update(newIntegralLog);
+            if(flag < 1){
+                throw  new RuntimeException("删除以前的待入账积分失败-待入账转为已入账任务");
+            }
+            Member member = memberMapper.getMemberByUserOpenId(integralLog.getUserOpenId());
+            if((member.getUserPendIntegral()-integralLog.getInteLogChangeNum())<0){
+                throw  new RuntimeException("删除以前的待入账积分不足-请核查用户信息-待入账转为已入账任务");
+            }
+            Member newMember = new Member();
+            newMember.setUserOpenid(member.getUserOpenid());
+            newMember.setUserPendIntegral(member.getUserPendIntegral()-integralLog.getInteLogChangeNum());
+            flag = memberMapper.nowUpdateUserByOpenId(newMember);
+            if(flag < 1){
+                throw  new RuntimeException("删除以前的待入账积分失败-变更用户积分失败");
+            }
+        }else if(order.getSalesStatus() == 3 || order.getSalesStatus() == 6 || order.getSalesStatus() == 7
+                || order.getSalesStatus() == 9  || order.getSalesStatus() == 11){
+            //3:退款申请中   6:申请退货中  7:退货中  9:换货中  11:申请换货中
+            throw  new RuntimeException("订单处于退款/退货/换货处理中,请快速处理-待入账转为已入账任务");
+        }else if(order.getSalesStatus() == 5 || order.getSalesStatus() == 12 || order.getSalesStatus() == 10){
+            //   5:已发货   12:订单完成  10:换货完成
+
+            //1.给用户减去待入账积分
+            Member member = memberMapper.getMemberByUserOpenId(integralLog.getUserOpenId());
+            if((member.getUserPendIntegral()-integralLog.getInteLogChangeNum())<0){
+                throw  new RuntimeException("待入账积分不足-请核查用户信息-待入账转为已入账任务");
+            }
+            Member newMember = new Member();
+            newMember.setUserOpenid(member.getUserOpenid());
+            newMember.setUserPendIntegral(member.getUserPendIntegral()-integralLog.getInteLogChangeNum());
+            flag = memberMapper.nowUpdateUserByOpenId(newMember);
+            if(flag < 1){
+                throw  new RuntimeException("变更用户待入账积分失败-待入账转为已入账任务");
+            }
+
+            //2.添加一条新纪录,添加剩余积分和总积分
+            String remake = integralLog.getInteLogDesc()+"原待入账LogId为:"+ integralLog.getInteLogId();
+            flag = integralLogService.changeIntegral(integralLog.getUserOpenId(),6,integralLog.getInteLogChangeNum(),1,
+                    "","",remake);
+            if(flag < 1){
+                throw  new RuntimeException("添加入账积分记录失败-待入账转为已入账任务");
+            }
+
+            //3.将该积分记录置位删除标志
+            IntegralLog newIntegralLog = new IntegralLog();
+            newIntegralLog.setInteLogId(integralLog.getInteLogId());
+            newIntegralLog.setInteLogStatus(2);
+            newIntegralLog.setInteLogDesc(integralLog.getInteLogDesc()+"===已将待入账转为已入账,故删除");
+            flag = integralLogService.update(newIntegralLog);
+            if(flag < 1){
+                throw  new RuntimeException("删除以前的待入账-待入账转为已入账任务");
+            }
+
+        }else{
+            throw  new RuntimeException("订单异常状态异常-请核查订单详情-待入账转为已入账任务");
+        }
+        return flag;
+    }
+
+}

+ 7 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/AdminOrderMapper.java

@@ -131,4 +131,11 @@ public interface AdminOrderMapper {
 	 * @return
 	 */
 	List<Order> getOrderListToExcel(Order order);
+
+	/**
+	 * 定时任务取消订单
+	 * @param order
+	 * @return
+	 */
+	List<Order> cancelOrderList(Order order);
 }

+ 31 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/IntegralConfigMapper.java

@@ -0,0 +1,31 @@
+package com.iamberry.wechat.service.mapper;
+
+import com.iamberry.wechat.core.entity.ism.IntegralConfig;
+
+import java.util.List;
+
+/**
+ *  积分配置表接口
+ * @author Administrator
+ * @Date 2019-11-10
+ */
+public interface IntegralConfigMapper {
+    /**
+     * 获取集合
+     * @param  integralConfig
+     * @return List
+     */
+    List<IntegralConfig> getIntegralConfigList(IntegralConfig integralConfig);
+    /**
+     * 获取集合
+     * @param  str
+     * @return List
+     */
+    List<IntegralConfig> getSpikeListAllByPromo(int[] str);
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  integralConfig
+     */
+    IntegralConfig getIntegralConfigById(Integer id);
+}

+ 57 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/IntegralLogMapper.java

@@ -0,0 +1,57 @@
+package com.iamberry.wechat.service.mapper;
+
+import com.iamberry.wechat.core.entity.ism.IntegralLog;
+
+import java.util.List;
+
+/**
+ *  积分记录表接口
+ * @author Administrator
+ * @Date 2019-11-10
+ */
+public interface IntegralLogMapper {
+    /**
+     * 获取集合
+     * @param  integralLog
+     * @return List
+     */
+    List<IntegralLog> getIntegralLogList(IntegralLog integralLog);
+
+    /**
+     * 获取集合 - 前端页面,获取增加积分和消费积分记录
+     * @param  integralLog
+     * @return List
+     */
+    List<IntegralLog> getIntegralLogListByAccoUser(IntegralLog integralLog);
+
+    /**
+     * 获取集合-定时器,获取所有待入账记录
+     * @return List
+     */
+    List<IntegralLog> getIntegralLogListByWaitUser();
+
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  integralLog
+     */
+    IntegralLog getIntegralLogById(Integer id);
+    /**
+     * 增加数据
+     * @param  integralLog
+     * @return Integer
+     */
+    Integer  save(IntegralLog integralLog);
+    /**
+     * 修改数据
+     * @param  integralLog
+     * @return Integer
+     */
+    Integer  update(IntegralLog integralLog);
+    /**
+     * 删除数据
+     * @param  id
+     * @return Integer
+     */
+    Integer  delete(Integer id);
+}

+ 193 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/IntegralLogMapper.xml

@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iamberry.wechat.service.mapper.IntegralLogMapper">
+    <resultMap  id="BaseResultMap" type="IntegralLog" >
+        <result    column="inte_log_id"    property="inteLogId" />
+        <result    column="user_open_id"    property="userOpenId" />
+        <result    column="inte_log_name"    property="inteLogName" />
+        <result    column="inte_conf_id"    property="inteConfId" />
+        <result    column="inte_log_type"    property="inteLogType" />
+        <result    column="inte_log_waiting_date"    property="inteLogWaitingDate" />
+        <result    column="inte_log_waiting_order_id"    property="inteLogWaitingOrderId" />
+        <result    column="inte_log_use_order_id"    property="inteLogUseOrderId" />
+        <result    column="inte_log_old_id"    property="inteLogOldId" />
+        <result    column="inte_log_change_num"    property="inteLogChangeNum" />
+        <result    column="inte_log_before_num"    property="inteLogBeforeNum" />
+        <result    column="inte_log_after_num"    property="inteLogAfterNum" />
+        <result    column="inte_log_status"    property="inteLogStatus" />
+        <result    column="inte_log_desc"    property="inteLogDesc" />
+        <result    column="inte_log_create_time"    property="inteLogCreateTime" />
+    </resultMap>
+    <sql    id="Base_List" >
+        t.inte_log_id,
+        t.inte_log_name,
+        t.user_open_id,
+        t.inte_conf_id,
+        t.inte_log_type,
+        t.inte_log_waiting_date,
+        t.inte_log_waiting_order_id,
+        t.inte_log_use_order_id,
+        t.inte_log_old_id,
+        t.inte_log_change_num,
+        t.inte_log_before_num,
+        t.inte_log_after_num,
+        t.inte_log_status,
+        t.inte_log_desc,
+        t.inte_log_create_time
+    </sql>
+    <select id="getIntegralLogList" resultMap="BaseResultMap" parameterType="IntegralLog" >
+        select
+        <include refid="Base_List" />
+        from tb_iamberry_ism_integral_log t
+        <where>
+            <if test="inteLogId != null ">
+                AND t.inte_log_id = #{inteLogId}
+            </if >
+            <if test="userOpenId != null and userOpenId != ''">
+                AND t.user_open_id  like  CONCAT ('%',#{userOpenId},'%')
+            </if >
+            <if test="inteConfId != null ">
+                AND t.inte_conf_id = #{inteConfId}
+            </if >
+            <if test="inteLogType != null ">
+                AND t.inte_log_type = #{inteLogType}
+            </if >
+            <if test="inteLogWaitingOrderId != null and inteLogWaitingOrderId != ''">
+                AND t.inte_log_waiting_order_id = #{inteLogWaitingOrderId}
+            </if >
+            <if test="inteLogUseOrderId != null and inteLogUseOrderId != ''">
+                AND t.inte_log_use_order_id = #{inteLogUseOrderId}
+            </if >
+            <if test="inteLogOldId != null ">
+                AND t.inte_log_old_id = #{inteLogOldId}
+            </if >
+            <if test="inteLogChangeNum != null ">
+                AND t.inte_log_change_num = #{inteLogChangeNum}
+            </if >
+            <if test="inteLogBeforeNum != null ">
+                AND t.inte_log_before_num = #{inteLogBeforeNum}
+            </if >
+            <if test="inteLogAfterNum != null ">
+                AND t.inte_log_after_num = #{inteLogAfterNum}
+            </if >
+            <if test="inteLogStatus != null ">
+                AND t.inte_log_status = #{inteLogStatus}
+            </if >
+            <if test="inteLogDesc != null and inteLogDesc != ''">
+                AND t.inte_log_desc  like  CONCAT ('%',#{inteLogDesc},'%')
+            </if >
+        </where>
+    </select>
+    <select id="getIntegralLogListByAccoUser" resultMap="BaseResultMap" parameterType="IntegralLog" >
+        select
+        <include refid="Base_List" />,
+        iio.inte_conf_name
+        from tb_iamberry_ism_integral_log t
+        LEFT JOIN tb_iamberry_ism_integral_config iio on t.inte_conf_id = iio.inte_conf_id
+        <where>
+                t.inte_log_type in (1,2)
+            AND t.inte_log_status = 1
+            AND t.user_open_id  = #{userOpenId}
+        </where>
+        ORDER BY  t.inte_log_id DESC
+    </select>
+    <select id="getIntegralLogListByWaitUser" resultMap="BaseResultMap"  >
+        select
+        <include refid="Base_List" />
+        from tb_iamberry_ism_integral_log t
+        <where>
+                t.inte_log_type = 3
+            AND t.inte_log_status = 1
+            AND t.inte_log_waiting_date  &lt; now()
+        </where>
+    </select>
+    <select id="getIntegralLogById" resultMap="BaseResultMap" parameterType="Integer" >
+        select
+        <include refid="Base_List" />
+        from tb_iamberry_ism_integral_log t
+        where t.inte_log_id= #{inteLogId}
+    </select>
+    <insert id="save" parameterType="IntegralLog" >
+        insert into
+        tb_iamberry_ism_integral_log
+        (
+        user_open_id,
+        inte_log_name,
+        inte_conf_id,
+        inte_log_type,
+        inte_log_waiting_date,
+        inte_log_waiting_order_id,
+        inte_log_use_order_id,
+        inte_log_old_id,
+        inte_log_change_num,
+        inte_log_before_num,
+        inte_log_after_num,
+        inte_log_status,
+        inte_log_desc
+        )
+        values
+        (
+        #{userOpenId},
+        #{inteLogName},
+        #{inteConfId},
+        #{inteLogType},
+        #{inteLogWaitingDate},
+        #{inteLogWaitingOrderId},
+        #{inteLogUseOrderId},
+        #{inteLogOldId},
+        #{inteLogChangeNum},
+        #{inteLogBeforeNum},
+        #{inteLogAfterNum},
+        #{inteLogStatus},
+        #{inteLogDesc}
+        )
+    </insert>
+    <update id="update" parameterType="IntegralLog" >
+        update
+          tb_iamberry_ism_integral_log
+        <set >
+            <if test="userOpenId != null and userOpenId != ''">
+                user_open_id = #{userOpenId},
+            </if >
+            <if test="inteConfId != null ">
+                inte_conf_id = #{inteConfId},
+            </if >
+            <if test="inteLogType != null ">
+                inte_log_type = #{inteLogType},
+            </if >
+            <if test="inteLogWaitingDate != null and inteLogWaitingDate != ''">
+                inte_log_waiting_date = #{inteLogWaitingDate},
+            </if >
+            <if test="inteLogWaitingOrderId != null and inteLogWaitingOrderId != ''">
+                inte_log_waiting_order_id = #{inteLogWaitingOrderId},
+            </if >
+            <if test="inteLogUseOrderId != null and inteLogUseOrderId != ''">
+                inte_log_use_order_id = #{inteLogUseOrderId}
+            </if >
+            <if test="inteLogOldId != null ">
+                inte_log_old_id = #{inteLogOldId},
+            </if >
+            <if test="inteLogChangeNum != null ">
+                inte_log_change_num = #{inteLogChangeNum},
+            </if >
+            <if test="inteLogBeforeNum != null ">
+                inte_log_before_num = #{inteLogBeforeNum},
+            </if >
+            <if test="inteLogAfterNum != null ">
+                inte_log_after_num = #{inteLogAfterNum},
+            </if >
+            <if test="inteLogStatus != null ">
+                inte_log_status = #{inteLogStatus},
+            </if >
+            <if test="inteLogDesc != null and inteLogDesc != ''">
+                inte_log_desc = #{inteLogDesc},
+            </if >
+        </set >
+        where inte_log_id= #{inteLogId}
+    </update>
+    <delete id="delete" parameterType="Integer" >
+        delete FROM
+            tb_iamberry_ism_integral_log
+        where inte_log_id=#{inteLogId}
+    </delete>
+</mapper>

+ 13 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/MemberMapper.java

@@ -103,4 +103,17 @@ public interface MemberMapper {
     public List<Order> selectAiberleShopOrderList();
 
 	public void updateAiberleShopOrder(Order order);
+
+	/**
+	 * 成为会员
+	 * @return
+	 */
+	public Integer nowUpdateUserByOpenId(Member member);
+
+
+	/**
+	 * 获取今天生日的用户
+	 * @return
+	 */
+	List<Member> getNowBirthDate();
 }

+ 24 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/adminOrderMapper.xml

@@ -512,4 +512,28 @@ Reback_status  = 2) placeId
 		LEFT JOIN tb_iamberry_product_type pt ON pi.product_type = pt.type_id
 		WHERE t.item_sales_orderid = #{salesOrderid}
 	</select>
+
+
+	<select id="cancelOrderList" parameterType="Order" resultType="Order">
+		SELECT
+			O.sales_orderid AS salesOrderid,
+			O.sales_address_name AS salesAddressName,
+			U.user_nickname AS userNickname,
+			O.sales_address_tel AS salesAddressTel,
+			O.sales_amount AS salesAmount,
+			O.sales_rate_amount AS salesRateAmount,
+			O.sales_integral_num AS salesIntegralNum,
+			O.sales_yet_amount AS salesYetAmount,
+			O.sales_status AS salesStatus,
+			O.sales_create_date AS salesCreateDate,
+			O.sales_admin_remark AS salesAdminRemark,
+			O.sales_user_remark AS salesUserRemark,
+			O.sales_color_type
+		FROM TB_IAMBERRY_SHOP_SALES_ORDER O
+		LEFT JOIN TB_IAMBERRY_USER_USERINFO U ON O.SALES_OPENID = U.USER_OPENID
+		WHERE
+			O.SALES_STATUS = 1
+		AND  O.SALES_CREATE_DATE  &lt; #{cancelDate}
+		ORDER BY O.SALES_CREATE_DATE DESC
+	</select>
 </mapper>

+ 4 - 2
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/cartMapper.xml

@@ -308,7 +308,8 @@ PUBLIC
 			pc.COLOR_NAME productColor,
 			pi.PRODUCT_CHILD_TYPE productChildType,
 			pi.PRODUCT_TYPE productType,
-			C.cart_is_source cartIsSource
+			C.cart_is_source cartIsSource,
+			pc.color_type colorType
 		FROM
 			TB_IAMBERRY_SHOP_CART C
 		LEFT JOIN tb_iamberry_product_color pc ON C.cart_color_id = pc.color_id
@@ -337,7 +338,8 @@ PUBLIC
 			g.product_name productName,
 			g.product_id cartProductId,
 			g.product_child_type productChildType,
-			g.product_type productType
+			g.product_type productType,
+			pc.color_type colorType
 		from
 			tb_iamberry_shop_cart c
 		left join tb_iamberry_product_info g on c.cart_product_id = g.product_id

+ 0 - 1
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/couponItemMapper.xml

@@ -28,7 +28,6 @@
  		FROM TB_IAMBERRY_COUPON_ITEM CI
  		JOIN TB_IAMBERRY_COUPON_TYPE CT ON CI.COUPON_ID=CT.COUPON_ID
 		<where>
-			 CI.COUPON_ID IN  (31000,31001,31002)
 			<if test="couponId != null and couponId != ''">
 				AND CI.COUPON_ID=#{couponId}
 			</if>

+ 68 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/integralConfigMapper.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iamberry.wechat.service.mapper.IntegralConfigMapper">
+    <resultMap  id="BaseResultMap" type="IntegralConfig" >
+        <result    column="inte_conf_id"    property="inteConfId" />
+        <result    column="promotions_id"    property="promotionsId" />
+        <result    column="inte_conf_name"    property="inteConfName" />
+        <result    column="inte_conf_calculation"    property="inteConfCalculation" />
+        <result    column="inte_conf_status"    property="inteConfStatus" />
+        <result    column="inte_conf_desc"    property="inteConfDesc" />
+        <result    column="inte_conf_create_time"    property="inteConfCreateTime" />
+        <result    column="inte_conf_update_time"    property="inteConfUpdateTime" />
+    </resultMap>
+    <sql    id="Base_List" >
+        t.inte_conf_id,
+        t.promotions_id,
+        t.inte_conf_name,
+        t.inte_conf_calculation,
+        t.inte_conf_status,
+        t.inte_conf_desc,
+        t.inte_conf_create_time,
+        t.inte_conf_update_time
+    </sql>
+    <select id="getIntegralConfigList" resultMap="BaseResultMap" parameterType="IntegralConfig" >
+        select
+        <include refid="Base_List" />
+        from tb_iamberry_ism_integral_config t
+        <where>
+            <if test="inteConfId != null ">
+                AND t.inte_conf_id = #{inteConfId}
+            </if >
+            <if test="promotionsId != null ">
+                AND t.promotions_id = #{promotionsId}
+            </if >
+            <if test="inteConfName != null and inteConfName != ''">
+                AND t.inte_conf_name  like  CONCAT ('%',#{inteConfName},'%')
+            </if >
+            <if test="inteConfCalculation != null and inteConfCalculation != ''">
+                AND t.inte_conf_calculation  like  CONCAT ('%',#{inteConfCalculation},'%')
+            </if >
+            <if test="inteConfStatus != null ">
+                AND t.inte_conf_status = #{inteConfStatus}
+            </if >
+        </where>
+    </select>
+
+    <select id="getSpikeListAllByPromo" resultMap="BaseResultMap" parameterType="IntegralConfig" >
+        select
+        <include refid="Base_List" />
+        from tb_iamberry_ism_integral_config t
+        <where>
+            t.inte_conf_status  = 1
+            AND t.promotions_id IN (
+            <foreach collection="array" item="item" separator=",">
+                #{item}
+            </foreach>
+            )
+        </where>
+        ORDER BY t.inte_conf_sort
+    </select>
+
+    <select id="getIntegralConfigById" resultMap="BaseResultMap" parameterType="Integer" >
+        select
+        <include refid="Base_List" />
+        from tb_iamberry_ism_integral_config t
+        where t.inte_conf_id= #{inteConfId}
+    </select>
+</mapper>

+ 93 - 4
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/memberMapper.xml

@@ -12,7 +12,6 @@
 		user_addr userAddr,
 		
 		user_sex userSex,
-		user_integral userIntegral,
 		user_account_num userAccountNum,
 		user_create_date userCreateDate,
 		user_birth_date userBirthDate,
@@ -22,17 +21,21 @@
 		user_pwd userPwd,
 		user_tel userTel,
 		user_name userName,
+
+		user_integral userIntegral,
+		user_surplus_integral userSurplusIntegral,
+		user_use_integral userUseIntegral,
+		user_pend_integral userPendIntegral,
 		
 		user_qrcode userQrcode,
 		user_res_type userResType,
 		user_status userStatus,
-		user_surplus_integral userSurplusIntegral,
 		user_sub_date userSubDate,
 		
-		user_use_integral userUseIntegral,
 		user_income userIncome,
 		user_template_id templateId,
-		user_dealers userDealers
+		user_dealers userDealers,
+		user_is_vip userIsVip
 	</sql>
 	<!-- 匹配查询会员信息 -->
 	<select id="getMemberByFuzzy" parameterType="Member" resultType="Member">
@@ -304,4 +307,90 @@
 		where
 		sales_orderid = #{salesOrderid}
 	</update>
+
+	<update id="nowUpdateUserByOpenId" parameterType="Member" >
+		update
+		tb_iamberry_user_userinfo
+		<set >
+			<if test="userHead != null and userHead != ''">
+				user_head = #{userHead},
+			</if >
+			<if test="userNickname != null and userNickname != ''">
+				user_nickname = #{userNickname},
+			</if >
+			<if test="userAddr != null and userAddr != ''">
+				user_addr = #{userAddr},
+			</if >
+			<if test="userSex != null ">
+				user_sex = #{userSex},
+			</if >
+			<if test="userAccountNum != null and userAccountNum != ''">
+				user_account_num = #{userAccountNum},
+			</if >
+			<if test="userPwd != null and userPwd != ''">
+				user_pwd = #{userPwd},
+			</if >
+			<if test="userTel != null and userTel != ''">
+				user_tel = #{userTel},
+			</if >
+			<if test="userName != null and userName != ''">
+				user_name = #{userName},
+			</if >
+			<if test="userBirthDate != null and userBirthDate != ''">
+				user_birth_date = #{userBirthDate},
+			</if >
+			<if test="userIntegral != null ">
+				user_integral = #{userIntegral},
+			</if >
+			<if test="userSurplusIntegral != null ">
+				user_surplus_integral = #{userSurplusIntegral},
+			</if >
+			<if test="userUseIntegral != null ">
+				user_use_integral = #{userUseIntegral},
+			</if >
+			<if test="userPendIntegral != null ">
+				user_pend_integral = #{userPendIntegral},
+			</if >
+			<if test="userResType != null ">
+				user_res_type = #{userResType},
+			</if >
+			<if test="userStatus != null ">
+				user_status = #{userStatus},
+			</if >
+			<if test="userSubDate != null and userSubDate != ''">
+				user_sub_date = #{userSubDate},
+			</if >
+			<if test="userIdentity != null ">
+				user_identity = #{userIdentity},
+			</if >
+			<if test="userQrcode != null and userQrcode != ''">
+				user_qrcode = #{userQrcode},
+			</if >
+			<if test="userIsFlag != null ">
+				user_is_flag = #{userIsFlag},
+			</if >
+			<if test="userIncome != null ">
+				user_income = #{userIncome},
+			</if >
+			<if test="userDealers != null ">
+				user_dealers = #{userDealers},
+			</if >
+			<if test="userEmail != null and userEmail != ''">
+				user_email = #{userEmail},
+			</if >
+			<if test="userIsVip != null ">
+				user_is_vip = #{userIsVip}
+			</if >
+		</set >
+		where user_openid = #{userOpenid}
+	</update>
+
+	<!-- 查询今日生日的用户 -->
+	<select id="getNowBirthDate" resultType="Member">
+		SELECT
+		<include refid="allField"/>
+		FROM tb_iamberry_user_userinfo
+		WHERE date_format(user_birth_date,'%m-%d') = date_format(now(),'%m-%d')
+	</select>
+
 </mapper> 

+ 15 - 7
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/orderMapper.xml

@@ -131,13 +131,21 @@ PUBLIC
 	
 	<!-- 根据orderId查询订单信息 -->
 	<select id="selectOrderInfoById" parameterType="Order" resultType="Order">
-		SELECT 
-			SALES_ORDERID salesOrderid, SALES_STATUS salesStatus,
-			SALES_TRANSACTION_DATE salesTransactionDate, SALES_REWARD_INTEGRAL_NUM salesRewardIntegralNum,
-			SALES_INTEGRAL_NUM salesIntegralNum, SALES_AMOUNT salesAmount ,
-			SALES_BALANCE_AMOUNT balancePayAmount,
-			SALES_OPENID  salesOpenid,
-			SALES_COUPON_RECEIVE_ID couponId
+		SELECT
+			sales_orderid AS salesOrderid,
+			sales_status AS salesStatus,
+			sales_transaction_date AS salesTransactionDate,
+			sales_reward_integral_num AS salesRewardIntegralNum,
+			sales_integral_num AS salesIntegralNum,
+			sales_amount AS salesAmount,
+			Sales_balance_amount AS balancePayAmount,
+			sales_openid AS salesOpenid,
+			Sales_coupon_receive_id AS couponId,
+			sales_yet_amount,
+			sales_create_date,
+			sales_rate_amount,
+			sales_post_num,
+			sales_post_firm
 		FROM 
 			TB_IAMBERRY_SHOP_SALES_ORDER 
 		WHERE 

+ 42 - 4
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/member/MemberServiceImpl.java

@@ -1,10 +1,10 @@
 package com.iamberry.wechat.service.member;
 
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
+import com.iamberry.wechat.core.entity.coupon.CouponItem;
+import com.iamberry.wechat.core.entity.coupon.CouponType;
+import com.iamberry.wechat.tools.StrUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -178,4 +178,42 @@ public class MemberServiceImpl implements MemberService {
 		map.put("list", list);
 		return map;
 	}
+
+	@Override
+	public Integer nowUpdateUserByOpenId(Member member) {
+		return memberDao.nowUpdateUserByOpenId(member);
+	}
+
+	@Override
+	public Integer becomeVipByOpenId(Member member) {
+		Integer flag = memberDao.becomeVipByOpenId(member);
+		if(flag < 1){
+			throw new RuntimeException("成为会员失败");
+		}
+//		Integer couponId = 10000;
+//		CouponType couponType = couponTypeMapper.getCouponTypeById(couponId);
+//		Calendar calendar = Calendar.getInstance();
+//		calendar.add(Calendar.DATE, 90);  //有效期三个月
+//		//创建优惠券
+//		CouponItem couponItem = new CouponItem();
+//		String uuidStr = StrUtils.getUUID();
+//		couponItem.setCouponItemId(uuidStr);
+//		couponItem.setCouponItemUseropenid(member.getUserOpenid());
+//		couponItem.setCouponId(couponType.getCouponId());
+//		couponItem.setCouponReceiveDate(new Date());
+//		couponItem.setCouponUseEndDate(calendar.getTime());
+//		couponItem.setCouponUseStatus(1);
+//		couponItem.setCouponItemRemark(couponType.getCouponRemark());
+//		flag = couponItemMapper.insertCouponItem(couponItem);
+//		if(flag < 1){
+//			throw new RuntimeException("赠送兑换优惠券失败");
+//		}
+		return flag;
+	}
+
+	@Override
+	public List<Member> getNowBirthDate() {
+		return memberDao.getNowBirthDate();
+	}
+
 }

+ 20 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/member/dao/MemberDao.java

@@ -113,4 +113,24 @@ public interface MemberDao {
 	 * 更新訂單表
 	 */
 	public void updateAiberleShopOrder(Order order);
+
+	/**
+	 * 修改
+	 * @param member
+	 * @return
+	 */
+	Integer nowUpdateUserByOpenId(Member member);
+
+	/**
+	 * 成为会员
+	 * @return
+	 */
+	public Integer becomeVipByOpenId(Member member);
+
+
+	/**
+	 * 获取今天生日的用户
+	 * @return
+	 */
+	List<Member> getNowBirthDate();
 }

+ 35 - 2
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/member/dao/imp/MemberDaoImpl.java

@@ -3,6 +3,7 @@ package com.iamberry.wechat.service.member.dao.imp;
 import java.util.List;
 
 import com.iamberry.wechat.core.entity.order.Order;
+import com.iamberry.wechat.face.ism.IntegralLogService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -10,6 +11,7 @@ import com.iamberry.wechat.core.entity.Page;
 import com.iamberry.wechat.core.entity.member.Member;
 import com.iamberry.wechat.service.mapper.MemberMapper;
 import com.iamberry.wechat.service.member.dao.MemberDao;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 会员信息 DAO 实现
@@ -21,6 +23,8 @@ import com.iamberry.wechat.service.member.dao.MemberDao;
 public class MemberDaoImpl  implements MemberDao {
 	@Autowired
 	private MemberMapper memberMapper;
+	@Autowired
+	private IntegralLogService integralLogService;
 
 	/**
 	 * 根据userid得到会员信息
@@ -39,6 +43,7 @@ public class MemberDaoImpl  implements MemberDao {
 	 * @author 穆再兴
 	 * @return
 	 */
+	@Override
 	public Member getMemberByUserOpenId(String openid){
 		return memberMapper.getMemberByUserOpenId(openid);
 	}
@@ -63,7 +68,6 @@ public class MemberDaoImpl  implements MemberDao {
 	 * 根据 userid 修改会员信息
 	 * 2016年4月21日
 	 * @author 穆再兴
-	 * @param userId
 	 * @return
 	 */
 	@Override
@@ -98,6 +102,7 @@ public class MemberDaoImpl  implements MemberDao {
 	 * @param member
 	 * @return
 	 */
+	@Override
 	public Integer updateUserIncomeByOpenId(Member member){
 		return memberMapper.updateUserIncomeByOpenId(member);
 	}
@@ -111,9 +116,9 @@ public class MemberDaoImpl  implements MemberDao {
 	/**
 	 * 根据userid获取当前用户的“下线人数”和“已购买人数”
 	 * 2016年5月11日
-	 * @param openId
 	 * @return
 	 */
+	@Override
 	public List<Integer> selectDownCountByUserId(Integer userId){
 		return memberMapper.selectDownCountByUserId(userId);
 	}
@@ -122,6 +127,7 @@ public class MemberDaoImpl  implements MemberDao {
 	 * 查詢訂單表
 	 * @return
 	 */
+	@Override
 	public List<Order> selectAiberleShopOrderList(){
 		return memberMapper.selectAiberleShopOrderList();
 	}
@@ -129,7 +135,34 @@ public class MemberDaoImpl  implements MemberDao {
 	/**
 	 * 更新訂單表
 	 */
+	@Override
 	public void updateAiberleShopOrder(Order order){
 		memberMapper.updateAiberleShopOrder(order);
 	}
+
+	@Override
+	public Integer nowUpdateUserByOpenId(Member member){
+		return memberMapper.nowUpdateUserByOpenId(member);
+	}
+
+	@Override
+	@Transactional
+	public Integer becomeVipByOpenId(Member member) {
+		Integer flag = memberMapper.nowUpdateUserByOpenId(member);
+		if(flag < 1){
+			throw  new RuntimeException("成为VIP失败");
+		}
+
+		flag = integralLogService.updateIntegral(member.getUserOpenid(),1,1);
+		if(flag < 1){
+			throw  new RuntimeException("添加积分失败");
+		}
+		return flag;
+	}
+
+	@Override
+	public List<Member> getNowBirthDate() {
+		return memberMapper.getNowBirthDate();
+	}
+
 }

+ 10 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/order/AdminOrderServiceImpl.java

@@ -698,4 +698,14 @@ public class AdminOrderServiceImpl implements AdminOrderService {
 	public List<Order> getOrderListToExcel(Order order) {
 		return adminOrderDao.getOrderListToExcel(order);
 	}
+
+	@Override
+	public List<Order> cancelOrderList(Order order) {
+		return adminOrderDao.cancelOrderList(order);
+	}
+
+	@Override
+	public Integer cancelOrder(String salesOrderid) {
+		return adminOrderDao.cancelOrder(salesOrderid);
+	}
 }

+ 13 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/order/dao/AdminOrderDao.java

@@ -143,4 +143,17 @@ public interface AdminOrderDao {
 	NumberBacklogDto selectNumberBacklog();
 
 	List<Order> getOrderListToExcel(Order order);
+
+	/**
+	 * 定时任务取消订单
+	 * @param order
+	 * @return
+	 */
+	List<Order> cancelOrderList(Order order);
+
+	/**
+	 * 定时任务取消订单
+	 * @return
+	 */
+	Integer cancelOrder(String salesOrderid);
 }

+ 55 - 3
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/order/dao/impl/AdminOrderDaoImpl.java

@@ -2,7 +2,15 @@ package com.iamberry.wechat.service.order.dao.impl;
 
 import java.util.List;
 
+import com.iamberry.wechat.core.entity.cart.ShopSalesOrderDto;
+import com.iamberry.wechat.core.entity.eo.GiftPool;
+import com.iamberry.wechat.core.entity.eo.ItemGift;
 import com.iamberry.wechat.core.entity.order.NumberBacklogDto;
+import com.iamberry.wechat.face.eo.GiftPoolService;
+import com.iamberry.wechat.face.ism.IntegralLogService;
+import com.iamberry.wechat.service.mapper.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
@@ -13,13 +21,11 @@ import com.iamberry.wechat.core.entity.member.Member;
 import com.iamberry.wechat.core.entity.order.Order;
 import com.iamberry.wechat.core.entity.order.OrderItem;
 import com.iamberry.wechat.core.entity.order.OrderRebackMoney;
-import com.iamberry.wechat.service.mapper.AdminOrderMapper;
-import com.iamberry.wechat.service.mapper.PlaceInfoMapper;
-import com.iamberry.wechat.service.mapper.PlaceLogsMapper;
 import com.iamberry.wechat.service.order.dao.AdminOrderDao;
 
 @Repository
 public class AdminOrderDaoImpl implements AdminOrderDao {
+	Logger logger = LoggerFactory.getLogger(AdminOrderDaoImpl.class);
 	
 	@Autowired
 	private AdminOrderMapper adminOrderMapper;
@@ -27,6 +33,14 @@ public class AdminOrderDaoImpl implements AdminOrderDao {
 	private PlaceInfoMapper placeInfoMapper;
 	@Autowired
 	private PlaceLogsMapper placeLogsMapper;
+	@Autowired
+	private CartMapper cartMapper;
+	@Autowired
+	private ItemGiftMapper itemGiftMapper;
+	@Autowired
+	private GiftPoolService giftPoolService;
+	@Autowired
+	private IntegralLogService integralLogService;
 
 	
 	@Override
@@ -240,4 +254,42 @@ public class AdminOrderDaoImpl implements AdminOrderDao {
 	public List<Order> getOrderListToExcel(Order order) {
 		return adminOrderMapper.getOrderListToExcel(order);
 	}
+
+	@Override
+	public List<Order> cancelOrderList(Order order) {
+		return adminOrderMapper.cancelOrderList(order);
+	}
+
+	@Override
+	public Integer cancelOrder(String salesOrderid) {
+		Integer flag = 0;
+		ShopSalesOrderDto ssod  = cartMapper.getOpenIdAndStatus(salesOrderid);
+		Order order = new Order();
+		order.setSalesOrderid(salesOrderid);
+		order.setSalesStatus(0);	//订单取消
+		flag = cartMapper.updateOrderByOrder(order);
+
+		//恢复赠品的库存
+		List<OrderItem> orderItemList = adminOrderMapper.getShopOrderItemByOrderId(salesOrderid);
+		for (OrderItem orderItem:orderItemList) {
+			ItemGift itemGift = new ItemGift();
+			itemGift.setItemId(orderItem.getItemId());
+			List<ItemGift> itemGiftList = itemGiftMapper.getItemGiftList(itemGift);
+			for (ItemGift ig:itemGiftList) {
+				GiftPool gp = new GiftPool();
+				gp.setGiftPoolId(ig.getGiftPoolId());
+				gp.setGiftPoolStock(ig.getItemGiftNum());
+				giftPoolService.updateAddStock(gp);
+			}
+		}
+
+		//恢复积分
+		try {
+			flag = integralLogService.cancelSurplusIntegral(salesOrderid);
+		}catch (Exception e){
+			e.printStackTrace();
+			logger.info("取消订单,积分退回失败,订单id:"+ salesOrderid);
+		}
+		return flag;
+	}
 }

+ 1 - 44
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/admin/AdminOrderHandlers.java

@@ -158,37 +158,6 @@ public class AdminOrderHandlers {
 				// 获取用户的操作权限
 				order.setOperations(orderUtil.orderStatusToOperation(order.getSalesStatus(), order.getSalesOrderid()));
 				order.setOrderLinkStatus(orderUtil.orderStatusToString(order.getSalesStatus())); // 订单状态描述,中文
-				if (order.getSalesStatus() == 2) {
-					// 给百胜推送信息
-					try {
-						MQMessage message = new MQMessage();
-						message.setServiceToMessage(orderId);
-						message.setServiceOtherMessage("efast.trade.detail.get");
-						message.setServiceIsSend(2);			// 没有推送的信息
-						message.setServiceStatus(1); 			// 推送成功
-						message.setServiceType(1); 				// 添加订单信息
-						message.setServiceHandlerObjectName("efastOrderServiceImpl");
-						message.setServiceHandlerMethodName("selectEfastSendOrderInfo");
-						mQservice.insertMQMessage(message);
-					} catch (Exception e) {
-						// TODO: handle exception
-					}
-				} else if (order.getSalesStatus() == 8) {
-					// 给百胜推送信息
-					try {
-						MQMessage message = new MQMessage();
-						message.setServiceToMessage(orderId);
-						message.setServiceOtherMessage("efast.order.return.info.fetch");
-						message.setServiceIsSend(2);			// 没有推送的信息
-						message.setServiceStatus(1); 			// 推送成功
-						message.setServiceType(1); 				// 添加订单信息
-						message.setServiceHandlerObjectName("efastOrderServiceImpl");
-						message.setServiceHandlerMethodName("selectEfastReturnOrderInfo");
-						mQservice.insertMQMessage(message);
-					} catch (Exception e) {
-						// TODO: handle exception
-					}
-				}
 			mv.addObject("order",order);
 			mv.addObject("orderItemList", orderItemList);
 		}
@@ -595,19 +564,7 @@ public class AdminOrderHandlers {
 					rabackInfo.setStatus(3);
 					rebackServices.updateStatus(rabackInfo);
 					mv.addObject("msgObj", new MessageDto(true, "确认订单退货成功", "恭喜您!同意订单:" + orderId + "退货,订单关闭!"));
-					try {
-						MQMessage message = new MQMessage();
-						message.setServiceToMessage(orderId);
-						message.setServiceOtherMessage(currentOrder.getSalesPostFirm() + "-" + currentOrder.getSalesPostNum());
-						message.setServiceIsSend(2);			// 没有推送的信息
-						message.setServiceStatus(1); 			// 推送成功
-						message.setServiceType(1); 				// 添加订单信息
-						message.setServiceHandlerObjectName("efastOrderServiceImpl");
-						message.setServiceHandlerMethodName("returnOrderInfoToEfast");
-						mQservice.insertMQMessage(message);
-					} catch (Exception e) {
-						// TODO: handle exception
-					}
+
 					//推送金额变动消息
 					Member member = memberService.getMemberByUserOpenId(currentOrder.getSalesOpenid());
 					if(member != null || member.getUserResType() != null) {

+ 230 - 32
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/agent/AgentHandler.java

@@ -1,12 +1,18 @@
 package com.iamberry.wechat.handles.agent;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.MessageFormat;
+import java.util.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 
+import com.iamberry.app.config.ImberryConfig;
+import com.iamberry.util.RandomUtil;
+import com.iamberry.wechat.core.entity.coupon.CouponItemDto;
+import com.iamberry.wechat.face.coupon.CouponItemService;
+import com.iamberry.wechat.face.sendmsg.CodeService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -40,6 +46,7 @@ import com.iamberry.wechat.tools.StrUtils;
 @Controller
 @RequestMapping("/wechat/agent")
 public class AgentHandler {
+	private Logger logger = LoggerFactory.getLogger(AgentHandler.class);
 	@Autowired
 	private AgentOrderService agentOrderService;	//微代理订单service
 	@Autowired
@@ -47,6 +54,10 @@ public class AgentHandler {
 	@Autowired
 	private AgentMemberService agentMemberService;	//微代理会员service
 	@Autowired
+	private CouponItemService couponItemService;
+	@Autowired
+	private CodeService codeService;
+	@Autowired
 	private QrcodeService qrcodeService;
 	@Autowired
 	private CartService cartService;
@@ -110,39 +121,226 @@ public class AgentHandler {
 		Member member = WechatUtils.getUserBySession(req);
 		member = memberService.getMemberByUserOpenId(member.getUserOpenid());
 		AgentMemberDto agentMember = agentMemberService.getMemberInfo(member);
-		ShopSalesOrderDto shopSalesOrderDto = new ShopSalesOrderDto();
-		shopSalesOrderDto.setSalesOpenid(member.getUserOpenid());
-		List<ShopSalesOrderDto> orderList = cartService.getOrderList(shopSalesOrderDto);
-		if (null != orderList && orderList.size() > 0) {
-			for (ShopSalesOrderDto orderDto : orderList) {
-				MQMessage message = new MQMessage();
-				if ("2".equals(orderDto.getSalesStatus())) {
-					message.setServiceToMessage(orderDto.getSalesOrderid());
-					message.setServiceOtherMessage("efast.trade.detail.get");
-					message.setServiceIsSend(2);			// 没有推送的信息
-					message.setServiceStatus(1); 			// 推送成功
-					message.setServiceType(1); 				// 添加订单信息
-					message.setServiceHandlerObjectName("efastOrderServiceImpl");
-					message.setServiceHandlerMethodName("selectEfastSendOrderInfo");
-					mQservice.insertMQMessage(message);
-				} else if ("8".equals(orderDto.getSalesStatus())) {
-					message.setServiceToMessage(orderDto.getSalesOrderid());
-					message.setServiceOtherMessage("efast.order.return.info.fetch");
-					message.setServiceIsSend(2);			// 没有推送的信息
-					message.setServiceStatus(1); 			// 推送成功
-					message.setServiceType(1); 				// 添加订单信息
-					message.setServiceHandlerObjectName("efastOrderServiceImpl");
-					message.setServiceHandlerMethodName("selectEfastReturnOrderInfo");
-					mQservice.insertMQMessage(message);
-				}
-			}
-		}
-		
+
+//		ShopSalesOrderDto shopSalesOrderDto = new ShopSalesOrderDto();
+//		shopSalesOrderDto.setSalesOpenid(member.getUserOpenid());
+//		List<ShopSalesOrderDto> orderList = cartService.getOrderList(shopSalesOrderDto);
+
+		CouponItemDto couponItemDto = new CouponItemDto();
+		couponItemDto.setUseropenid(member.getUserOpenid());
+		couponItemDto.setBeginDate(new Date());
+		couponItemDto.setCouponUseStatus(1);
+		Integer couponCount = couponItemService.getCouponItemCount(couponItemDto);
+		agentMember.setCouponCount(couponCount);
+
 		rm.setMessage(ResultInfo.SUCCESSINFO);
 		rm.setStatus(true);
 		rm.setData(agentMember);
 		return rm;
 	}
+
+	/**
+	 * 完善用户信息
+	 * @return
+	 */
+	@RequestMapping("/updateMemberInfo")
+	@ResponseBody
+	public ResultMsg updateMemberInfo(HttpServletRequest request,Member member,String code){
+		ResultMsg rm = new ResultMsg();
+		Member m = WechatUtils.getUserBySession(request);
+
+		m = memberService.getMemberByUserOpenId(m.getUserOpenid());
+		if(m.getUserIsVip() == 2){
+			return new ResultMsg(false, ResultMsg.ERROR, "您已经是会员了!",null);
+		}
+
+		if(m.getUserOpenid()== null || "".equals(m.getUserOpenid())){
+			return new ResultMsg(false,  ResultMsg.ERROR, "完善信息失败-用户OpenId为空",null);
+		}
+		if(member == null){
+			return new ResultMsg(false, ResultMsg.ERROR, "完善信息失败,用户信息为空,请联系公众号客服!",null);
+		}
+
+		//姓名
+		if(member.getUserName() == null){
+			return new ResultMsg(false, ResultMsg.ERROR, "完善信息失败,姓名不能为空!",null);
+		}
+		//性别
+		if(member.getUserSex() == null){
+			return new ResultMsg(false, ResultMsg.ERROR, "完善信息失败,性别不能为空!",null);
+		}
+		//生日	userBirthDate
+		if(member.getUserBirthDate() == null){
+			return new ResultMsg(false, ResultMsg.ERROR, "完善信息失败,生日不能为空!",null);
+		}
+		//手机号码
+		if(member.getUserTel() == null){
+			return new ResultMsg(false, ResultMsg.ERROR, "完善信息失败,手机号码为空!",null);
+		}
+		//验证码
+		if(code == null || "".equals(code)){
+			return new ResultMsg(false, ResultMsg.ERROR, "完善信息失败,验证码为空!",null);
+		}
+
+		//使用request对象的getSession()获取session,如果session不存在则创建一个
+		HttpSession session = request.getSession();
+		Map verificMemberPhoneMap = (Map) session.getAttribute("verification_tel_"+m.getUserOpenid());
+		String verificationTel = (String) verificMemberPhoneMap.get("verification_tel");
+		String verificationCode = (String) verificMemberPhoneMap.get("verification_code");
+		Date verificationDate = (Date)  verificMemberPhoneMap.get("verification_date");
+		if(verificationTel == null || verificationCode == null || verificationDate == null){
+			logger.info("openid="+member.getUserOpenid()+"phone:"+member.getUserTel()+"=完善信息失败,请重新获取验证码");
+			return new ResultMsg(false, ResultMsg.ERROR, "完善信息失败,请重新获取验证码!",null);
+		}
+		if(member.getUserTel().length() != 11 && member.getUserTel().equals(verificationTel)){
+			rm.setMessage(ResultMsg.ERROR);
+			rm.setMessage("电话号码错误!");
+			return rm;
+		}
+		if(code == null || "".equals(code)){
+			return new ResultMsg(false, ResultMsg.ERROR, "验证码为空!",null);
+		}
+		Calendar nowTime = Calendar.getInstance();
+		nowTime.setTime(verificationDate);
+		nowTime.add(Calendar.MINUTE, 5);
+		Date verData = nowTime.getTime();
+		if(!verificationCode.equals(code)){
+			logger.info("openid="+member.getUserOpenid()+"phone:"+member.getUserTel()+"=验证码不正确,请重新输入");
+			return new ResultMsg(false,  ResultMsg.ERROR, "验证码不正确,请重新输入!",null);
+		}
+		if((verData.getTime() < System.currentTimeMillis())){
+			request.getSession().removeAttribute("verification_tel_"+m.getUserOpenid()); //遍历删除session中的值
+			return new ResultMsg(false,  ResultMsg.ERROR, "验证码已失效,请重新获取!",null);
+		}
+
+		ResultMsg msg = new ResultMsg();
+		member.setUserOpenid(m.getUserOpenid());
+		member.setUserIsVip(2);	//是否为vip :1:非vip  2:vip
+		Integer  flag = memberService.becomeVipByOpenId(member);
+		if (flag > 0 ) {
+			request.getSession().removeAttribute("verification_tel_"+m.getUserOpenid()); //遍历删除session中的值
+			msg.setResultCode(ResultInfo.SUCCESSCODE);
+			msg.setStatus(true);
+			return msg;
+		} else {
+			msg.setResultCode(ResultInfo.ERRORCODE);
+			msg.setStatus(false);
+			msg.setMessage("成为会员失败");
+			return msg;
+		}
+	}
+
+
+	/**
+	 * 修改手机号码
+	 * @return
+	 */
+	@RequestMapping("/updateMemberPhone")
+	@ResponseBody
+	public ResultMsg updateMemberPhone(HttpServletRequest request,Member member,String code){
+		ResultMsg rm = new ResultMsg();
+		Member m = WechatUtils.getUserBySession(request);
+
+		//手机号码
+		if(member.getUserTel() == null){
+			return new ResultMsg(false, ResultMsg.ERROR, "修改手机号码失败,手机号码为空!",null);
+		}
+		//验证码
+		if(code == null || "".equals(code)){
+			return new ResultMsg(false, ResultMsg.ERROR, "修改手机号码失败,验证码为空!",null);
+		}
+
+		//使用request对象的getSession()获取session,如果session不存在则创建一个
+		HttpSession session = request.getSession();
+		Map verificMemberPhoneMap = (Map) session.getAttribute("verification_tel_"+m.getUserOpenid());
+		String verificationTel = (String) verificMemberPhoneMap.get("verification_tel");
+		String verificationCode = (String) verificMemberPhoneMap.get("verification_code");
+		Date verificationDate = (Date)  verificMemberPhoneMap.get("verification_date");
+		if(verificationTel == null || verificationCode == null || verificationDate == null){
+			logger.info("openid="+member.getUserOpenid()+"phone:"+member.getUserTel()+"=修改手机号码失败,请重新获取验证码");
+			return new ResultMsg(false, ResultMsg.ERROR, "修改手机号码失败,请重新获取验证码!",null);
+		}
+		if(member.getUserTel().length() != 11 && member.getUserTel().equals(verificationTel)){
+			rm.setMessage(ResultMsg.ERROR);
+			rm.setMessage("修改手机号码失败-手机号码错误!");
+			return rm;
+		}
+		if(code == null || "".equals(code)){
+			return new ResultMsg(false, ResultMsg.ERROR, "验证码不能为空!",null);
+		}
+		Calendar nowTime = Calendar.getInstance();
+		nowTime.setTime(verificationDate);
+		nowTime.add(Calendar.MINUTE, 5);
+		Date verData = nowTime.getTime();
+		if(!verificationCode.equals(code)){
+			logger.info("openid="+member.getUserOpenid()+"phone:"+member.getUserTel()+"=验证码不正确,请重新输入");
+			return new ResultMsg(false,  ResultMsg.ERROR, "验证码不正确,请重新输入!",null);
+		}
+		if((verData.getTime() < System.currentTimeMillis())){
+			request.getSession().removeAttribute("verification_tel_"+m.getUserOpenid()); //遍历删除session中的值
+			return new ResultMsg(false,  ResultMsg.ERROR, "验证码已失效,请重新获取!",null);
+		}
+
+		ResultMsg msg = new ResultMsg();
+		member.setUserOpenid(m.getUserOpenid());
+		Integer  flag = memberService.nowUpdateUserByOpenId(member);
+		if (flag > 0 ) {
+			request.getSession().removeAttribute("verification_tel_"+m.getUserOpenid()); //遍历删除session中的值
+			msg.setResultCode(ResultInfo.SUCCESSCODE);
+			msg.setStatus(true);
+			return msg;
+		} else {
+			msg.setResultCode(ResultInfo.ERRORCODE);
+			msg.setStatus(false);
+			msg.setMessage("修改电话号码失败");
+			return msg;
+		}
+	}
+
+	/**
+	 * 发送短信
+	 * @param request
+	 * @return
+	 * @throws Exception
+	 */
+	@ResponseBody
+	@RequestMapping("/send_phone")
+	public ResultMsg sendPhone(HttpServletRequest request,String phone) throws Exception {
+		ResultMsg msg = new ResultMsg();
+
+		Member m = WechatUtils.getUserBySession(request);
+
+		if(phone.trim().length() != 11){
+			msg.setMessage("电话号码错误!");
+			return msg;
+		}
+
+		//获取验证码
+		String num = RandomUtil.getRandom();
+		//使用request对象的getSession()获取session,如果session不存在则创建一个
+		HttpSession session = request.getSession();
+		String text = MessageFormat.format(ImberryConfig.PROBATION_VERIFICATION_CODE, num);
+		String result = codeService.informShipping(phone, text);
+
+		Map verificMemberPhoneMap = new HashMap();
+		verificMemberPhoneMap.put("verification_code",num);
+		verificMemberPhoneMap.put("verification_tel",phone);
+		verificMemberPhoneMap.put("verification_date",new Date());
+		session.setAttribute("verification_tel_"+m.getUserOpenid(),verificMemberPhoneMap);
+
+		if ("SUCCESS".equals(result)) {
+			logger.info("短信发送成功,验证码为:" + num);
+			msg.setResultCode(ResultInfo.SUCCESSCODE);
+			msg.setStatus(true);
+			return msg;
+		} else {
+			logger.info("短信发送失败:" + result);
+			msg.setResultCode(ResultInfo.ERRORCODE);
+			msg.setStatus(false);
+			msg.setMessage("短信发送失败");
+			return msg;
+		}
+	}
 	
 	/**
 	 * 前台根据openid获取用户信息

+ 14 - 52
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/cart/CartHandlers.java

@@ -13,8 +13,11 @@ import com.iamberry.wechat.core.entity.product.SalesUserGift;
 import com.iamberry.wechat.face.cart.ProductInfoService;
 import com.iamberry.wechat.face.eo.GiftPoolService;
 import com.iamberry.wechat.face.eo.ItemGiftService;
+import com.iamberry.wechat.face.ism.IntegralLogService;
 import com.iamberry.wechat.service.ActivityUtil;
 import com.iamberry.wechat.tools.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -57,6 +60,7 @@ import com.iamberry.wechat.handles.mq.MQServiceProxy;
 @Controller
 @RequestMapping("/wechat/cart")
 public class CartHandlers {
+	Logger logger = LoggerFactory.getLogger(CartHandlers.class);
 
 	@Autowired
 	private CartService cartService;
@@ -86,6 +90,8 @@ public class CartHandlers {
 	private GiftPoolService giftPoolService;
 	@Autowired
 	private ActivityUtil activityUtil;
+	@Autowired
+	private IntegralLogService integralLogService;
 
 	/**
 	 * 进入购物车页面
@@ -411,27 +417,6 @@ public class CartHandlers {
 					}
 					item.setSalesUserGiftList(gifts);
 				}
-
-				MQMessage message = new MQMessage();
-				if ("2".equals(orderDto.getSalesStatus())) {
-					message.setServiceToMessage(orderDto.getSalesOrderid());
-					message.setServiceOtherMessage("efast.trade.detail.get");
-					message.setServiceIsSend(2);			// 没有推送的信息
-					message.setServiceStatus(1); 			// 推送成功
-					message.setServiceType(1); 				// 添加订单信息
-					message.setServiceHandlerObjectName("efastOrderServiceImpl");
-					message.setServiceHandlerMethodName("selectEfastSendOrderInfo");
-					mQservice.insertMQMessage(message);
-				} else if ("8".equals(orderDto.getSalesStatus())) {
-					message.setServiceToMessage(orderDto.getSalesOrderid());
-					message.setServiceOtherMessage("efast.order.return.info.fetch");
-					message.setServiceIsSend(2);			// 没有推送的信息
-					message.setServiceStatus(1); 			// 推送成功
-					message.setServiceType(1); 				// 添加订单信息
-					message.setServiceHandlerObjectName("efastOrderServiceImpl");
-					message.setServiceHandlerMethodName("selectEfastReturnOrderInfo");
-					mQservice.insertMQMessage(message);
-				}
 			}
 		}
 		Integer pageCount = cartService.getOrderNumByOpenId(bean);
@@ -526,37 +511,6 @@ public class CartHandlers {
 		if (shopSalesOrderDto == null) {
 			shopSalesOrderDto = new ShopSalesOrderDto();
 		}
-		if ("5".equals(shopSalesOrderDto.getSalesStatus())) {
-			// 给百胜推送信息
-			try {
-				MQMessage message = new MQMessage();
-				message.setServiceToMessage(orderId);
-				message.setServiceOtherMessage("efast.trade.detail.get");
-				message.setServiceIsSend(2);			// 没有推送的信息
-				message.setServiceStatus(1); 			// 推送成功
-				message.setServiceType(1); 				// 添加订单信息
-				message.setServiceHandlerObjectName("efastOrderServiceImpl");
-				message.setServiceHandlerMethodName("selectEfastSendOrderInfo");
-				mQservice.insertMQMessage(message);
-			} catch (Exception e) {
-				// TODO: handle exception
-			}
-		} else if ("8".equals(shopSalesOrderDto.getSalesStatus())) {
-			// 给百胜推送信息
-			try {
-				MQMessage message = new MQMessage();
-				message.setServiceToMessage(orderId);
-				message.setServiceOtherMessage("efast.trade.detail.get");
-				message.setServiceIsSend(2);			// 没有推送的信息
-				message.setServiceStatus(1); 			// 推送成功
-				message.setServiceType(1); 				// 添加订单信息
-				message.setServiceHandlerObjectName("efastOrderServiceImpl");
-				message.setServiceHandlerMethodName("selectEfastReturnOrderInfo");
-				mQservice.insertMQMessage(message);
-			} catch (Exception e) {
-				// TODO: handle exception
-			}
-		}
 		remsg.setData(shopSalesOrderDto);
 		remsg.setMessage(ResultInfo.SUCCESSINFO);
 		remsg.setResultCode(ResultInfo.SUCCESSCODE);
@@ -896,6 +850,14 @@ public class CartHandlers {
 						giftPoolService.updateAddStock(gp);
 					}
 				}
+
+				//恢复积分
+				try {
+					Integer flag = integralLogService.cancelSurplusIntegral(orderId);
+				}catch (Exception e){
+					e.printStackTrace();
+					logger.info("取消订单,积分退回失败,订单id:"+ orderId);
+				}
 			}
 		}
 

+ 2 - 0
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/coupon/CouponTypeHandler.java

@@ -304,11 +304,13 @@ public class CouponTypeHandler {
 			cDto.setEndDate(new Date());
 			cDto.setCouponItemRemark("4");
 		}
+
 		cDto.setCouponIsGive(1);
 		cDto.setPage(new PageBean());
 		cDto.getPage().setPageSize(pageSize);
 		cDto.getPage().setPageNumber(pageNO);
 		cDto.getPage().initRecordBegin();
+		cDto.setBeginDate(new Date());
 		List<CouponItemDto> list = couponItemService.getCouponItemDtoList(cDto);
 		
 		Date now = new Date();

+ 40 - 4
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/home/HomeHandler.java

@@ -2,13 +2,12 @@ package com.iamberry.wechat.handles.home;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 
 import com.iamberry.wechat.core.entity.admin.ShopSystemRule;
 import com.iamberry.wechat.core.entity.product.ProductChildType;
@@ -175,4 +174,41 @@ public class HomeHandler {
 			memberService.updateUserFlagByOpenId(member.getUserOpenid());		// 绑定用户关系
 		}
 	}
+
+	/**
+	 * 刷新用户信息
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/getUserInfo", method = RequestMethod.POST)
+	public ResultMsg getUserInfo(HttpServletRequest request) throws Exception {
+		ResultMsg msg = new ResultMsg();
+
+		Member m = WechatUtils.getUserBySession(request);
+		m = memberService.getMemberByUserOpenId(m.getUserOpenid());
+		try{
+			JSONObject jsonObject = WeixinUtil.getUserInfo(m.getUserOpenid());
+			String nickname = jsonObject.getString("nickname");
+			String headimgurl = jsonObject.getString("headimgurl");
+			try {
+				nickname = URLEncoder.encode(jsonObject.getString("nickname"), "UTF-8");
+			} catch (UnsupportedEncodingException e) {
+				nickname = "";
+			}
+			m.setUserHead(headimgurl);
+			m.setUserNickname(nickname);
+			if(nickname != null && !"".equals(nickname)){
+				m.setUserStatus(2);
+			}
+			homeService.updateWechatMemberInfoByByOpenid(m);
+			logger.info("获取个人信息成功;openid:"+m.getUserOpenid());
+		}catch (Exception e){
+			logger.info("获取个人信息失败;openid:"+m.getUserOpenid());
+			e.printStackTrace();
+		}
+
+		msg.setMessage(NameUtils.getConfig("SUCCESSINFO"));
+		msg.setResultCode(ResultInfo.SUCCESSCODE);
+		msg.setStatus(true);
+		return msg;
+	}
 }

+ 79 - 0
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/ism/IntegralLogHandler.java

@@ -0,0 +1,79 @@
+package com.iamberry.wechat.handles.ism;
+
+import com.iamberry.wechat.core.entity.ResultMsg;
+import com.iamberry.wechat.core.entity.WechatUtils;
+import com.iamberry.wechat.core.entity.ism.IntegralLog;
+import com.iamberry.wechat.core.entity.member.Member;
+import com.iamberry.wechat.core.entity.page.PageRequest;
+import com.iamberry.wechat.core.entity.page.PagedResult;
+import com.iamberry.wechat.face.ism.IntegralLogService;
+import com.iamberry.wechat.face.member.MemberService;
+import com.iamberry.wechat.tools.NameUtils;
+import com.iamberry.wechat.tools.ResultInfo;
+import com.iamberry.wechat.utils.StitchAttrUtil;
+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 javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 积分
+ */
+@Controller
+@RequestMapping("/wechat/integralLog")
+public class IntegralLogHandler {
+    @Autowired
+    private MemberService memberService;
+    @Autowired
+    private IntegralLogService integralLogService;
+
+    /**
+     * 获取积分记录
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @ResponseBody
+    @RequestMapping(value = "/getIntegral", method = RequestMethod.POST)
+    public ResultMsg payBefore(HttpServletRequest request,
+                               @RequestParam(value= "pageSize",defaultValue= "3" ,required=false) Integer pageSize,
+                               @RequestParam(value = "pageNO", defaultValue = "1",required=false) Integer pageNO,
+                               @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum
+    ) {
+        ResultMsg msg = new ResultMsg();
+        msg.setResultCode(ResultInfo.ERRORCODE);
+
+        Member member = WechatUtils.getUserBySession(request); // 当前用户
+        member = memberService.getMemberByUserOpenId(member.getUserOpenid());
+
+        IntegralLog integralLog = new IntegralLog();
+        integralLog.setUserOpenId(member.getUserOpenid());
+        integralLog.setInteLogStatus(1);
+//        List<IntegralLog> integralLogList = integralLogService.getIntegralLogListByAccoUser(integralLog);
+
+        // 封装请求数据
+        PageRequest<IntegralLog> pageRequest = new PageRequest<>(integralLog, pageNO, pageSize, totalNum == 0);
+        // 查询订单列表
+        PagedResult<IntegralLog> result = integralLogService.listIntegralLog(pageRequest);
+        if (totalNum != 0) {
+            result.setTotal(totalNum);
+        }
+        StitchAttrUtil.setPage(result);
+
+        Map<String,Object> map = new HashMap<String, Object>();
+        map.put("list",result.getDataList());
+
+        msg.setResultCode(ResultInfo.SUCCESSCODE);
+        msg.setMessage(NameUtils.getConfig("SUCCESSINFO"));
+        msg.setData(map);
+        msg.setStatus(true);
+        return msg;
+    }
+
+}

+ 144 - 13
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/mq/MQTask.java

@@ -2,21 +2,25 @@ package com.iamberry.wechat.handles.mq;
 
 import java.lang.reflect.Method;
 import java.text.MessageFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.auth0.jwt.internal.org.apache.commons.lang3.StringEscapeUtils;
 import com.iamberry.app.config.ImberryConfig;
+import com.iamberry.wechat.core.entity.coupon.CouponItem;
+import com.iamberry.wechat.core.entity.coupon.CouponType;
+import com.iamberry.wechat.core.entity.ism.IntegralLog;
+import com.iamberry.wechat.core.entity.member.Member;
 import com.iamberry.wechat.core.entity.order.NumberBacklogDto;
 import com.iamberry.wechat.core.entity.order.Order;
+import com.iamberry.wechat.face.coupon.CouponItemService;
+import com.iamberry.wechat.face.coupon.CouponTypeService;
+import com.iamberry.wechat.face.ism.IntegralLogService;
+import com.iamberry.wechat.face.member.MemberService;
 import com.iamberry.wechat.face.sendmsg.CodeService;
-import com.iamberry.wechat.tools.HttpClient431Util;
-import com.iamberry.wechat.tools.NameUtils;
+import com.iamberry.wechat.tools.*;
 import net.sf.json.JSONObject;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,7 +36,6 @@ import com.iamberry.wechat.core.entity.task.WechatTaskLogs;
 import com.iamberry.wechat.face.order.AdminOrderService;
 import com.iamberry.wechat.face.reback.RebackServices;
 import com.iamberry.wechat.face.task.WechatTaskService;
-import com.iamberry.wechat.tools.DateTimeUtil;
 import com.iamberry.zk.SpringContextHolder;
 /**
  * @company	深圳爱贝源科技有限公司
@@ -45,24 +48,28 @@ import com.iamberry.zk.SpringContextHolder;
 @Component(value="mqTask")
 @Lazy(false)
 public class MQTask implements InitializingBean {
-	
 	@Autowired
 	private AdminOrderService adminOrderService;
-	
 	@Autowired
 	private MQServiceProxy mQSerivce;
-	
 	@Autowired
 	private RatFWLogger logger;
-	
 	@Autowired
 	private WechatTaskService wechatTaskService;
-	
 	@Autowired
 	private RebackServices rebackServices;
-
 	@Autowired
 	private CodeService codeService;
+	@Autowired
+	private MemberService memberService;
+	@Autowired
+	private CouponTypeService couponTypeService;
+	@Autowired
+	private CouponItemService couponItemService;
+	@Autowired
+	private SendMessageUtil sendMessageUtil;
+	@Autowired
+	private IntegralLogService integralLogService;
 
 	private Lock lock = new ReentrantLock();
 
@@ -341,4 +348,128 @@ public class MQTask implements InitializingBean {
 //		}
 //	}
 
+	/**
+	 * 生日提醒 - 赠送优惠券 - 需要在0点就赠送出去
+	 * @throws Exception
+	 */
+//	@Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次
+//	@Scheduled(cron = "0 0 9 * * ?")//每天早上9点触发
+//	@Scheduled(cron = "0 0/2 * * * ?")//每2分钟执行一次
+	@Scheduled(cron = "0 5 0 * * ?")//每天早上0点过5分执行
+	public void birthDatePromptCoupon() throws Exception {
+		logger.info("---------------- 生日提醒-赠送优惠券-开始 ---------------");
+		List<Member> memberList = memberService.getNowBirthDate();
+		logger.info("---今日生日的用户数量:"+memberList.size());
+		Integer couponId = 40000;
+		for (Member member:memberList) {
+			CouponType couponType = couponTypeService.getCouponTypeById(couponId);
+
+			Calendar calendar = Calendar.getInstance();
+			calendar.set(Calendar.HOUR_OF_DAY,23);
+			calendar.set(Calendar.MINUTE,59);
+			calendar.set(Calendar.SECOND,50);
+			//创建优惠券
+			CouponItem couponItem = new CouponItem();
+			String uuidStr = StrUtils.getUUID();
+			couponItem.setCouponItemId(uuidStr);
+			couponItem.setCouponItemUseropenid(member.getUserOpenid());
+			couponItem.setCouponId(couponType.getCouponId());
+			couponItem.setCouponReceiveDate(new Date());
+			couponItem.setCouponUseEndDate(calendar.getTime());
+			couponItem.setCouponUseStatus(1);
+			couponItem.setCouponItemRemark(couponType.getCouponRemark());
+			Integer flag = couponItemService.insertCouponItem(couponItem);
+			if(flag < 1){
+				logger.info("---生日优惠券领取失败,userOpenId:"+member.getUserOpenid() + "");
+			}else{
+				logger.info("---生日优惠券领取成功,userOpenId:"+member.getUserOpenid() + "");
+			}
+		}
+		logger.info("---------------- 生日提醒-赠送优惠券-结束 ---------------");
+	}
+
+	/**
+	 * 生日提醒-9点通知客户今天优惠券和积分三倍情况
+	 * @throws Exception
+	 */
+//	@Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次
+	@Scheduled(cron = "0 0/2 * * * ?")//每2分钟执行一次
+//	@Scheduled(cron = "0 0 9 * * ?")//每天早上9点触发
+	public void birthDatePrompt() throws Exception {
+		logger.info("---------------- 生日提醒-提醒用户-开始 ---------------");
+		List<Member> memberList = memberService.getNowBirthDate();
+		logger.info("---今日生日的用户数量:"+memberList.size());
+		for (Member member:memberList) {
+			//推送微信模板消息
+			try {
+				sendMessageUtil.memberActivation(
+						"尊敬的会员,祝您生日快乐,特送上一份生日礼包。",
+						member.getUserTel(),
+						String.valueOf(member.getUserSurplusIntegral()),
+						"1、免费领取50元代金券,满99元即可使用,在会员中心-券包即可查看使用。\\\\r\\\\n" +
+								"2、会员生日当天下单购买产品,即可享受3倍积分。" +
+								"生日福利仅限生日当天领取和使用,赶快享受你的专属生日礼包吧!",
+						member.getUserOpenid(),
+						ResultInfo.COUPON_URL);
+			}catch (Exception e){
+				logger.info("推送今日生日的用户消息失败,失败openId:" + member.getUserOpenid());
+				e.printStackTrace();
+			}
+		}
+		logger.info("---------------- 生日提醒-提醒用户-结束 ---------------");
+	}
+
+
+	/**
+	 * 将待入账转为已入账
+	 * @throws Exception
+	 */
+//	@Scheduled(cron = "0 0/2 * * * ?")//每2分钟执行一次
+	@Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次
+	public void accountEntry() throws Exception {
+		logger.info("---------------- 待入账转为已入账-开始 ---------------");
+		List<IntegralLog> integralLogList = integralLogService.getIntegralLogListByWaitUser();
+		if(integralLogList!=null && integralLogList.size()>0){
+			logger.info("---------------- 当前待入账的处理数量-"+ integralLogList.size() +" ---------------");
+			for (IntegralLog integralLog:integralLogList) {
+				try {
+					integralLogService.waitUser(integralLog);
+				}catch (Exception e){
+					logger.info("--待入账转为已入账失败;待入账积分记录id:"+integralLog.getInteLogId()+";" +
+							"订单编号:"+ integralLog.getInteLogWaitingOrderId() +";失败原因:"+e.getMessage());
+					e.printStackTrace();
+				}
+			}
+			logger.info("---------------- 待入账转为已入账-结束 ---------------");
+		}
+	}
+
+	/**
+	 * 20分钟刷新-未支付订单自动取消订单
+	 * @throws Exception
+	 */
+//	@Scheduled(cron = "0 0/2 * * * ?")//每2分钟执行一次
+	@Scheduled(cron = "0 0/20 * * * ?")//每20分钟执行一次
+	public void cancelOrder() throws Exception {
+		logger.info("---------------- 取消订单-开始 ---------------");
+
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(new Date());
+		calendar.add(Calendar.MINUTE, -20);//20分钟前的时间
+
+		Order order = new Order();
+		order.setCancelDate(calendar.getTime());
+		List<Order> orderList = adminOrderService.cancelOrderList(order);
+		if(orderList!=null && orderList.size()>0){
+			logger.info("---------------- 当前订单处理数量-"+ orderList.size() +" ---------------");
+			for (Order ord:orderList) {
+				Integer flag = adminOrderService.cancelOrder(ord.getSalesOrderid());
+				if(flag < 1){
+					logger.info("---------------- 订单取消失败-订单号:"+ ord.getSalesOrderid() +" ---------------");
+				}
+			}
+			logger.info("---------------- 取消订单-结束 ---------------");
+		}
+	}
+
 }

+ 29 - 8
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/order/OrderHandler.java

@@ -102,8 +102,6 @@ public class OrderHandler {
 	private SettlementGiftService settlementGiftService;
 	@Autowired
 	private ActivityUtil activityUtil;
-
-
 	@Autowired
 	private AdminOrderService adminOrderService;
 	@Autowired
@@ -129,7 +127,7 @@ public class OrderHandler {
 			msg.setMessage(ResultInfo.loginOutError);
 			return msg;
 		}
-		member=memberService.getMemberByUserId(member.getUserId());
+		member=memberService.getMemberByUserOpenId(member.getUserOpenid());
 		String cartIds = request.getParameter("cartIds");
 		if (cartIds == null) {
 			msg.setMessage(ResultInfo.cartEmptyError);
@@ -236,9 +234,10 @@ public class OrderHandler {
 		dto.setSuccess(true); // 请求成功
 //		dto.setUserIntegral(homeService.selectUserIntegralByOpenid(member.getUserOpenid()));// 用户积分
 //		dto.setMeonyProportion(systemService.selectOneShopRuleById(13).getRuleNum().intValue()); // 1积分=?分钱
-		dto.setUserIntegral(0);
-		dto.setMeonyProportion(0);
+		dto.setUserIntegral(member.getUserSurplusIntegral());
+		dto.setMeonyProportion("0.1");
 		dto.setBalance(member.getUserIncome());
+		dto.setUserIsVip(member.getUserIsVip());
 		
 		Order order=cartService.getOrderRecentAddress(member.getUserOpenid());
 		
@@ -298,7 +297,7 @@ public class OrderHandler {
 			return msg;
 		}
 		
-		member=memberService.getMemberByUserId(member.getUserId());
+		member=memberService.getMemberByUserOpenId(member.getUserOpenid());
 		if (!validatorUtil.validatorObject(temp)) { // 校验订单信息是否输入有误
 			msg.setMessage(ResultInfo.paramFormatError);
 			return msg;
@@ -355,7 +354,17 @@ public class OrderHandler {
 		for (CartDto cartDto : cartDtos) {
 			if (cartDto.getProductStatus() != null && cartDto.getProductStatus().intValue() == 1) {
 				cartIds.add(cartDto.getCartId());
-				Integer subTotal = cartDto.getCartNum() * cartDto.getProductDiscount(); // 小计
+				Integer productDiscount = cartDto.getProductDiscount();
+				if(cartDto.getColorType() == 1 && member.getUserIsVip() == 2){	//商品类型  1:产品  2:滤芯
+					Double doubleProductDiscount = productDiscount.doubleValue();
+					doubleProductDiscount = doubleProductDiscount * 0.95;
+					productDiscount = doubleProductDiscount.intValue();
+				}else if(cartDto.getColorType() == 2 && member.getUserIsVip() == 2){
+					Double doubleProductDiscount = productDiscount.doubleValue();
+					doubleProductDiscount = doubleProductDiscount * 0.88;
+					productDiscount = doubleProductDiscount.intValue();
+				}
+				Integer subTotal = cartDto.getCartNum() * productDiscount; // 小计
 				total += subTotal;
 				OrderItem item = new OrderItem();
 				item.setItemNum(cartDto.getCartNum());
@@ -422,8 +431,20 @@ public class OrderHandler {
 			}else if(couponType.getCouponType()==2){
 				total=total*couponType.getCouponReduce()/100;
 			}
-		
 		}
+
+		Integer integralNum = temp.getOrderIntegralNum();
+		//使用积分
+		if(integralNum != null && integralNum != 0){
+			if(member.getUserIsVip() == 2 && member.getUserSurplusIntegral() >= integralNum){// vip用户 && 用户积分大于等于使用的积分
+				//积分的使用需要除以10,但是支付金额的单位为分,所以需要乘以100  == 》 integralNum/10*100 ==》 integralNum*10
+				total -= integralNum*10;
+			}else{
+				msg.setMessage(ResultInfo.ORDER_NO_INTEGRAL); //积分不足
+				return msg;
+			}
+		}
+
 		if(total==0 || total<0){
 			total=0;
 			mustPay=0;

+ 82 - 7
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/ResponseWechatPayHandler.java

@@ -13,8 +13,12 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.iamberry.wechat.core.entity.ResultMsg;
+import com.iamberry.wechat.core.entity.eo.Promotions;
+import com.iamberry.wechat.core.entity.ism.IntegralConfig;
 import com.iamberry.wechat.core.entity.order.OrderItem;
 import com.iamberry.wechat.face.coupon.WelfareService;
+import com.iamberry.wechat.face.ism.IntegralLogService;
+import com.iamberry.wechat.service.ActivityUtil;
 import com.iamberry.wechat.tools.ResultInfo;
 import com.iamberry.wechat.tools.SendMessageUtil;
 import org.jdom.Document;
@@ -63,29 +67,26 @@ public class ResponseWechatPayHandler {
 	private RatFWLogger ratFWLogger;
 	
 	private final Object lock = new Object();
-	
 	@Autowired
 	private CartService cartService;
-	
 	@Autowired
 	private PlaceOrderService placeOrderService;
-
 	@Autowired
 	private SendMessageUtil sendMessageUtil;
-	
 	@Autowired
 	private AdminOrderService adminOrderService;
-	
 	@Autowired
 	private MQServiceProxy mQservice;
-	
 	@Autowired
 	private WelfareService welfareService;
-	
 	@Autowired
 	CashLogService cashLogService;
 	@Autowired
 	CouponItemService couponItemService;
+	@Autowired
+	private IntegralLogService integralLogService;
+	@Autowired
+	private ActivityUtil activityUtil;
 
 	/**
 	 * 销售订单支付回调方法
@@ -132,6 +133,25 @@ public class ResponseWechatPayHandler {
 				if (couponId!=null && !"".equals(couponId)) {
 					welfareService.useCoupon(wpr.getOpenid(), orderIdMD5, couponId);
 				}
+
+				//订单结算获取获取积分
+				try{
+					Integer configId = 2;		//日常 - 订单结算获取积分X*0.1
+					Promotions promotions = activityUtil.getAllPromotions();
+					if(promotions != null && promotions.getIntegralConfigList() !=null && promotions.getIntegralConfigList().size() > 0){
+						List<IntegralConfig> integralConfigList = promotions.getIntegralConfigList();
+						configId = integralConfigList.get(0).getInteConfId();
+					}
+					//获取积分
+					Integer flag = integralLogService.addOrderChangIntegra(or.getSalesOrderid(),configId);
+					if(flag < 1){
+						ratFWLogger.info("订单获取积分失败,订单编号:"+or.getSalesOrderid());
+					}
+				}catch (Exception e){
+					ratFWLogger.info("error+订单获取积分失败,订单编号:"+or.getSalesOrderid());
+					e.printStackTrace();
+				}
+
 				assert count >= 1;
 				// 给订单的回调修改状态
 				{
@@ -293,4 +313,59 @@ public class ResponseWechatPayHandler {
 		wpr.setTransactionId(m.get("transaction_id").toString());
 		return wpr;
 	}
+
+	/**
+	 * 测试订单推送
+	 * @param orderId
+	 * @return
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/test_order")
+	public ResultMsg checkOrderPaySuccess(
+			@RequestParam(value = "orderId") String orderId) {
+		ResultMsg msg = new ResultMsg();
+
+		String orderIdMD5 = orderId;
+		Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
+
+		// 组装数据
+		Date nowDate = new Date();
+		Order order = new Order();
+		order.setSalesOrderid(orderIdMD5);
+		order.setSalesStatus(2);
+		order.setSalesTransactionId("xxxxxxxxx");
+		order.setSalesTransactionDate(nowDate);
+		order.setSalesOpenid(or.getSalesOpenid());
+
+		assert or.getSalesStatus() == 1;
+		List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
+		// 修改订单状态
+		int count = cartService.updateOrderStatus(order);
+		// 修改优惠券状态
+		order=cartService.selectOrderInfoById(order);
+		String couponId=order.getCouponId();
+		if (couponId!=null && !"".equals(couponId)) {
+			welfareService.useCoupon(or.getSalesOpenid(), orderIdMD5, couponId);
+		}
+		assert count >= 1;
+
+		//订单结算获取获取积分
+		try{
+			Integer configId = 2;		//日常 - 订单结算获取积分X*0.1
+			Promotions promotions = activityUtil.getAllPromotions();
+			if(promotions != null && promotions.getIntegralConfigList() !=null && promotions.getIntegralConfigList().size() > 0){
+				List<IntegralConfig> integralConfigList = promotions.getIntegralConfigList();
+				configId = integralConfigList.get(0).getInteConfId();
+			}
+			//获取积分
+			Integer flag = integralLogService.addOrderChangIntegra(or.getSalesOrderid(),configId);
+			if(flag < 1){
+				ratFWLogger.info("订单获取积分失败,订单编号:"+or.getSalesOrderid());
+			}
+		}catch (Exception e){
+			ratFWLogger.info("error+订单获取积分失败,订单编号:"+or.getSalesOrderid());
+			e.printStackTrace();
+		}
+		return msg;
+	}
 }

+ 179 - 0
iamberry-wechat-web/src/main/java/com/iamberry/wechat/utils/StitchAttrUtil.java

@@ -0,0 +1,179 @@
+package com.iamberry.wechat.utils;
+
+import com.iamberry.wechat.core.entity.page.PagedResult;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 解决rst列表参数拼接问题
+ */
+public class StitchAttrUtil {
+
+    public static StitchAttrUtil getSa(){
+        return new StitchAttrUtil();
+    }
+
+    private StitchAttrUtil(){
+        propertySet = new HashSet<String>(Arrays.asList(noProperty));
+    };
+
+    /**
+     * 组装参数时,会过滤以下参数
+     * 推荐使用:addDatePro(),添加过滤
+     */
+    // TODO: 2018/8/28  time 的转换调整,支持一个类中有有多种time的格式,因此注释掉初始化的time的Set,只能使用addDatePro()
+//    private final  String timeDate[] = {};
+
+    /**
+     * 控制时间参数格式
+     * 推荐使用:addDatePro(),添加过滤
+     */
+    private final String noProperty[] = {
+            "serialVersionUID",
+            "page"
+    };
+
+
+    private Set<String> propertySet;
+    private Map<String,SimpleDateFormat> timeMap = new HashMap<String,SimpleDateFormat>();
+
+    /**
+     * 组装ModelAndView
+     * @param object
+     * @param modelAndView
+     * @param url
+     * @param pagedResult
+     * @throws IllegalAccessException
+     */
+    public void setModelAndView(Object object, ModelAndView modelAndView, String url, PagedResult<?> pagedResult) {
+        StringBuilder sb = new StringBuilder(url);
+
+        if(pagedResult.getTotal() != 0) {
+            pagedResult.setPages((int) Math.ceil((double)pagedResult.getTotal()/pagedResult.getPageSize()));
+        }
+
+        sb.append("?pageSize=" + pagedResult.getPageSize());
+        sb.append("&totalNum=" + pagedResult.getTotal() );
+        this.setUrlByObj(sb,object);
+        sb.append("&&pageNO=");
+
+        Map<String, Object> map = this.getObjToMap(object);
+        modelAndView.addAllObjects(map);
+
+        modelAndView.addObject("page", pagedResult);
+        modelAndView.addObject("url", sb.toString());
+
+        modelAndView.addObject("pageNO", pagedResult.getPageNO());
+        modelAndView.addObject("pageSize", pagedResult.getPages());
+        return;
+    }
+
+    /**
+     * 将obj 转为map,
+     * 属性值为null的不会 put 到 Map 中
+     * 属性名称在  noProperty 数组中的属性不会 put 到 Map 中
+     * @param object
+     * @return
+     * @throws IllegalAccessException
+     */
+    public Map<String, Object> getObjToMap(Object object) {
+        Map<String, Object> map = new HashMap<>();
+        Class<?> clazz = object.getClass();
+        for (Field field : clazz.getDeclaredFields()) {
+            field.setAccessible(true);
+            String fieldName = field.getName();
+            Object value = null;
+            try {
+                value = field.get(object);
+            }catch (IllegalAccessException e){
+            }
+            if (value != null && !propertySet.contains(fieldName)) {
+                map.put(fieldName, value);
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 拼接url
+     * @param sb
+     * @param object
+     * @throws IllegalAccessException
+     */
+    public void setUrlByObj(StringBuilder sb,Object object){
+        Class<?> clazz = object.getClass();
+        for (Field field : clazz.getDeclaredFields()) {
+            field.setAccessible(true);
+            String fieldName = field.getName();
+            Object value = null;
+            try {
+                value = field.get(object);
+            }catch (IllegalAccessException e){
+            }
+            if (value != null && !propertySet.contains(fieldName)) {
+                /* 遍历map,将时间格式进行转换 */
+                for (Map.Entry<String, SimpleDateFormat> entry : timeMap.entrySet()) {
+                    if(entry.getKey().equals(fieldName)){
+                        value = entry.getValue().format(value);
+                    }
+                }
+                sb.append("&"+fieldName+ "=" + value.toString());
+            }
+        }
+    }
+
+    /**
+     * 判断是否还有下一页
+     * @param pagedResult
+     * @return
+     */
+    public boolean getLastPage( PagedResult<?> pagedResult){
+        /* 当前页 >= 总页面数目 */
+        if(pagedResult.getPageNO() >=  pagedResult.getPages()){
+            return false;
+        }else{
+            return true;
+        }
+    }
+
+    /**
+     * 添加组装时被过滤的属性名称
+     * @param pros
+     */
+    public StitchAttrUtil addNoPro(String...pros){
+        for(String pro : pros){
+            if(pro != null && !"".equals(pro))
+                propertySet.add(pro);
+        }
+        return this;
+    }
+
+    /**
+     * 添加时间参数格式
+     * @param fom   //"yyyy-MM-dd HH:mm:ss"
+     * @param pros
+     */
+    public StitchAttrUtil addDatePro(String fom, String...pros){
+        SimpleDateFormat sdf = new SimpleDateFormat(fom);
+        for(String pro : pros){
+            if(pro != null && !"".equals(pro)){
+                timeMap.put(pro,sdf);
+            }
+        }
+        return this;
+    }
+
+    /**
+     * 给page赋值
+     * @param pagedResult
+     */
+    public static void setPage(PagedResult<?> pagedResult){
+        if(pagedResult.getTotal() != 0) {
+            pagedResult.setPages((int) Math.ceil((double)pagedResult.getTotal()/pagedResult.getPageSize()));
+        }
+    }
+
+}

+ 16 - 1
iamberry-wechat-web/src/main/resources/iamberry-wechat-service-mybatis.xml

@@ -199,8 +199,18 @@
 		<typeAlias type="com.iamberry.wechat.core.entity.welfare.UserAmount" alias="UserAmount"/>
 		<typeAlias type="com.iamberry.wechat.core.entity.welfare.UserAmountLogs" alias="UserAmountLogs"/>
 		<typeAlias type="com.iamberry.wechat.core.entity.welfare.UserAtLogs" alias="UserAtLogs"/>
-	</typeAliases>
 
+		<!--积分-->
+		<typeAlias type="com.iamberry.wechat.core.entity.ism.IntegralLog" alias="IntegralLog"/>
+		<typeAlias type="com.iamberry.wechat.core.entity.ism.IntegralConfig" alias="IntegralConfig"/>
+	</typeAliases>
+	<!-- PageHelper -->
+	<plugins>
+		<plugin interceptor="com.github.pagehelper.PageInterceptor">
+			<property name="reasonable" value="true"/>
+			<property name="pageSizeZero" value="true"/>
+		</plugin>
+	</plugins>
 	<mappers>
 		<mapper resource="com/iamberry/wechat/service/mapper/adminBannerMapper.xml"/>
 		<mapper resource="com/iamberry/wechat/service/mapper/adminChildPermissionsMapper.xml"/>
@@ -272,6 +282,11 @@
 		<mapper resource="com/iamberry/wechat/service/mapper/spikeMapper.xml"/>
 		<mapper resource="com/iamberry/wechat/service/mapper/giftConditionMapper.xml"/>
 		<mapper resource="com/iamberry/wechat/service/mapper/itemGiftMapper.xml"/>
+
+		<!--积分-->
+		<mapper resource="com/iamberry/wechat/service/mapper/integralConfigMapper.xml"/>
+		<mapper resource="com/iamberry/wechat/service/mapper/IntegralLogMapper.xml"/>
+
 	</mappers>
 
 </configuration>