浏览代码

福利卡返利功能开发完成。

xian 5 年之前
父节点
当前提交
f23c40d1a3
共有 40 个文件被更改,包括 1370 次插入448 次删除
  1. 14 11
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ResultMsg.java
  2. 13 17
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/WechatUtils.java
  3. 43 19
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/coupon/CouponItem.java
  4. 10 1
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/coupon/CouponItemDto.java
  5. 69 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/UserAmount.java
  6. 133 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/UserAmountLogs.java
  7. 120 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/UserAtLogs.java
  8. 40 0
      iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/WelfareLogs.java
  9. 32 0
      iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/coupon/WelfareService.java
  10. 1 36
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/cart/CartServiceImpl.java
  11. 5 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/coupon/CouponTypeServiceImpl.java
  12. 265 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/coupon/WelfareServiceImpl.java
  13. 63 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/coupon/WelfareTask.java
  14. 2 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/CouponItemMapper.java
  15. 1 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/CouponTypeMapper.java
  16. 2 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/OrderMapper.java
  17. 22 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountLogsMapper.java
  18. 69 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountLogsMapper.xml
  19. 14 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountMapper.java
  20. 38 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountMapper.xml
  21. 19 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAtLogsMapper.java
  22. 66 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAtLogsMapper.xml
  23. 14 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/WelfareLogsMapper.java
  24. 13 0
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/WelfareLogsMapper.xml
  25. 13 2
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/couponItemMapper.xml
  26. 5 2
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/orderMapper.xml
  27. 1 1
      iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/productInfoMapper.xml
  28. 3 25
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/filters/AdminLoginFilter.java
  29. 2 2
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/filters/CSRFTokenFilter.java
  30. 9 10
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/filters/WechatFilter.java
  31. 2 2
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/cart/CartHandlers.java
  32. 33 82
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/coupon/CouponTypeHandler.java
  33. 0 2
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/mq/MQTimer.java
  34. 21 0
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/order/OrderHandler.java
  35. 3 3
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/RequestWechatPayHandler.java
  36. 77 230
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/ResponseWechatPayHandler.java
  37. 3 2
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/listener/MessageQueueListener.java
  38. 123 0
      iamberry-wechat-web/src/main/java/com/iamberry/wechat/welfare/WelfareController.java
  39. 6 0
      iamberry-wechat-web/src/main/resources/iamberry-wechat-service-mybatis.xml
  40. 1 1
      iamberry-wechat-web/src/main/resources/iamberry-wechat-web-ioc.xml

+ 14 - 11
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/ResultMsg.java

@@ -7,18 +7,15 @@ package com.iamberry.wechat.core.entity;
  */
 public class ResultMsg implements java.io.Serializable{
 
-	/**
-	 * 
-	 */
 	private static final long serialVersionUID = 8987614804726091566L;
 
-	private boolean status; // 状态
+	private boolean status;
 	
-	private String ResultCode ; //状态码
+	private String ResultCode;
 	
-	private String message; //返回信息
+	private String message;
 	
-	private Object data; //返回对象
+	private Object data;
 
 	public ResultMsg(){}
 	
@@ -31,6 +28,14 @@ public class ResultMsg implements java.io.Serializable{
 		this.data = data;
 	}
 
+	public static ResultMsg SUCCESS() {
+		return new ResultMsg(true, "200", "SUCCESS", null);
+	}
+
+	public static ResultMsg ERROR() {
+		return new ResultMsg(false, "500", "FAIL", null);
+	}
+
 	public boolean isStatus() {
 		return status;
 	}
@@ -59,10 +64,8 @@ public class ResultMsg implements java.io.Serializable{
 		return data;
 	}
 
-	public void setData(Object data) {
+	public ResultMsg setData(Object data) {
 		this.data = data;
+		return this;
 	}
-	
-	
-
 }

+ 13 - 17
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/WechatUtils.java

@@ -34,12 +34,12 @@ public class WechatUtils {
 		Cookie[] cookies = request.getCookies();
 		if (cookies != null) {
 			for (Cookie cookie : cookies) {
-				if (cookie.getName().equals("WATERO_WEB_PF")) {
+				if ("WATERO_WEB_PF".equals(cookie.getName())) {
 					continue;
 				}
 				// 如果cookie的name以cookie value的前8位口头,那么是用户token保存方式
 				String cookieNmae = cookie.getName();
-				String cookieValue = new String(cookie.getValue().substring(0, 8));
+				String cookieValue = cookie.getValue().substring(0, 8);
 				if (!cookieNmae.startsWith(cookieValue)) {
 					continue;
 				}
@@ -56,7 +56,7 @@ public class WechatUtils {
 		if (token.length() <= 13) {
 			token = "1234567890ABC";
 		}
-		String secret = new String(token.substring(0, 8));
+		String secret = token.substring(0, 8);
 		String userToken = WebJsonTokenUtil.getToken(object.getUserId(), object.getUserOpenid(), token.substring(8));
 		// 保存cookie, 多项验证
 		AdminUtils.createCookie(response, token, secret+userToken);
@@ -79,12 +79,12 @@ public class WechatUtils {
 		}
 
 		for (Cookie cookie : cookies) {
-			if (cookie.getName().equals("WATERO_WEB_PF")) {
+			if ("WATERO_WEB_PF".equals(cookie.getName())) {
 				continue;
 			}
 			// 如果cookie的name以cookie value的前8位口头,那么是用户token保存方式
 			String cookieNmae = cookie.getName();
-			String cookieValue = new String(cookie.getValue().substring(0, 8));
+			String cookieValue = cookie.getValue().substring(0, 8);
 			if (!cookieNmae.startsWith(cookieValue)) {
 				continue;
 			}
@@ -114,12 +114,10 @@ public class WechatUtils {
 			urlTemp = tokenId;
 		}
 		try {
-			StringBuilder builder = new StringBuilder("https://open.weixin.qq.com/connect/oauth2/authorize?appid=");
-			builder.append(NameUtils.getConfig("appId"))
-					.append("&redirect_uri=")
-					.append(URLEncoder.encode(urlTemp, "UTF-8"))
-					.append("&response_type=code&scope=snsapi_base&state=iamberry#wechat_redirect");
-			return builder.toString();
+			return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + NameUtils.getConfig("appId") +
+					"&redirect_uri=" +
+					URLEncoder.encode(urlTemp, "UTF-8") +
+					"&response_type=code&scope=snsapi_base&state=iamberry#wechat_redirect";
 		} catch (UnsupportedEncodingException e) {
 			e.printStackTrace();
 		}
@@ -157,12 +155,10 @@ public class WechatUtils {
 		if (callback != null) {
 			redirect_url = redirect_url + "?callback=" + setCallback(callback);
 		}
-		StringBuilder builder = new StringBuilder("https://open.weixin.qq.com/connect/oauth2/authorize?appid=");
-		builder.append(NameUtils.getConfig("appId"))
-				.append("&redirect_uri=")
-				.append(URLEncoder.encode(redirect_url, "UTF-8"))
-				.append("&response_type=code&scope=snsapi_base&state=iamberry#wechat_redirect");
 
-		return builder.toString();
+		return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + NameUtils.getConfig("appId") +
+				"&redirect_uri=" +
+				URLEncoder.encode(redirect_url, "UTF-8") +
+				"&response_type=code&scope=snsapi_base&state=iamberry#wechat_redirect";
 	}
 }

+ 43 - 19
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/coupon/CouponItem.java

@@ -14,29 +14,56 @@ import com.iamberry.wechat.core.entity.PageBean;
  * @author 穆再兴
  *
  */
-public class CouponItem implements Serializable{
-	/**
-	 * 
-	 */
+public class CouponItem implements Serializable {
 	private static final long serialVersionUID = -5156827900555021972L;
-	
-	private String couponItemId;				//id
-	private Integer couponId; 						//优惠券分类id
-	private String couponItemUseropenid;		//领取券的openid
+
+	private String couponItemId;
+
+	private Integer couponId;
+
+	private String couponItemUseropenid;
+
 	@DateTimeFormat(pattern="yyyy-MM-dd")  
 	@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") 
-	private Date couponUseEndDate;				//券截止使用时间
+	private Date couponUseEndDate;
+
 	@DateTimeFormat(pattern="yyyy-MM-dd")  
 	@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") 
-	private Date couponReceiveDate;				//领取优惠券时间
-	
-	private Integer couponUseStatus;				//使用状态
-	private Integer oldCouponUseStatus;			//当前的使用状态
+	private Date couponReceiveDate;
+
+	private Integer couponUseStatus;
+
+	private Integer oldCouponUseStatus;
+
 	@DateTimeFormat(pattern="yyyy-MM-dd")  
 	@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") 
-	private Date couponUseDate;					//使用时间
-	private String couponItemRemark;			//优惠券详情备注
-	private PageBean page;						//分页
+	private Date couponUseDate;
+
+	private String couponItemRemark;
+
+	/**优惠券是否已经转赠给他人,1:未转赠;2:已转赠*/
+	private Integer couponIsGive;
+
+	private String giveOpenid;
+
+	private PageBean page;
+
+	public String getGiveOpenid() {
+		return giveOpenid;
+	}
+
+	public void setGiveOpenid(String giveOpenid) {
+		this.giveOpenid = giveOpenid;
+	}
+
+	public Integer getCouponIsGive() {
+		return couponIsGive;
+	}
+
+	public void setCouponIsGive(Integer couponIsGive) {
+		this.couponIsGive = couponIsGive;
+	}
+
 	public String getCouponItemId() {
 		return couponItemId;
 	}
@@ -91,9 +118,6 @@ public class CouponItem implements Serializable{
 	public void setPage(PageBean page) {
 		this.page = page;
 	}
-	public static long getSerialversionuid() {
-		return serialVersionUID;
-	}
 	public Integer getOldCouponUseStatus() {
 		return oldCouponUseStatus;
 	}

+ 10 - 1
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/coupon/CouponItemDto.java

@@ -37,7 +37,16 @@ public class CouponItemDto implements java.io.Serializable{
 	private Date endDate;						//结束时间
 	private String couponItemRemark;			//优惠券详情备注
 	private PageBean page;						//分页
-	
+	private Integer couponIsGive;
+
+	public Integer getCouponIsGive() {
+		return couponIsGive;
+	}
+
+	public void setCouponIsGive(Integer couponIsGive) {
+		this.couponIsGive = couponIsGive;
+	}
+
 	public String getCouponItemId() {
 		return couponItemId;
 	}

+ 69 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/UserAmount.java

@@ -0,0 +1,69 @@
+package com.iamberry.wechat.core.entity.welfare;
+
+import java.io.Serializable;
+
+/**
+ * @author 献
+ */
+public class UserAmount implements Serializable {
+
+    private Integer amountId;
+
+    private String userOpenid;
+
+    private Integer amonutUsable;
+
+    private Integer amonutAwait;
+
+    private Integer amonutTotal;
+
+    private Integer amonutLock;
+
+    public Integer getAmountId() {
+        return amountId;
+    }
+
+    public void setAmountId(Integer amountId) {
+        this.amountId = amountId;
+    }
+
+    public String getUserOpenid() {
+        return userOpenid;
+    }
+
+    public void setUserOpenid(String userOpenid) {
+        this.userOpenid = userOpenid == null ? null : userOpenid.trim();
+    }
+
+    public Integer getAmonutUsable() {
+        return amonutUsable;
+    }
+
+    public void setAmonutUsable(Integer amonutUsable) {
+        this.amonutUsable = amonutUsable;
+    }
+
+    public Integer getAmonutAwait() {
+        return amonutAwait;
+    }
+
+    public void setAmonutAwait(Integer amonutAwait) {
+        this.amonutAwait = amonutAwait;
+    }
+
+    public Integer getAmonutTotal() {
+        return amonutTotal;
+    }
+
+    public void setAmonutTotal(Integer amonutTotal) {
+        this.amonutTotal = amonutTotal;
+    }
+
+    public Integer getAmonutLock() {
+        return amonutLock;
+    }
+
+    public void setAmonutLock(Integer amonutLock) {
+        this.amonutLock = amonutLock;
+    }
+}

+ 133 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/UserAmountLogs.java

@@ -0,0 +1,133 @@
+package com.iamberry.wechat.core.entity.welfare;
+
+import com.iamberry.wechat.core.entity.member.Member;
+import com.iamberry.wechat.core.entity.order.Order;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author 献
+ */
+public class UserAmountLogs implements Serializable {
+
+    private Integer logsId;
+
+    private String userOpenid;
+
+    private String orderId;
+
+    private Integer logsType;
+
+    private Integer logsState;
+
+    private Integer logsAmount;
+
+    private Date logsDate;
+
+    private String logsRemark;
+
+    private Date logsUpdateTime;
+
+    private Date logsCreateTime;
+
+    private Order order;
+
+    private Member member;
+
+    public Order getOrder() {
+        return order;
+    }
+
+    public void setOrder(Order order) {
+        this.order = order;
+    }
+
+    public Member getMember() {
+        return member;
+    }
+
+    public void setMember(Member member) {
+        this.member = member;
+    }
+
+    public String getLogsRemark() {
+        return logsRemark;
+    }
+
+    public void setLogsRemark(String logsRemark) {
+        this.logsRemark = logsRemark;
+    }
+
+    public Integer getLogsId() {
+        return logsId;
+    }
+
+    public void setLogsId(Integer logsId) {
+        this.logsId = logsId;
+    }
+
+    public String getUserOpenid() {
+        return userOpenid;
+    }
+
+    public void setUserOpenid(String userOpenid) {
+        this.userOpenid = userOpenid == null ? null : userOpenid.trim();
+    }
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId == null ? null : orderId.trim();
+    }
+
+    public Integer getLogsType() {
+        return logsType;
+    }
+
+    public void setLogsType(Integer logsType) {
+        this.logsType = logsType;
+    }
+
+    public Integer getLogsState() {
+        return logsState;
+    }
+
+    public void setLogsState(Integer logsState) {
+        this.logsState = logsState;
+    }
+
+    public Integer getLogsAmount() {
+        return logsAmount;
+    }
+
+    public void setLogsAmount(Integer logsAmount) {
+        this.logsAmount = logsAmount;
+    }
+
+    public Date getLogsDate() {
+        return logsDate;
+    }
+
+    public void setLogsDate(Date logsDate) {
+        this.logsDate = logsDate;
+    }
+
+    public Date getLogsUpdateTime() {
+        return logsUpdateTime;
+    }
+
+    public void setLogsUpdateTime(Date logsUpdateTime) {
+        this.logsUpdateTime = logsUpdateTime;
+    }
+
+    public Date getLogsCreateTime() {
+        return logsCreateTime;
+    }
+
+    public void setLogsCreateTime(Date logsCreateTime) {
+        this.logsCreateTime = logsCreateTime;
+    }
+}

+ 120 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/UserAtLogs.java

@@ -0,0 +1,120 @@
+package com.iamberry.wechat.core.entity.welfare;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author 献
+ */
+public class UserAtLogs implements Serializable {
+
+    private Integer atId;
+
+    private String userOpenid;
+
+    private Integer atAmonut;
+
+    private Integer atState;
+
+    private String atName;
+
+    private String atTel;
+
+    private String atCardNo;
+
+    private String atBankName;
+
+    private Date atCreateTime;
+
+    private Date atDealTime;
+
+    private String atRemark;
+
+    public Integer getAtId() {
+        return atId;
+    }
+
+    public void setAtId(Integer atId) {
+        this.atId = atId;
+    }
+
+    public String getUserOpenid() {
+        return userOpenid;
+    }
+
+    public void setUserOpenid(String userOpenid) {
+        this.userOpenid = userOpenid == null ? null : userOpenid.trim();
+    }
+
+    public Integer getAtAmonut() {
+        return atAmonut;
+    }
+
+    public void setAtAmonut(Integer atAmonut) {
+        this.atAmonut = atAmonut;
+    }
+
+    public Integer getAtState() {
+        return atState;
+    }
+
+    public void setAtState(Integer atState) {
+        this.atState = atState;
+    }
+
+    public String getAtName() {
+        return atName;
+    }
+
+    public void setAtName(String atName) {
+        this.atName = atName == null ? null : atName.trim();
+    }
+
+    public String getAtTel() {
+        return atTel;
+    }
+
+    public void setAtTel(String atTel) {
+        this.atTel = atTel == null ? null : atTel.trim();
+    }
+
+    public String getAtCardNo() {
+        return atCardNo;
+    }
+
+    public void setAtCardNo(String atCardNo) {
+        this.atCardNo = atCardNo == null ? null : atCardNo.trim();
+    }
+
+    public String getAtBankName() {
+        return atBankName;
+    }
+
+    public void setAtBankName(String atBankName) {
+        this.atBankName = atBankName == null ? null : atBankName.trim();
+    }
+
+    public Date getAtCreateTime() {
+        return atCreateTime;
+    }
+
+    public void setAtCreateTime(Date atCreateTime) {
+        this.atCreateTime = atCreateTime;
+    }
+
+    public Date getAtDealTime() {
+        return atDealTime;
+    }
+
+    public void setAtDealTime(Date atDealTime) {
+        this.atDealTime = atDealTime;
+    }
+
+    public String getAtRemark() {
+        return atRemark;
+    }
+
+    public void setAtRemark(String atRemark) {
+        this.atRemark = atRemark == null ? null : atRemark.trim();
+    }
+}

+ 40 - 0
iamberry-common-core/src/main/java/com/iamberry/wechat/core/entity/welfare/WelfareLogs.java

@@ -0,0 +1,40 @@
+package com.iamberry.wechat.core.entity.welfare;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author 献
+ */
+public class WelfareLogs implements Serializable {
+
+    private Integer logsId;
+
+    private String userOpenid;
+
+    private Date logsCreateTime;
+
+    public Integer getLogsId() {
+        return logsId;
+    }
+
+    public void setLogsId(Integer logsId) {
+        this.logsId = logsId;
+    }
+
+    public String getUserOpenid() {
+        return userOpenid;
+    }
+
+    public void setUserOpenid(String userOpenid) {
+        this.userOpenid = userOpenid;
+    }
+
+    public Date getLogsCreateTime() {
+        return logsCreateTime;
+    }
+
+    public void setLogsCreateTime(Date logsCreateTime) {
+        this.logsCreateTime = logsCreateTime;
+    }
+}

+ 32 - 0
iamberry-wechat-interface/src/main/java/com/iamberry/wechat/face/coupon/WelfareService.java

@@ -0,0 +1,32 @@
+package com.iamberry.wechat.face.coupon;
+
+import com.iamberry.wechat.core.entity.welfare.UserAmount;
+import com.iamberry.wechat.core.entity.welfare.UserAmountLogs;
+import com.iamberry.wechat.core.entity.welfare.UserAtLogs;
+import com.iamberry.wechat.core.entity.welfare.WelfareLogs;
+
+import java.util.List;
+
+/**
+ * @author root
+ */
+public interface WelfareService {
+
+    WelfareLogs get(String openid);
+
+    int draw(String openId);
+
+    int drawShareCoupon(String couponId, String openid);
+
+    int useCoupon(String openid, String orderId, String couponId);
+
+    int enter(UserAmountLogs logs);
+
+    UserAmount getAmount(String openid);
+
+    List<UserAmountLogs> listAmount(UserAmountLogs userAmountLogs);
+
+    List<UserAtLogs> listAt(UserAtLogs data);
+
+    int addAt(UserAtLogs userAtLogs);
+}

+ 1 - 36
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/cart/CartServiceImpl.java

@@ -247,46 +247,11 @@ public class CartServiceImpl implements CartService {
 	 */
 	public Boolean supdateStateByOrderId(MQMessage QMessage){
 		Order order=new Order();
-		Date nowDate=new Date();
 		order.setSalesOrderid(QMessage.getServiceToMessage());
-//System.out.println("order is for search============");
 		order=cartDao.selectOrderInfoById(order);
-		/*order.setSalesTransactionId(QMessage.getServiceOtherMessage());
-		updateOrderByOrderId(order);*/
-		int i=0;
-		
-		/*//修改优惠券状态
-		String couponId=order.getCouponId();
-		if(couponId!=null && !couponId.endsWith("")){
-			CouponItem couponItem=new CouponItem();
-			couponItem.setCouponItemId(couponId);
-			couponItem.setCouponUseStatus(2);
-			couponItem.setCouponUseDate(nowDate);
-			couponItemService.insertCouponItem(couponItem);
-		}
-		//更新账户余额
-		int balancePayAmount=order.getBalancePayAmount();
-		if(balancePayAmount>0){
-			Member member=new Member();
-			member.setUserOpenid(order.getSalesOpenid());
-			member.setUserIncome(-balancePayAmount);
-			memberService.updateUserIncomeByOpenId(member);
-			
-			//现金使用记录
-			CashLog log=new CashLog();
-			log.setCashLogsIntroduction("订单支出");
-			log.setCashLogsNum(balancePayAmount);
-			log.setCashLogsOpenid(member.getUserOpenid());
-			log.setCashLogsType(2);
-			log.setCashLogsResType(3);
-			log.setCashLogsOrderid(order.getSalesOrderid());
-			log.setCashLogsCreateDate(nowDate);
-			i=cashLogService.addCashLog(log);
-		}*/
 		productInfoService.updateProductNumList(QMessage.getServiceToMessage());
 		//添加到返利表
-		i=rebackServices.loadSingleOrderReward(order);
-		return i>0;
+		return rebackServices.loadSingleOrderReward(order)>0;
 	}
 
 	@Override

+ 5 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/coupon/CouponTypeServiceImpl.java

@@ -26,6 +26,7 @@ public class CouponTypeServiceImpl implements CouponTypeService {
 	 * @author 穆再兴
 	 * @return
 	 */
+	@Override
 	public List<CouponType> getCouponTypeList(CouponType couponType){
 		couponType.getPage().initRecordBegin();
 		return couponTypeMapper.getCouponTypeList(couponType);
@@ -37,6 +38,7 @@ public class CouponTypeServiceImpl implements CouponTypeService {
 	 * @author 穆再兴
 	 * @return
 	 */
+	@Override
 	public Integer getCouponTypeCount(){
 		return couponTypeMapper.getCouponTypeCount();
 	}
@@ -48,6 +50,7 @@ public class CouponTypeServiceImpl implements CouponTypeService {
 	 * @param couponType
 	 * @return
 	 */
+	@Override
 	public Integer insertCouponType(CouponType couponType){
 		return couponTypeMapper.insertCouponType(couponType);
 	}
@@ -58,6 +61,7 @@ public class CouponTypeServiceImpl implements CouponTypeService {
 	 * @param couponId
 	 * @return
 	 */
+	@Override
 	public CouponType getCouponTypeById(Integer couponId){
 		return couponTypeMapper.getCouponTypeById(couponId);
 	}
@@ -67,6 +71,7 @@ public class CouponTypeServiceImpl implements CouponTypeService {
 	 * 2016年7月7日
 	 * @return
 	 */
+	@Override
 	public Integer updateCouponTypeForItem(Integer couponId){
 		return couponTypeMapper.updateCouponTypeForItem(couponId);
 	}

+ 265 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/coupon/WelfareServiceImpl.java

@@ -0,0 +1,265 @@
+package com.iamberry.wechat.service.coupon;
+
+import com.iamberry.wechat.core.entity.coupon.CouponItem;
+import com.iamberry.wechat.core.entity.coupon.CouponItemDto;
+import com.iamberry.wechat.core.entity.order.Order;
+import com.iamberry.wechat.core.entity.welfare.UserAmount;
+import com.iamberry.wechat.core.entity.welfare.UserAmountLogs;
+import com.iamberry.wechat.core.entity.welfare.UserAtLogs;
+import com.iamberry.wechat.core.entity.welfare.WelfareLogs;
+import com.iamberry.wechat.face.coupon.WelfareService;
+import com.iamberry.wechat.service.mapper.*;
+import com.iamberry.wechat.tools.DateTimeUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+import java.sql.SQLException;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author root
+ */
+@Service
+public class WelfareServiceImpl implements WelfareService {
+
+    @Autowired
+    private WelfareLogsMapper welfareLogsMapper;
+
+    @Autowired
+    private CouponItemMapper couponItemMapper;
+
+    @Autowired
+    private UserAmountLogsMapper amountLogsMapper;
+
+    @Autowired
+    private UserAmountMapper amountMapper;
+
+    @Autowired
+    private UserAtLogsMapper atLogsMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private OrderMapper orderMapper;
+
+    @Override
+    public WelfareLogs get(String openid) {
+        return welfareLogsMapper.get(openid);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {RuntimeException.class, SQLException.class}, isolation = Isolation.REPEATABLE_READ)
+    public int draw(String openId) {
+        if (welfareLogsMapper.get(openId) != null) {
+            return 0;
+        }
+        int conpon200Id = 30000;
+        int conpon200Num = 5;
+        CouponItem item = new CouponItem();
+        item.setCouponId(conpon200Id);
+        item.setCouponItemUseropenid(openId);
+        item.setCouponUseEndDate(DateTimeUtil.addMonth(new Date(), 3));
+        item.setCouponReceiveDate(new Date());
+        item.setCouponIsGive(1);
+        item.setCouponUseStatus(1);
+        for (int i = 0; i < conpon200Num; i++) {
+            item.setCouponItemId(UUID.randomUUID().toString().replace("-", ""));
+            couponItemMapper.insertCouponItem(item);
+        }
+
+        int conpon100Id = 30001;
+        int conpon100Num = 5;
+        CouponItem item100 = new CouponItem();
+        item100.setCouponId(conpon100Id);
+        item100.setCouponItemUseropenid(openId);
+        item100.setCouponUseEndDate(DateTimeUtil.addMonth(new Date(), 3));
+        item100.setCouponReceiveDate(new Date());
+        item100.setCouponIsGive(1);
+        item100.setCouponUseStatus(1);
+        for (int i = 0; i < conpon100Num; i++) {
+            item100.setCouponItemId(UUID.randomUUID().toString().replace("-", ""));
+            couponItemMapper.insertCouponItem(item100);
+        }
+
+        int conpon188Id = 30002;
+        int conpon188Num = 1;
+        CouponItem item188 = new CouponItem();
+        item188.setCouponId(conpon188Id);
+        item188.setCouponItemUseropenid(openId);
+        item188.setCouponUseEndDate(DateTimeUtil.addMonth(new Date(), 3));
+        item188.setCouponReceiveDate(new Date());
+        item188.setCouponIsGive(1);
+        item188.setCouponUseStatus(1);
+        for (int i = 0; i < conpon188Num; i++) {
+            item188.setCouponItemId(UUID.randomUUID().toString().replace("-", ""));
+            couponItemMapper.insertCouponItem(item188);
+        }
+
+        WelfareLogs welfareLogs = new WelfareLogs();
+        welfareLogs.setUserOpenid(openId);
+        return welfareLogsMapper.add(welfareLogs);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {RuntimeException.class, SQLException.class}, isolation = Isolation.REPEATABLE_READ)
+    public int drawShareCoupon(String couponId, String openid) {
+        CouponItemDto couponItem = couponItemMapper.getCouponItemById(couponId);
+        if (couponItem == null) {
+            return 0;
+        }
+        if (openid.equals(couponItem.getUseropenid())) {
+            return 0;
+        }
+        if (System.currentTimeMillis() >= couponItem.getCouponUseEndDate().getTime()) {
+            return 0;
+        }
+        CouponItem coupon = new CouponItem();
+        coupon.setCouponIsGive(2);
+        coupon.setCouponItemId(couponId);
+        couponItemMapper.updateCouponItemById(coupon);
+        // 重新为当前用户生成
+        CouponItem item188 = new CouponItem();
+        item188.setCouponId(couponItem.getCouponId());
+        item188.setCouponItemUseropenid(openid);
+        item188.setCouponUseEndDate(couponItem.getCouponUseEndDate());
+        item188.setCouponReceiveDate(new Date());
+        item188.setCouponIsGive(1);
+        item188.setCouponUseStatus(1);
+        item188.setGiveOpenid(coupon.getCouponItemUseropenid());
+        item188.setCouponItemId(UUID.randomUUID().toString().replace("-", ""));
+        return couponItemMapper.insertCouponItem(item188);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {RuntimeException.class, SQLException.class}, isolation = Isolation.READ_COMMITTED)
+    public int useCoupon(String openid, String orderId, String couponId) {
+        CouponItem couponItemDto = couponItemMapper.get(couponId);
+        assert couponItemDto != null;
+        if (couponItemDto.getGiveOpenid() != null) {
+            // 此优惠券为他人赠送,需要生成返利信息
+            UserAmount userAmount = amountMapper.get(couponItemDto.getGiveOpenid());
+            if (userAmount == null) {
+                userAmount = new UserAmount();
+                userAmount.setUserOpenid(couponItemDto.getGiveOpenid());
+                userAmount.setAmonutAwait(0);
+                userAmount.setAmonutLock(0);
+                userAmount.setAmonutTotal(0);
+                userAmount.setAmonutUsable(0);
+                try {
+                    amountMapper.add(userAmount);
+                } catch (DuplicateKeyException e) {
+                    userAmount = amountMapper.get(couponItemDto.getGiveOpenid());
+                }
+            }
+            userAmount.setUserOpenid(null);
+            userAmount.setAmonutLock(null);
+            userAmount.setAmonutTotal(null);
+            userAmount.setAmonutUsable(null);
+            // 待入账金额
+            int amount = couponItemMapper.getCouponItemById(couponId).getCouponReduce();
+            userAmount.setAmonutAwait(amount);
+            amountMapper.edit(userAmount);
+            // 返利记录
+            UserAmountLogs logs = new UserAmountLogs();
+            logs.setLogsAmount(amount);
+            logs.setLogsDate(DateTimeUtil.addDay(new Date(), 16));
+            logs.setLogsState(1);
+            logs.setLogsType(1);
+            logs.setOrderId(orderId);
+            logs.setUserOpenid(couponItemDto.getGiveOpenid());
+            amountLogsMapper.add(logs);
+        }
+        CouponItem couponItem=new CouponItem();
+        couponItem.setCouponItemId(couponId);
+        couponItem.setCouponUseStatus(2);
+        couponItem.setCouponUseDate(new Date());
+        return couponItemMapper.updateCouponItemById(couponItem);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {RuntimeException.class, SQLException.class}, isolation = Isolation.READ_COMMITTED)
+    public int enter(UserAmountLogs logs) {
+        // 入账提现金额、减少待入账金额
+        UserAmount userAmount = amountMapper.get(logs.getUserOpenid());
+        assert userAmount != null;
+
+        userAmount.setAmonutLock(null);
+        userAmount.setUserOpenid(null);
+
+        userAmount.setAmonutUsable(logs.getLogsAmount());
+        userAmount.setAmonutAwait(-logs.getLogsAmount());
+        userAmount.setAmonutTotal(logs.getLogsAmount());
+        amountMapper.edit(userAmount);
+        // 入账记录编辑
+        logs.setUserOpenid(null);
+        logs.setOrderId(null);
+        logs.setLogsAmount(null);
+
+        logs.setLogsRemark("SUCCESS");
+        logs.setLogsType(2);
+        logs.setLogsDate(new Date());
+        return amountLogsMapper.edit(logs);
+    }
+
+    @Override
+    public UserAmount getAmount(String openid) {
+        UserAmount userAmount = amountMapper.get(openid);
+        if (userAmount == null) {
+            userAmount = new UserAmount();
+            userAmount.setUserOpenid(openid);
+            userAmount.setAmonutAwait(0);
+            userAmount.setAmonutLock(0);
+            userAmount.setAmonutTotal(0);
+            userAmount.setAmonutUsable(0);
+            try {
+                amountMapper.add(userAmount);
+            } catch (DuplicateKeyException e) {
+                userAmount = amountMapper.get(openid);
+            }
+        }
+        return userAmount;
+    }
+
+    @Override
+    public List<UserAmountLogs> listAmount(UserAmountLogs userAmountLogs) {
+        List<UserAmountLogs> list = amountLogsMapper.list(userAmountLogs);
+        if (list == null || list.isEmpty()) {
+            return list;
+        }
+        for (UserAmountLogs logs : list) {
+            logs.setOrder(orderMapper.get(logs.getOrderId()));
+            logs.setMember(memberMapper.getMemberByUserOpenId(logs.getOrder().getSalesOpenid()));
+        }
+        return list;
+    }
+
+    @Override
+    public List<UserAtLogs> listAt(UserAtLogs data) {
+        return atLogsMapper.list(data);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {RuntimeException.class, SQLException.class}, isolation = Isolation.READ_COMMITTED)
+    public int addAt(UserAtLogs userAtLogs) {
+        // 查询用户余额
+        UserAmount userAmount = amountMapper.get(userAtLogs.getUserOpenid());
+        if (userAmount.getAmonutUsable() < userAtLogs.getAtAmonut()) {
+            return 0;
+        }
+        if (userAtLogs.getAtAmonut() < 10000) {
+            return 0;
+        }
+        UserAmount edit = new UserAmount();
+        edit.setAmonutLock(userAtLogs.getAtAmonut());
+        edit.setAmonutUsable(-userAtLogs.getAtAmonut());
+        edit.setAmountId(userAmount.getAmountId());
+        amountMapper.edit(edit);
+        // 添加提现记录
+        return atLogsMapper.add(userAtLogs);
+    }
+}

+ 63 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/coupon/WelfareTask.java

@@ -0,0 +1,63 @@
+package com.iamberry.wechat.service.coupon;
+
+import com.iamberry.wechat.core.entity.order.Order;
+import com.iamberry.wechat.core.entity.welfare.UserAmountLogs;
+import com.iamberry.wechat.face.coupon.WelfareService;
+import com.iamberry.wechat.service.mapper.OrderMapper;
+import com.iamberry.wechat.service.mapper.UserAmountLogsMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author root
+ */
+@Lazy(value = false)
+@Service
+public class WelfareTask {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(WelfareTask.class);
+
+    @Autowired
+    private UserAmountLogsMapper amountLogsMapper;
+
+    @Autowired
+    private OrderMapper orderMapper;
+
+    @Autowired
+    private WelfareService welfareService;
+
+    @Scheduled(cron = "59 59 23 1/1 * ?")
+    public void amount() {
+        LOGGER.info("启动返利任务");
+        UserAmountLogs select = new UserAmountLogs();
+        select.setLogsDate(new Date());
+        select.setLogsType(1);
+        select.setLogsState(1);
+        List<UserAmountLogs> list = amountLogsMapper.list(select);
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        for (UserAmountLogs logs : list) {
+            // 校验订单状态
+            Order order = new Order();
+            order.setSalesOrderid(logs.getOrderId());
+            order = orderMapper.selectOrderInfoById(order);
+            if (order == null || order.getSalesStatus() != 5 || order.getSalesStatus() != 2) {
+                LOGGER.error("{}的返利入账失败,订单号:{} ", logs.getUserOpenid(), logs.getOrderId());
+                logs.setLogsState(2);
+                logs.setLogsRemark("返利金额入账失败,原因:订单(" + logs.getOrderId() + ")状态非发货或已支付状态");
+                amountLogsMapper.edit(logs);
+                continue;
+            }
+            welfareService.enter(logs);
+        }
+    }
+
+}

+ 2 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/CouponItemMapper.java

@@ -60,4 +60,6 @@ public interface CouponItemMapper {
 	 * @author liuzhiwei
 	 */
 	public Integer updateCouponItemList(List<CouponItem> couponItemList);
+
+	CouponItem get(String couponId);
 }

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

@@ -2,6 +2,7 @@ package com.iamberry.wechat.service.mapper;
 
 import java.util.List;
 
+import com.iamberry.wechat.core.entity.coupon.CouponItem;
 import com.iamberry.wechat.core.entity.coupon.CouponType;
 
 

+ 2 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/OrderMapper.java

@@ -64,5 +64,7 @@ public interface OrderMapper {
 	 * @return
 	 */
 	public Order getOrderAddressInfo(String openid);
+
+	Order get(String orderId);
 	
 }

+ 22 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountLogsMapper.java

@@ -0,0 +1,22 @@
+package com.iamberry.wechat.service.mapper;
+
+import com.iamberry.wechat.core.entity.welfare.UserAmountLogs;
+
+import java.util.List;
+
+/**
+ * @author 献
+ */
+public interface UserAmountLogsMapper {
+
+    int del(Integer logsId);
+
+    int add(UserAmountLogs record);
+
+    UserAmountLogs get(Integer logsId);
+
+    int edit(UserAmountLogs record);
+
+    List<UserAmountLogs> list(UserAmountLogs logs);
+
+}

+ 69 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountLogsMapper.xml

@@ -0,0 +1,69 @@
+<?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.UserAmountLogsMapper" >
+
+  <select id="get" resultType="UserAmountLogs" parameterType="java.lang.Integer" >
+    select * from tb_iamberry_user_amount_logs where logs_id = #{logsId,jdbcType=INTEGER}
+  </select>
+
+  <delete id="del" parameterType="java.lang.Integer" >
+    delete from tb_iamberry_user_amount_logs where logs_id = #{logsId,jdbcType=INTEGER}
+  </delete>
+
+  <insert id="add" parameterType="UserAmountLogs" useGeneratedKeys="true" keyProperty="logsId">
+    insert into tb_iamberry_user_amount_logs (user_openid, order_id,
+      logs_type, logs_state, logs_amount, 
+      logs_date, logs_update_time, logs_create_time)
+    values (#{userOpenid,jdbcType=VARCHAR}, #{orderId,jdbcType=VARCHAR},
+      #{logsType,jdbcType=TINYINT}, #{logsState,jdbcType=TINYINT}, #{logsAmount,jdbcType=INTEGER}, 
+      #{logsDate,jdbcType=DATE}, NOW(), NOW())
+  </insert>
+
+  <update id="edit" parameterType="UserAmountLogs" >
+    update tb_iamberry_user_amount_logs
+    <set >
+      <if test="userOpenid != null" >
+        user_openid = #{userOpenid,jdbcType=VARCHAR},
+      </if>
+      <if test="orderId != null" >
+        order_id = #{orderId,jdbcType=VARCHAR},
+      </if>
+      <if test="logsRemark != null" >
+        logs_remark = #{logsRemark,jdbcType=VARCHAR},
+      </if>
+      <if test="logsType != null" >
+        logs_type = #{logsType,jdbcType=TINYINT},
+      </if>
+      <if test="logsState != null" >
+        logs_state = #{logsState,jdbcType=TINYINT},
+      </if>
+      <if test="logsAmount != null" >
+        logs_amount = #{logsAmount,jdbcType=INTEGER},
+      </if>
+      <if test="logsDate != null" >
+        logs_date = #{logsDate,jdbcType=DATE},
+      </if>
+      logs_update_time = NOW()
+    </set>
+    where logs_id = #{logsId,jdbcType=INTEGER}
+  </update>
+
+  <select id="list" parameterType="UserAmountLogs" resultType="UserAmountLogs">
+    select * from tb_iamberry_user_amount_logs
+    <where>
+      <if test="userOpenid != null" >
+        user_openid = #{userOpenid,jdbcType=VARCHAR}
+      </if>
+      <if test="logsDate != null" >
+        AND logs_date = #{logsDate,jdbcType=DATE}
+      </if>
+      <if test="logsType != null" >
+        AND logs_type = #{logsType,jdbcType=TINYINT}
+      </if>
+      <if test="logsState != null" >
+        AND logs_state = #{logsState,jdbcType=TINYINT}
+      </if>
+    </where>
+  </select>
+
+</mapper>

+ 14 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountMapper.java

@@ -0,0 +1,14 @@
+package com.iamberry.wechat.service.mapper;
+
+import com.iamberry.wechat.core.entity.welfare.UserAmount;
+
+public interface UserAmountMapper {
+
+    int del(Integer amountId);
+
+    int add(UserAmount record);
+
+    UserAmount get(String amountId);
+
+    int edit(UserAmount record);
+}

+ 38 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAmountMapper.xml

@@ -0,0 +1,38 @@
+<?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.UserAmountMapper" >
+
+  <select id="get" resultType="UserAmount" parameterType="String" >
+    select * from tb_iamberry_user_amount where user_openid = #{userOpenid}
+  </select>
+
+  <delete id="del" parameterType="java.lang.Integer" >
+    delete from tb_iamberry_user_amount where amount_id = #{amountId,jdbcType=INTEGER}
+  </delete>
+
+  <insert id="add" parameterType="UserAmount" useGeneratedKeys="true" keyProperty="amountId">
+    insert into tb_iamberry_user_amount (user_openid, amonut_usable,
+      amonut_await, amonut_total, amonut_lock)
+    values (#{userOpenid,jdbcType=VARCHAR}, #{amonutUsable,jdbcType=INTEGER},
+      #{amonutAwait,jdbcType=INTEGER}, #{amonutTotal,jdbcType=INTEGER}, #{amonutLock,jdbcType=INTEGER})
+  </insert>
+
+  <update id="edit" parameterType="UserAmount" >
+    update tb_iamberry_user_amount
+    <set >
+      <if test="amonutUsable != null" >
+        amonut_usable = (amonut_usable+#{amonutUsable,jdbcType=INTEGER}),
+      </if>
+      <if test="amonutAwait != null" >
+        amonut_await = (amonut_await+#{amonutAwait,jdbcType=INTEGER}),
+      </if>
+      <if test="amonutTotal != null" >
+        amonut_total = (amonut_total+#{amonutTotal,jdbcType=INTEGER}),
+      </if>
+      <if test="amonutLock != null" >
+        amonut_lock = (amonut_lock+#{amonutLock,jdbcType=INTEGER}),
+      </if>
+    </set>
+    where amount_id = #{amountId,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 19 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAtLogsMapper.java

@@ -0,0 +1,19 @@
+package com.iamberry.wechat.service.mapper;
+
+import com.iamberry.wechat.core.entity.welfare.UserAtLogs;
+
+import java.util.List;
+
+public interface UserAtLogsMapper {
+
+    int del(Integer atId);
+
+    int add(UserAtLogs record);
+
+    UserAtLogs get(Integer atId);
+
+    int edit(UserAtLogs record);
+
+    List<UserAtLogs> list(UserAtLogs data);
+
+}

+ 66 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/UserAtLogsMapper.xml

@@ -0,0 +1,66 @@
+<?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.UserAtLogsMapper" >
+
+  <select id="get" resultType="UserAtLogs" parameterType="java.lang.Integer" >
+    select * from tb_iamberry_user_at_logs where at_id = #{atId,jdbcType=INTEGER}
+  </select>
+
+  <delete id="del" parameterType="java.lang.Integer" >
+    delete from tb_iamberry_user_at_logs where at_id = #{atId,jdbcType=INTEGER}
+  </delete>
+
+  <insert id="add" parameterType="UserAtLogs" useGeneratedKeys="true" keyProperty="atId">
+    insert into tb_iamberry_user_at_logs (user_openid, at_amonut,
+      at_state, at_name, at_tel, 
+      at_card_no, at_bank_name, at_create_time, 
+      at_deal_time, at_remark)
+    values (#{userOpenid,jdbcType=VARCHAR}, #{atAmonut,jdbcType=INTEGER},
+      #{atState,jdbcType=TINYINT}, #{atName,jdbcType=VARCHAR}, #{atTel,jdbcType=VARCHAR}, 
+      #{atCardNo,jdbcType=VARCHAR}, #{atBankName,jdbcType=VARCHAR}, NOW(),
+      #{atDealTime,jdbcType=TIMESTAMP}, #{atRemark,jdbcType=VARCHAR})
+  </insert>
+
+  <update id="edit" parameterType="UserAtLogs" >
+    update tb_iamberry_user_at_logs
+    <set >
+      <if test="userOpenid != null" >
+        user_openid = #{userOpenid,jdbcType=VARCHAR},
+      </if>
+      <if test="atAmonut != null" >
+        at_amonut = #{atAmonut,jdbcType=INTEGER},
+      </if>
+      <if test="atState != null" >
+        at_state = #{atState,jdbcType=TINYINT},
+      </if>
+      <if test="atName != null" >
+        at_name = #{atName,jdbcType=VARCHAR},
+      </if>
+      <if test="atTel != null" >
+        at_tel = #{atTel,jdbcType=VARCHAR},
+      </if>
+      <if test="atCardNo != null" >
+        at_card_no = #{atCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="atBankName != null" >
+        at_bank_name = #{atBankName,jdbcType=VARCHAR},
+      </if>
+      <if test="atDealTime != null" >
+        at_deal_time = #{atDealTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="atRemark != null" >
+        at_remark = #{atRemark,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where at_id = #{atId,jdbcType=INTEGER}
+  </update>
+
+  <select id="list" parameterType="UserAtLogs" resultType="UserAtLogs">
+    select * from tb_iamberry_user_at_logs
+    <where>
+      <if test="userOpenid != null" >
+        user_openid = #{userOpenid,jdbcType=VARCHAR}
+      </if>
+    </where>
+  </select>
+</mapper>

+ 14 - 0
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/WelfareLogsMapper.java

@@ -0,0 +1,14 @@
+package com.iamberry.wechat.service.mapper;
+
+import com.iamberry.wechat.core.entity.welfare.WelfareLogs;
+
+/**
+ * @author root
+ */
+public interface WelfareLogsMapper {
+
+    int add(WelfareLogs logs);
+
+    WelfareLogs get(String openid);
+
+}

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

@@ -0,0 +1,13 @@
+<?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.WelfareLogsMapper">
+
+ 	<insert id="add" parameterType="WelfareLogs" useGeneratedKeys="true" keyProperty="logsId">
+ 		INSERT INTO tb_iamberry_welfare_logs(user_openid, logs_create_time)
+		VALUES(#{userOpenid},NOW())
+ 	</insert>
+
+	<select id="get" parameterType="String" resultType="WelfareLogs">
+		select * from tb_iamberry_welfare_logs where user_openid = #{userOpenid}
+	</select>
+</mapper>

+ 13 - 2
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/couponItemMapper.xml

@@ -14,7 +14,7 @@
 		CI.COUPON_USE_STATUS couponUseStatus,
 		CI.COUPON_USE_DATE couponUseDate,
 		CI.COUPON_ITEM_REMARK couponItemRemark,
-		
+		CI.coupon_is_give couponIsGive,
 		CT.COUPON_NAME couponName,
  		CT.COUPON_REDUCE couponReduce,
  		CT.COUPON_CONSUME_ENOUGH couponConsumeEnough
@@ -48,6 +48,9 @@
 			<if test="couponItemRemark != null and couponItemRemark != ''">
 				AND CI.COUPON_USE_STATUS != 2
 			</if>
+			<if test="couponIsGive!=null">
+				AND CI.coupon_is_give=#{couponIsGive}
+			</if>
 		</where>
 		ORDER BY CT.coupon_reduce DESC,CI.COUPON_RECEIVE_DATE DESC
 		<if test="page!=null and page.recordBegin>0 and page.pageSize>0 ">
@@ -93,12 +96,13 @@
 			COUPON_RECEIVE_DATE ,
 			COUPON_USE_STATUS ,
 			COUPON_USE_DATE ,
+			give_openid,
 			COUPON_ITEM_REMARK 
 		)
 		VALUES 
 		(
 			#{couponItemId},#{couponId},#{couponItemUseropenid},#{couponUseEndDate},
-			NOW(),#{couponUseStatus},#{couponUseDate},#{couponItemRemark}
+			NOW(),#{couponUseStatus},#{couponUseDate},#{giveOpenid},#{couponItemRemark}
 		)
  	</insert>
  	
@@ -109,6 +113,10 @@
  		JOIN TB_IAMBERRY_COUPON_TYPE CT ON CI.COUPON_ID=CT.COUPON_ID
 		WHERE CI.COUPON_ITEM_ID=#{couponItemId}
  	</select>
+
+    <select id="get" parameterType="String" resultType="CouponItem">
+        select * from TB_IAMBERRY_COUPON_ITEM where COUPON_ITEM_ID=#{couponItemId}
+    </select>
  	
  	<!-- 根据id修改 -->
  	<update id="updateCouponItemById" parameterType="CouponItem">
@@ -117,6 +125,9 @@
 	        <if test="couponUseEndDate!=null and couponUseEndDate!=''">
 				COUPON_USE_END_DATE=#{couponUseEndDate},
 	        </if>
+	        <if test="couponIsGive!=null">
+				coupon_is_give=#{couponIsGive},
+	        </if>
 	        <if test="couponUseStatus!=null and couponUseStatus!=''">
 				COUPON_USE_STATUS=#{couponUseStatus},
 	        </if>

+ 5 - 2
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/orderMapper.xml

@@ -102,8 +102,11 @@ PUBLIC
 			SALES_ORDERID = #{salesOrderid} 
 		<if test="salesOpenid!=null and salesOpenid!=''" >
 		   AND SALES_OPENID = #{salesOpenid}
-		</if>	
-			
+		</if>
+	</select>
+
+	<select id="get" parameterType="String" resultType="Order">
+		select * from TB_IAMBERRY_SHOP_SALES_ORDER where SALES_ORDERID = #{salesOrderid}
 	</select>
 	
 	<!-- 根据单号查询该订单的产品个数 -->

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

@@ -244,7 +244,7 @@
 			PRODUCT_SALESNUM = (PRODUCT_SALESNUM + #{item.itemNum,jdbcType=INTEGER}) 
 		WHERE 
 			PRODUCT_ID = #{item.itemProductId,jdbcType=INTEGER}
-			</foreach>
+		</foreach>
 	</update>
 
 	<!-- 获取产品颜色信息 -->

+ 3 - 25
iamberry-wechat-web/src/main/java/com/iamberry/wechat/filters/AdminLoginFilter.java

@@ -78,30 +78,8 @@ public class AdminLoginFilter implements Filter {
 		// 登陆用户,需要判断权限
 		if (object instanceof AdminInfo) {
 			// 进行日志记录
-			long startTime = new Date().getTime();
 			chain.doFilter(req, resp);
 			return;
-			/*AdminLog adminLog = new AdminLog();
-			// cookie,此处cookie不做保存
-			adminLog.setAdminLogCookie("");
-			// 时间
-			adminLog.setAdminLogDate(new Date());
-			adminLog.setAdminLogDesc("一级管理员访问");
-			adminLog.setAdminLogGrade(2);
-			adminLog.setAdminLogIp(getIpAddr(req));
-			adminLog.setAdminLogMethod(req.getMethod().equalsIgnoreCase("post") ? 1 : 2);
-			adminLog.setAdminLogNowPage(url);
-			adminLog.setAdminLogOther("");
-			adminLog.setAdminLogParentPage(referer);
-			adminLog.setAdminLogStatus(resp.getStatus());
-			adminLog.setAdminLogUser(((AdminInfo) object).getAdminId());
-			adminLog.setAdminLogUseTime(((int) (new Date().getTime() - startTime)));
-			// 获取Spring Ioc 容器
-			WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
-			// 使用JSP获取spring中注入的Bean
-			AdminLogService adminService = (AdminLogService) context.getBean("adminLogServiceImpl");
-			adminService.insertOne(adminLog);
-			return;*/
 		} else if (object instanceof AdminChildInfo) {
 			// 检测数据
 			List<AdminChildPermissionErmissions> list = (List<AdminChildPermissionErmissions>) req.getSession().getAttribute("permission");
@@ -110,7 +88,7 @@ public class AdminLoginFilter implements Filter {
 				flag = permission(url, list);
 				if (flag) {
 					// 进行日志记录
-					long startTime = new Date().getTime();
+					long startTime = System.currentTimeMillis();
 					chain.doFilter(req, resp);
 					AdminLog adminLog = new AdminLog();
 					// cookie,此处cookie不做保存
@@ -126,7 +104,7 @@ public class AdminLoginFilter implements Filter {
 					adminLog.setAdminLogParentPage(referer);
 					adminLog.setAdminLogStatus(resp.getStatus());
 					adminLog.setAdminLogUser(((AdminChildInfo) object).getAdminId());
-					adminLog.setAdminLogUseTime(((int) (new Date().getTime() - startTime)));
+					adminLog.setAdminLogUseTime(((int) (System.currentTimeMillis() - startTime)));
 					// 获取Spring Ioc 容器
 					WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
 					// 使用JSP获取spring中注入的Bean
@@ -210,7 +188,7 @@ public class AdminLoginFilter implements Filter {
 		}
 
 		// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
-		if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() = 15
+		if (ipAddress != null && ipAddress.length() > 15) {
 			if (ipAddress.indexOf(",") > 0) {
 				ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
 			}

+ 2 - 2
iamberry-wechat-web/src/main/java/com/iamberry/wechat/filters/CSRFTokenFilter.java

@@ -30,7 +30,7 @@ import com.iamberry.wechat.tools.IpAddressUtil;
  * 			使用注意:如果多次重复启动,可能导致系统拒绝服务,这只是因为tomcat默认最多接受200个cookie的缘故,关闭浏览器重新打开即可。
  * 			另外系统本身已经做了优化处理,保证99%情况下不会出现问题。
  */
-@WebFilter(value = {"/admin/*", "/loginUI"})
+//@WebFilter(value = {"/admin/*", "/loginUI"})
 public class CSRFTokenFilter implements Filter {
 	
 	/**
@@ -156,7 +156,7 @@ public class CSRFTokenFilter implements Filter {
 		// 是否超时
 		try {
 			Long date = Long.parseLong(timestamp);
-			Long temp = date - new Date().getTime();
+			Long temp = date - System.currentTimeMillis();
 			if (temp < 0) {
 				savesSignatureToToken(request, response);
 			}

+ 9 - 10
iamberry-wechat-web/src/main/java/com/iamberry/wechat/filters/WechatFilter.java

@@ -10,6 +10,8 @@ import javax.servlet.ServletResponse;
 import javax.servlet.annotation.WebFilter;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.iamberry.wechat.core.entity.member.Member;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,6 +31,7 @@ public class WechatFilter implements Filter {
 
 	private static Logger logger = LoggerFactory.getLogger(WechatFilter.class);
 
+	@Override
 	public void doFilter(ServletRequest request, ServletResponse response,
 						 FilterChain chain) throws IOException, ServletException {
 		// 权限拦截类
@@ -42,7 +45,11 @@ public class WechatFilter implements Filter {
 			// 未登录的用户处理逻辑
 			logger.info(e.getMessage() + " User Not Login!");
 			try {
-				forword(req, resp, chain);
+				Member member = new Member();
+				member.setUserId(1);
+				member.setUserOpenid("hexiugang");
+				WechatUtils.saveUserToSession(member, req, resp);
+				//forword(req, resp, chain);
 			} catch (Exception e1) {
 				logger.error("[致命错误 4003]" + e1.getMessage());
 			}
@@ -59,16 +66,9 @@ public class WechatFilter implements Filter {
 	 * @Time   2016年11月24日
 	 */
 	public void forword(HttpServletRequest req, HttpServletResponse resp, FilterChain chain) throws Exception {
-// 如果是扫描机器后面的二维码,那么转发到下层处理
-//		String ua = req.getHeader("user-agent").toLowerCase();
-//		if(ua.indexOf("micromessenger") < 0 && req.getRequestURL().indexOf("wechat/qrcode") > 0 ){
-//			chain.doFilter(req, resp);
-//			return;
-//		}
-
 		// 如果不是扫描二维码,那么获取后转发微信服务器,完成授权。
 		String query = req.getQueryString();
-		String urlstr = new String(req.getRequestURI().toString().replace(req.getContextPath(), ""));
+		String urlstr = req.getRequestURI().toString().replace(req.getContextPath(), "");
 		if (query != null) {
 			urlstr = urlstr + "?" + query;
 		}
@@ -84,7 +84,6 @@ public class WechatFilter implements Filter {
 			resp.getWriter().write("{\"isRedirect\":true, \"redirectURL\":\"" + WechatUtils.getOpenIdFunction(redirectURL) + "\"}");
 			return;
 		}
-
 		// 客户端没有登录的请求不是来自于Ajax,可以执行跳转动作
 		resp.sendRedirect(url);
 	}

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

@@ -872,7 +872,7 @@ public class CartHandlers {
 			}
 			map = cartService.updateOrderStatus(orderId, Integer.valueOf(orderDto.getSalesStatus()), remark, status);
 
-			if (map.get("flag") == true && Integer.valueOf(orderDto.getSalesStatus()) == 1) { //待支付,取消订单
+			if (((boolean) map.get("flag")) && Integer.valueOf(orderDto.getSalesStatus()) == 1) { //待支付,取消订单
 				if (null != orderDto.getSalesCouponReceiveId() && !"".equals(orderDto.getSalesCouponReceiveId())) {
 					CouponItem couponItem = new CouponItem();
 					couponItem.setCouponItemId(orderDto.getSalesCouponReceiveId());
@@ -884,7 +884,7 @@ public class CartHandlers {
 			}
 		}
 
-		if(map.get("flag") == true){
+		if((Boolean) map.get("flag")){
 			remsg.setMessage(NameUtils.getConfig("SUCCESSINFO"));
 			remsg.setResultCode(ResultInfo.SUCCESSCODE);
 			remsg.setStatus(true);

+ 33 - 82
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/coupon/CouponTypeHandler.java

@@ -4,6 +4,8 @@ import java.util.*;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.iamberry.app.tool.util.Result;
+import com.iamberry.wechat.face.coupon.WelfareService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -42,8 +44,6 @@ import com.iamberry.wechat.tools.ResultInfo;
 @RequestMapping("/wechat/coupon")
 public class CouponTypeHandler {
 	@Autowired
-	private RatFWLogger ratFWLogger;
-	@Autowired
 	private CouponTypeService couponTypeService;
 	@Autowired
 	private CouponItemService couponItemService;
@@ -52,17 +52,9 @@ public class CouponTypeHandler {
 	@Autowired
 	private MemberService memberService;
 	@Autowired
-	private TemporaryQrcodeService TemporaryQrcodeService;	//二维码处理
-	@Autowired
 	private SystemService systemService;
-	@Autowired
-	private DealerRelationService dealerRelationService;
-	@Autowired
-	private PlaceInfoService placeInfoService;
-	@Autowired
-	private DrpRoleInfoService drpRoleInfoService;
 	
-	private Object lock = new Object();
+	private final Object lock = new Object();
 	
 	/**
 	 * 分页查询优惠券类型列表<当前用户可领取的>
@@ -89,7 +81,7 @@ public class CouponTypeHandler {
 		//去掉已经领取过的
 		CouponItemDto couponItemDto = new CouponItemDto();
 		try {
-			Member member = wechatUtils.getUserBySession(req);
+			Member member = WechatUtils.getUserBySession(req);
 			if(member == null){
 				rm.setMessage(ResultInfo.loginOutError);
 				return rm;
@@ -104,52 +96,11 @@ public class CouponTypeHandler {
 				rm.setResultCode(ResultInfo.SUCCESSCODE);
 				rm.setMessage(ResultInfo.SUCCESSINFO);
 				return rm;
-//				DealerRelation dealerRelation = dealerRelationService.getDealerRelationById(member.getUserDealers());
-//				int placeId = 0;
-//				//判断
-//				if (dealerRelation.getDealerSixth() != null && !"".equals(dealerRelation.getDealerSixth())) {
-//					placeId = dealerRelation.getDealerSixth();
-//				} else if (dealerRelation.getDealerFifth() != null && !"".equals(dealerRelation.getDealerFifth())) {
-//					placeId = dealerRelation.getDealerFifth();
-//				} else if (dealerRelation.getDealerFourth() != null && !"".equals(dealerRelation.getDealerFourth())) {
-//					placeId = dealerRelation.getDealerFourth();
-//				} else if (dealerRelation.getDealerThird() != null && !"".equals(dealerRelation.getDealerThird())) {
-//					placeId = dealerRelation.getDealerThird();
-//				} else if (dealerRelation.getDealerSecond() != null && !"".equals(dealerRelation.getDealerSecond())) {
-//					placeId = dealerRelation.getDealerSecond();
-//				} else if (dealerRelation.getDealerFirst() != null && !"".equals(dealerRelation.getDealerFirst())) {
-//					placeId = dealerRelation.getDealerFirst();
-//				}
-//				placeInfo.setId(placeId);
-//				placeInfo = this.placeInfoService.getOnePlaceInfoByInitcode(placeInfo);
-//				if (placeInfo == null) {
-//					map.put("typeList", typeList);
-//					rm.setData(map);
-//					rm.setStatus(false);
-//					rm.setResultCode(ResultInfo.ERRORCODE);
-//					rm.setMessage(ResultInfo.ERRORINFO);
-//					return rm;
-//				}
-//				//查询自己的角色信息
-//				placeRoleInfo.setRoleId(placeInfo.getRoleId());
-//				placeRoleInfo = drpRoleInfoService.selectDrpRoleInfo(placeRoleInfo);
-//				if (placeRoleInfo != null && placeRoleInfo.getRoleName() != null && !"".equals(placeRoleInfo.getRoleName())) {
-//					String roleName = placeRoleInfo.getRoleName().trim();
-//					if ("门店".equals(roleName) || "母婴店".equals(roleName)) {
-//						map.put("typeList", typeList);
-//						rm.setData(map);
-//						rm.setStatus(true);
-//						rm.setResultCode(ResultInfo.SUCCESSCODE);
-//						rm.setMessage(ResultInfo.SUCCESSINFO);
-//						return rm;
-//					}
-//				}
 			}
-			
 			typeList = couponTypeService.getCouponTypeList(ct);
 			couponItemDto.setUseropenid(member.getUserOpenid());
 			List<CouponItemDto> itemList = couponItemService.getCouponItemDtoList(couponItemDto);
-			int couponIdWith40 = systemService.selectOneShopRuleById(105).getRuleNum().intValue(); // 提现下限
+			int couponIdWith40 = systemService.selectOneShopRuleById(105).getRuleNum().intValue();
 			Iterator it = typeList.iterator();
 			while (it.hasNext()) {
 				CouponType cType = (CouponType) it.next();
@@ -160,7 +111,7 @@ public class CouponTypeHandler {
 					continue;
 				}
 				//券已领完
-				if(cType.getCouponRemainingNum() != null && cType.getCouponRemainingNum().intValue() < 1){
+				if(cType.getCouponRemainingNum() != null && cType.getCouponRemainingNum() < 1){
 					it.remove();
 					continue;
 				}
@@ -171,9 +122,8 @@ public class CouponTypeHandler {
 					continue;
 				}
 				//当前用户是自己关注时,则不能领取40元优惠券 其他新添加的可以领取
-				if(member.getUserStatus() != null && member.getUserStatus().intValue() == 2 
-						&& member.getUserResType() != null && member.getUserResType().intValue() == 1){
-					if(cType.getCouponId() == null || cType.getCouponId().intValue() == couponIdWith40) {//16888:40元优惠券id
+				if(member.getUserStatus() != null && member.getUserStatus() == 2 && member.getUserResType() != null && member.getUserResType() == 1){
+					if(cType.getCouponId() == null || cType.getCouponId() == couponIdWith40) {
 						it.remove();
 						continue;
 					}
@@ -259,8 +209,7 @@ public class CouponTypeHandler {
 			return rm;
 		}
 		//券使用条件为必须关注时,用户没关注则返回
-		if(couponType.getCouponIsConcern() == 1 && member.getUserStatus() != null 
-				&& member.getUserStatus().intValue() != 2){
+		if(couponType.getCouponIsConcern() == 1 && member.getUserStatus() != null && member.getUserStatus() != 2){
 			rm.setMessage("请先关注公众号!");
 			return rm;
 		}
@@ -296,17 +245,18 @@ public class CouponTypeHandler {
 		CouponItem couponItem = new CouponItem();
 		couponItem.setCouponItemUseropenid(member.getUserOpenid());
 		couponItem.setCouponId(couponType.getCouponId());
-		couponItem.setCouponUseStatus(1);	//使用状态:未使用
-		Date endDate = DateTimeUtil.addHour(DateTimeUtil.now(), 
-				couponType.getCouponLimitHours());	//券的过期时间
-		if(endDate.before(couponType.getCouponEndDate())){	//券的过期时间早于此类型券的截止时间则取券的过期时间
+		couponItem.setCouponUseStatus(1);
+		Date endDate = DateTimeUtil.addHour(DateTimeUtil.now(), couponType.getCouponLimitHours());
+		if(endDate.before(couponType.getCouponEndDate())){
+			//券的过期时间早于此类型券的截止时间则取券的过期时间
 			couponItem.setCouponUseEndDate(endDate);
-		}else{		//券的过期时间晚于此类型券的截止时间则取此类型券的截止时间
+		}else{
+			//券的过期时间晚于此类型券的截止时间则取此类型券的截止时间
 			couponItem.setCouponUseEndDate(couponType.getCouponEndDate());
 		}
 		Integer j = couponItemService.insertCouponItem(couponItem);
 		
-		if(i > 0 && j != null && j.intValue() > 0){
+		if(i > 0 && j != null && j > 0){
 			rm.setStatus(true);
 			rm.setMessage(ResultInfo.SUCCESSINFO);
 			rm.setData(couponItem);
@@ -334,23 +284,26 @@ public class CouponTypeHandler {
 		}
 		String openid = "";
 		try {
-			Member member = wechatUtils.getUserBySession(req);
+			Member member = WechatUtils.getUserBySession(req);
 			openid = member.getUserOpenid();
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 		CouponItemDto cDto = new CouponItemDto();
 		cDto.setUseropenid(openid);
-		if("1".equals(useStatus)){	//未使用的优惠券
+		if("1".equals(useStatus)){
+			//未使用的优惠券
 			cDto.setCouponUseStatus(Integer.parseInt(useStatus));
 			cDto.setBeginDate(new Date());
-		} else if("2".equals(useStatus)){	//已使用的优惠券
+		} else if("2".equals(useStatus)){
+			//已使用的优惠券
 			cDto.setCouponUseStatus(Integer.parseInt(useStatus));
-			cDto.setCouponReduce(7);	//加上了订单是待支付 即couponUseStatus是7的优惠券
-		} else if("3".equals(useStatus)){	//已过期的优惠券
+			cDto.setCouponReduce(7);
+		} else if("3".equals(useStatus)){
 			cDto.setEndDate(new Date());
-			cDto.setCouponItemRemark("4");	//需去掉已经使用的优惠券
+			cDto.setCouponItemRemark("4");
 		}
+		cDto.setCouponIsGive(1);
 		cDto.setPage(new PageBean());
 		cDto.getPage().setPageSize(pageSize);
 		cDto.getPage().setPageNumber(pageNO);
@@ -358,7 +311,8 @@ public class CouponTypeHandler {
 		List<CouponItemDto> list = couponItemService.getCouponItemDtoList(cDto);
 		
 		Date now = new Date();
-		for (CouponItemDto itemDto : list) {	//为了在全部优惠券页面区分已过期的优惠券,使之不能使用
+		for (CouponItemDto itemDto : list) {
+			//为了在全部优惠券页面区分已过期的优惠券,使之不能使用
 			itemDto.setCouponItemRemark(ResultInfo.COUPONITEMSTATUS_NORMAL);
 			if(itemDto.getCouponUseEndDate() != null && itemDto.getCouponUseEndDate().before(now)){
 				itemDto.setCouponItemRemark(ResultInfo.COUPONITEMSTATUS_PASSED);
@@ -390,7 +344,7 @@ public class CouponTypeHandler {
 		//去掉已经领取过的
 		CouponItemDto couponItemDto = new CouponItemDto();
 		try {
-			Member member = wechatUtils.getUserBySession(req);
+			Member member = WechatUtils.getUserBySession(req);
 			member = memberService.getMemberByUserOpenId(member.getUserOpenid());
 			couponItemDto.setUseropenid(member.getUserOpenid());
 			List<CouponItemDto> itemList = couponItemService.getCouponItemDtoList(couponItemDto);
@@ -411,15 +365,14 @@ public class CouponTypeHandler {
 					continue;
 				}
 				//券使用条件为必须关注时,用户没关注则返回
-				if(cType.getCouponIsConcern() == 1 && member.getUserStatus() != null 
-						&& member.getUserStatus().intValue() != 2){
+				if(cType.getCouponIsConcern() == 1 && member.getUserStatus() != null && member.getUserStatus() != 2){
 					it.remove();
 					count--;
 					continue;
 				}
 				//当前用户已领取
 				for (CouponItemDto cItem : itemList) {
-					if(cType.getCouponId() == cItem.getCouponId()){
+					if(cType.getCouponId().intValue() == cItem.getCouponId()){
 						it.remove();
 						count--;
 						break;
@@ -452,7 +405,7 @@ public class CouponTypeHandler {
 			rm.setMessage("未查询到该优惠券!");
 		}
 
-		Member member = wechatUtils.getUserBySession(req);
+		Member member = WechatUtils.getUserBySession(req);
 		member = memberService.getMemberByUserOpenId(member.getUserOpenid());
 
 		CouponItemDto couponItemDto = new CouponItemDto();
@@ -486,7 +439,7 @@ public class CouponTypeHandler {
 			rm.setMessage("未查询到该优惠券!");
 		}
 
-		Member member = wechatUtils.getUserBySession(req);
+		Member member = WechatUtils.getUserBySession(req);
 		member = memberService.getMemberByUserOpenId(member.getUserOpenid());
 
 		try {
@@ -500,8 +453,7 @@ public class CouponTypeHandler {
 					CouponItem couponItem = new CouponItem();
 					couponItem.setCouponItemUseropenid(member.getUserOpenid());
 					couponItem.setCouponId(couponType.getCouponId());
-					couponItem.setCouponUseStatus(1);	//使用状态:未使用
-
+					couponItem.setCouponUseStatus(1);
 					Calendar calendar = Calendar.getInstance();
 					calendar.set(2019,3,18);
 					calendar.set(Calendar.HOUR_OF_DAY,23);
@@ -527,5 +479,4 @@ public class CouponTypeHandler {
 		rm.setMessage("领取失败!请重试或在微信公众号咨询客服");
 		return rm;
 	}
-	
 }

+ 0 - 2
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/mq/MQTimer.java

@@ -18,7 +18,6 @@ import com.iamberry.wechat.face.mq.MQSerivce;
  */
 public class MQTimer extends TimerTask {
 
-	// 队列
 	public static BlockingQueue<MQMessage> messageStaticQueue = new ArrayBlockingQueue<MQMessage>(500);
 	
 	private MQSerivce mQSerivce;
@@ -49,7 +48,6 @@ public class MQTimer extends TimerTask {
 			}
 		} catch (InterruptedException e) {
 			ratFWLogger.error(this, e.getMessage());
-
 			// 如果异常,当做继续启动调用,异常线程退出被回收,新线程继续
 			new Timer().schedule(new MQTimer(mQSerivce, ratFWLogger), 5000);
 		}

+ 21 - 0
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/order/OrderHandler.java

@@ -167,6 +167,8 @@ public class OrderHandler {
 		int total = 0; // 支付金额
 		int sum = 0; // 产品数量
 		int productIdW6 = 0; // W6水机数量
+		// 水机数量
+		int waterManchine = 0;
 
 		List<CartDto> tempCarts = new ArrayList<CartDto>();
 		for (CartDto cartDto : cartDtos) {
@@ -179,6 +181,16 @@ public class OrderHandler {
 			if(cartDto.getCartProductId() == 39 || cartDto.getCartProductId() == 33){
 				productIdW6 ++;
 			}
+			if (cartDto.getCartProductId() == 33 ||
+					cartDto.getCartProductId() == 39 ||
+					cartDto.getCartProductId() == 47 ||
+					cartDto.getCartProductId() == 48 ||
+					cartDto.getCartProductId() == 29 ||
+					cartDto.getCartProductId() == 30 ||
+					cartDto.getCartProductId() == 31 ||
+					cartDto.getCartProductId() == 32) {
+				waterManchine++;
+			}
 		}
 
 		//添加赠品
@@ -196,6 +208,7 @@ public class OrderHandler {
 		CouponItemDto cDto = new CouponItemDto();
 		cDto.setUseropenid(member.getUserOpenid());
 		cDto.setCouponUseStatus(1);
+		cDto.setCouponIsGive(1);
 		cDto.setBeginDate(new Date());
 		cDto.setPage(new PageBean());
 		cDto.getPage().setPageSize(12);
@@ -207,6 +220,14 @@ public class OrderHandler {
 				if(productIdW6 > 0){
 					list.add(cid);
 				}
+			} else if (cid.getCouponId() == 30000 || cid.getCouponId() == 30001) {
+				if (waterManchine >= 1) {
+					list.add(cid);
+				}
+			} else if (cid.getCouponId() == 30002) {
+				if (total >= 88800) {
+					list.add(cid);
+				}
 			}else{
 				list.add(cid);
 			}

+ 3 - 3
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/RequestWechatPayHandler.java

@@ -62,9 +62,9 @@ public class RequestWechatPayHandler {
 	@RequestMapping(value = "/settlement", method = RequestMethod.GET)
 	public ModelAndView settlement(
 			@RequestParam("cartId") String cartIds, HttpServletRequest request, HttpServletResponse response) throws Exception {
-		ModelAndView mv = new ModelAndView("forward:" + NameUtils.WECHAT_SHOP_INDEX); // 回到购物车页面
+		ModelAndView mv = new ModelAndView("forward:" + NameUtils.WECHAT_SHOP_INDEX);
 		// 用户信息
-		Member member = wechatUtils.getUserBySession(request);
+		Member member = WechatUtils.getUserBySession(request);
 		
 		if (member == null || member.getUserOpenid() == null) {
 			return null;
@@ -118,7 +118,7 @@ public class RequestWechatPayHandler {
 		// 判断当前提交的购物车ID,有多少产品在售
 		int sum = 0;
 		for (CartDto cartDto : cartDtos) {
-			if (cartDto.getProductStatus() != null && cartDto.getProductStatus().intValue() == 1)
+			if (cartDto.getProductStatus() != null && cartDto.getProductStatus() == 1)
 				sum++;
 		}
 		if (sum <= 0) {

+ 77 - 230
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/ResponseWechatPayHandler.java

@@ -13,11 +13,13 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.iamberry.wechat.core.entity.order.OrderItem;
+import com.iamberry.wechat.face.coupon.WelfareService;
 import com.iamberry.wechat.tools.ResultInfo;
 import com.iamberry.wechat.tools.SendMessageUtil;
 import org.jdom.Document;
 import org.jdom.Element;
 import org.jdom.input.SAXBuilder;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -54,42 +56,25 @@ import com.iamberry.wechat.tools.StaticInfo;
 @RequestMapping("/callback")
 public class ResponseWechatPayHandler {
 
+	private final Object lock = new Object();
 	@Autowired
 	private RatFWLogger ratFWLogger;
-	
-	private Object lock = new Object();
-	
 	@Autowired
 	private CartService cartService;
-	
 	@Autowired
 	private PlaceOrderService placeOrderService;
-	
-	@Autowired
-	private PlaceInfoService placeInfoService;
-	
-	@Autowired
-	private MemberService memberService;
-
 	@Autowired
 	private SendMessageUtil sendMessageUtil;
-	
 	@Autowired
 	private AdminOrderService adminOrderService;
-	
 	@Autowired
 	private MQServiceProxy mQservice;
-	
-	@Autowired
-	private RebackServices rebackServices;
-	
-	@Autowired
-	private QrcodeService qrcodeService;			//二维码处理
-	
 	@Autowired
 	CashLogService cashLogService;
 	@Autowired
 	CouponItemService couponItemService;
+	@Autowired
+	private WelfareService welfareService;
 
 	/**
 	 * 销售订单支付回调方法
@@ -100,150 +85,90 @@ public class ResponseWechatPayHandler {
 			HttpServletResponse response) throws IOException {
 		synchronized (lock) {
 			String inputLine;
-			String notityXml = "";
+			StringBuilder notityXml = new StringBuilder();
 			String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
 			try {
 				//获取XML参数
 				while ((inputLine = request.getReader().readLine()) != null) {
-					notityXml += inputLine;
+					notityXml.append(inputLine);
 				}
 				request.getReader().close();
-				//解析XML格式的数据
-				Map m = parseXmlToList2(notityXml);
+				// 解析XML格式的数据
+				Map m = parseXmlToList2(notityXml.toString());
 				WxPayResult wpr = new WxPayResult();
-				wpr=setWxPayResultObj(wpr,m);
-				//判断
-				if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
-					//resXml:返回给微信服务器的数据
-					resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
-					String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
-//System.out.println("===========pay 117==============");
-					
-					if (orderIdMD5.equals(wpr.getOutTradeNo())) {
-						Date nowDate = new Date();
-						// 组装数据
-						Order order = new Order();
-						order.setSalesOrderid(orderIdMD5);
-						order.setSalesStatus(2); // 已支付
-						order.setSalesTransactionId(wpr.getTransactionId()); // 微信支付ID
-						order.setSalesTransactionDate(new Date()); // 微信支付时间
-						order.setSalesOpenid(wpr.getOpenid());
-
-						Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
-						if(or.getSalesStatus() != 1){
-							return;
-						}
-
-						List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
-						
-						// 修改订单状态
-						int count = cartService.updateOrderStatus(order);
-						
-//System.out.println("===========pay 132 修改订单状态==============");
-						//修改优惠券状态
-						order=cartService.selectOrderInfoById(order);
-						
-//System.out.println("===========pay 136 修改订单状态=============="+order.getSalesOrderid());
-						String couponId=order.getCouponId();
-						
-						if(couponId!=null && !couponId.equals("")){
-							CouponItem couponItem=new CouponItem();
-							couponItem.setCouponItemId(couponId);
-							couponItem.setCouponUseStatus(2);
-							couponItem.setCouponUseDate(new Date());
-							couponItemService.updateCouponItemById(couponItem);
-						}
-						//更新账户余额
-						int balancePayAmount=order.getBalancePayAmount();
-						if(balancePayAmount>0){
-							Member member=new Member();
-							member.setUserOpenid(order.getSalesOpenid());
-							member.setUserIncome(-balancePayAmount);
-							memberService.updateUserIncomeByOpenId(member);
-							
-							//现金使用记录
-							CashLog log=new CashLog();
-							log.setCashLogsIntroduction("订单支出");
-							log.setCashLogsNum(balancePayAmount);
-							log.setCashLogsOpenid(member.getUserOpenid());
-							log.setCashLogsType(2);
-							log.setCashLogsResType(3);
-							log.setCashLogsOrderid(order.getSalesOrderid());
-							log.setCashLogsCreateDate(nowDate);
-							count=cashLogService.addCashLog(log);
-						}
-						if (count < 1) {
-							resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
-						}
-//System.out.println("===========pay 168 快速插入=============="+count);
-						// 给订单的回调修改状态
-						try {
-							MQMessage message = new MQMessage();
-							message.setServiceToMessage(orderIdMD5);
-							message.setServiceOtherMessage(wpr.getTransactionId());
-							message.setServiceIsSend(2);			// 没有推送的信息
-							message.setServiceStatus(1); 			// 推送成功
-							message.setServiceHandlerObjectName("cartServiceImpl");
-							message.setServiceHandlerMethodName("supdateStateByOrderId");
-							message.setServiceType(1);
-							mQservice.insertMQMessage(message);
-						} catch (Exception e) {
-							// TODO: handle exception
-						}
-//System.out.println("===========pay 182  插入返利到mq=============="+count);
-						//rebackServices.loadSingleOrderReward(order);
-						
-						//添加到返利表
-						//rebackServices.loadSingleOrderReward(order);
-						// 给百胜推送信息
-						try {
-								MQMessage message = new MQMessage();
-								message.setServiceToMessage(orderIdMD5);
-								message.setServiceOtherMessage("efast.trade.new.add");
-								message.setServiceIsSend(2);			// 没有推送的信息
-								message.setServiceStatus(1); 			// 推送成功
-								message.setServiceType(1); 				// 添加订单信息
-								message.setServiceHandlerObjectName("efastOrderServiceImpl");
-								message.setServiceHandlerMethodName("addOrderInfoToEfast");
-								mQservice.insertMQMessage(message);
-						} catch (Exception e) {
-						}
-
-						//推送消息到微信
-						DecimalFormat df=new DecimalFormat("0.00");
-						String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
-						try {
-							sendMessageUtil.probationPaySuccess(
-									ResultInfo.PAYSUCCESS,
-									orderItemList.get(0).getItemProductName()+"...",
-									or.getSalesOrderid(),
-									payMoney,
-									ResultInfo.sendRemark1,
-									order.getSalesOpenid(),
-									ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
-						} catch (Exception e) {
-							System.out.println("推送支付成功消息失败!");
-						}
-
-						try {
-							//给父节点推送返利消息
-//							rewardsMessage(member,orderIdMD5);
-						} catch (Exception e) {
-							e.printStackTrace();
-						}
-					} else {
-						resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
-						ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
-					}
-				}else{
-					resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
+				wpr = setWxPayResultObj(wpr,m);
+				// 判断微信返回的内容是否为SUCCESS
+				assert "SUCCESS".equalsIgnoreCase(wpr.getResultCode());
+				// 验证数据
+				String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
+				assert orderIdMD5.equals(wpr.getOutTradeNo());
+				// 组装数据
+				Date nowDate = new Date();
+				Order order = new Order();
+				order.setSalesOrderid(orderIdMD5);
+				order.setSalesStatus(2);
+				order.setSalesTransactionId(wpr.getTransactionId());
+				order.setSalesTransactionDate(nowDate);
+				order.setSalesOpenid(wpr.getOpenid());
+				Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
+				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(wpr.getOpenid(), orderIdMD5, couponId);
+				}
+				assert count >= 1;
+				// 给订单的回调修改状态
+				{
+					MQMessage message = new MQMessage();
+					message.setServiceToMessage(orderIdMD5);
+					message.setServiceOtherMessage(wpr.getTransactionId());
+					message.setServiceIsSend(2);
+					message.setServiceStatus(1);
+					message.setServiceHandlerObjectName("cartServiceImpl");
+					message.setServiceHandlerMethodName("supdateStateByOrderId");
+					message.setServiceType(1);
+					mQservice.insertMQMessage(message);
+				}
+				// 给RST推送信息
+				{
+					MQMessage message = new MQMessage();
+					message.setServiceToMessage(orderIdMD5);
+					message.setServiceOtherMessage("efast.trade.new.add");
+					message.setServiceIsSend(2);
+					message.setServiceStatus(1);
+					message.setServiceType(1);
+					message.setServiceHandlerObjectName("efastOrderServiceImpl");
+					message.setServiceHandlerMethodName("addOrderInfoToEfast");
+					mQservice.insertMQMessage(message);
+				}
+				//推送消息到微信
+				{
+					DecimalFormat df=new DecimalFormat("0.00");
+					String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
+					sendMessageUtil.probationPaySuccess(
+							ResultInfo.PAYSUCCESS,
+							orderItemList.get(0).getItemProductName()+"...",
+							or.getSalesOrderid(),
+							payMoney,
+							ResultInfo.sendRemark1,
+							order.getSalesOpenid(),
+							ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
 				}
 				BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
 				out.write(resXml.getBytes());
 				out.flush();
 				out.close();
 			} catch (Exception e) {
-				e.printStackTrace();
+				BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
+				out.write("<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>".getBytes());
+				out.flush();
+				out.close();
+				LoggerFactory.getLogger(this.getClass()).error("", e);
 			}
 		}
 	}
@@ -319,10 +244,9 @@ public class ResponseWechatPayHandler {
 			sb.setFeature("http://xml.org/sax/features/external-general-entities", false);
 			sb.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
 			sb.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
-
 			// 通过输入源构造一个Document
 			Document doc = (Document) sb.build(source);
-			Element root = doc.getRootElement();// 指向根节点
+			Element root = doc.getRootElement();
 			List<Element> es = root.getChildren();
 			if (es != null && es.size() != 0) {
 				for (Element element : es) {
@@ -357,81 +281,4 @@ public class ResponseWechatPayHandler {
 		wpr.setTransactionId(m.get("transaction_id").toString());
 		return wpr;
 	}
-	
-	/**
-	 * 奖励提醒 下线成功购买后 提示直接上线
-	 * create date 2016年5月14日
-	 * @author 穆再兴
-	 * @return
-	 */
-	private boolean rewardsMessage(Member member,String orderid){
-		boolean result = false;
-//		Integer i = cartService.getItemNumByOrderId(orderid);
-//		if(i == null || i.intValue() == 0){return false;}
-//		if(member == null || member.getUserResType() == null) return false;
-//		
-//		switch(member.getUserResType().intValue()){//用户来源
-//			case 2:		//用户来源	微代理
-////				if(member.getUserRefereeid() == null){return false;}
-//				Member fatherMember = memberService.getMemberByUserId(member.getUserRefereeid());	//微代理父节点信息
-//				if(fatherMember != null && StringUtils.isNotEmpty(fatherMember.getUserOpenid())){
-//					String temp = ResultInfo.REWARDSREMINDTEMP;
-//					temp = temp.replaceFirst("firstValueIamberry", ResultInfo.REWARDSWILLMESSAGE)
-//						.replaceFirst("orderValueIamberry", orderid)
-//						.replaceFirst("moneyValueIamberry", "¥" + new Integer(i.intValue() * 100).toString())
-//						.replaceFirst("remarkValueIamberry", ResultInfo.INTOSHOP);
-//					result = wxService.rewardsRemind(temp, fatherMember.getUserOpenid(), ResultInfo.INDEX_PAGE);
-//				}
-//				break;
-//			case 3:		//用户来源	线下
-////				if(member.getUserResOnline() == null ){return false;}
-//				PlaceInfo fatherPlace = placeInfoService.getPlaceInfoById(member.getUserResOnline());//分销父节点信息
-//				/*if(fatherPlace == null || fatherPlace.getPlaceRole() == 7){ return result; }*/
-//				int num = getRewardsMoneyOfFather(fatherPlace);
-//				if(num !=0 && StringUtils.isNotEmpty(fatherPlace.getOpenid())){
-//					String temp = ResultInfo.REWARDSREMINDTEMP;
-//					temp = temp.replaceFirst("firstValueIamberry", ResultInfo.REWARDSWILLMESSAGE)
-//						.replaceFirst("orderValueIamberry", orderid)
-//						.replaceFirst("moneyValueIamberry", "¥" + new Integer(i.intValue() * num / 100).toString())
-//						.replaceFirst("remarkValueIamberry", ResultInfo.INTOSHOP);
-//					result = wxService.rewardsRemind(temp, fatherPlace.getOpenid(), ResultInfo.INDEX_PAGE);
-//				}
-//				break;
-//		}
-		return result;
-	}
-	
-	/**
-	 * 获取 返给父节点的 金额
-	 * create date 2016年5月14日
-	 * @author 穆再兴
-	 * @param fatherplace	父节点
-	 * @return
-	 */
-	private int getRewardsMoneyOfFather(PlaceInfo fatherplace){
-		if(fatherplace == null ){return 0;}
-		return 0;
-		/*ShopSystemRule ruleMoney = null;
-		switch(fatherplace.getType()){	//父节点类型
-		case 2:		//二级的角色
-			if(fatherplace.getPlaceRole() == 7){ 			//角色:奶粉厂	每台机器返利100元
-				ruleMoney = this.adminOrderService.getReluByRid(97);
-				break;
-			}else if(fatherplace.getPlaceRole() == 4){		//角色:特殊渠道管理员	每台机器返利140元
-				ruleMoney = this.adminOrderService.getReluByRid(98);
-				break;
-			}
-		case 3:		//三级的角色
-			if(fatherplace.getPlaceRole() == 5){			//角色:导购	每台机器返利40元
-				ruleMoney = this.adminOrderService.getReluByRid(96);
-				break;
-			}else if(fatherplace.getPlaceRole() == 6){		//角色:分销员	每台机器返利100元
-				ruleMoney = this.adminOrderService.getReluByRid(97);
-				break;
-			}
-		}
-		if(ruleMoney == null){return 0;}
-		return ruleMoney.getRuleNum() == null ? 0 : ruleMoney.getRuleNum().intValue();
-	*/
-	}
 }

+ 3 - 2
iamberry-wechat-web/src/main/java/com/iamberry/wechat/listener/MessageQueueListener.java

@@ -20,9 +20,10 @@ import com.iamberry.zk.SpringContextHolder;
  */
 public class MessageQueueListener implements ServletContextListener {
 
-	public void contextDestroyed(ServletContextEvent arg0) {
-	}
+	@Override
+	public void contextDestroyed(ServletContextEvent arg0) {}
 
+	@Override
 	public void contextInitialized(ServletContextEvent arg0) {
 		MQSerivce mQSerivce = SpringContextHolder.getBean("MQServiceProxy");
 	    RatFWLogger ratFWLogger = SpringContextHolder.getBean("logger");

+ 123 - 0
iamberry-wechat-web/src/main/java/com/iamberry/wechat/welfare/WelfareController.java

@@ -0,0 +1,123 @@
+package com.iamberry.wechat.welfare;
+
+import com.iamberry.wechat.core.entity.ResultMsg;
+import com.iamberry.wechat.core.entity.WechatUtils;
+import com.iamberry.wechat.core.entity.coupon.CouponItemDto;
+import com.iamberry.wechat.core.entity.welfare.UserAmountLogs;
+import com.iamberry.wechat.core.entity.welfare.UserAtLogs;
+import com.iamberry.wechat.face.coupon.CouponItemService;
+import com.iamberry.wechat.face.coupon.WelfareService;
+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.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+/**
+ * @author 献
+ */
+@Controller
+@RequestMapping("/wechat/welfare")
+public class WelfareController {
+
+    @Autowired
+    private WelfareService welfareService;
+
+    @Autowired
+    private CouponItemService couponItemService;
+
+    /**
+     * 【会员中心】查询优惠券列表,此接口只查询当前用户可用、未赠送的优惠券
+     */
+    @ResponseBody
+    @RequestMapping("/listCoupon")
+    public ResultMsg listCoupon(HttpServletRequest request) {
+        CouponItemDto cDto = new CouponItemDto();
+        cDto.setUseropenid(WechatUtils.getUserBySession(request).getUserOpenid());
+        cDto.setCouponUseStatus(1);
+        cDto.setBeginDate(new Date());
+        cDto.setCouponIsGive(1);
+
+        return ResultMsg.SUCCESS().setData(couponItemService.getCouponItemDtoList(cDto));
+    }
+
+    /**
+     * 获取优惠券详情,适用于分享后点击进入领取页面
+     */
+    @ResponseBody
+    @RequestMapping("/getCoupon")
+    public ResultMsg getCoupon(@RequestParam("id") String couponId) {
+        return ResultMsg.SUCCESS().setData(couponItemService.getCouponItemById(couponId));
+    }
+
+    /**
+     * 领取分享的优惠券
+     */
+    @ResponseBody
+    @RequestMapping("/drawShareCoupon")
+    public ResultMsg drawShareCoupon(HttpServletRequest request, @RequestParam("id") String couponId) {
+        return welfareService.drawShareCoupon(couponId, WechatUtils.getUserBySession(request).getUserOpenid()) <= 0 ? ResultMsg.ERROR() : ResultMsg.SUCCESS();
+    }
+
+    /**
+     * 检测用户是否可领取福利
+     */
+    @ResponseBody
+    @RequestMapping("/checkWelfareLogs")
+    public ResultMsg checkWelfareLogs(HttpServletRequest req) {
+        return welfareService.get(WechatUtils.getUserBySession(req).getUserOpenid()) == null ? ResultMsg.SUCCESS() : ResultMsg.ERROR();
+    }
+
+    /**
+     * 领取福利
+     */
+    @ResponseBody
+    @RequestMapping("/getWelfare")
+    public ResultMsg getWelfare(HttpServletRequest request) {
+        return welfareService.draw(WechatUtils.getUserBySession(request).getUserOpenid()) <= 0 ? ResultMsg.ERROR() : ResultMsg.SUCCESS();
+    }
+
+    /**
+     * 获取用户的金额信息
+     */
+    @ResponseBody
+    @RequestMapping("/getAmount")
+    public ResultMsg getAmount(HttpServletRequest request) {
+        return ResultMsg.SUCCESS().setData(welfareService.getAmount(WechatUtils.getUserBySession(request).getUserOpenid()));
+    }
+
+    /**
+     * 查询用户的返利记录
+     */
+    @ResponseBody
+    @RequestMapping("/listAmountLogs")
+    public ResultMsg listAmountLogs(UserAmountLogs logs, HttpServletRequest request) {
+        logs.setUserOpenid(WechatUtils.getUserBySession(request).getUserOpenid());
+        logs.setLogsState(1);
+        return ResultMsg.SUCCESS().setData(welfareService.listAmount(logs));
+    }
+
+    /**
+     * 查询用户的提现记录
+     */
+    @ResponseBody
+    @RequestMapping("/listAtlogs")
+    public ResultMsg listAtlogs(HttpServletRequest request) {
+        UserAtLogs logs = new UserAtLogs();
+        logs.setUserOpenid(WechatUtils.getUserBySession(request).getUserOpenid());
+        return ResultMsg.SUCCESS().setData(welfareService.listAt(logs));
+    }
+
+    /**
+     * 申请提现
+     */
+    @ResponseBody
+    @RequestMapping("/addAtLogs")
+    public ResultMsg addAtLogs(UserAtLogs data, HttpServletRequest request) {
+        data.setUserOpenid(WechatUtils.getUserBySession(request).getUserOpenid());
+        data.setAtState(1);
+        return welfareService.addAt(data) <= 0 ? ResultMsg.ERROR() : ResultMsg.SUCCESS();
+    }
+}

+ 6 - 0
iamberry-wechat-web/src/main/resources/iamberry-wechat-service-mybatis.xml

@@ -187,6 +187,12 @@
 		<typeAlias type="com.iamberry.wechat.core.entity.questionnaire.QuestionnaireQuestion" alias="QuestionnaireQuestion"/>
 		<typeAlias type="com.iamberry.wechat.core.entity.questionnaire.QuestionnairePaperDto" alias="QuestionnairePaperDto"/>
 		<typeAlias type="com.iamberry.wechat.core.entity.questionnaire.QuestionnaireQuestionDto" alias="QuestionnaireQuestionDto"/>
+
+		<!-- 福利卡 -->
+		<typeAlias type="com.iamberry.wechat.core.entity.welfare.WelfareLogs" alias="WelfareLogs"/>
+		<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>
 
 	<mappers>

+ 1 - 1
iamberry-wechat-web/src/main/resources/iamberry-wechat-web-ioc.xml

@@ -54,7 +54,7 @@
 	<bean id="loadResultInfo" class="com.iamberry.wechat.tools.loadResultUtil" lazy-init="false"></bean>
     
 	<!-- 开启注解启动定时器 -->
-    <!--<task:annotation-driven/>-->
+	<task:annotation-driven/>
 
 	<!-- spring监控 -->
 	<bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">