Explorar el Código

积分管理功能

liujiankang hace 7 años
padre
commit
8c8ab61184

+ 8 - 15
tooth-common-core/src/main/java/com/iamberry/wechat/core/entity/integral/StayIntegral.java

@@ -1,6 +1,7 @@
 package com.iamberry.wechat.core.entity.integral;
 
 import com.iamberry.wechat.core.entity.PageBean;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -13,8 +14,9 @@ public class StayIntegral implements Serializable{
     private Integer configId;           //来源
     private String orderId;             //订单id
     private Integer stayNumber;         //积分数量
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date stayRecordedTime;      //积分入账时间
-    private Integer stayStatus;         //状态
+    private Integer stayStatus;         //状态1:待入账2:已入账3:订单取消/退货,撤回4:取消
     private String stayRemark;          //取消的备注
     private Date stayCreateTime;        //创建时间
     private Date stayUpdateTime;        //更新时间
@@ -23,12 +25,11 @@ public class StayIntegral implements Serializable{
     private Integer changeIntegralMax;//最大变动积分(查询用)
     private Integer changeIntegralMin;//最小变动积分(查询用)
     private String userName;//会员姓名
-    private String userNickname;//会员昵称
+    private String userNickName;//会员昵称
     private Integer userIntegral; //用户总积分
     private Integer userSurplusIntegral; //用户剩余积分
     private Integer userUseIntegral; //用户已用积分
     private Integer userStayIntegral; //用户待入积分
-    private PageBean page=new PageBean();   //分页
     public Integer getStayId() {
         return stayId;
     }
@@ -141,14 +142,6 @@ public class StayIntegral implements Serializable{
         this.userStayIntegral = userStayIntegral;
     }
 
-    public PageBean getPage() {
-        return page;
-    }
-
-    public void setPage(PageBean page) {
-        this.page = page;
-    }
-
     public String getUserName() {
         return userName;
     }
@@ -157,12 +150,12 @@ public class StayIntegral implements Serializable{
         this.userName = userName;
     }
 
-    public String getUserNickname() {
-        return userNickname;
+    public String getUserNickName() {
+        return userNickName;
     }
 
-    public void setUserNickname(String userNickname) {
-        this.userNickname = userNickname;
+    public void setUserNickName(String userNickName) {
+        this.userNickName = userNickName;
     }
 
     public String getIntegralRemark() {

+ 5 - 5
tooth-common-core/src/main/java/com/iamberry/wechat/core/entity/integral/UseIntegral.java

@@ -33,7 +33,7 @@ public class UseIntegral implements Serializable {
     private PageBean page=new PageBean();   //分页
 
     private String userName;//会员姓名
-    private String userNickname;//会员昵称
+    private String userNickName;//会员昵称
     private String integralNumberMin;//最小积分数量
     private String integralNumberMax;//最大积分数量
     public Date getStayRecordedTime() {
@@ -148,12 +148,12 @@ public class UseIntegral implements Serializable {
         this.userName = userName;
     }
 
-    public String getUserNickname() {
-        return userNickname;
+    public String getUserNickName() {
+        return userNickName;
     }
 
-    public void setUserNickname(String userNickname) {
-        this.userNickname = userNickname;
+    public void setUserNickName(String userNickName) {
+        this.userNickName = userNickName;
     }
 
     public String getIntegralNumberMin() {

+ 63 - 0
tooth-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
tooth-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;
+	}
+	
+}

+ 4 - 2
tooth-wechat-interface/src/main/java/com/iamberry/wechat/face/integral/UseIntegralService.java

@@ -3,6 +3,8 @@ package com.iamberry.wechat.face.integral;
 import com.iamberry.wechat.core.entity.PageBean;
 import com.iamberry.wechat.core.entity.ResultMsg;
 import com.iamberry.wechat.core.entity.integral.*;
+import com.iamberry.wechat.core.entity.page.PageRequest;
+import com.iamberry.wechat.core.entity.page.PagedResult;
 import com.sun.org.apache.xpath.internal.operations.Bool;
 
 import java.util.List;
@@ -73,7 +75,7 @@ public interface UseIntegralService {
      *  查询所有收入支出积分记录
      * @return
      */
-    List<UseIntegral> listUseIntegral(UseIntegral useIntegral);
+    PagedResult<UseIntegral> listUseIntegral(PageRequest<UseIntegral> pageRequest);
 
     /**
      *  查询所有收入支出积分记录总条数
@@ -84,7 +86,7 @@ public interface UseIntegralService {
      *  查询所有待入账积分记录
      * @return
      */
-    List<StayIntegral> listAdminStayIntegral(StayIntegral stayIntegral);
+    PagedResult<StayIntegral> listAdminStayIntegral(PageRequest<StayIntegral> pageRequest);
     /**
      *  查询所有待入账积分记录总数
      * @return

+ 12 - 4
tooth-wechat-service/src/main/java/com/iamberry/wechat/service/integral/UseIntegralServiceImpl.java

@@ -1,9 +1,12 @@
 package com.iamberry.wechat.service.integral;
 
+import com.github.pagehelper.PageHelper;
 import com.iamberry.wechat.core.entity.PageBean;
 import com.iamberry.wechat.core.entity.ResultMsg;
 import com.iamberry.wechat.core.entity.integral.*;
 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.integral.UseIntegralService;
 import com.iamberry.wechat.service.mapper.MemberMapper;
 import com.iamberry.wechat.service.mapper.UseIntegralMapper;
@@ -11,6 +14,7 @@ import com.iamberry.wechat.tools.NameUtils;
 import com.iamberry.wechat.tools.ResultInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import util.PageUtil;
 
 import java.beans.Transient;
 import java.util.Date;
@@ -97,8 +101,10 @@ public class UseIntegralServiceImpl implements UseIntegralService {
     }
 
     @Override
-    public List<UseIntegral> listUseIntegral(UseIntegral useIntegral) {
-        return useIntegralMapper.listUseIntegral(useIntegral);
+    public PagedResult<UseIntegral> listUseIntegral(PageRequest<UseIntegral> pageRequest) {
+        PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
+        List<UseIntegral> detedctList = useIntegralMapper.listUseIntegral(pageRequest.getData());
+        return PageUtil.getPage(detedctList);
     }
 
     @Override
@@ -107,8 +113,10 @@ public class UseIntegralServiceImpl implements UseIntegralService {
     }
 
     @Override
-    public List<StayIntegral> listAdminStayIntegral(StayIntegral stayIntegral) {
-        return useIntegralMapper.listAdminStayIntegral(stayIntegral);
+    public PagedResult<StayIntegral> listAdminStayIntegral(PageRequest<StayIntegral> pageRequest) {
+        PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
+        List<StayIntegral> detedctList = useIntegralMapper.listAdminStayIntegral(pageRequest.getData());
+        return PageUtil.getPage(detedctList);
     }
 
     @Override

+ 4 - 66
tooth-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/useIntegralMapper.xml

@@ -223,36 +223,8 @@
         <if test="userName!=null and userName != ''">
             AND  u.user_name like CONCAT('%',#{userName},'%')
         </if>
-        <if test="userNikeName!=null and userNikeName != ''">
-            AND  u.user_nickname like CONCAT('%',#{userNikeName},'%')
-        </if>
-        <if test="page!=null and page.recordBegin>0 and page.pageSize>0 ">
-            limit ${page.recordBegin},${page.pageSize}
-        </if>
-        <if test="page!=null and page.recordBegin==0 and page.pageSize>0 ">
-            limit ${page.pageSize}
-        </if>
-    </select>
-
-    <select id="listUseIntegralCount" parameterType="UseIntegral" resultType="Integer">
-        SELECT
-        count(1)
-        FROM
-        tb_iamberry_use_integral i
-        LEFT JOIN tb_iamberry_user_userinfo u ON i.user_openid = u.user_openid
-        WHERE
-        i.integral_type IN (1, 2)
-        <if test="integralNumberMax!=null and integralNumberMax>0">
-            AND  integral_number &lt;= #{integralNumberMax}
-        </if>
-        <if test="integralNumberMin!=null and integralNumberMin>0">
-            AND  integral_number &gt;= #{integralNumberMin}
-        </if>
-        <if test="userName!=null and userName != ''">
-            AND  u.user_name like CONCAT('%',#{userName},'%')
-        </if>
-        <if test="userNikeName!=null and userNikeName != ''">
-            AND  u.user_nickname like CONCAT('%',#{userNikeName},'%')
+        <if test="userNickName!=null and userNickName != ''">
+            AND  u.user_nickname like CONCAT('%',#{userNickName},'%')
         </if>
     </select>
     <!--待入账积分列表查询-->
@@ -273,45 +245,11 @@
             <if test="integralRemark != null and integralRemark != ''">
                 ui.integral_remarks = #{integralRemark}
             </if>
-            <if test="productType != null and productType.typeId !=null and productType.typeId !=''">
-                and PRODUCT_TYPE=#{productType.typeId}
-            </if>
-            <if test="userName!=null and userName != ''">
-                AND  u.user_name like CONCAT('%',#{userName},'%')
-            </if>
-            <if test="userNikeName!=null and userNikeName != ''">
-                AND  u.user_nickname like CONCAT('%',#{userNikeName},'%')
-            </if>
-            <if test="stayRecordedTime != null and stayRecordedTime != ''">
-                <![CDATA[AND DATE_FORMAT(stay_recorded_time, '%Y-%m-%d') = DATE_FORMAT(#{stayRecordedTime},'%Y-%m-%d')]]>
-            </if>
-            <if test="changeIntegralMax!=null and changeIntegralMax>0">
-                AND  i.stay_number &lt;= #{changeIntegralMax}
-            </if>
-            <if test="changeIntegralMin!=null and changeIntegralMin>0">
-                AND  i.stay_number &gt;= #{changeIntegralMin}
-            </if>
-        </where>
-    </select>
-    <select id="listAdminStayIntegralCount" parameterType="StayIntegral" resultType="StayIntegral">
-        SELECT
-        count(1)
-        FROM
-        tb_iamberry_stay_integral i
-        LEFT JOIN tb_iamberry_user_userinfo u ON i.user_openid = u.user_openid
-        LEFT JOIN tb_iamberry_use_integral ui on i.stay_id = ui.stay_id
-        <where>
-            <if test="integralRemark != null and integralRemark != ''">
-                ui.integral_remarks = #{integralRemark}
-            </if>
-            <if test="productType != null and productType.typeId !=null and productType.typeId !=''">
-                and PRODUCT_TYPE=#{productType.typeId}
-            </if>
             <if test="userName!=null and userName != ''">
                 AND  u.user_name like CONCAT('%',#{userName},'%')
             </if>
-            <if test="userNikeName!=null and userNikeName != ''">
-                AND  u.user_nickname like CONCAT('%',#{userNikeName},'%')
+            <if test="userNickName!=null and userNickName != ''">
+                AND  u.user_nickname like CONCAT('%',#{userNickName},'%')
             </if>
             <if test="stayRecordedTime != null and stayRecordedTime != ''">
                 <![CDATA[AND DATE_FORMAT(stay_recorded_time, '%Y-%m-%d') = DATE_FORMAT(#{stayRecordedTime},'%Y-%m-%d')]]>

+ 60 - 0
tooth-wechat-service/src/main/java/util/PageUtil.java

@@ -0,0 +1,60 @@
+package util;
+
+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;
+    }
+
+}

+ 26 - 96
tooth-wechat-web/src/main/java/com/iamberry/wechat/handles/integral/AdminIntegrlhHandler.java

@@ -5,10 +5,13 @@ import com.iamberry.wechat.core.entity.WechatUtils;
 import com.iamberry.wechat.core.entity.integral.StayIntegral;
 import com.iamberry.wechat.core.entity.integral.UseIntegral;
 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.core.entity.product.Product;
 import com.iamberry.wechat.face.integral.UseIntegralService;
 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;
@@ -39,50 +42,21 @@ public class AdminIntegrlhHandler {
      * @return
      */
     @RequestMapping("/listIntegral")
-    public ModelAndView listIntegral(@RequestParam(value= "pageSize",defaultValue= "10" ,required=false) Integer pageSize,
+    public ModelAndView listIntegral(UseIntegral useIntegral,
+                                     @RequestParam(value= "pageSize",defaultValue= "10" ,required=false) Integer pageSize,
                                      @RequestParam(value = "pageNO", defaultValue = "1",required=false) Integer pageNO,
+                                     @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum,
                                      HttpServletRequest request) throws Exception {
-        StringBuffer url = new StringBuffer("/admin/product/list?pageSize=" + pageSize);
-        ModelAndView mv = new ModelAndView("admin/product/productList");
-        String userName = request.getParameter("userName");
-        String userNikeName = request.getParameter("userNikeName");
-        String integralNumberMax = request.getParameter("integralNumberMax");
-        String integralNumberMin = request.getParameter("integralNumberMin");
-        UseIntegral useIntegral=new UseIntegral();
-        useIntegral.getPage().setPageSize(pageSize);
-        useIntegral.getPage().setPageNumber(pageNO);
-
-        if (null != userName && !"".equals(userName)) {
-            useIntegral.setUserName(userName);
-            url.append("&userName=" + userName);
-        }
-        if (null != userNikeName && !"".equals(userNikeName)) {
-            url.append("&userNikeName=" + userNikeName);
-            useIntegral.setUserNickname(userNikeName);
-        }
-        if (null != integralNumberMax && !"".equals(integralNumberMax)) {
-            url.append("&integralNumberMax=" + integralNumberMax);
-            useIntegral.setIntegralNumberMax(integralNumberMax);
-        }
-        if (null != integralNumberMin && !"".equals(integralNumberMin)) {
-            url.append("&integralNumberMin=" + integralNumberMin);
-            useIntegral.setIntegralNumberMin(integralNumberMin);
+        ModelAndView mv = new ModelAndView("admin/integralRecord/listIntegral");
+        // 封装请求数据
+        PageRequest<UseIntegral> pageRequest = new PageRequest<>(useIntegral, pageNO, pageSize, totalNum == 0);
+        // 查询订单列表
+        PagedResult<UseIntegral> result = useIntegralService.listUseIntegral(pageRequest);
+        if (totalNum != 0) {
+            result.setTotal(totalNum);
         }
-
-        List<UseIntegral> list = useIntegralService.listUseIntegral(useIntegral);
-        mv.addObject("list", list);
-
-        url.append("&pageNO=");
-        int count = useIntegralService.listUseIntegralCount(useIntegral);
-        int pageCount =  count % useIntegral.getPage().getPageSize() == 0? count/useIntegral.getPage().getPageSize():(count/useIntegral.getPage().getPageSize())+1;
-        //分页用
-        mv.addObject("pageNO", pageNO);
-        mv.addObject("url", url);
-        mv.addObject("userName", userName);
-        mv.addObject("userNikeName", userNikeName);
-        mv.addObject("integralNumberMax", integralNumberMax);
-        mv.addObject("integralNumberMin", integralNumberMin);
-        mv.addObject("pageSize", pageCount);
+        StitchAttrUtil.addNoPro("page");//过滤page不封装
+        StitchAttrUtil.setModelAndView(useIntegral, mv, "/admin/userIntegral/listIntegral", result);
         return mv;
     }
 
@@ -94,64 +68,20 @@ public class AdminIntegrlhHandler {
      * @return
      */
     @RequestMapping("/listStayIntegral")
-    public ModelAndView listStayIntegral(@RequestParam(value= "pageSize",defaultValue= "10" ,required=false) Integer pageSize,
+    public ModelAndView listStayIntegral(StayIntegral stayIntegral,
+                                        @RequestParam(value= "pageSize",defaultValue= "10" ,required=false) Integer pageSize,
                                          @RequestParam(value = "pageNO", defaultValue = "1",required=false) Integer pageNO,
+                                         @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum,
                                          HttpServletRequest request) throws Exception {
-        StringBuffer url = new StringBuffer("/admin/product/list?pageSize=" + pageSize);
-        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-        ModelAndView mv = new ModelAndView("admin/product/productList");
-        String integralRemark = request.getParameter("integralRemark");
-        String userName = request.getParameter("userName");
-        String userNikeName = request.getParameter("userNikeName");
-        String stayRecordedTime = request.getParameter("stayRecordedTime");
-        String changeIntegralMax = request.getParameter("changeIntegralMax");
-        String changeIntegralMin = request.getParameter("changeIntegralMin");
-        StayIntegral stayIntegral=new StayIntegral();
-        stayIntegral.getPage().setPageSize(pageSize);
-        stayIntegral.getPage().setPageNumber(pageNO);
-
-
-        if (null != integralRemark && !"".equals(integralRemark)) {
-            stayIntegral.setIntegralRemark(integralRemark);
-            url.append("&integralRemark=" + integralRemark);
+        ModelAndView mv = new ModelAndView("admin/integralRecord/listStayIntegral");
+        // 封装请求数据
+        PageRequest<StayIntegral> pageRequest = new PageRequest<>(stayIntegral, pageNO, pageSize, totalNum == 0);
+        // 查询订单列表
+        PagedResult<StayIntegral> result = useIntegralService.listAdminStayIntegral(pageRequest);
+        if (totalNum != 0) {
+            result.setTotal(totalNum);
         }
-        if (null != userName && !"".equals(userName)) {
-            stayIntegral.setUserName(userName);
-            url.append("&userName=" + userName);
-        }
-        if (null != userNikeName && !"".equals(userNikeName)) {
-            url.append("&userNikeName=" + userNikeName);
-            stayIntegral.setUserNickname(userNikeName);
-        }
-        if (null != stayRecordedTime && !"".equals(stayRecordedTime)) {
-            url.append("&stayRecordedTime=" + stayRecordedTime);
-            stayIntegral.setStayRecordedTime(format.parse(stayRecordedTime));
-        }
-        if (null != changeIntegralMax && !"".equals(changeIntegralMax)) {
-            url.append("&changeIntegralMax=" + changeIntegralMax);
-            stayIntegral.setChangeIntegralMax(Integer.valueOf(changeIntegralMax));
-        }
-        if (null != changeIntegralMin && !"".equals(changeIntegralMin)) {
-            url.append("&changeIntegralMin=" + changeIntegralMin);
-            stayIntegral.setChangeIntegralMin(Integer.valueOf(changeIntegralMin));
-        }
-
-        List<StayIntegral> list = useIntegralService.listAdminStayIntegral(stayIntegral);
-        mv.addObject("list", list);
-
-        url.append("&pageNO=");
-        int count = useIntegralService.listAdminStayIntegralCount(stayIntegral);
-        int pageCount =  count % stayIntegral.getPage().getPageSize() == 0? count/stayIntegral.getPage().getPageSize():(count/stayIntegral.getPage().getPageSize())+1;
-        //分页用
-        mv.addObject("pageNO", pageNO);
-        mv.addObject("url", url);
-        mv.addObject("integralRemark", integralRemark);
-        mv.addObject("userName", userName);
-        mv.addObject("userNikeName", userNikeName);
-        mv.addObject("stayRecordedTime", stayRecordedTime);
-        mv.addObject("changeIntegralMax", changeIntegralMax);
-        mv.addObject("changeIntegralMin", changeIntegralMin);
-        mv.addObject("pageSize", pageCount);
+        StitchAttrUtil.setModelAndView(stayIntegral, mv, "/admin/userIntegral/listStayIntegral", result);
         return mv;
     }
 

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

@@ -0,0 +1,111 @@
+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.util.*;
+
+public class StitchAttrUtil {
+
+    /**
+     * 组装参数时,会过滤以下参数
+     * 推荐使用:addNoPro(),能够暂时过滤,不影响下次使用
+     */
+    public final static String noProperty[] = {
+            "serialVersionUID",
+            "page"
+    };
+    public static Set<String> propertySet = new HashSet<String>(Arrays.asList(noProperty));
+
+    /**
+     * 组装ModelAndView
+     * @param object
+     * @param modelAndView
+     * @param url
+     * @param pagedResult
+     * @throws IllegalAccessException
+     */
+    public static 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() );
+        StitchAttrUtil.setUrlByObj(sb,object);
+        sb.append("&&pageNO=");
+
+        Map<String, Object> map = StitchAttrUtil.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 static 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 static 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)) {
+                sb.append("&"+fieldName+ "=" + value.toString());
+            }
+        }
+    }
+
+    /**
+     * 添加组装时被过滤的属性名称
+     * @param pros
+     */
+    public static void addNoPro(String...pros){
+        for(String pro : pros){
+            if(pro != null && !"".equals(pro))
+                propertySet.add(pro);
+        }
+    }
+
+}

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

@@ -243,6 +243,13 @@
 
 		<package name="com.iamberry.wechat.core.entity.rent"/>
 	</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"/>

+ 114 - 0
tooth-wechat-web/src/main/webapp/WEB-INF/views/admin/integralRecord/listIntegral.jsp

@@ -0,0 +1,114 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+         pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <LINK rel="Bookmark" href="/favicon.ico">
+    <LINK rel="Shortcut Icon" href="/favicon.ico" />
+    <link href="${pageContext.request.contextPath }/common/admin/css/H-ui.min.css" rel="stylesheet" type="text/css" />
+    <link href="${pageContext.request.contextPath }/common/admin/css/H-ui.admin.css" rel="stylesheet" type="text/css" />
+    <link href="${pageContext.request.contextPath }/common/admin/skin/default/skin.css" rel="stylesheet" type="text/css" id="skin" />
+    <link href="${pageContext.request.contextPath }/common/admin/lib/Hui-iconfont/1.0.1/iconfont.css" rel="stylesheet" type="text/css" />
+    <link href="${pageContext.request.contextPath }/common/admin/css/style.css" rel="stylesheet" type="text/css" />
+
+    <!--[if IE 6]>
+    <script type="text/javascript" src="lib/DD_belatedPNG_0.0.8a-min.js" ></script>
+    <script>DD_belatedPNG.fix('*');</script>
+    <![endif]-->
+    <title>积分记录列表</title>
+</head>
+<body>
+<nav class="breadcrumb">
+    <i class="Hui-iconfont">&#xe67f;</i> 首页 <span class="c-gray en">&gt;</span>
+    积分管理 <span class="c-gray en">&gt;</span> 积分记录列表 <a
+        class="btn btn-success radius r mr-20"
+        style="line-height: 1.6em; margin-top: 3px"
+        href="javascript:location.replace(location.href);" title="刷新"><i
+        class="Hui-iconfont">&#xe68f;</i></a>
+</nav>
+<div class="pd-20">
+    <form action="${pageContext.request.contextPath }/admin/userIntegral/listIntegral" method="post">
+
+        <input name="userName" id="userName" value="${userName }" placeholder="会员姓名搜索" style="width: 150px" class="input-text" type="text">
+        <input name="userNickName" id="userNickName" value="${userNickName }" placeholder="微信昵称搜索" style="width: 150px" class="input-text" type="text">
+        <input name="integralNumberMin" id="integralNumberMin" value="${integralNumberMin }" placeholder="积分数量搜索" style="width: 150px" class="input-text" type="text">-
+        <input name="integralNumberMax" id="integralNumberMax" value="${integralNumberMax }" placeholder="积分数量搜索" style="width: 150px" class="input-text" type="text">
+        <button name="" id="submitBtn" onclick="return dataCheck();" class="btn btn-success" type="submit">
+            <i class="Hui-iconfont"></i> 搜索
+        </button>
+    </form>
+    <form id="goodsform" >
+        <table class="table table-border table-bordered table-bg">
+            <thead>
+            <tr>
+                <th scope="col" colspan="7">积分列表</th>
+            </tr>
+            <tr class="text-c">
+                <th width="150">变动积分</th>
+                <th width="150">会员姓名</th>
+                <th width="150">微信昵称</th>
+                <th width="90">积分来源</th>
+                <th width="130">变动前可用积分</th>
+                <th width="100">变动后可用积分</th>
+                <th width="100">系统记录时间</th>
+            </tr>
+            </thead>
+            <tbody>
+            <c:if test="${! (empty page.dataList) }">
+            <c:forEach items="${page.dataList }" var="infolist">
+            <tr class="text-c">
+                <td>${infolist.integralType==1?'+':''}${infolist.integralType==2?'-':''}${infolist.integralNumber}</td>
+                <td>${infolist.userName }</td>
+                <td>${infolist.userNickName }</td>
+                <td>${infolist.integralRemark }</td>
+                <td>${infolist.integralBeforeNumber}</td>
+                <td>${infolist.integralEndNumber}</td>
+                <td><fmt:formatDate value="${infolist.integralCreateTime}" pattern="yyyy-MM-dd"/></td>
+                </c:forEach>
+                </c:if>
+            </tbody>
+        </table>
+        <div align="right" class="mt-10 mb-10 mr-10">
+            <%@include file="/common/other/paper/pager.jsp"%>
+        </div>
+    </form>
+</div>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/lib/jquery/1.9.1/jquery.min.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/lib/layer/1.9.3/layer.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/js/H-ui.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/js/H-ui.admin.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/js/tips.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/My97DatePicker/WdatePicker.js"></script>
+<script type="text/javascript">
+    /* $(document).ready(function(){
+     $('#beginDate').datepicker();//时间控件
+     $('#endDate').datepicker();
+     }); */
+    function  dataCheck(){
+        //会员姓名数据验证
+        if($("#userName").val()!= ""){
+            if(!commonLengthJdg('userName',1,30,null,true)){
+                layer.msg("会员姓名长度为1-30位",{icon: 5,time:3000});
+                return false;
+            }
+        }
+        //微信昵称数据验证
+        if($("#userNickName").val()!= ""){
+            if(!commonLengthJdg('userNickName',1,30,null,true)){
+                layer.msg("会员昵称长度为1-30位",{icon: 5,time:3000});
+                return false;
+            }
+        }
+
+    }
+</script>
+</body>
+</html>

+ 154 - 0
tooth-wechat-web/src/main/webapp/WEB-INF/views/admin/integralRecord/listStayIntegral.jsp

@@ -0,0 +1,154 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+         pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <LINK rel="Bookmark" href="/favicon.ico">
+    <LINK rel="Shortcut Icon" href="/favicon.ico" />
+    <link href="${pageContext.request.contextPath }/common/admin/css/H-ui.min.css" rel="stylesheet" type="text/css" />
+    <link href="${pageContext.request.contextPath }/common/admin/css/H-ui.admin.css" rel="stylesheet" type="text/css" />
+    <link href="${pageContext.request.contextPath }/common/admin/skin/default/skin.css" rel="stylesheet" type="text/css" id="skin" />
+    <link href="${pageContext.request.contextPath }/common/admin/lib/Hui-iconfont/1.0.1/iconfont.css" rel="stylesheet" type="text/css" />
+    <link href="${pageContext.request.contextPath }/common/admin/css/style.css" rel="stylesheet" type="text/css" />
+
+    <!--[if IE 6]>
+    <script type="text/javascript" src="lib/DD_belatedPNG_0.0.8a-min.js" ></script>
+    <script>DD_belatedPNG.fix('*');</script>
+    <![endif]-->
+    <title>待入账积分记录列表</title>
+</head>
+<body>
+<nav class="breadcrumb">
+    <i class="Hui-iconfont">&#xe67f;</i> 首页 <span class="c-gray en">&gt;</span>
+    积分管理 <span class="c-gray en">&gt;</span> 待入账积分记录列表 <a
+        class="btn btn-success radius r mr-20"
+        style="line-height: 1.6em; margin-top: 3px"
+        href="javascript:location.replace(location.href);" title="刷新"><i
+        class="Hui-iconfont">&#xe68f;</i></a>
+</nav>
+<div class="pd-20">
+    <form action="${pageContext.request.contextPath }/admin/userIntegral/listStayIntegral" method="post">
+
+        <div class="formControls col-2">
+			 <span class="select-box">
+				<select id="integralRemark" name="integralRemark" class="select">
+					<option value="" >待入积分类型</option>
+					<option value="首次注册会员赠送" ${integralRemark=='首次注册会员赠送'?'selected':''}>首次注册会员赠送</option>
+					<option value="微信商城下单赠送" ${integralRemark=='微信商城下单赠送'?'selected':''}>微信商城下单赠送</option>
+					<option value="扫描产品唯一码赠送" ${integralRemark=='扫描产品唯一码赠送'?'selected':''}>扫描产品唯一码赠送</option>
+				</select>
+			</span>
+        </div>
+
+        <input name="userName" id="userName" value="${userName }" placeholder="会员姓名搜索" style="width: 150px" class="input-text" type="text">
+
+        <input name="userNickName" id="userNickName" value="${userNickName }" placeholder="微信昵称搜索" style="width: 150px" class="input-text" type="text">
+
+        <input  id="beginDate" value="<fmt:formatDate value="${stayRecordedTime}" pattern="yyyy-MM-dd"/>" name="stayRecordedTime" class="input-text Wdate" placeholder="请选择入账日期" style="width: 150px;" type="text" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',maxDate:'2020-10-01'})" readonly>
+        <input name="changeIntegralMin" id="changeIntegralMin" value="${changeIntegralMin }" placeholder="变动积分数量" style="width: 150px" class="input-text" type="text">-
+        <input name="changeIntegralMax" id="changeIntegralMax" value="${changeIntegralMax }" placeholder="变动积分数量" style="width: 150px" class="input-text" type="text">
+
+        <button name="" id="submitBtn" onclick="return dataCheck();" class="btn btn-success" type="submit">
+            <i class="Hui-iconfont"></i> 搜索
+        </button>
+    </form>
+    <form id="goodsform" >
+        <table class="table table-border table-bordered table-bg">
+            <thead>
+            <tr>
+                <th scope="col" colspan="11">积分列表</th>
+            </tr>
+            <tr class="text-c">
+                <th width="150">变动积分</th>
+                <th width="150">会员姓名</th>
+                <th width="150">微信昵称</th>
+                <th width="90">积分来源</th>
+                <th width="150">到账日期</th>
+                <th width="130">状态</th>
+                <th width="100">会员累计积分</th>
+                <th width="100">待入账总积分</th>
+                <th width="100">会员可用积分</th>
+                <th width="100">系统记录时间</th>
+                <th width="100">操作</th>
+            </tr>
+            </thead>
+            <tbody>
+            <c:if test="${! (empty page.dataList) }">
+            <c:forEach items="${page.dataList }" var="infolist">
+            <tr class="text-c">
+                <td>+${infolist.stayNumber}</td>
+                <td>${infolist.userName }</td>
+                <td>${infolist.userNickName }</td>
+                <td>${infolist.integralRemark }</td>
+                <td><fmt:formatDate value="${infolist.stayRecordedTime }" pattern="yyyy-MM-dd"/></td>
+                <td>
+                    <c:choose>
+                        <c:when test="${infolist.stayStatus == 1 }">
+                            待入账
+                        </c:when>
+                        <c:when test="${infolist.stayStatus == 2 }">
+                            已入账
+                        </c:when>
+                        <c:when test="${infolist.stayStatus == 3 }">
+                            订单取消/退货,撤回
+                        </c:when>
+                        <c:when test="${infolist.stayStatus == 4 }">
+                            取消
+                        </c:when>
+                        <c:otherwise>
+                            无
+                        </c:otherwise>
+                    </c:choose>
+                </td>
+                <td>${infolist.userIntegral}</td>
+                <td>${infolist.userStayIntegral}</td>
+                <td>${infolist.userSurplusIntegral}</td>
+                <td><fmt:formatDate value="${infolist.stayCreateTime }" pattern="yyyy-MM-dd"/></td>
+                </c:forEach>
+                </c:if>
+            </tbody>
+        </table>
+        <div align="right" class="mt-10 mb-10 mr-10">
+            <%@include file="/common/other/paper/pager.jsp"%>
+        </div>
+    </form>
+</div>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/lib/jquery/1.9.1/jquery.min.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/lib/layer/1.9.3/layer.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/js/H-ui.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/js/H-ui.admin.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/js/tips.js"></script>
+<script type="text/javascript" src="${pageContext.request.contextPath }/common/admin/My97DatePicker/WdatePicker.js"></script>
+<script type="text/javascript">
+    /* $(document).ready(function(){
+     $('#beginDate').datepicker();//时间控件
+     $('#endDate').datepicker();
+     }); */
+    function  dataCheck(){
+        //会员姓名数据验证
+        if($("#userName").val()!= ""){
+            if(!commonLengthJdg('userName',1,30,null,true)){
+                layer.msg("会员姓名长度为1-30位",{icon: 5,time:3000});
+                return false;
+            }
+        }
+        //微信昵称数据验证
+        if($("#userNickName").val()!= ""){
+            if(!commonLengthJdg('userNickName',1,30,null,true)){
+                layer.msg("会员昵称长度为1-30位",{icon: 5,time:3000});
+                return false;
+            }
+        }
+
+    }
+</script>
+</body>
+</html>