Browse Source

Merge remote-tracking branch 'origin/developer' into developer

Aslee 3 years ago
parent
commit
c1fedae976
69 changed files with 3114 additions and 138 deletions
  1. 99 7
      src/main/java/com/caimei/modules/bulkpurchase/web/CmRefundsProductController.java
  2. 18 0
      src/main/java/com/caimei/modules/consult/dao/type/CmConsulttypeDao.java
  3. 75 0
      src/main/java/com/caimei/modules/consult/entity/type/CmConsulttype.java
  4. 75 0
      src/main/java/com/caimei/modules/consult/service/type/CmConsulttypeService.java
  5. 111 0
      src/main/java/com/caimei/modules/consult/web/type/CmConsulttypeController.java
  6. 12 0
      src/main/java/com/caimei/modules/order/dao/CmDiscernReceiptDao.java
  7. 12 0
      src/main/java/com/caimei/modules/order/dao/CmReceiptOrderRelationDao.java
  8. 2 0
      src/main/java/com/caimei/modules/order/dao/CmReturnedPurchaseDao.java
  9. 61 0
      src/main/java/com/caimei/modules/order/entity/CmOnlineRefundVo.java
  10. 10 1
      src/main/java/com/caimei/modules/order/entity/CmReturnedPurchase.java
  11. 18 0
      src/main/java/com/caimei/modules/order/entity/NewOrder.java
  12. 18 1
      src/main/java/com/caimei/modules/order/entity/ReceiptRecordVo.java
  13. 14 0
      src/main/java/com/caimei/modules/order/service/CmDiscernReceiptService.java
  14. 160 26
      src/main/java/com/caimei/modules/order/service/CmReturnedPurchaseService.java
  15. 57 11
      src/main/java/com/caimei/modules/order/service/NewOrderService.java
  16. 38 13
      src/main/java/com/caimei/modules/order/web/NewOrderController.java
  17. 9 0
      src/main/java/com/caimei/modules/project/model/ServiceProviderModel.java
  18. 32 0
      src/main/java/com/caimei/modules/serviceteam/dao/CmServiceteamRoleDao.java
  19. 94 0
      src/main/java/com/caimei/modules/serviceteam/entity/CmServiceteamRole.java
  20. 87 0
      src/main/java/com/caimei/modules/serviceteam/service/CmServiceteamRoleService.java
  21. 85 0
      src/main/java/com/caimei/modules/serviceteam/web/CmServiceteamRoleController.java
  22. 9 0
      src/main/java/com/caimei/modules/user/dao/CmSpDao.java
  23. 6 0
      src/main/java/com/caimei/modules/user/dao/CmUserDao.java
  24. 12 4
      src/main/java/com/caimei/modules/user/dao/NewCmClubDao.java
  25. 3 0
      src/main/java/com/caimei/modules/user/dao/VisitRemarkDao.java
  26. 120 2
      src/main/java/com/caimei/modules/user/entity/CmClubRemarks.java
  27. 64 0
      src/main/java/com/caimei/modules/user/entity/CmSaleMan.java
  28. 10 1
      src/main/java/com/caimei/modules/user/entity/CmUser.java
  29. 1 1
      src/main/java/com/caimei/modules/user/entity/CmUserBalanceRecord.java
  30. 10 1
      src/main/java/com/caimei/modules/user/entity/NewCmSp.java
  31. 91 0
      src/main/java/com/caimei/modules/user/entity/VisitRemarkVo.java
  32. 10 0
      src/main/java/com/caimei/modules/user/service/CmSpService.java
  33. 66 10
      src/main/java/com/caimei/modules/user/service/NewCmClubService.java
  34. 38 0
      src/main/java/com/caimei/modules/user/service/VisitRemarkService.java
  35. 39 1
      src/main/java/com/caimei/modules/user/web/newUser/AgencyController.java
  36. 24 5
      src/main/java/com/caimei/modules/user/web/newUser/SpController.java
  37. 46 2
      src/main/java/com/caimei/modules/user/web/newUser/VisitRemarkController.java
  38. 2 2
      src/main/resources/config/beta/caimei.properties
  39. 2 2
      src/main/resources/config/dev/caimei.properties
  40. 2 2
      src/main/resources/config/prod/caimei.properties
  41. 111 0
      src/main/resources/mappings/modules/consult/type/CmConsulttypeMapper.xml
  42. 42 1
      src/main/resources/mappings/modules/order/CmDiscernReceiptMapper.xml
  43. 39 1
      src/main/resources/mappings/modules/order/CmReceiptOrderRelationMapper.xml
  44. 9 0
      src/main/resources/mappings/modules/order/CmReturnedPurchaseMapper.xml
  45. 137 0
      src/main/resources/mappings/modules/serviceteam/CmServiceteamRoleMapper.xml
  46. 18 3
      src/main/resources/mappings/modules/user/CmSpMapper.xml
  47. 16 2
      src/main/resources/mappings/modules/user/CmUserMapper.xml
  48. 57 1
      src/main/resources/mappings/modules/user/NewCmClubMapper.xml
  49. 37 1
      src/main/resources/mappings/modules/user/VisitRemarkMapper.xml
  50. 73 0
      src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeForm.jsp
  51. 137 0
      src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeList.jsp
  52. 1 0
      src/main/webapp/WEB-INF/views/modules/order/cmDiscernReceiptForm.jsp
  53. 5 1
      src/main/webapp/WEB-INF/views/modules/order/cmReturnedPurchaseList.jsp
  54. 6 4
      src/main/webapp/WEB-INF/views/modules/order/orderDetail.jsp
  55. 156 0
      src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleForm.jsp
  56. 96 0
      src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleList.jsp
  57. 9 1
      src/main/webapp/WEB-INF/views/modules/user/cmRechargeForm.jsp
  58. 24 16
      src/main/webapp/WEB-INF/views/modules/user/cmUserBalanceList.jsp
  59. 46 0
      src/main/webapp/WEB-INF/views/modules/user/cmUserBalanceRecordList.jsp
  60. 18 5
      src/main/webapp/WEB-INF/views/modules/user/cmUserBalanceWithdrawalsForm.jsp
  61. 1 1
      src/main/webapp/WEB-INF/views/modules/userNew/cmAgencyList.jsp
  62. 13 5
      src/main/webapp/WEB-INF/views/modules/userNew/cmAgencyRemarksList.jsp
  63. 198 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmRegistRemarksList.jsp
  64. 2 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmSpForm.jsp
  65. 2 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmSpList.jsp
  66. 55 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmSpTeamList.jsp
  67. 155 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmUnRegistRemarksList.jsp
  68. 2 2
      src/main/webapp/WEB-INF/views/modules/userNew/cmVisitList.jsp
  69. 7 2
      src/main/webapp/WEB-INF/views/modules/userNew/cmVisitRemarksList.jsp

+ 99 - 7
src/main/java/com/caimei/modules/bulkpurchase/web/CmRefundsProductController.java

@@ -267,8 +267,8 @@ public class CmRefundsProductController extends BaseController {
             BpClause bpClause = new BpClause();
             bpClause.setEnabledStatus("1");
             List<BpClause> bpClauses = bpClauseService.findList(bpClause);
-            CmDiscernReceipt cmDiscernReceipt = cmDiscernReceiptDao.findPayType(newOrder.getOrderID().toString());
 
+            CmDiscernReceipt cmDiscernReceipt = cmDiscernReceiptDao.findPayType(newOrder.getOrderID().toString());
             //是否可以线上退回
             boolean returnOnline = false;
             if (cmDiscernReceipt != null && "1".equals(cmDiscernReceipt.getPayWay())) {
@@ -285,6 +285,70 @@ public class CmRefundsProductController extends BaseController {
                     returnOnline = true;
                 }
             }
+            //订单支付线上余额
+            Double onlineMoney = cmDiscernReceiptDao.findOnlineMoney(newOrder.getOrderID().toString());
+            //线上只能全退,理论不用考虑线上退款
+//            Double refundOnlineMoney = cmDiscernReceiptDao.findRefundOnlineMoney(newOrder.getOrderID().toString());
+            //订单支付线下余额
+            Double userMoney = cmDiscernReceiptDao.findUserMoney(newOrder.getOrderID().toString());
+            Double refundUserMoney = cmDiscernReceiptDao.findRefundUserMoney(newOrder.getOrderID().toString());
+            refundUserMoney = null == refundUserMoney ? 0 : refundUserMoney;
+//            refundOnlineMoney = null == refundOnlineMoney ? 0 : refundOnlineMoney;
+            onlineMoney = null == onlineMoney ? 0 : onlineMoney;
+            userMoney = null == userMoney ? 0 : userMoney;
+            //线上线下余额-退款
+//            onlineMoney -= refundOnlineMoney;
+            userMoney -= refundUserMoney;
+            //退线上/线下
+            if (cmDiscernReceipt != null && "3".equals(cmDiscernReceipt.getPayWay())) {
+                Date splitTime = cmDiscernReceiptDao.findSplitTime(newOrder.getOrderID());
+                if (splitTime != null) {
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(splitTime);
+                    calendar.set(Calendar.HOUR_OF_DAY, 23);
+                    calendar.set(Calendar.MINUTE, 20);
+                    //分帐后,如果在当天时间的11.20之前
+                    if (calendar.getTime().compareTo(new Date()) > 0) {
+                        //余额全付
+                        //如果当前单线上余额>0,无线下,全付,退线上
+                        if (onlineMoney > 0 && userMoney == 0 && "31".equals(newOrder.getStatus())) {
+                            //1. 当订单全部被线上余额抵扣掉时,订单直接支付成功,无需再支付,但这抵扣掉的线上余额需要参与分账
+                            //此种订单的退款方式有:线上退回,账户余额(两者只能选一个),只能全部退款
+                            returnOnline = true;
+                        }
+                        if (onlineMoney > 0 && userMoney == 0 && "21".equals(newOrder.getStatus())) {
+                            //2. 当线上余额只抵扣了部分订单金额,该订单只能走线上支付
+                            //此种订单的退款方式有:线上退回,账户余额(两者只能选一个),只能全部退款
+                            returnOnline = true;
+                        }
+//                        if (userMoney > 0 && onlineMoney > 0 && newOrder.getPayableAmount() == 0 && "31".equals(newOrder.getStatus())) {
+//                            //5. 当线上余额和线下余额两者都抵扣了且将订单金额全部抵扣完了,订单直接支付成功,无需再支付,但这抵扣掉的线上余额需要参与分账
+//                            //此种订单的退款方式有:线下转账,账户余额(两者只能选一个),只能全部退款
+//                            returnOnline = false;
+//                        }
+//                        if (onlineMoney > 0 && userMoney > 0 && "21".equals(newOrder.getStatus())) {
+//                            //6. 当线上余额和线下余额两者都抵扣了但只抵扣了部分订单金额,订单只能走线下支付,点击提交订单,跳转到线下支付页面
+//                            //此种订单的退款方式有:线下转账,账户余额(两者只能选一个),只能全部退款
+//                            //7. 当订单多次付款,前笔款已经分账,后笔款暂未分账,此时申请退款
+//                            //此种订单的退款方式有:线下转账,账户余额(两者只能选一个),只能全部退款,而且是都退到线下余额
+//                            returnOnline = false;
+//                        }
+                    }
+                }
+                //未分账
+                else {
+                    if (onlineMoney > 0 && userMoney == 0 && "31".equals(newOrder.getStatus())) {
+                        //1. 当订单全部被线上余额抵扣掉时,订单直接支付成功,无需再支付,但这抵扣掉的线上余额需要参与分账
+                        //此种订单的退款方式有:线上退回,账户余额(两者只能选一个),只能全部退款
+                        returnOnline = true;
+                    }
+                    if (onlineMoney > 0 && userMoney == 0 && "21".equals(newOrder.getStatus())) {
+                        //2. 当线上余额只抵扣了部分订单金额,该订单只能走线上支付
+                        //此种订单的退款方式有:线上退回,账户余额(两者只能选一个),只能全部退款
+                        returnOnline = true;
+                    }
+                }
+            }
             Integer lastReceiptDetailId = cmDiscernReceiptDao.findOrderLastReceiptDetailId(newOrder.getOrderID().toString());
             model.addAttribute("lastReceiptDetailId", lastReceiptDetailId);
             model.addAttribute("isPromotions", isPromotions);
@@ -415,23 +479,51 @@ public class CmRefundsProductController extends BaseController {
             }
             //线上退款
             if ("2".equals(cmReturnedPurchase.getReturnedWay())) {
-                double refundOnlineFee = refundFee - newOrder.getBalancePayFee();
+                Double balancePayFee = newOrder.getBalancePayFee();
+                Double onlineMoney = cmDiscernReceiptDao.findOnlineMoney(newOrder.getOrderID().toString());
+//线上退款是全退,暂不考虑已退
+                //                Double refundOnlineMoney = cmDiscernReceiptDao.findRefundOnlineMoney(newOrder.getOrderID().toString());
+//                refundOnlineMoney = null == refundOnlineMoney ? 0 : refundOnlineMoney;
+                onlineMoney = null == onlineMoney ? 0 : onlineMoney;
+//                //线上线下余额-退款
+//                onlineMoney -= refundOnlineMoney;
+                //线上余额算正常金额退,线上退回=总金额-(余额抵扣-线上)
+                double refundOnlineFee = refundFee - MathUtil.sub(newOrder.getBalancePayFee(),onlineMoney).doubleValue();
+                //总余额减掉退回的线上退回去
+                balancePayFee = MathUtil.sub(balancePayFee, onlineMoney).doubleValue();
                 cmReturnedPurchase.setRefundOnlineFee(refundOnlineFee);
-                cmReturnedPurchase.setRefundBalanceFee(newOrder.getBalancePayFee());
+                cmReturnedPurchase.setRefundBalanceFee(balancePayFee);
             } else if ("1".equals(cmReturnedPurchase.getReturnedWay()) && cmReturnedPurchase.getRefundBalanceFee() == 0d) {
+                //可以线上退款的时候选择退余额进这里
+                //退线下余额
+                Double refundBalanceFee = newOrder.getUserMoney();
+                //退线上余额
+                Double refundOnlineBalanceFee = newOrder.getOnlineMoney();
+                //退线上余额加线上付款金额
+                Double onlinePay=cmDiscernReceiptDao.findOnlinePay(newOrder.getOrderID());
+                refundOnlineBalanceFee=MathUtil.add(refundOnlineBalanceFee,onlinePay).doubleValue();
+                //减已退线下
+                Double refundUserMoney = cmDiscernReceiptDao.findRefundUserMoney(newOrder.getOrderID().toString());
+                refundUserMoney = null == refundUserMoney ? 0 : refundUserMoney;
+                refundBalanceFee = MathUtil.sub(refundBalanceFee, refundUserMoney).doubleValue();
+                //暂不考虑线下支付会进这
                 //线上支付,全部退余额
-                cmReturnedPurchase.setRefundBalanceFee(refundFee);
+                cmReturnedPurchase.setRefundBalanceFee(refundBalanceFee);
+                //本次支付剩余退到线上余额(线上余额支付+线上支付)
+                cmReturnedPurchase.setRefundOnlineBalanceFee(refundOnlineBalanceFee);
             }
             //统计填写的拆分金额
-            Double totalRefundFee = cmReturnedPurchase.getRefundBalanceFee() + cmReturnedPurchase.getRefundOnlineFee() + cmReturnedPurchase.getRefundOfflineFee();
-
+            Double refundBanlace = null == cmReturnedPurchase.getRefundBalanceFee() ? 0 : cmReturnedPurchase.getRefundBalanceFee();
+            Double refundOnline = null == cmReturnedPurchase.getRefundOnlineFee() ? 0 : cmReturnedPurchase.getRefundOnlineFee();
+            Double refundOffline = null == cmReturnedPurchase.getRefundOfflineFee() ? 0 : cmReturnedPurchase.getRefundOfflineFee();
+            Double refundOnlineBalance = null == cmReturnedPurchase.getRefundOnlineBalanceFee() ? 0 : cmReturnedPurchase.getRefundOnlineBalanceFee();
+            Double totalRefundFee = refundBanlace + refundOnline + refundOffline + refundOnlineBalance;
             if (rechargeGoods) {
                 CmUser user = cmUserDao.get(newOrder.getUserID().toString());
                 if (user != null && user.getAbleUserMoney() != null && user.getAbleUserMoney() < refundFee) {
                     refundFee = user.getAbleUserMoney();
                 }
             }
-
             //判断退款金额和打款金额是否一致
             double v = totalRefundFee - refundFee;
             if (v > 0.1 || v < -0.1) {

+ 18 - 0
src/main/java/com/caimei/modules/consult/dao/type/CmConsulttypeDao.java

@@ -0,0 +1,18 @@
+package com.caimei.modules.consult.dao.type;
+
+import com.thinkgem.jeesite.common.persistence.CrudDao;
+import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+
+import java.util.List;
+
+/**
+ * 咨询类别DAO接口
+ * @author zzj
+ * @version 2022-01-18
+ */
+@MyBatisDao
+public interface CmConsulttypeDao extends CrudDao<CmConsulttype> {
+
+    List<CmConsulttype> sort(CmConsulttype cmConsulttype);
+}

+ 75 - 0
src/main/java/com/caimei/modules/consult/entity/type/CmConsulttype.java

@@ -0,0 +1,75 @@
+package com.caimei.modules.consult.entity.type;
+
+import org.hibernate.validator.constraints.Length;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+/**
+ * 咨询类别Entity
+ * @author zzj
+ * @version 2022-01-18
+ */
+public class CmConsulttype extends DataEntity<CmConsulttype> {
+	
+	private static final long serialVersionUID = 1L;
+	private String className;		// 咨询类别名称
+	private String status;		// 状态 1启用,2停用,默认1
+	private String sortNumber;		// 咨询类别排序 正整数值大小排序
+	private Date createdTime;		// 创建时间
+	private String delflag;		// 删除标记 0未删除,1删除,默认0
+	
+	public CmConsulttype() {
+		super();
+	}
+
+	public CmConsulttype(String id){
+		super(id);
+	}
+
+	@Length(min=0, max=30, message="咨询类别名称长度必须介于 0 和 30 之间")
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+	
+	@Length(min=0, max=2, message="状态 1启用,2停用,默认1长度必须介于 0 和 2 之间")
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+	
+	public String getSortNumber() {
+		return sortNumber;
+	}
+
+	public void setSortNumber(String sortNumber) {
+		this.sortNumber = sortNumber;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getCreatedTime() {
+		return createdTime;
+	}
+
+	public void setCreatedTime(Date createdTime) {
+		this.createdTime = createdTime;
+	}
+	
+	@Length(min=0, max=1, message="删除标记 0未删除,1删除,默认0长度必须介于 0 和 1 之间")
+	public String getDelflag() {
+		return delflag;
+	}
+
+	public void setDelflag(String delflag) {
+		this.delflag = delflag;
+	}
+	
+}

+ 75 - 0
src/main/java/com/caimei/modules/consult/service/type/CmConsulttypeService.java

@@ -0,0 +1,75 @@
+package com.caimei.modules.consult.service.type;
+
+import java.util.List;
+
+import com.caimei.modules.product.entity.CmBigtype;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.service.CrudService;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.consult.dao.type.CmConsulttypeDao;
+
+/**
+ * 咨询类别Service
+ * @author zzj
+ * @version 2022-01-18
+ */
+@Service
+@Transactional(readOnly = true)
+public class CmConsulttypeService extends CrudService<CmConsulttypeDao, CmConsulttype> {
+
+	@Autowired
+	private CmConsulttypeDao dao;
+
+	public CmConsulttype get(String id) {
+		return super.get(id);
+	}
+
+	public List<CmConsulttype> findList(CmConsulttype cmConsulttype) {
+		return super.findList(cmConsulttype);
+	}
+
+	public Page<CmConsulttype> findPage(Page<CmConsulttype> page, CmConsulttype cmConsulttype) {
+		return super.findPage(page, cmConsulttype);
+	}
+
+	@Transactional(readOnly = false)
+	public void save(CmConsulttype cmConsulttype) {
+		super.save(cmConsulttype);
+	}
+
+	@Transactional(readOnly = false)
+	public void delete(CmConsulttype cmConsulttype) {
+		super.delete(cmConsulttype);
+	}
+
+	public Page<CmConsulttype> sort(Page<CmConsulttype> page, CmConsulttype cmConsulttype){
+		cmConsulttype.setPage(page);
+		page.setList(dao.sort(cmConsulttype));
+		return page;
+	}
+
+	@Transactional(readOnly = false)
+	public void use(CmConsulttype cmConsulttype){
+		dao.update(cmConsulttype);
+	}
+
+	@Transactional(readOnly = false)
+    public void updateSortIndex(String cmConsulttypeIdSortNumber) {
+		if (cmConsulttypeIdSortNumber.contains(",")) {
+			String[] bigTypeIdSortIndexArr = cmConsulttypeIdSortNumber.split(",");
+			for (int i = 0; i < bigTypeIdSortIndexArr.length; i++) {
+				String[] bigTypeIdSortIndex = bigTypeIdSortIndexArr[i].split("_");
+				if (bigTypeIdSortIndex.length == 2) {
+					CmConsulttype cmConsulttype = new CmConsulttype();
+					cmConsulttype.setId(bigTypeIdSortIndex[0]);
+					cmConsulttype.setSortNumber(bigTypeIdSortIndex[1]);
+					dao.update(cmConsulttype);
+				}
+			}
+		}
+	}
+}

+ 111 - 0
src/main/java/com/caimei/modules/consult/web/type/CmConsulttypeController.java

@@ -0,0 +1,111 @@
+package com.caimei.modules.consult.web.type;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.caimei.vo.JsonModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.thinkgem.jeesite.common.config.Global;
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.web.BaseController;
+import com.thinkgem.jeesite.common.utils.StringUtils;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.consult.service.type.CmConsulttypeService;
+
+/**
+ * 咨询类别Controller
+ * @author zzj
+ * @version 2022-01-18
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/consult/type/cmConsulttype")
+public class CmConsulttypeController extends BaseController {
+
+	@Autowired
+	private CmConsulttypeService cmConsulttypeService;
+	
+	@ModelAttribute
+	public CmConsulttype get(@RequestParam(required=false) String id) {
+		CmConsulttype entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = cmConsulttypeService.get(id);
+		}
+		if (entity == null){
+			entity = new CmConsulttype();
+		}
+		return entity;
+	}
+
+	@RequestMapping(value = "getType")
+	@ResponseBody
+	public JsonModel getBigType(CmConsulttype cmConsulttype){
+		JsonModel jsonModel = JsonModel.newInstance();
+		return jsonModel.success(cmConsulttype);
+	}
+
+	@RequestMapping(value = "updateSort")
+	@ResponseBody
+	public JsonModel updateSortIndex(String cmConsulttypeIdSortNumber){
+		JsonModel jsonModel = JsonModel.newInstance();
+		cmConsulttypeService.updateSortIndex(cmConsulttypeIdSortNumber);
+		return jsonModel.success("批量更新排序成功");
+	}
+	
+
+	@RequestMapping(value = {"list", ""})
+	public String list(CmConsulttype cmConsulttype, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CmConsulttype> page = cmConsulttypeService.findPage(new Page<CmConsulttype>(request, response), cmConsulttype); 
+		model.addAttribute("page", page);
+		return "modules/consult/type/cmConsulttypeList";
+	}
+
+	@RequestMapping(value = "sort")
+	public String sort(CmConsulttype cmConsulttype, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CmConsulttype> page = cmConsulttypeService.sort(new Page<CmConsulttype>(request, response), cmConsulttype);
+		model.addAttribute("page", page);
+		return "modules/consult/type/cmConsulttypeList";
+	}
+
+	@RequestMapping(value = "form")
+	public String form(CmConsulttype cmConsulttype, Model model) {
+		model.addAttribute("cmConsulttype", cmConsulttype);
+		return "modules/consult/type/cmConsulttypeForm";
+	}
+
+
+	@RequestMapping(value = "save")
+	@Transactional(rollbackFor = Exception.class)
+	public String save(CmConsulttype cmConsulttype, Model model, RedirectAttributes redirectAttributes) throws Exception {
+		if (!beanValidator(model, cmConsulttype)){
+			return form(cmConsulttype, model);
+		}
+		cmConsulttypeService.save(cmConsulttype);
+		addMessage(redirectAttributes, "保存咨询类别成功");
+		return "redirect:"+Global.getAdminPath()+"/consult/type/cmConsulttype/?repage";
+	}
+	
+
+	@RequestMapping(value = "delete")
+	public String delete(CmConsulttype cmConsulttype, RedirectAttributes redirectAttributes) {
+		cmConsulttypeService.delete(cmConsulttype);
+		addMessage(redirectAttributes, "删除咨询类别成功");
+		return "redirect:"+Global.getAdminPath()+"/consult/type/cmConsulttype/?repage";
+	}
+
+	@RequestMapping(value = "use")
+	public String use(CmConsulttype cmConsulttype, RedirectAttributes redirectAttributes) {
+		cmConsulttypeService.use(cmConsulttype);
+		addMessage(redirectAttributes, "改变状态成功");
+		return "redirect:"+Global.getAdminPath()+"/consult/type/cmConsulttype/?repage";
+	}
+
+}

+ 12 - 0
src/main/java/com/caimei/modules/order/dao/CmDiscernReceiptDao.java

@@ -95,4 +95,16 @@ public interface CmDiscernReceiptDao extends CrudDao<CmDiscernReceipt> {
     List<CmMainReceiptExport> svipReceipt(CmDiscernReceipt cmDiscernReceipt);
 
     List<CmMainReceiptExport> secondReceipt(CmDiscernReceipt cmDiscernReceipt);
+
+    Double findUserMoney(String orderID);
+
+    Double findOnlineMoney(String orderID);
+
+    Double findRefundOnlineMoney(String orderID);
+
+    String findType(String id);
+
+    Double findRefundUserMoney(String orderID);
+
+    Double findOnlinePay(Integer orderID);
 }

+ 12 - 0
src/main/java/com/caimei/modules/order/dao/CmReceiptOrderRelationDao.java

@@ -1,10 +1,12 @@
 package com.caimei.modules.order.dao;
 
+import com.caimei.modules.order.entity.CmOnlineRefundVo;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
 import com.caimei.modules.order.entity.CmReceiptOrderRelation;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -31,4 +33,14 @@ public interface CmReceiptOrderRelationDao extends CrudDao<CmReceiptOrderRelatio
     CmReceiptOrderRelation findOrderRelation(Integer orderID);
 
     Date findOnlinePayment(Integer orderID);
+
+    Double findOnlineMoneyPay(Integer orderId);
+
+    List<String> findMborderId(Integer userId);
+
+    Integer findUserId(Integer orderId);
+
+    Double findMoney(String mbOrderId);
+
+    void insertOnlineRefund(CmOnlineRefundVo cmOnlineRefundVo);
 }

+ 2 - 0
src/main/java/com/caimei/modules/order/dao/CmReturnedPurchaseDao.java

@@ -26,4 +26,6 @@ public interface CmReturnedPurchaseDao extends CrudDao<CmReturnedPurchase> {
     List<CmReturnedPurchase>  findListBuySuccess(CmReturnedPurchase item);
 
     Double refundTotalMoney(Integer orderID);
+
+    String findPayType(Integer orderID);
 }

+ 61 - 0
src/main/java/com/caimei/modules/order/entity/CmOnlineRefundVo.java

@@ -0,0 +1,61 @@
+package com.caimei.modules.order.entity;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+public class CmOnlineRefundVo extends DataEntity<CmOnlineRefundVo> {
+    private static final long serialVersionUID = 1L;
+    private Integer userId;
+    private String mborderId;
+    private String orderRequestNo;
+    private String orderId;
+    private String amount;
+    private String refundType;//退款方式 1线上支付原路退回 ,2线上余额退现金
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getMborderId() {
+        return mborderId;
+    }
+
+    public void setMborderId(String mborderId) {
+        this.mborderId = mborderId;
+    }
+
+    public String getOrderRequestNo() {
+        return orderRequestNo;
+    }
+
+    public void setOrderRequestNo(String orderRequestNo) {
+        this.orderRequestNo = orderRequestNo;
+    }
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getRefundType() {
+        return refundType;
+    }
+
+    public void setRefundType(String refundType) {
+        this.refundType = refundType;
+    }
+}

+ 10 - 1
src/main/java/com/caimei/modules/order/entity/CmReturnedPurchase.java

@@ -60,7 +60,8 @@ public class CmReturnedPurchase extends DataEntity<CmReturnedPurchase> {
     private String bankAccountNo;//开户银行账户
     private String openBank;//开户银行
     private String bankAccountType;//账户类型:1公账,2私账
-    private Double refundBalanceFee;//退账户余额
+    private Double refundBalanceFee;//退账户线下余额
+    private Double refundOnlineBalanceFee;//退账户线上余额
     private Double refundOnlineFee;//退线上退回
     private Double refundOfflineFee;//退线下转账
     private Integer applicationUserID;//申请人ID
@@ -74,6 +75,14 @@ public class CmReturnedPurchase extends DataEntity<CmReturnedPurchase> {
     private String beginTime;     //时间开始 查询条件 申请时间
     private String endTime;        //时间结束  查询条件 申请时间
 
+    public Double getRefundOnlineBalanceFee() {
+        return refundOnlineBalanceFee;
+    }
+
+    public void setRefundOnlineBalanceFee(Double refundOnlineBalanceFee) {
+        this.refundOnlineBalanceFee = refundOnlineBalanceFee;
+    }
+
     public String getName() {
         return name;
     }

+ 18 - 0
src/main/java/com/caimei/modules/order/entity/NewOrder.java

@@ -135,6 +135,8 @@ public class NewOrder extends DataEntity<NewOrder> {
     private String associationType;//订单关联方式: 1手动 2自动
     private Double ableUserMoney; //当前下单用户可用余额
     private String organizeStoreName;//组织门店名称
+    private Double userMoney;  //当前订单使用线下余额
+    private Double onlineMoney;//当前订单使用线上余额
     /**
      * 优惠券机构关联ID
      */
@@ -154,6 +156,22 @@ public class NewOrder extends DataEntity<NewOrder> {
     private Integer receiveCouponId;
     private CmHeheCouponOrderRecord heheCouponRecord;   //优惠券信息
 
+    public Double getUserMoney() {
+        return userMoney;
+    }
+
+    public void setUserMoney(Double userMoney) {
+        this.userMoney = userMoney;
+    }
+
+    public Double getOnlineMoney() {
+        return onlineMoney;
+    }
+
+    public void setOnlineMoney(Double onlineMoney) {
+        this.onlineMoney = onlineMoney;
+    }
+
     public Integer getOrderSeen() {
         return orderSeen;
     }

+ 18 - 1
src/main/java/com/caimei/modules/order/entity/ReceiptRecordVo.java

@@ -34,12 +34,29 @@ public class ReceiptRecordVo {
     private Double orderReceivedAmount;//订单已收金额(此收款只计算线上线下收款记录表金额)
     private Double returnBalanceAmount;// 退款余额金额
     private String associationType;//订单关联方式: 1手动 2自动
-
+    private Double userMoney;
+    private Double onlineMoney;
     /**
      * 米花科技平台唯一流水号
      */
     private String mbOrderId;
 
+    public Double getUserMoney() {
+        return userMoney;
+    }
+
+    public void setUserMoney(Double userMoney) {
+        this.userMoney = userMoney;
+    }
+
+    public Double getOnlineMoney() {
+        return onlineMoney;
+    }
+
+    public void setOnlineMoney(Double onlineMoney) {
+        this.onlineMoney = onlineMoney;
+    }
+
     public String getMbOrderId() {
         return mbOrderId;
     }

+ 14 - 0
src/main/java/com/caimei/modules/order/service/CmDiscernReceiptService.java

@@ -177,6 +177,20 @@ public class CmDiscernReceiptService extends CrudService<CmDiscernReceiptDao, Cm
                         //统计当前已收
                         double associateAmount = cmDiscernReceiptDao.getAssociateAmount(String.valueOf(roi.getOrderID()));
                         v.setOrderReceivedAmount(associateAmount);
+                        if ("16".equals(cmDiscernReceiptDao.findType(relation.getReceiptID()))) {
+                            Double userMoney = cmDiscernReceiptDao.findUserMoney(roi.getOrderID());
+                            Double onlineMoney = cmDiscernReceiptDao.findOnlineMoney(roi.getOrderID());
+                            if (null == onlineMoney) {
+                                v.setOnlineMoney(0d);
+                            } else {
+                                v.setOnlineMoney(onlineMoney);
+                            }
+                            if (null == userMoney) {
+                                v.setUserMoney(0d);
+                            } else {
+                                v.setUserMoney(userMoney);
+                            }
+                        }
                     }
                 }
                 //一个订单又包含了多个收款记录

+ 160 - 26
src/main/java/com/caimei/modules/order/service/CmReturnedPurchaseService.java

@@ -543,43 +543,79 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
             }
             newOrderService.update(newOrder);
             //判断是否选择退回余额
-            if ((returnedPurchase.getReturnedWay().equals("1") && returnedPurchase.getRefundBalanceFee() > 0d) || newOrder.getRechargeGoods() != null) {
+            //returnway=1,退线下余额>0或退线上余额>0  是定金订单???
+            //退账户线下余额
+            Double refundBalanceFee = null == returnedPurchase.getRefundBalanceFee() ? 0 : returnedPurchase.getRefundBalanceFee();
+            //退账户线上余额
+            Double refundOnlineBalanceFee = null == returnedPurchase.getRefundOnlineBalanceFee() ? 0 : returnedPurchase.getRefundOnlineBalanceFee();
+            if ((returnedPurchase.getReturnedWay().equals("1") && refundBalanceFee > 0d) || null != newOrder.getRechargeGoods() || refundOnlineBalanceFee > 0) {
                 Double userMoney = user.getUserMoney();
                 Double ableUserMoney = user.getAbleUserMoney();
-                Double refundBalanceFee = returnedPurchase.getRefundBalanceFee();
                 Double refundFee = returnedPurchase.getRefundFee();
-                if (userMoney == null) userMoney = 0d;
-                if (ableUserMoney == null) ableUserMoney = 0d;
-                if (refundBalanceFee == null) refundBalanceFee = 0d;
+                Double onlineMoney = user.getOnlineMoney();
+                userMoney = userMoney == null ? 0 : userMoney;
+                ableUserMoney = ableUserMoney == null ? 0 : ableUserMoney;
+                onlineMoney = onlineMoney == null ? 0 : onlineMoney;
                 user.setUserID(newOrder.getUserID());
 
-                //添加余额收支记录
                 CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
-                cmUserBalanceRecord.setUserId(newOrder.getUserID());
-                cmUserBalanceRecord.setType("1");
-                cmUserBalanceRecord.setBalanceType("3");
-                cmUserBalanceRecord.setAddDate(new Date());
-                //设置余额支付
-                cmUserBalanceRecord.setAmount(String.valueOf(returnedPurchase.getRefundBalanceFee()));
                 cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
-                cmUserBalanceRecord.setReturnedId(Integer.parseInt(returnedPurchase.getId()));
+                cmUserBalanceRecord.setAddDate(new Date());
+                cmUserBalanceRecord.setUserId(newOrder.getUserID());
                 cmUserBalanceRecord.setDelFlag("0");
-
+                cmUserBalanceRecord.setReturnedId(Integer.parseInt(returnedPurchase.getId()));
+                //充值订金或者充值余额>0
+                //线上退回/线下退回扣减余额
                 if (newOrder.getRechargeGoods() != null) {
-                    user.setUserMoney(userMoney - refundFee);
-                    cmUserBalanceRecord.setAmount(String.valueOf(refundFee));
-                    cmUserBalanceRecord.setType("2");
-                    if (newOrder.getRechargeGoods() == 1) {
-                        cmUserBalanceRecord.setBalanceType("8");
-                    } else if (newOrder.getRechargeGoods() == 2) {
-                        cmUserBalanceRecord.setBalanceType("9");
+                    String payType = cmReturnedPurchaseDao.findPayType(newOrder.getOrderID());
+                    //1线上2线下
+                    if ("1".equals(payType)) {
+                        user.setUserMoney(onlineMoney - refundFee);
+                        user.setAbleUserMoney(ableUserMoney - refundFee);
+                        cmUserBalanceRecord.setAmount(String.valueOf(refundFee));
+                        cmUserBalanceRecord.setType("2");
+                        if (newOrder.getRechargeGoods() == 1) {
+                            cmUserBalanceRecord.setBalanceType("18");
+                        } else if (newOrder.getRechargeGoods() == 2) {
+                            cmUserBalanceRecord.setBalanceType("19");
+                        }
+                        cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                        cmUserDao.updateMoney(user);
+                    } else {
+                        user.setUserMoney(userMoney - refundFee);
+                        user.setAbleUserMoney(ableUserMoney - refundFee);
+                        cmUserBalanceRecord.setAmount(String.valueOf(refundFee));
+                        cmUserBalanceRecord.setType("2");
+                        if (newOrder.getRechargeGoods() == 1) {
+                            cmUserBalanceRecord.setBalanceType("8");
+                        } else if (newOrder.getRechargeGoods() == 2) {
+                            cmUserBalanceRecord.setBalanceType("9");
+                        }
+                        cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                        cmUserDao.updateMoney(user);
                     }
                 } else {
+                    cmUserBalanceRecord.setType("1");
                     user.setUserMoney(userMoney + refundBalanceFee);
-                    user.setAbleUserMoney(ableUserMoney + refundBalanceFee);
+                    user.setOnlineMoney(onlineMoney + refundOnlineBalanceFee);
+                    user.setAbleUserMoney(ableUserMoney + refundBalanceFee + refundOnlineBalanceFee);
+                    if (refundBalanceFee > 0) {
+                        //添加线下余额收支记录
+                        cmUserBalanceRecord.setBalanceType("3");
+                        //设置余额支付
+                        cmUserBalanceRecord.setAmount(refundBalanceFee.toString());
+
+                        cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                    }
+                    if (refundOnlineBalanceFee > 0) {
+                        //添加线上余额收支记录
+                        cmUserBalanceRecord.setBalanceType("13");
+                        //设置余额支付
+                        cmUserBalanceRecord.setAmount(refundOnlineBalanceFee.toString());
+                        cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                    }
+                    cmUserDao.updateMoney(user);
                 }
-                cmUserDao.updateMoney(user);
-                cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
             }
             //修改子订单信息
             updateShopOrderAmount(newOrder.getOrderID());
@@ -694,7 +730,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
         }
     }
 
-    private void updateShopOrderAmount(Integer orderId) {
+    public void updateShopOrderAmount(Integer orderId) {
         //修改子订单付供应商金额
         List<NewShopOrder> shopOrders = newShopOrderDao.findListByOrderID(orderId);
         shopOrders.removeIf(s -> 998 == s.getShopID());
@@ -728,7 +764,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
      *
      * @param orderId
      */
-    private void theOnlineRefund(Integer orderId) throws Exception {
+    public void theOnlineRefund(Integer orderId) throws Exception {
         //商户标识
         String merAccount = "aa9aee6a148843a6a9e4ea117df4454b";
         //私钥,商户密钥
@@ -757,6 +793,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
         }
         List<CmReceiptOrderRelation> relationList = cmReceiptOrderRelationDao.findByOrderID(orderId.toString());
         if (null != relationList && relationList.size() > 0) {
+            Integer userId = cmReceiptOrderRelationDao.findUserId(orderId);
             for (CmReceiptOrderRelation orderRelation : relationList) {
                 JSONObject json = new JSONObject();
                 json.put("merAccount", merAccount);
@@ -781,10 +818,107 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
                     String data = PayUtils.buildDataPrivate(json, merKey);
                     JSONObject result = PayUtils.httpPost("https://platform.mhxxkj.com/paygateway/mbrefund/orderRefund/v1", merAccount, data);
                     String code = result.getString("code");
+                    logger.info("返回结果-------------------------》"+result.toString());
                     if (!"000000".equals(code)) {
                         String msg = result.getString("msg");
                         logger.info("第三方退款失败>>>>>>>msg:" + msg);
                         throw new Exception("第三方退款失败!");
+                    } else {
+                        //存cm_online_refund
+                        CmOnlineRefundVo cmOnlineRefundVo = new CmOnlineRefundVo();
+                        cmOnlineRefundVo.setUserId(userId);
+                        cmOnlineRefundVo.setOrderId(orderId.toString());
+                        cmOnlineRefundVo.setAmount(orderRelation.getAssociateAmount().toString());
+                        cmOnlineRefundVo.setRefundType("1");
+                        cmOnlineRefundVo.setMborderId(orderRelation.getMbOrderId());
+                        cmOnlineRefundVo.setOrderRequestNo(merchantRefundNo);
+                        cmReceiptOrderRelationDao.insertOnlineRefund(cmOnlineRefundVo);
+                    }
+                }
+                //cdr表payway为3余额支付,查是否有线上余额支付
+                if ("3".equals(orderRelation.getPayWay())) {
+                    //查当前单线上余额支付总金额
+                    Double onlineMoneyPay = cmReceiptOrderRelationDao.findOnlineMoneyPay(orderId);
+                    if (null != onlineMoneyPay && onlineMoneyPay >= 0.01) {
+                        logger.info("线上余额退现金==============orderId==>" + orderId);
+                        //根据userid查产生线上余额的唯一请求单号,发起退款请求
+                        //用户名下未分帐的线上余额订单mborderid
+                        List<String> mborderIds = cmReceiptOrderRelationDao.findMborderId(userId);
+                        //用户名下线上退款回线上余额的原mborderid
+                        if (mborderIds != null && mborderIds.size() > 0) {
+                            for (String s : mborderIds) {
+                                if (onlineMoneyPay > 0) {
+                                    //该单线上余额
+                                    Double money = cmReceiptOrderRelationDao.findMoney(s);
+                                    //实际退款=待支付总线上余额>该笔退款金额,则退全额,否则退待支付
+                                    Double refundMoney = MathUtil.compare(onlineMoneyPay, money) > 0 ? money : onlineMoneyPay;
+                                    //退款
+                                    // 当前时间戳
+                                    long time = System.currentTimeMillis() / 1000;
+                                    json.put("time", time);
+                                    //商户退款流水号,由商户自行生成,必须唯一  orderid+余额退现+orid
+                                    String merchantRefundNo = orderId + "YETX" + orderRelation.getId();
+                                    json.put("merchantRefundNo", merchantRefundNo);
+                                    //退款金额,单位分,必须大于0
+                                    int refundAmt = (int) (refundMoney * 100);
+                                    json.put("refundAmt", refundAmt);
+                                    //退款原因
+                                    String refundCause = "用户主动退款";
+                                    json.put("refundCause", refundCause);
+                                    //平台交易订单号
+                                    json.put("mbOrderId", s);
+                                    String sign = PayUtils.buildSign(json, merKey);
+                                    json.put("sign", sign);
+                                    String data = PayUtils.buildDataPrivate(json, merKey);
+                                    JSONObject result = PayUtils.httpPost("https://platform.mhxxkj.com/paygateway/mbrefund/orderRefund/v1", merAccount, data);
+                                    String code = result.getString("code");
+                                    if (!"000000".equals(code)) {
+                                        String msg = result.getString("msg");
+                                        logger.info("余额退现失败>>>>>>>msg:" + msg);
+                                        throw new Exception("第三方退款失败!");
+                                    } else {
+                                        //存cm_online_refund
+                                        CmOnlineRefundVo cmOnlineRefundVo = new CmOnlineRefundVo();
+                                        cmOnlineRefundVo.setUserId(userId);
+                                        cmOnlineRefundVo.setOrderId(orderId.toString());
+                                        cmOnlineRefundVo.setAmount(refundMoney.toString());
+                                        cmOnlineRefundVo.setRefundType("2");
+                                        cmOnlineRefundVo.setMborderId(s);
+                                        cmOnlineRefundVo.setOrderRequestNo(merchantRefundNo);
+                                        cmReceiptOrderRelationDao.insertOnlineRefund(cmOnlineRefundVo);
+                                    }
+                                    //应付减已退
+                                    onlineMoneyPay = MathUtil.sub(onlineMoneyPay, money).doubleValue();
+                                }
+                                if (onlineMoneyPay <= 0) {
+                                    break;
+                                }
+                            }
+                        }
+                        if (onlineMoneyPay <= 0) {
+                            CmUser user = cmUserDao.get(userId.toString());
+                            //线上余额退完,user表减余额,cubr表统计余额减少
+                            CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
+                            cmUserBalanceRecord.setBalanceType("19");
+                            cmUserBalanceRecord.setType("2");
+                            cmUserBalanceRecord.setUserId(user.getUserID());
+                            cmUserBalanceRecord.setAddDate(new Date());
+                            cmUserBalanceRecord.setAmount(user.getOnlineMoney().toString());
+                            cmUserBalanceRecord.setOrderId(orderId);
+                            cmUserBalanceRecord.setDelFlag("0");
+                            cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                            //user表减余额
+                            double v = MathUtil.sub(user.getAbleUserMoney(), user.getOnlineMoney()).doubleValue();
+                            user.setOnlineMoney(0d);
+                            user.setAbleUserMoney(v);
+                            cmUserDao.updateMoney(user);
+                        }
+                        if (onlineMoneyPay > 0) {
+                            logger.info("订单不足退线上余额,请检查订单");
+                            throw new RuntimeException ("订单不足退线上余额,请检查订单!");
+                        }
+                    } else {
+                        logger.info("线上余额过小或无线上余额支付退款=========orderId==> " + orderId);
                     }
                 }
             }

+ 57 - 11
src/main/java/com/caimei/modules/order/service/NewOrderService.java

@@ -343,20 +343,53 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
                 isUpdateUserMoney = true;
             }
             if (newOrder.getBalancePayFee() != null && newOrder.getBalancePayFee() > 0) {
+                //线上余额>0优先抵扣
+                Double onlineMoney = cmUserDao.findOnlineMoney(newOrder.getUserID());
+                Double userMoney = cmUserDao.findUserMoney(newOrder.getUserID());
+                //线上使用余额
+                Double onlineUseMoney = 0d;
+                //线下使用余额
+                Double userUseMoney = 0d;
+                //可用余额
+                Double ableUserMoney = cmUserDao.findAbleUserMoney(newOrder.getUserID());
+                if (onlineMoney > newOrder.getBalancePayFee()) {
+                    onlineUseMoney = newOrder.getBalancePayFee();
+                } else {
+                    userUseMoney = newOrder.getBalancePayFee() - onlineMoney;
+                    onlineUseMoney = onlineMoney;
+                }
+//                ableUserMoney = MathUtil.sub(ableUserMoney, MathUtil.add(onlineUseMoney, userUseMoney)).doubleValue();
+//                onlineMoney = MathUtil.sub(onlineMoney, onlineUseMoney).doubleValue();
+//                userMoney = MathUtil.sub(userMoney, userUseMoney).doubleValue();
                 if (!isUpdateUserMoney) {
-                    // 更新用户余额
+                    // 更新用户可用余额,不从user表减线上/线下余额
                     cmUserDao.updateAbleUserMoney(newOrder.getBpOrderUserinfo());
                 }
-                //添加余额收支记录
-                CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
-                cmUserBalanceRecord.setUserId(newOrder.getUserID());
-                cmUserBalanceRecord.setType("2");
-                cmUserBalanceRecord.setBalanceType("1");
-                cmUserBalanceRecord.setAddDate(new Date());
-                cmUserBalanceRecord.setAmount(String.valueOf(newOrder.getBalancePayFee()));
-                cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
-                cmUserBalanceRecord.setDelFlag("0");
-                cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                Date date = new Date();
+                if (onlineUseMoney > 0) {
+                    //添加余额收支记录
+                    CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
+                    cmUserBalanceRecord.setUserId(newOrder.getUserID());
+                    cmUserBalanceRecord.setType("2");
+                    cmUserBalanceRecord.setBalanceType("10");
+                    cmUserBalanceRecord.setAddDate(date);
+                    cmUserBalanceRecord.setAmount(String.valueOf(onlineUseMoney));
+                    cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
+                    cmUserBalanceRecord.setDelFlag("0");
+                    cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                }
+                if (userUseMoney > 0) {
+                    //添加余额收支记录
+                    CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
+                    cmUserBalanceRecord.setUserId(newOrder.getUserID());
+                    cmUserBalanceRecord.setType("2");
+                    cmUserBalanceRecord.setBalanceType("1");
+                    cmUserBalanceRecord.setAddDate(date);
+                    cmUserBalanceRecord.setAmount(String.valueOf(userUseMoney));
+                    cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
+                    cmUserBalanceRecord.setDelFlag("0");
+                    cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
+                }
             }
 
             //订单客户
@@ -1138,6 +1171,19 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
                 newOrder.setOrderInvoice(orderInvoice);
             }
         }
+        //线上/下余额赋值
+        Double userMoney = cmDiscernReceiptDao.findUserMoney(id);
+        Double onlineMoney = cmDiscernReceiptDao.findOnlineMoney(id);
+        if(null==userMoney){
+            newOrder.setUserMoney(0d);
+        }else{
+            newOrder.setUserMoney(userMoney);
+        }
+        if(null == onlineMoney){
+            newOrder.setOnlineMoney(0d);
+        }else{
+            newOrder.setOnlineMoney(onlineMoney);
+        }
         return newOrder;
     }
 

+ 38 - 13
src/main/java/com/caimei/modules/order/web/NewOrderController.java

@@ -548,7 +548,7 @@ public class NewOrderController extends BaseController {
     @RequestMapping("confirmOrder")
     public String confirmOrder(Integer orderID, Model model, RedirectAttributes redirectAttributes) {
         NewOrder order = newOrderService.get(orderID + "");
-        if (StringUtils.isNotEmpty(order.getStatus()) && Integer.parseInt(order.getStatus())>0){
+        if (StringUtils.isNotEmpty(order.getStatus()) && Integer.parseInt(order.getStatus()) > 0) {
             addMessage(redirectAttributes, "订单状态异常,请刷新后重试!");
             return "redirect:" + Global.getAdminPath() + "/order/detail/?id=" + orderID;
         }
@@ -578,7 +578,7 @@ public class NewOrderController extends BaseController {
                 Integer svipPriceFlag = op.getSvipPriceFlag();
                 Integer ladderPriceFlag = op.getLadderPriceFlag();
                 //活动商品和阶梯商品和超级会员价不写入价格库
-                if (StringUtil.equals("0", isActProduct) && 0 == svipPriceFlag && 0==ladderPriceFlag) {
+                if (StringUtil.equals("0", isActProduct) && 0 == svipPriceFlag && 0 == ladderPriceFlag) {
                     String buyAgainFlag = op.getBuyAgainFlag();
                     //对于可以复购的商品添加买家商品价格,提供再次购买商品使用(如果不存在没有改买家商品价格则不能购买该商品)
                     if (StringUtils.isNotEmpty(buyAgainFlag) && StringUtils.equals("1", buyAgainFlag)) {
@@ -699,11 +699,27 @@ public class NewOrderController extends BaseController {
         Double balancePayFee = order.getBalancePayFee();
         CmUser u = cmUserService.get(userID + "");
         if (null != u && null != balancePayFee) {
-            Double userMoney = u.getUserMoney();
-            if (null != userMoney) {
-                u.setUserMoney(userMoney - balancePayFee);
-                cmUserDao.updateMoney(u);
+            Double userMoney = null == u.getUserMoney() ? 0 : u.getUserMoney();
+            Double onlineMoney = null == u.getOnlineMoney() ? 0 : u.getOnlineMoney();
+            //线上使用余额
+            Double onlineUseMoney = 0d;
+            //线下使用余额
+            Double userUseMoney = 0d;
+            //可用余额
+            Double ableUserMoney = u.getAbleUserMoney();
+            if (onlineMoney > order.getBalancePayFee()) {
+                onlineUseMoney = order.getBalancePayFee();
+            } else {
+                userUseMoney = order.getBalancePayFee() - onlineMoney;
+                onlineUseMoney = onlineMoney;
             }
+            ableUserMoney = MathUtil.sub(ableUserMoney, MathUtil.add(onlineUseMoney, userUseMoney)).doubleValue();
+            onlineMoney = MathUtil.sub(onlineMoney, onlineUseMoney).doubleValue();
+            userMoney = MathUtil.sub(userMoney, userUseMoney).doubleValue();
+            u.setAbleUserMoney(ableUserMoney);
+            u.setOnlineMoney(onlineMoney);
+            u.setUserMoney(userMoney);
+            cmUserDao.update(u);
         }
         addMessage(redirectAttributes, "确认订单成功");
         return "redirect:" + Global.getAdminPath() + "/order/detail/?id=" + orderID;
@@ -724,7 +740,6 @@ public class NewOrderController extends BaseController {
     }
 
 
-
     /**
      * 确认收货
      *
@@ -741,8 +756,6 @@ public class NewOrderController extends BaseController {
     }
 
 
-
-
     /**
      * 去子订单orderProduct页面
      *
@@ -1251,7 +1264,19 @@ public class NewOrderController extends BaseController {
             String organizeStoreName = cmUserDao.getOrganizeStoreName(order.getOrganizeStoreId());
             order.setOrganizeStoreName(organizeStoreName);
         }
-
+        //线上/下余额赋值
+        Double userMoney = cmDiscernReceiptDao.findUserMoney(order.getId());
+        Double onlineMoney = cmDiscernReceiptDao.findOnlineMoney(order.getId());
+        if (null == userMoney) {
+            order.setUserMoney(0d);
+        } else {
+            order.setUserMoney(userMoney);
+        }
+        if (null == onlineMoney) {
+            order.setOnlineMoney(0d);
+        } else {
+            order.setOnlineMoney(onlineMoney);
+        }
         model.addAttribute("order", order);
         if ("0".equals(order.getStatus())) {
             try {
@@ -1290,7 +1315,7 @@ public class NewOrderController extends BaseController {
         }
         //订单已收金额
         Double brokerage = cmUtilsDao.selectPayTotalFees(order.getOrderID());
-        model.addAttribute("brokerage",brokerage);
+        model.addAttribute("brokerage", brokerage);
         Double receiptAmount = cmDiscernReceiptService.findOrderReceipt(order.getOrderID());
         model.addAttribute("returnValue", returnValue);
         model.addAttribute("receiptAmount", receiptAmount == null ? 0 : receiptAmount);
@@ -1412,17 +1437,17 @@ public class NewOrderController extends BaseController {
 
     /**
      * 置为已收款已付款
+     *
      * @param orderId
      * @return
      */
     @RequestMapping("toChangePay")
-    public String changePay(Integer orderId){
+    public String changePay(Integer orderId) {
         newOrderService.changePay(orderId);
         return "redirect:" + Global.getAdminPath() + "/order/orderList";
     }
 
 
-
     @RequestMapping(value = "saveClause")
     public String saveClause(NewOrder order, RedirectAttributes redirectAttributes, HttpServletRequest request) {
         String clauseContent = request.getParameter("clauseContent");

+ 9 - 0
src/main/java/com/caimei/modules/project/model/ServiceProviderModel.java

@@ -11,6 +11,7 @@ public class ServiceProviderModel extends DataEntity<ServiceProviderModel> {
     private String name;
     private Integer userID;
     private Integer mainServiceProviderID;
+    private Integer teamFlag;  //协销小组编辑页面回显标记,后台取数据的时候给1
 
     public Integer getServiceProviderID() {
         return serviceProviderID;
@@ -36,6 +37,14 @@ public class ServiceProviderModel extends DataEntity<ServiceProviderModel> {
         this.mainServiceProviderID = mainServiceProviderID;
     }
 
+    public Integer getTeamFlag() {
+        return teamFlag;
+    }
+
+    public void setTeamFlag(Integer teamFlag) {
+        this.teamFlag = teamFlag;
+    }
+
     public ServiceProviderModel() {
         super();
     }

+ 32 - 0
src/main/java/com/caimei/modules/serviceteam/dao/CmServiceteamRoleDao.java

@@ -0,0 +1,32 @@
+package com.caimei.modules.serviceteam.dao;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.thinkgem.jeesite.common.persistence.CrudDao;
+import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
+import com.caimei.modules.serviceteam.entity.CmServiceteamRole;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 协销小组DAO接口
+ * @author zzj
+ * @version 2022-01-20
+ */
+@MyBatisDao
+public interface CmServiceteamRoleDao extends CrudDao<CmServiceteamRole> {
+
+    List<CmServiceteamRole> findTeams(CmServiceteamRole cmServiceteamRole);
+
+    List<ServiceProviderModel> findGroups(String id);
+
+    void deleteAll(String teamId);
+    //查所有没有组队的协销
+    List<ServiceProviderModel> findAllGroups();
+
+    void save(CmServiceteamRole cmServiceteamRole);
+
+    void saveGroup(@Param("teamId")String teamId,@Param("i") String i);
+
+    CmServiceteamRole findLeader(String teamId);
+}

+ 94 - 0
src/main/java/com/caimei/modules/serviceteam/entity/CmServiceteamRole.java

@@ -0,0 +1,94 @@
+package com.caimei.modules.serviceteam.entity;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import org.hibernate.validator.constraints.Length;
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+/**
+ * 协销小组Entity
+ * @author zzj
+ * @version 2022-01-20
+ */
+public class CmServiceteamRole extends DataEntity<CmServiceteamRole> {
+	
+	private static final long serialVersionUID = 1L;
+	private String teamId;
+	private String leaderId;		// 组长协销id
+	private String leaderName;    //组长姓名
+	private List<ServiceProviderModel> group;  //组员
+	private String manager;		// 总管理员标记,1是,2否
+	private Date createdTime;		// 创建时间
+	private Integer fullFlag;		//回显小组满员标记
+	
+	public CmServiceteamRole() {
+		super();
+	}
+
+	public CmServiceteamRole(String id){
+		super(id);
+	}
+
+	@Length(min=0, max=10, message="组长协销id长度必须介于 0 和 10 之间")
+	public String getLeaderId() {
+		return leaderId;
+	}
+
+	public void setLeaderId(String leaderId) {
+		this.leaderId = leaderId;
+	}
+
+	public Integer getFullFlag() {
+		return fullFlag;
+	}
+
+	public void setFullFlag(Integer fullFlag) {
+		this.fullFlag = fullFlag;
+	}
+
+	public String getTeamId() {
+		return teamId;
+	}
+
+	public void setTeamId(String teamId) {
+		this.teamId = teamId;
+	}
+
+	@Length(min=0, max=2, message="总管理员标记,1是,2否长度必须介于 0 和 2 之间")
+	public String getManager() {
+		return manager;
+	}
+
+	public void setManager(String manager) {
+		this.manager = manager;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getCreatedTime() {
+		return createdTime;
+	}
+
+	public void setCreatedTime(Date createdTime) {
+		this.createdTime = createdTime;
+	}
+
+	public String getLeaderName() {
+		return leaderName;
+	}
+
+	public void setLeaderName(String leaderName) {
+		this.leaderName = leaderName;
+	}
+
+	public List<ServiceProviderModel> getGroup() {
+		return group;
+	}
+
+	public void setGroup(List<ServiceProviderModel> group) {
+		this.group = group;
+	}
+}

+ 87 - 0
src/main/java/com/caimei/modules/serviceteam/service/CmServiceteamRoleService.java

@@ -0,0 +1,87 @@
+package com.caimei.modules.serviceteam.service;
+
+import java.util.List;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.thinkgem.jeesite.common.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.service.CrudService;
+import com.caimei.modules.serviceteam.entity.CmServiceteamRole;
+import com.caimei.modules.serviceteam.dao.CmServiceteamRoleDao;
+
+/**
+ * 协销小组Service
+ *
+ * @author zzj
+ * @version 2022-01-20
+ */
+@Service
+@Transactional(readOnly = true)
+public class CmServiceteamRoleService extends CrudService<CmServiceteamRoleDao, CmServiceteamRole> {
+
+    @Autowired
+    private CmServiceteamRoleDao dao;
+
+
+    public CmServiceteamRole get(String id) {
+        return super.get(id);
+    }
+
+    public List<CmServiceteamRole> findList(CmServiceteamRole cmServiceteamRole) {
+        return super.findList(cmServiceteamRole);
+    }
+
+    public Page<CmServiceteamRole> findPage(Page<CmServiceteamRole> page, CmServiceteamRole cmServiceteamRole) {
+        cmServiceteamRole.setPage(page);
+        List<CmServiceteamRole> list = dao.findTeams(cmServiceteamRole);
+        list.forEach(l -> l.setGroup(dao.findGroups(l.getTeamId())));
+        page.setList(list);
+        return page;
+    }
+
+    @Transactional(readOnly = false)
+    public void save(CmServiceteamRole cmServiceteamRole) {
+
+    }
+
+    @Transactional(readOnly = false)
+    public void delete(CmServiceteamRole cmServiceteamRole) {
+        //删组长
+        dao.delete(cmServiceteamRole.getTeamId());
+        //删组员
+        dao.deleteAll(cmServiceteamRole.getTeamId());
+    }
+
+    public CmServiceteamRole findGroup(CmServiceteamRole cmServiceteamRole) {
+        if (StringUtils.isNotBlank(cmServiceteamRole.getTeamId())) {
+            cmServiceteamRole=dao.findLeader(cmServiceteamRole.getTeamId());
+            List<ServiceProviderModel> list=dao.findGroups(cmServiceteamRole.getTeamId());
+            list.forEach(l->l.setTeamFlag(1));
+            if(null!=list&&list.size()>=10){
+                //如果有十个组员返回满员标记
+                cmServiceteamRole.setFullFlag(1);
+            }
+            List<ServiceProviderModel> allList= dao.findAllGroups();
+            list.addAll(allList);
+            cmServiceteamRole.setGroup(list);
+            return cmServiceteamRole;
+        } else {
+            cmServiceteamRole.setGroup(dao.findAllGroups());
+            return cmServiceteamRole;
+        }
+    }
+
+    @Transactional(readOnly = false)
+    public void saveGroup(List<String> ids, CmServiceteamRole cmServiceteamRole) {
+        if (null != cmServiceteamRole.getTeamId()) {
+            //如果小组存在,先删原小组,再保存
+            delete(cmServiceteamRole);
+        }
+        dao.save(cmServiceteamRole);
+        ids.forEach(i->dao.saveGroup(cmServiceteamRole.getId(),i));
+    }
+}

+ 85 - 0
src/main/java/com/caimei/modules/serviceteam/web/CmServiceteamRoleController.java

@@ -0,0 +1,85 @@
+package com.caimei.modules.serviceteam.web;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.thinkgem.jeesite.common.config.Global;
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.web.BaseController;
+import com.thinkgem.jeesite.common.utils.StringUtils;
+import com.caimei.modules.serviceteam.entity.CmServiceteamRole;
+import com.caimei.modules.serviceteam.service.CmServiceteamRoleService;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 协销小组Controller
+ *
+ * @author zzj
+ * @version 2022-01-20
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/serviceteam/cmServiceteamRole")
+public class CmServiceteamRoleController extends BaseController {
+
+    @Autowired
+    private CmServiceteamRoleService cmServiceteamRoleService;
+
+    @ModelAttribute
+    public CmServiceteamRole get(@RequestParam(required = false) String id) {
+        CmServiceteamRole entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = cmServiceteamRoleService.get(id);
+        }
+        if (entity == null) {
+            entity = new CmServiceteamRole();
+        }
+        return entity;
+    }
+
+    @RequestMapping(value = {"list", ""})
+    public String list(CmServiceteamRole cmServiceteamRole, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<CmServiceteamRole> page = cmServiceteamRoleService.findPage(new Page<CmServiceteamRole>(request, response), cmServiceteamRole);
+        model.addAttribute("page", page);
+        return "modules/serviceteam/cmServiceteamRoleList";
+    }
+
+    @RequestMapping(value = "form")
+    public String form(CmServiceteamRole cmServiceteamRole, Model model) {
+        cmServiceteamRole = cmServiceteamRoleService.findGroup(cmServiceteamRole);
+        model.addAttribute("cmServiceteamRole", cmServiceteamRole);
+        return "modules/serviceteam/cmServiceteamRoleForm";
+    }
+
+    @RequestMapping(value = "save")
+    public String save(CmServiceteamRole cmServiceteamRole, Model model, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        if (!beanValidator(model, cmServiceteamRole)) {
+            return form(cmServiceteamRole, model);
+        }
+        List<String> ids = Arrays.asList(request.getParameterValues("ids"));
+        if (null != ids && ids.size() > 0) {
+            cmServiceteamRoleService.saveGroup(ids,cmServiceteamRole);
+        }
+        addMessage(redirectAttributes, "保存协销小组成功");
+        return "redirect:" + Global.getAdminPath() + "/serviceteam/cmServiceteamRole/?repage";
+    }
+
+    @RequestMapping(value = "delete")
+    public String delete(CmServiceteamRole cmServiceteamRole, RedirectAttributes redirectAttributes) {
+        cmServiceteamRoleService.delete(cmServiceteamRole);
+        addMessage(redirectAttributes, "删除协销小组成功");
+        return "redirect:" + Global.getAdminPath() + "/serviceteam/cmServiceteamRole/?repage";
+    }
+
+}

+ 9 - 0
src/main/java/com/caimei/modules/user/dao/CmSpDao.java

@@ -1,5 +1,6 @@
 package com.caimei.modules.user.dao;
 
+import com.caimei.modules.user.entity.CmSaleMan;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.NewCmSp;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
@@ -23,4 +24,12 @@ public interface CmSpDao extends CrudDao<NewCmSp> {
     List<NewCmSp> findSelectList(NewCmSp newCmSp);
 
     NewCmSp findByUserId(Integer userId);
+
+    List<CmSaleMan> findTeam();
+
+    void updateManager();
+
+    void choseManager(Integer serviceProviderID);
+
+    void deleteManager();
 }

+ 6 - 0
src/main/java/com/caimei/modules/user/dao/CmUserDao.java

@@ -82,4 +82,10 @@ public interface CmUserDao extends CrudDao<CmUser> {
     Date findByConfirmTime(Integer userId);
 
     Integer findUserBeans(Integer userId);
+
+    Double findOnlineMoney(Integer userID);
+
+    Double findUserMoney(Integer userID);
+
+    Double findAbleUserMoney(Integer userID);
 }

+ 12 - 4
src/main/java/com/caimei/modules/user/dao/NewCmClubDao.java

@@ -1,9 +1,8 @@
 package com.caimei.modules.user.dao;
 
-import com.caimei.modules.user.entity.CmClubRemarks;
-import com.caimei.modules.user.entity.NewCmClub;
-import com.caimei.modules.user.entity.RemarksFileVo;
-import com.caimei.modules.user.entity.UserBeansHistory;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.caimei.modules.user.entity.*;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
 import org.apache.ibatis.annotations.Param;
@@ -37,4 +36,13 @@ public interface NewCmClubDao extends CrudDao<NewCmClub> {
 
     UserBeansHistory findLowOrder(Integer orderID);
 
+    List<CmClubRemarks> findRegistList(CmClubRemarks cmClubRemarks);
+
+    List<CmConsulttype> findConsults();
+
+    List<CmSaleMan> findTeams();
+
+    List<ServiceProviderModel> findGroup(Integer leaderId);
+
+    String findClassName(String string);
 }

+ 3 - 0
src/main/java/com/caimei/modules/user/dao/VisitRemarkDao.java

@@ -19,4 +19,7 @@ public interface VisitRemarkDao extends CrudDao<VisitRemarkVo> {
 
     List<RemarksFileVo> getRemarksFileList(Integer remarksId);
 
+    List<VisitRemarkVo> findRegistList(VisitRemarkVo visit);
+
+    String findClassName(String string);
 }

+ 120 - 2
src/main/java/com/caimei/modules/user/entity/CmClubRemarks.java

@@ -1,5 +1,7 @@
 package com.caimei.modules.user.entity;
 
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.project.model.ServiceProviderModel;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.thinkgem.jeesite.common.persistence.DataEntity;
 import org.hibernate.validator.constraints.Length;
@@ -30,12 +32,43 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
     private Integer remarksId;
 
     /**
-     *
+     *  协销姓名
      */
     private String spName;
+    /**
+     * 机构名称
+     */
+    private String clubName;
+    /**
+     * 总咨询类别
+     */
+    private List<CmConsulttype> consults;
+    //记录的咨询类别
+    private String consultType;
+    /**
+     * 咨询类别
+     */
+    private String consult;
 
     /**
-     * 文字备注
+     * 协销id
+     */
+    private Integer serviceProviderId;
+
+    /**
+     * 总小组
+     */
+    private List<CmSaleMan> teams;
+    /**
+     * 组长id/管理员id
+     */
+    private Integer leaderId;
+    /**
+     * 管理员姓名
+     */
+    private String leaderName;
+    /**
+     * 文字备注/关键词
      */
     private String remarks;
     /**
@@ -43,6 +76,12 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date addTime;
+
+
+    private String startAddTime;
+
+
+    private String endAddTime;
     /**
      * 咨询人
      */
@@ -57,6 +96,85 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
      */
     private List<RemarksFileVo> fileList;
 
+    public String getConsultType() {
+        return consultType;
+    }
+
+    public void setConsultType(String consultType) {
+        this.consultType = consultType;
+    }
+
+    public String getStartAddTime() {
+        return startAddTime;
+    }
+
+    public void setStartAddTime(String startAddTime) {
+        this.startAddTime = startAddTime;
+    }
+
+    public String getEndAddTime() {
+        return endAddTime;
+    }
+
+    public void setEndAddTime(String endAddTime) {
+        this.endAddTime = endAddTime;
+    }
+
+    public Integer getServiceProviderId() {
+        return serviceProviderId;
+    }
+
+    public void setServiceProviderId(Integer serviceProviderId) {
+        this.serviceProviderId = serviceProviderId;
+    }
+
+    public String getClubName() {
+        return clubName;
+    }
+
+    public void setClubName(String clubName) {
+        this.clubName = clubName;
+    }
+
+    public List<CmConsulttype> getConsults() {
+        return consults;
+    }
+
+    public void setConsults(List<CmConsulttype> consults) {
+        this.consults = consults;
+    }
+
+    public String getConsult() {
+        return consult;
+    }
+
+    public void setConsult(String consult) {
+        this.consult = consult;
+    }
+
+    public List<CmSaleMan> getTeams() {
+        return teams;
+    }
+
+    public void setTeams(List<CmSaleMan> teams) {
+        this.teams = teams;
+    }
+
+    public Integer getLeaderId() {
+        return leaderId;
+    }
+
+    public void setLeaderId(Integer leaderId) {
+        this.leaderId = leaderId;
+    }
+
+    public String getLeaderName() {
+        return leaderName;
+    }
+
+    public void setLeaderName(String leaderName) {
+        this.leaderName = leaderName;
+    }
 
     public Integer getRemarksId() {
         return remarksId;

+ 64 - 0
src/main/java/com/caimei/modules/user/entity/CmSaleMan.java

@@ -0,0 +1,64 @@
+package com.caimei.modules.user.entity;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+import java.util.Date;
+import java.util.List;
+
+public class CmSaleMan extends DataEntity<CmSaleMan> {
+
+    private static final long serialVersionUID = 1L;
+    //协销组员
+    private List<ServiceProviderModel> groups;
+    //协销组长id
+    private Integer leaderId;
+    //协销组长姓名
+    private String leaderName;
+    //总管理标记 1是,2不是
+    private String manager;
+    //小组创建时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    public List<ServiceProviderModel> getGroups() {
+        return groups;
+    }
+
+    public void setGroups(List<ServiceProviderModel> groups) {
+        this.groups = groups;
+    }
+
+    public Integer getLeaderId() {
+        return leaderId;
+    }
+
+    public void setLeaderId(Integer leaderId) {
+        this.leaderId = leaderId;
+    }
+
+    public String getLeaderName() {
+        return leaderName;
+    }
+
+    public void setLeaderName(String leaderName) {
+        this.leaderName = leaderName;
+    }
+
+    public String getManager() {
+        return manager;
+    }
+
+    public void setManager(String manager) {
+        this.manager = manager;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+}

+ 10 - 1
src/main/java/com/caimei/modules/user/entity/CmUser.java

@@ -56,7 +56,8 @@ public class CmUser extends DataEntity<CmUser> {
     private String serviceProviderID;        // 创客Id
 //    private String masterStatus;        // masterStatus
 //    private String masterID;        // masterID
-    private Double userMoney;        // 账户余额
+    private Double userMoney;        // 线下余额
+    private Double onlineMoney;        // 线上余额
     private Double ableUserMoney;        //账户可用余额
 //    private String point;        // point
 //    private String shopERPFlag;        // shopERPFlag
@@ -119,6 +120,14 @@ public class CmUser extends DataEntity<CmUser> {
         super(id);
     }
 
+    public Double getOnlineMoney() {
+        return onlineMoney;
+    }
+
+    public void setOnlineMoney(Double onlineMoney) {
+        this.onlineMoney = onlineMoney;
+    }
+
     @NotNull(message = "userID不能为空")
     public Integer getUserID() {
         return userID;

+ 1 - 1
src/main/java/com/caimei/modules/user/entity/CmUserBalanceRecord.java

@@ -17,7 +17,7 @@ public class CmUserBalanceRecord extends DataEntity<CmUserBalanceRecord> {
     private static final long serialVersionUID = 1L;
     private Integer userId;        // 用户ID
     private String type;        // 收支类型:1收入,2支出
-    private String balanceType;        // 余额类型:1余额抵扣,2多收退款到余额,3申请退款,4余额充值,5余额提现,6订金订单充值,7余额订单充值,8订金订单退款,9余额订单退款
+    private String balanceType;        // 余额类型:1线下余额抵扣,2多收退款到余额,3申请退款,4余额充值,5余额提现,6订金订单充值,7余额订单充值,8订金订单退款,9余额订单退款,10线上余额抵扣
     private Date addDate;        // 添加时间
     private String amount;        // 金额
     private Integer orderId;        // 主订单ID(适用余额类型1,3[类型为3多次退款存在相同记录ID则需通过退款ID唯一区分])

+ 10 - 1
src/main/java/com/caimei/modules/user/entity/NewCmSp.java

@@ -5,6 +5,7 @@ import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
 import java.beans.Transient;
+import java.util.List;
 
 /**
  * 用户模块重构-协销人员管理Entity
@@ -29,7 +30,7 @@ public class NewCmSp extends DataEntity<NewCmSp> {
 	private Integer status;		// 创客状态,见表c_serviceproviderstatus或枚举ServiceProviderStatus
 	private String addTime;		// 创建时间
 	private Integer mainServiceProviderID;		// 创客经理Id
-
+	private List<CmSaleMan> teams;  //小组组长列表
 //	private String nameEn;		// 英文名
 //	private String site;		// 网址
 //	private String logo;		// 头像
@@ -91,6 +92,14 @@ public class NewCmSp extends DataEntity<NewCmSp> {
 		super(id);
 	}
 
+	public List<CmSaleMan> getTeams() {
+		return teams;
+	}
+
+	public void setTeams(List<CmSaleMan> teams) {
+		this.teams = teams;
+	}
+
 	@NotNull(message="serviceProviderID不能为空")
 	public Integer getServiceProviderID() {
 		return serviceProviderID;

+ 91 - 0
src/main/java/com/caimei/modules/user/entity/VisitRemarkVo.java

@@ -1,5 +1,6 @@
 package com.caimei.modules.user.entity;
 
+import com.caimei.modules.consult.entity.type.CmConsulttype;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.thinkgem.jeesite.common.persistence.DataEntity;
 
@@ -33,6 +34,32 @@ public class VisitRemarkVo extends DataEntity<VisitRemarkVo> {
      * 同步clubid
      */
     private String clubId;
+    /**
+     * 总咨询类别
+     */
+    private List<CmConsulttype> consults;
+    //记录的咨询类别
+    private String consultType;
+    /**
+     * 咨询类别
+     */
+    private String consult;
+    /**
+     * 总小组
+     */
+    private List<CmSaleMan> teams;
+    /**
+     * 组长id/管理员id
+     */
+    private Integer leaderId;
+    /**
+     * 管理员姓名
+     */
+    private String leaderName;
+
+    private String startAddTime;
+
+    private String endAddTime;
     /**
      * 备注/关键词
      */
@@ -72,6 +99,70 @@ public class VisitRemarkVo extends DataEntity<VisitRemarkVo> {
      */
     private List<Server> serverList;
 
+    public String getConsultType() {
+        return consultType;
+    }
+
+    public void setConsultType(String consultType) {
+        this.consultType = consultType;
+    }
+
+    public List<CmConsulttype> getConsults() {
+        return consults;
+    }
+
+    public void setConsults(List<CmConsulttype> consults) {
+        this.consults = consults;
+    }
+
+    public String getConsult() {
+        return consult;
+    }
+
+    public void setConsult(String consult) {
+        this.consult = consult;
+    }
+
+    public List<CmSaleMan> getTeams() {
+        return teams;
+    }
+
+    public void setTeams(List<CmSaleMan> teams) {
+        this.teams = teams;
+    }
+
+    public Integer getLeaderId() {
+        return leaderId;
+    }
+
+    public void setLeaderId(Integer leaderId) {
+        this.leaderId = leaderId;
+    }
+
+    public String getLeaderName() {
+        return leaderName;
+    }
+
+    public void setLeaderName(String leaderName) {
+        this.leaderName = leaderName;
+    }
+
+    public String getStartAddTime() {
+        return startAddTime;
+    }
+
+    public void setStartAddTime(String startAddTime) {
+        this.startAddTime = startAddTime;
+    }
+
+    public String getEndAddTime() {
+        return endAddTime;
+    }
+
+    public void setEndAddTime(String endAddTime) {
+        this.endAddTime = endAddTime;
+    }
+
     public String getClubName() {
         return clubName;
     }

+ 10 - 0
src/main/java/com/caimei/modules/user/service/CmSpService.java

@@ -1,6 +1,7 @@
 package com.caimei.modules.user.service;
 
 import com.caimei.modules.user.dao.CmSpDao;
+import com.caimei.modules.user.entity.CmSaleMan;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.NewCmSp;
 import com.thinkgem.jeesite.common.persistence.Page;
@@ -58,4 +59,13 @@ public class CmSpService extends CrudService<CmSpDao, NewCmSp> {
 	public int updateSpManager(Integer spManagerID) {
 		return cmSpDao.updateSpManager(spManagerID);
 	}
+
+    public List<CmSaleMan> findTeam() {
+    	return cmSpDao.findTeam();
+	}
+	@Transactional(readOnly = false)
+	public void saveLeader(Integer serviceProviderID) {
+		cmSpDao.deleteManager();
+		cmSpDao.choseManager(serviceProviderID);
+	}
 }

+ 66 - 10
src/main/java/com/caimei/modules/user/service/NewCmClubService.java

@@ -1,13 +1,15 @@
 package com.caimei.modules.user.service;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 
+import com.caimei.modules.consult.entity.type.CmConsulttype;
 import com.caimei.modules.oss.service.CmOssArchiveService;
 import com.caimei.modules.oss.utils.OSSUtils;
-import com.caimei.modules.user.entity.CmClubRemarks;
-import com.caimei.modules.user.entity.RemarksFileVo;
-import com.caimei.modules.user.entity.UserBeansHistory;
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.caimei.modules.user.entity.*;
+import com.thinkgem.jeesite.common.utils.StringUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -15,7 +17,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.service.CrudService;
-import com.caimei.modules.user.entity.NewCmClub;
 import com.caimei.modules.user.dao.NewCmClubDao;
 
 import javax.servlet.http.HttpServletRequest;
@@ -59,7 +60,7 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
     }
 
     @Transactional(readOnly = false)
-    public void insert(NewCmClub userClub){
+    public void insert(NewCmClub userClub) {
         newCmClubDao.insert(userClub);
     }
 
@@ -75,9 +76,9 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
 
     public NewCmClub findClubById(Integer clubId) {
         List<NewCmClub> newCmClubs = newCmClubDao.findClubById(clubId);
-        if(CollectionUtils.isNotEmpty(newCmClubs) && newCmClubs.size() > 0 ){
+        if (CollectionUtils.isNotEmpty(newCmClubs) && newCmClubs.size() > 0) {
             return newCmClubs.get(0);
-        }else{
+        } else {
             return null;
         }
     }
@@ -87,13 +88,26 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
         newCmClubDao.insertBeansHistory(beansHistory);
     }
 
-    public Page<CmClubRemarks> findRemarksPage(Page<CmClubRemarks> page, CmClubRemarks cmClubRemarks){
+    public Page<CmClubRemarks> findRemarksPage(Page<CmClubRemarks> page, CmClubRemarks cmClubRemarks) {
         cmClubRemarks.setPage(page);
         List<CmClubRemarks> remarksList = newCmClubDao.findRemarksList(cmClubRemarks);
-        remarksList.forEach(remarks->{
+        remarksList.forEach(remarks -> {
+            if (StringUtils.isNotBlank(remarks.getConsult())) {
+                StringBuilder cons = new StringBuilder();
+                if(remarks.getConsult().contains(",")){
+                    String[] split = remarks.getConsult().split(",");
+                    for (String string : split) {
+                        cons.append(newCmClubDao.findClassName(string)).append(",");
+                    }
+                    cons = new StringBuilder(cons.substring(0, cons.length() - 1));
+                }else{
+                    cons = new StringBuilder(newCmClubDao.findClassName(remarks.getConsult()));
+                }
+                remarks.setConsultType(cons.toString());
+            }
             List<String> imageList = newCmClubDao.getRemarksImageList(remarks.getRemarksId());
             List<RemarksFileVo> fileList = newCmClubDao.getRemarksFileList(remarks.getRemarksId());
-            fileList.forEach(f->f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
+            fileList.forEach(f -> f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
             remarks.setImageList(imageList);
             remarks.setFileList(fileList);
         });
@@ -105,4 +119,46 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
         OSSUtils.downFile(ossName, fileName);
         cmOssArchiveService.download(request, response, fileName);
     }
+
+    public Page<CmClubRemarks> findRegistPage(Page<CmClubRemarks> cmClubRemarksPage, CmClubRemarks cmClubRemarks) {
+        cmClubRemarks.setPage(cmClubRemarksPage);
+        List<CmClubRemarks> remarksList = newCmClubDao.findRegistList(cmClubRemarks);
+        remarksList.forEach(remarks -> {
+            if (StringUtils.isNotBlank(remarks.getConsult())) {
+                StringBuilder cons = new StringBuilder();
+                if(remarks.getConsult().contains(",")){
+                    String[] split = remarks.getConsult().split(",");
+                    for (String string : split) {
+                        cons.append(newCmClubDao.findClassName(string)).append(",");
+                    }
+                    cons = new StringBuilder(cons.substring(0, cons.length() - 1));
+                }else{
+                    cons = new StringBuilder(newCmClubDao.findClassName(remarks.getConsult()));
+                }
+                remarks.setConsultType(cons.toString());
+            }
+            List<String> imageList = newCmClubDao.getRemarksImageList(remarks.getRemarksId());
+            List<RemarksFileVo> fileList = newCmClubDao.getRemarksFileList(remarks.getRemarksId());
+            fileList.forEach(f -> f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
+            remarks.setImageList(imageList);
+            remarks.setFileList(fileList);
+        });
+        if (StringUtils.isNotBlank(cmClubRemarks.getConsult())) {
+            remarksList.removeIf(r -> !r.getConsult().contains(cmClubRemarks.getConsult()));
+        }
+        cmClubRemarksPage.setList(remarksList);
+        return cmClubRemarksPage;
+    }
+
+    public List<CmConsulttype> findConsults() {
+        return newCmClubDao.findConsults();
+    }
+
+    public List<CmSaleMan> findTeams() {
+        return newCmClubDao.findTeams();
+    }
+
+    public List<ServiceProviderModel> findGroup(Integer leaderId) {
+        return newCmClubDao.findGroup(leaderId);
+    }
 }

+ 38 - 0
src/main/java/com/caimei/modules/user/service/VisitRemarkService.java

@@ -1,13 +1,21 @@
 package com.caimei.modules.user.service;
 
+import com.caimei.modules.oss.utils.OSSUtils;
 import com.caimei.modules.user.dao.VisitRemarkDao;
+import com.caimei.modules.user.entity.CmClubRemarks;
+import com.caimei.modules.user.entity.RemarksFileVo;
 import com.caimei.modules.user.entity.Server;
 import com.caimei.modules.user.entity.VisitRemarkVo;
+import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.service.CrudService;
+import com.thinkgem.jeesite.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Stream;
 
 @Service
 public class VisitRemarkService extends CrudService<VisitRemarkDao, VisitRemarkVo> {
@@ -18,4 +26,34 @@ public class VisitRemarkService extends CrudService<VisitRemarkDao, VisitRemarkV
     public List<Server> getServer() {
         return visitRemarkDao.getServer();
     }
+
+    public Page<VisitRemarkVo> findUnregistPage(Page<VisitRemarkVo> visitRemarkVoPage, VisitRemarkVo visit) {
+        visit.setPage(visitRemarkVoPage);
+        List<VisitRemarkVo> remarksList = visitRemarkDao.findRegistList(visit);
+        remarksList.forEach(remarks -> {
+            if (StringUtils.isNotBlank(remarks.getConsult())) {
+                StringBuilder cons = new StringBuilder();
+                if(remarks.getConsult().contains(",")){
+                    String[] split = remarks.getConsult().split(",");
+                    for (String string : split) {
+                        cons.append(visitRemarkDao.findClassName(string)).append(",");
+                    }
+                    cons = new StringBuilder(cons.substring(0, cons.length() - 1));
+                }else{
+                    cons = new StringBuilder(visitRemarkDao.findClassName(remarks.getConsult()));
+                }
+                remarks.setConsultType(cons.toString());
+            }
+            List<String> imageList = visitRemarkDao.getRemarksImageList(remarks.getRemarksId());
+            List<RemarksFileVo> fileList = visitRemarkDao.getRemarksFileList(remarks.getRemarksId());
+            fileList.forEach(f -> f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
+            remarks.setImageList(imageList);
+            remarks.setFileList(fileList);
+        });
+        if (StringUtils.isNotBlank(visit.getConsult())) {
+            remarksList.removeIf(r -> !r.getConsult().contains(visit.getConsult()));
+        }
+        visitRemarkVoPage.setList(remarksList);
+        return visitRemarkVoPage;
+    }
 }

+ 39 - 1
src/main/java/com/caimei/modules/user/web/newUser/AgencyController.java

@@ -4,6 +4,7 @@ import com.caimei.constants.ClubStatus;
 import com.caimei.dfs.image.beens.ImageUploadInfo;
 import com.caimei.modules.common.utils.UploadUtils;
 import com.caimei.modules.product.service.CmShoporderService;
+import com.caimei.modules.project.model.ServiceProviderModel;
 import com.caimei.modules.sys.utils.CmMsgUtils;
 import com.caimei.modules.sys.utils.SMSUtils;
 import com.caimei.modules.sys.utils.UploadImageUtils;
@@ -35,6 +36,8 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -688,13 +691,42 @@ public class AgencyController extends BaseController {
      * 资料备注列表
      */
     @RequestMapping("remarks")
-    public String remarksList(CmClubRemarks cmClubRemarks,HttpServletRequest request, HttpServletResponse response, Model model) {
+    public String remarksList(CmClubRemarks cmClubRemarks, HttpServletRequest request, HttpServletResponse response, Model model) {
         Page<CmClubRemarks> page = newCmClubService.findRemarksPage(new Page<CmClubRemarks>(request, response, 20), cmClubRemarks);
         model.addAttribute("cmClubRemarks", cmClubRemarks);
         model.addAttribute("page", page);
         return "modules/userNew/cmAgencyRemarksList";
     }
 
+    /**
+     * 已注册用户咨询记录
+     *
+     * @param cmClubRemarks
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @RequestMapping("regist")
+    public String registList(CmClubRemarks cmClubRemarks, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(cmClubRemarks.getStartAddTime())) {
+            String startAddTime = cmClubRemarks.getStartAddTime();
+            startAddTime += " 00:00:00";
+            cmClubRemarks.setStartAddTime(startAddTime);
+        }
+        if (org.apache.commons.lang.StringUtils.isNotBlank(cmClubRemarks.getEndAddTime())) {
+            String endAddTime = cmClubRemarks.getEndAddTime();
+            endAddTime += " 23:59:59";
+            cmClubRemarks.setEndAddTime(endAddTime);
+        }
+        Page<CmClubRemarks> page = newCmClubService.findRegistPage(new Page<CmClubRemarks>(request, response, 20), cmClubRemarks);
+        cmClubRemarks.setConsults(newCmClubService.findConsults());
+        cmClubRemarks.setTeams(newCmClubService.findTeams());
+        model.addAttribute("cmClubRemarks", cmClubRemarks);
+        model.addAttribute("page", page);
+        return "modules/userNew/cmRegistRemarksList";
+    }
+
     /**
      * 资料备注列表
      */
@@ -702,4 +734,10 @@ public class AgencyController extends BaseController {
     public void downloadRemarks(String fileName, String ossName, HttpServletRequest request, HttpServletResponse response, Model model) throws IOException {
         newCmClubService.downloadRemarks(fileName, ossName, request, response);
     }
+
+    @RequestMapping("group")
+    @ResponseBody
+    public List<ServiceProviderModel> group(Integer leaderId) {
+        return newCmClubService.findGroup(leaderId);
+    }
 }

+ 24 - 5
src/main/java/com/caimei/modules/user/web/newUser/SpController.java

@@ -10,10 +10,7 @@ import com.caimei.modules.project.dao.ServiceProviderDao;
 import com.caimei.modules.project.model.ClubModel;
 import com.caimei.modules.project.model.ServiceProviderModel;
 import com.caimei.modules.sys.utils.ValidateUtils;
-import com.caimei.modules.user.entity.ClubChangeSp;
-import com.caimei.modules.user.entity.CmBind;
-import com.caimei.modules.user.entity.CmUser;
-import com.caimei.modules.user.entity.NewCmSp;
+import com.caimei.modules.user.entity.*;
 import com.caimei.modules.user.service.ClubChangeSpReviewService;
 import com.caimei.modules.user.service.CmBindService;
 import com.caimei.modules.user.service.CmSpService;
@@ -175,6 +172,7 @@ public class SpController extends BaseController {
 
     /**
      * 协销管理
+     *
      * @param newCmSp
      * @param request
      * @param response
@@ -196,6 +194,7 @@ public class SpController extends BaseController {
 
     /**
      * 添加协销人员
+     *
      * @param newCmSp
      * @param model
      * @return
@@ -271,7 +270,9 @@ public class SpController extends BaseController {
         cmSp.setAuditStatus(AppKeys.FLAG_YES);
         cmSp.setValidFlag(AppKeys.FLAG_YES);
         // 默认的协销经理 1304 王小萌
-        if ("0".equals(duty)) {cmSp.setMainServiceProviderID(1304);}
+        if ("0".equals(duty)) {
+            cmSp.setMainServiceProviderID(1304);
+        }
         cmSpService.save(cmSp);
         try {
             cmUser.setPassword(MD5Utils.MD5(password));
@@ -414,4 +415,22 @@ public class SpController extends BaseController {
         return "redirect:" + Global.getAdminPath() + "/new/user/cmSp/cmSpList/?repage";
     }
 
+    @RequestMapping(value = "leader")
+    public String leader(NewCmSp newCmSp, Model model, RedirectAttributes redirectAttributes) {
+        newCmSp.setTeams(cmSpService.findTeam());
+        model.addAttribute("newCmSp", newCmSp);
+        return "modules/userNew/cmSpTeamList";
+    }
+
+    @RequestMapping(value = "leader/save")
+    public String leaderSave(NewCmSp newCmSp, Model model, RedirectAttributes redirectAttributes) {
+        if (null == newCmSp.getServiceProviderID()) {
+            model.addAttribute("message", "请选择管理人员!");
+            return "redirect:" + Global.getAdminPath() + "/new/user/cmSp/leader/?repage";
+        }
+        cmSpService.saveLeader(newCmSp.getServiceProviderID());
+        addMessage(redirectAttributes, "保存大总管成功");
+        return "redirect:" + Global.getAdminPath() + "/serviceteam/cmServiceteamRole/?repage";
+    }
+
 }

+ 46 - 2
src/main/java/com/caimei/modules/user/web/newUser/VisitRemarkController.java

@@ -5,6 +5,7 @@ import com.caimei.modules.oss.utils.OSSUtils;
 import com.caimei.modules.user.dao.VisitRemarkDao;
 import com.caimei.modules.user.entity.RemarksFileVo;
 import com.caimei.modules.user.entity.VisitRemarkVo;
+import com.caimei.modules.user.service.NewCmClubService;
 import com.caimei.modules.user.service.VisitRemarkService;
 import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.utils.StringUtils;
@@ -18,6 +19,9 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 
@@ -31,6 +35,9 @@ public class VisitRemarkController extends BaseController {
     @Autowired
     private VisitRemarkService visitRemarkService;
 
+    @Autowired
+    private NewCmClubService newCmClubService;
+
     @ModelAttribute
     public VisitRemarkVo get(@RequestParam(required = false) String id) {
         VisitRemarkVo entity = null;
@@ -71,10 +78,23 @@ public class VisitRemarkController extends BaseController {
         Page<VisitRemarkVo> page = visitRemarkService.findPage(new Page<VisitRemarkVo>(request, response, 20), visit);
         visit.setPage(page);
         List<VisitRemarkVo> remarksList = visitRemarkDao.findRemarksList(visit);
-        remarksList.forEach(remarks->{
+        remarksList.forEach(remarks -> {
+            if (StringUtils.isNotBlank(remarks.getConsult())) {
+                StringBuilder cons = new StringBuilder();
+                if (remarks.getConsult().contains(",")) {
+                    String[] split = remarks.getConsult().split(",");
+                    for (String string : split) {
+                        cons.append(visitRemarkDao.findClassName(string)).append(",");
+                    }
+                    cons = new StringBuilder(cons.substring(0, cons.length() - 1));
+                } else {
+                    cons = new StringBuilder(visitRemarkDao.findClassName(remarks.getConsult()));
+                }
+                remarks.setConsultType(cons.toString());
+            }
             List<String> imageList = visitRemarkDao.getRemarksImageList(remarks.getRemarksId());
             List<RemarksFileVo> fileList = visitRemarkDao.getRemarksFileList(remarks.getRemarksId());
-            fileList.forEach(f->f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
+            fileList.forEach(f -> f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
             remarks.setImageList(imageList);
             remarks.setFileList(fileList);
         });
@@ -84,4 +104,28 @@ public class VisitRemarkController extends BaseController {
         return "modules/userNew/cmVisitRemarksList";
     }
 
+
+    /**
+     * 资料备注列表
+     */
+    @RequestMapping("unregist")
+    public String unregist(VisitRemarkVo visit, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if (org.apache.commons.lang.StringUtils.isNotBlank(visit.getStartAddTime())) {
+            String startAddTime = visit.getStartAddTime();
+            startAddTime += " 00:00:00";
+            visit.setStartAddTime(startAddTime);
+        }
+        if (org.apache.commons.lang.StringUtils.isNotBlank(visit.getEndAddTime())) {
+            String endAddTime = visit.getEndAddTime();
+            endAddTime += " 23:59:59";
+            visit.setEndAddTime(endAddTime);
+        }
+        Page<VisitRemarkVo> page = visitRemarkService.findUnregistPage(new Page<VisitRemarkVo>(request, response, 20), visit);
+        visit.setConsults(newCmClubService.findConsults());
+        visit.setTeams(newCmClubService.findTeams());
+        model.addAttribute("page", page);
+        model.addAttribute("visit", visit);
+        return "modules/userNew/cmUnRegistRemarksList";
+    }
+
 }

+ 2 - 2
src/main/resources/config/beta/caimei.properties

@@ -155,8 +155,8 @@ yeepay.divideCallback=http://admintest.365mdd.com/a/order/newShouldPay/divideCal
 yeepay.mails=jun.li@caimei365.com
 
 #微信公众号信息(测试公众号无数据此处使用正式公众号)
-appId=wxea43a0f9ebce9e66
-appSecret=1c3cd60908e72dd280840bee9e15f7f6
+appId=wx91c4152b60ca91a3
+appSecret=a563dd2c07c9c815a4e697c8b6cb73dc
 token=caimei
 encryptMessage=false
 encodingAesKey=wJWhhXuWAByeBPA8NicwFGraVhjKqWBUm94sOKN3s66

+ 2 - 2
src/main/resources/config/dev/caimei.properties

@@ -168,8 +168,8 @@ yeepay.divideCallback=http://localhost:8181/a/order/newShouldPay/divideCallback
 yeepay.mails=jun.li@caimei365.com
 
 #΢���������
-appId=wxea43a0f9ebce9e66
-appSecret=1c3cd60908e72dd280840bee9e15f7f6
+appId=wx91c4152b60ca91a3
+appSecret=a563dd2c07c9c815a4e697c8b6cb73dc
 token=caimei
 ##�Ƿ����Ϣ���м��ܣ��Ƿ����Ϣ���м��ܣ���Ӧ��΢��ƽ̨����Ϣ�ӽ��ܷ�ʽ��false֧������ģʽ������ģʽ��true֧�ְ�ȫģʽ������ģʽ
 encryptMessage=false

+ 2 - 2
src/main/resources/config/prod/caimei.properties

@@ -156,8 +156,8 @@ yeepay.divideCallback=http://admin.caimei365.com/a/order/newShouldPay/divideCall
 yeepay.mails=jun.li@caimei365.com,718478952@qq.com,472492267@qq.com
 
 #微信公众号功信息
-appId=wxea43a0f9ebce9e66
-appSecret=1c3cd60908e72dd280840bee9e15f7f6
+appId=wx91c4152b60ca91a3
+appSecret=a563dd2c07c9c815a4e697c8b6cb73dc
 token=caimei
 encryptMessage=false
 encodingAesKey=wJWhhXuWAByeBPA8NicwFGraVhjKqWBUm94sOKN3s66

+ 111 - 0
src/main/resources/mappings/modules/consult/type/CmConsulttypeMapper.xml

@@ -0,0 +1,111 @@
+<?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.caimei.modules.consult.dao.type.CmConsulttypeDao">
+    
+	<sql id="cmConsulttypeColumns">
+		a.id AS "id",
+		a.className AS "className",
+		a.status AS "status",
+		a.sortNumber AS "sortNumber",
+		a.createdTime AS "createdTime",
+		a.delflag AS "delflag"
+	</sql>
+	
+	<sql id="cmConsulttypeJoins">
+	</sql>
+    
+	<select id="get" resultType="CmConsulttype">
+		SELECT 
+			<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="CmConsulttype">
+		SELECT 
+			<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		<where>
+			<if test="status != null and status !=''">
+				and a.status = #{status}
+			</if>
+		    <if test="className != null and className != ''">
+				AND a.className LIKE concat('%',#{className},'%')
+			</if>
+		</where>
+		order by sortnumber ASC
+	</select>
+	
+	<select id="findAllList" resultType="CmConsulttype">
+		SELECT 
+			<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		<where>
+			
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+			</otherwise>
+		</choose>
+	</select>
+	<select id="sort" resultType="com.caimei.modules.consult.entity.type.CmConsulttype">
+		SELECT
+		<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		<where>
+			<if test="status != null and status !=''">
+				and a.status = #{status}
+			</if>
+			<if test="className != null and className != ''">
+				AND a.className LIKE concat('%',#{className},'%')
+			</if>
+		</where>
+		order by sortNumber asc
+	</select>
+	<insert id="insert" parameterType="CmConsulttype"  keyProperty="id" useGeneratedKeys="true">
+		INSERT INTO cm_consulttype(
+			className,
+			status,
+			sortNumber,
+			createdTime,
+			delflag
+		) VALUES (
+			#{className},
+			1,
+			#{sortNumber},
+			now(),
+			0
+		)
+	</insert>
+	
+	<update id="update">
+		UPDATE cm_consulttype SET
+		<if test="className != null and className != '' ">
+			className = #{className},
+		</if>
+		<if test="status != null and status != ''">
+			status = #{status},
+		</if>
+		<if test="sortNumber != null and sortNumber != '' ">
+			sortNumber = #{sortNumber},
+		</if>
+		<if test="createdTime != null">
+			createdTime = #{createdTime},
+		</if>
+		delflag = 0
+		WHERE id = #{id}
+	</update>
+	
+	<delete id="delete">
+		DELETE FROM cm_consulttype
+		WHERE id = #{id}
+	</delete>
+	
+</mapper>

+ 42 - 1
src/main/resources/mappings/modules/order/CmDiscernReceiptMapper.xml

@@ -958,5 +958,46 @@
         </where>
         ORDER BY d.receiptDate DESC;
     </select>
-
+    <select id="findType" resultType="java.lang.String">
+        SELECT payType FROM cm_discern_receipt WHERE id = #{id}
+    </select>
+    <select id="findUserMoney" resultType="java.lang.Double">
+        SELECT SUM(amount)
+        FROM cm_user_balance_record
+        WHERE orderId = #{orderID}
+          AND balanceType = 1
+          AND delflag = 0
+    </select>
+    <select id="findOnlineMoney" resultType="java.lang.Double">
+        SELECT SUM(amount)
+        FROM cm_user_balance_record
+        WHERE orderId = #{orderID}
+          AND balanceType = 10
+          AND delflag = 0
+    </select>
+    <select id="findRefundOnlineMoney" resultType="java.lang.Double">
+        SELECT SUM(amount)
+        FROM cm_user_balance_record
+        WHERE orderId = #{orderID}
+          AND balanceType = 13
+          AND delflag = 0
+    </select>
+    <select id="findRefundUserMoney" resultType="java.lang.Double">
+        SELECT SUM(amount)
+        FROM cm_user_balance_record
+        WHERE orderId = #{orderID}
+          AND balanceType = 3
+          AND delflag = 0
+    </select>
+    <select id="findOnlinePay" resultType="java.lang.Double">
+        SELECT SUM(cdr.receiptAmount) FROM  cm_discern_receipt cdr
+        LEFT JOIN cm_receipt_order_relation cror ON cror.receiptID = cdr.id
+        WHERE cdr.receiptType = 1
+          AND cror.relationType = 2
+          AND cdr.receiptType = 1
+          AND cror.delFlag = 0
+          AND cdr.delFlag = 0
+          AND cdr.payway = 1
+          AND cror.orderID = #{orderID}
+    </select>
 </mapper>

+ 39 - 1
src/main/resources/mappings/modules/order/CmReceiptOrderRelationMapper.xml

@@ -71,7 +71,10 @@
 			#{delFlag}
 		)
 	</insert>
-
+	<insert id="insertOnlineRefund">
+		insert into cm_online_refund(userId,mborderId,orderRequestNo,orderId,amount,refundType,refundTime,delFlag)
+		values (#{userId},#{mborderId},#{orderRequestNo},#{orderId},#{amount},#{refundType},now(),0)
+	</insert>
 	<update id="update">
 		UPDATE cm_receipt_order_relation SET
 			relationType = #{relationType},
@@ -202,4 +205,39 @@
 		LIMIT
 		  1
 	</select>
+	<select id="findOnlineMoneyPay" resultType="java.lang.Double">
+		SELECT SUM(amount)
+		FROM cm_user_balance_record cubr
+		WHERE cubr.orderId = #{orderId}
+		  AND cubr.type = 2
+		  AND cubr.balanceType = 10
+		  AND cubr.delFlag = 0
+	</select>
+	<select id="findMborderId" resultType="java.lang.String">
+		SELECT cror.mbOrderId FROM cm_receipt_order_relation cror
+		LEFT JOIN cm_user_balance_record cubr ON cror.orderID = cubr.orderId
+		LEFT JOIN cm_order co ON cror.orderID = co.orderID
+		WHERE cubr.balanceType IN (13, 16, 17)
+		  AND cror.splitStatus = 0
+		  AND cubr.type = 1
+		  AND cror.delFlag = 0
+		  AND cubr.delFlag = 0
+		  AND co.delFlag = 0
+		  AND co.refundType != 2
+          AND cubr.userId = #{userId}
+        order by cror.associateAmount desc
+	</select>
+	<select id="findUserId" resultType="java.lang.Integer">
+		select userId
+		from cm_order
+		where orderID = #{orderId}
+	</select>
+    <select id="findMoney" resultType="java.lang.Double">
+		SELECT cror.associateAmount-SUM(IFNULL(cor.amount,0))
+		FROM cm_receipt_order_relation cror
+		LEFT JOIN cm_online_refund cor ON cror.mbOrderId=cor.mbOrderId
+		WHERE cror.mbOrderId = #{mbOrderId}
+		  AND cor.delflag=0
+		  AND cror.delflag=0
+    </select>
 </mapper>

+ 9 - 0
src/main/resources/mappings/modules/order/CmReturnedPurchaseMapper.xml

@@ -29,6 +29,7 @@
 		a.applicationUserID AS "applicationUserID",
 		a.reviewUserID AS "reviewUserID",
 		a.refundBalanceFee AS "refundBalanceFee",
+		a.refundOnlineBalanceFee AS "refundOnlineBalanceFee",
 		a.refundOnlineFee AS "refundOnlineFee",
 		a.refundOfflineFee AS "refundOfflineFee",
 		a.bankAccountName AS "bankAccountName",
@@ -202,6 +203,7 @@
 			returnedPurchaseFee,
 			refundFee,
 			refundBalanceFee,
+			refundOnlineBalanceFee,
 			refundOnlineFee,
 			refundOfflineFee,
 			image1,
@@ -230,6 +232,7 @@
 			#{returnedPurchaseFee},
 			#{refundFee},
 			#{refundBalanceFee},
+			#{refundOnlineBalanceFee},
 			#{refundOnlineFee},
 			#{refundOfflineFee},
 			#{image1},
@@ -399,4 +402,10 @@
 		WHERE orderID=#{orderID} AND delFlag='0' AND status='2'
 	</select>
 
+	<select id="findPayType" resultType="java.lang.String">
+		SELECT payWay
+		FROM cm_discern_receipt cdr
+		LEFT JOIN cm_receipt_order_relation cror ON cror.`receiptID` = cdr.id
+		WHERE orderId = #{orderID}
+	</select>
 </mapper>

+ 137 - 0
src/main/resources/mappings/modules/serviceteam/CmServiceteamRoleMapper.xml

@@ -0,0 +1,137 @@
+<?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.caimei.modules.serviceteam.dao.CmServiceteamRoleDao">
+    
+	<sql id="cmServiceteamRoleColumns">
+		a.id AS "id",
+		a.leaderId AS "leaderId",
+		a.manager AS "manager",
+		a.createdTime AS "createdTime",
+		a.delflag AS "delflag"
+	</sql>
+	
+	<sql id="cmServiceteamRoleJoins">
+	</sql>
+    
+	<select id="get" resultType="CmServiceteamRole">
+		SELECT 
+			<include refid="cmServiceteamRoleColumns"/>
+		FROM cm_serviceteam_role a
+		<include refid="cmServiceteamRoleJoins"/>
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="CmServiceteamRole">
+		SELECT 
+			<include refid="cmServiceteamRoleColumns"/>
+		FROM cm_serviceteam_role a
+		<include refid="cmServiceteamRoleJoins"/>
+		<where>
+			
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+			</otherwise>
+		</choose>
+	</select>
+	
+	<select id="findAllList" resultType="CmServiceteamRole">
+		SELECT 
+			<include refid="cmServiceteamRoleColumns"/>
+		FROM cm_serviceteam_role a
+		<include refid="cmServiceteamRoleJoins"/>
+		<where>
+			
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+			</otherwise>
+		</choose>
+	</select>
+    <select id="findTeams" resultType="com.caimei.modules.serviceteam.entity.CmServiceteamRole">
+		SELECT DISTINCT
+		csr.leaderId,IF(csm.serviceproviderId IS NULL,2,1) as manager,csr.createdTime,s.name as leaderName,csr.id as teamId
+		FROM cm_serviceteam_role csr
+		LEFT JOIN serviceprovider s ON csr.leaderId = s.serviceProviderID
+		LEFT JOIN cm_serviceteam_manager csm ON csr.leaderId = csm.serviceproviderId
+		<if test="leaderName != null and leaderName != ''">
+		LEFT JOIN cm_serviceteam_group csg ON csg.teamId = csr.id
+		WHERE csg.serviceId IN
+		(SELECT s.serviceProviderID FROM serviceprovider s
+		WHERE s.name LIKE CONCAT('%',#{leaderName},'%'))
+		</if>
+		order by csr.createdTime desc
+	</select>
+	<select id="findGroups" resultType="com.caimei.modules.project.model.ServiceProviderModel">
+		SELECT csg.serviceId AS serviceProviderID,s.name
+		FROM cm_serviceTeam_group csg
+		LEFT JOIN serviceprovider s ON csg.serviceId=s.serviceProviderID
+		WHERE csg.teamId = #{id}
+	</select>
+	<select id="findAllGroups" resultType="com.caimei.modules.project.model.ServiceProviderModel">
+		select s.serviceProviderID,IFNULL(s.name,s.linkman) as name
+		from serviceprovider s
+		WHERE s.serviceProviderID NOT IN (SELECT serviceId FROM cm_serviceteam_group)
+	</select>
+	<select id="findLeader" resultType="com.caimei.modules.serviceteam.entity.CmServiceteamRole">
+		select csr.id as teamId,csr.leaderId,s.name as leaderName
+		from cm_serviceteam_role csr
+		left join serviceprovider s on csr.leaderId=s.serviceProviderID
+		where id=#{teamId}
+		and csr.delflag = 0
+	</select>
+	<insert id="insert" parameterType="CmServiceteamRole"  keyProperty="id" useGeneratedKeys="true">
+		INSERT INTO cm_serviceteam_role(
+			id,
+			leaderId,
+			manager,
+			createdTime,
+			delflag
+		) VALUES (
+			#{id},
+			#{leaderId},
+			2,
+			now(),
+			0
+		)
+	</insert>
+	<insert id="save" parameterType="CmServiceteamRole" keyProperty="id" useGeneratedKeys="true">
+		INSERT INTO cm_serviceteam_role(
+			leaderId,
+			createdTime,
+			delflag
+		) VALUES (
+					 #{leaderId},
+					 now(),
+					 0
+				 )
+	</insert>
+	<insert id="saveGroup">
+		insert into cm_serviceteam_group
+		(teamId,serviceId)
+		values (#{teamId},#{i})
+	</insert>
+	<update id="update">
+		UPDATE cm_serviceteam_role SET 	
+			leaderId = #{leaderId},
+			manager = #{manager},
+			createdTime = #{createdTime},
+			delflag = #{delflag}
+		WHERE id = #{id}
+	</update>
+	
+	<delete id="delete">
+		DELETE FROM cm_serviceteam_role
+		WHERE id = #{id}
+	</delete>
+	<delete id="deleteAll">
+		delete from cm_serviceteam_group
+		where teamId = #{teamId}
+	</delete>
+</mapper>

+ 18 - 3
src/main/resources/mappings/modules/user/CmSpMapper.xml

@@ -151,8 +151,11 @@
 		DELETE FROM serviceprovider
 		WHERE serviceProviderID = #{serviceProviderID}
 	</delete>
+    <delete id="deleteManager">
+		DELETE FROM cm_serviceteam_manager
+	</delete>
 
-	<select id="findSpManager" resultType="NewCmSp">
+    <select id="findSpManager" resultType="NewCmSp">
 		select
 		<include refid="newCmSpColumns"/>
 		FROM serviceprovider a
@@ -193,7 +196,14 @@
 		UPDATE serviceprovider SET
 		mainServiceProviderID = #{spManagerID}
 	</update>
-	
+	<update id="updateManager">
+		update cm_serviceteam_role set
+		manager = 2
+	</update>
+	<insert id="choseManager">
+		insert into cm_serviceteam_manager (serviceProviderId,delflag)
+		values (#{serviceProviderID},0)
+	</insert>
 	<select id="findByUserId" resultType="com.caimei.modules.user.entity.NewCmSp">
 		SELECT
 		<include refid="newCmSpColumns"/>
@@ -201,5 +211,10 @@
 		<include refid="newCmSpJoins"/>
 		WHERE a.userID = #{userId}
 	</select>
-
+    <select id="findTeam" resultType="com.caimei.modules.user.entity.CmSaleMan">
+		select leaderId,s.name as leaderName
+		from cm_serviceteam_role csr
+		left join serviceprovider s on csr.leaderId = s.serviceProviderID
+		where csr.delflag = 0
+	</select>
 </mapper>

+ 16 - 2
src/main/resources/mappings/modules/user/CmUserMapper.xml

@@ -41,7 +41,8 @@
 		a.scanFlag AS "scanFlag",
 		a.userBeans AS "userBeans",
 		a.guideFlag AS "guideFlag",
-		a.userPermission AS "userPermission"
+		a.userPermission AS "userPermission",
+		a.onlineMoney AS "onlineMoney"
 	</sql>
 
     <select id="get" resultType="CmUser">
@@ -352,6 +353,9 @@
 		<if test="userMoney != null and userMoney != ''">
 			userMoney = #{userMoney},
 			</if>
+		<if test="onlineMoney != null">
+			onlineMoney = #{onlineMoney},
+		</if>
 		<if test="logoffTime != null and logoffTime != ''">
 			logoffTime = #{logoffTime},
 			</if>
@@ -537,7 +541,8 @@
 	<update id="updateMoney">
 		UPDATE user SET
 			userMoney =  #{userMoney},
-		    ableUserMoney = #{ableUserMoney}
+		    ableUserMoney = #{ableUserMoney},
+			onlineMoney = #{onlineMoney}
 		WHERE userID = #{userID}
 	</update>
 
@@ -606,4 +611,13 @@
 		from user
 		where userID = #{userId}
 	</select>
+	<select id="findOnlineMoney" resultType="java.lang.Double">
+		select onlineMoney from user where userID = #{userID}
+	</select>
+	<select id="findUserMoney" resultType="java.lang.Double">
+		select userMoney from user where userID = #{userID}
+	</select>
+	<select id="findAbleUserMoney" resultType="java.lang.Double">
+		select ableUserMoney from user where userID = #{userID}
+	</select>
 </mapper>

+ 57 - 1
src/main/resources/mappings/modules/user/NewCmClubMapper.xml

@@ -398,9 +398,13 @@
 		select serviceProviderID from serviceprovider where serviceProviderID = #{spID} and status = 90
 	</select>
     <select id="findRemarksList" resultType="com.caimei.modules.user.entity.CmClubRemarks">
-		select id as remarksId, remarks,s.linkMan as spName, ccr.addTime,ccr.questionMan
+		select DISTINCT
+		ccr.id as remarksId, remarks,s.linkMan as spName, ccr.addTime,ccr.questionMan,ccr.consultType as consult,
+		(SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID = csr.leaderId) AS leaderName
 		from cm_club_remarks ccr
 		left join serviceprovider s on ccr.serviceProviderId = s.serviceProviderID
+		LEFT JOIN cm_serviceteam_group csg ON ccr.serviceProviderId=csg.serviceId
+		LEFT JOIN cm_serviceteam_role csr ON csr.id = csg.teamId
 		where clubId = #{clubId}
 		order by addTime desc
 	</select>
@@ -441,4 +445,56 @@
 		  and type = 2
 		  and num = 500
 	</select>
+	<select id="findRegistList" resultType="com.caimei.modules.user.entity.CmClubRemarks">
+		SELECT DISTINCT
+		       ccr.id AS remarksId, ccr.remarks,s.linkman AS spName, ccr.addTime,ccr.questionMan,
+		       csr.leaderId AS leaderId,ifnull(ccr.consultType,'') as consult, c.Name as clubName,
+			   (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID= csr.leaderId) AS leaderName
+		FROM cm_club_remarks ccr
+				 LEFT JOIN serviceprovider s ON ccr.serviceProviderId = s.serviceProviderID
+				 LEFT JOIN club c ON c.clubId=ccr.clubId
+				 LEFT JOIN cm_serviceTeam_group csg ON ccr.serviceProviderId = csg.serviceId
+				 LEFT JOIN cm_serviceTeam_role csr ON csr.id = csg.teamId
+		<where>
+			<if test="remarks != null and remarks !=''">
+				AND ccr.remarks LIKE concat('%',#{remarks},'%')
+			</if>
+			<if test="clubName !=null and clubName !=''">
+				AND c.Name like concat('%',#{clubName},'%')
+			</if>
+			<if test="leaderId != null">
+				and csr.leaderId = #{leaderId}
+			</if>
+			<if test="serviceProviderId != null">
+				and csg.serviceId = #{serviceProviderId}
+			</if>
+			<if test="startAddTime != null and startAddTime != ''">
+				and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+			</if>
+			<if test="endAddTime != null and endAddTime != ''">
+				and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+			</if>
+		</where>
+		ORDER BY ADDTIME DESC
+	</select>
+	<select id="findConsults" resultType="com.caimei.modules.consult.entity.type.CmConsulttype">
+		select id,className,createdTime from cm_consulttype
+		where delflag = 0
+	</select>
+	<select id="findTeams" resultType="com.caimei.modules.user.entity.CmSaleMan">
+		select csr.leaderId,s.name as leaderName
+		from cm_serviceteam_role csr
+		left join serviceprovider s on s.serviceProviderID = csr.leaderId
+		where csr.delflag = 0
+	</select>
+	<select id="findGroup" resultType="com.caimei.modules.project.model.ServiceProviderModel">
+		SELECT serviceId as serviceProviderID,s.name FROM
+		cm_serviceteam_group csg
+		LEFT JOIN cm_serviceTeam_role csr ON csr.id=csg.teamid
+		LEFT JOIN serviceprovider s ON s.serviceProviderID=csg.serviceId
+		WHERE csr.leaderId = #{leaderId}
+	</select>
+	<select id="findClassName" resultType="java.lang.String">
+		select className from cm_consulttype where id = #{string}
+	</select>
 </mapper>

+ 37 - 1
src/main/resources/mappings/modules/user/VisitRemarkMapper.xml

@@ -42,9 +42,12 @@
         ORDER BY cvr.addTime DESC
     </select>
     <select id="findRemarksList" resultType="com.caimei.modules.user.entity.VisitRemarkVo">
-        select id as remarksId, remarks,s.linkMan as serviceName, cvr.addTime,cvr.questionMan
+        select cvr.id as remarksId, remarks,s.linkMan as serviceName, cvr.addTime,cvr.questionMan,ifnull(cvr.consultType,'')as consult,
+        (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID = csr.leaderId) AS leaderName
         from cm_visitor_remarks cvr
         left join serviceprovider s on cvr.serviceProviderId = s.serviceProviderID
+        LEFT JOIN cm_serviceteam_group csg ON cvr.serviceProviderId=csg.serviceId
+        LEFT JOIN cm_serviceteam_role csr ON csr.id=csg.teamId
         where questionManId = #{questionManId}
         and remarks is not null
         order by addTime desc
@@ -61,4 +64,37 @@
         where remarksId = #{remarksId}
           and fileType = 2
     </select>
+    <select id="findRegistList" resultType="com.caimei.modules.user.entity.VisitRemarkVo">
+        SELECT DISTINCT
+        ccr.id AS remarksId, ccr.remarks,s.name AS spName, ccr.addTime,ccr.questionMan,
+        csr.leaderId AS leaderId,ifnull(ccr.consultType,'') as consult,
+        (SELECT linkMan FROM serviceprovider s WHERE s.serviceProviderID = ccr.serviceProviderId) AS serviceName,
+        (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID = csr.leaderId) AS leaderName
+        FROM cm_visitor_remarks ccr
+        LEFT JOIN serviceprovider s ON ccr.serviceProviderId = s.serviceProviderID
+        LEFT JOIN cm_serviceTeam_group csg ON ccr.serviceProviderId = csg.serviceId
+        LEFT JOIN cm_serviceTeam_role csr ON csr.id = csg.teamId
+        <where>
+            <if test="remarks != null and remarks !=''">
+                AND ccr.remarks LIKE concat('%',#{remarks},'%')
+            </if>
+            <if test="leaderId != null">
+                and csr.leaderId = #{leaderId}
+            </if>
+            <if test="serviceProviderId != null">
+                and csg.serviceId = #{serviceProviderId}
+            </if>
+            <if test="startAddTime != '' and startAddTime != null">
+                and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+            </if>
+            <if test="endAddTime != '' and endAddTime != null">
+                and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+            </if>
+                and ccr.remarks IS NOT NULL
+        </where>
+        ORDER BY ADDTIME DESC
+    </select>
+    <select id="findClassName" resultType="java.lang.String">
+        select className from cm_consulttype where id = #{string}
+    </select>
 </mapper>

+ 73 - 0
src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeForm.jsp

@@ -0,0 +1,73 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>咨询类别管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            //$("#name").focus();
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    var sortNumber = $("#sortNumber").val();
+                    var jy = /^[1-9]\d*$/;
+                    console.log(sortNumber);
+                    var className = $("#className").val();
+                    if(null==className||""==className){
+                        alertx("咨询类别不为空");
+                        return false;
+                    }
+                    if (!jy.test(sortNumber)) {
+                        alertx("排序值不能为空且只能为正整数 !");
+                        return false;
+                    }
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox") || element.is(":radio") || element.parent().is(".input-append")) {
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+        });
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/new/user/agency/regist">已注册用户咨询记录</a></li>
+    <li><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+    <li><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+    <li class="active"><a
+            href="${ctx}/consult/type/cmConsulttype/form?id=${cmConsulttype.id}">咨询类别${not empty cmConsulttype.id?'编辑':'添加'}</a>
+    </li>
+</ul>
+<br/>
+<form:form id="inputForm" modelAttribute="cmConsulttype" action="${ctx}/consult/type/cmConsulttype/save" method="post"
+           class="form-horizontal">
+    <form:hidden path="id"/>
+    <sys:message content="${message}"/>
+    <div class="control-group">
+        <label class="control-label">咨询类别名称:</label>
+        <div class="controls">
+            <form:input path="className" htmlEscape="false" maxlength="30" class="input-xlarge "/>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">咨询类别排序 :</label>
+        <div class="controls">
+            <form:input path="sortNumber" htmlEscape="false" class="input-xlarge "/>
+        </div>
+    </div>
+    <div class="form-actions">
+        <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp
+        <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+    </div>
+</form:form>
+</body>
+</html>

+ 137 - 0
src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeList.jsp

@@ -0,0 +1,137 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>咨询类别管理</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        .table th {
+            text-align: center;
+        }
+
+        .table td {
+            text-align: center;
+        }
+    </style>
+    <script type="text/javascript">
+
+        $(document).ready(function () {
+        });
+
+        function page(n, s) {
+            $("#pageNo").val(n);
+            $("#pageSize").val(s);
+            $("#searchForm").submit();
+            return false;
+        }
+
+        //验证输入的排序值是否合法
+        var cmConsulttypeId_sortNumber = '';
+        function confirmSortIndex(index) {
+            var $sortIndex = $("#sortNumber"+index).val();
+            var $bigTypeId = $("#cmConsulttypeId"+index).val();
+            if (!isNaN($sortIndex)) {
+                if($sortIndex % 1 === 0 && $sortIndex >0){
+                    cmConsulttypeId_sortNumber += $bigTypeId+"_"+$sortIndex+",";
+                }else{
+                    alertx("排序只能输入大于0的整数");
+                    $.get("${ctx}/consult/type/cmConsulttype/getType",{'id':$bigTypeId}, function (data) {
+                        $("#sortIndex" + index).val(data.data.sortIndex);
+                    })
+                }
+            }else{
+                alertx("排序只能输入大于0的整数");
+                $.get("${ctx}/consult/type/cmConsulttype/getType",{'id':$bigTypeId},function (data) {
+                    $("#sortIndex" + index).val(data.data.sortIndex);
+                })
+            }
+        }
+
+        //批量保存排序
+        function updateSortIndex() {
+            $.post("${ctx}/consult/type/cmConsulttype/updateSort",{'cmConsulttypeIdSortNumber':cmConsulttypeId_sortNumber},function(result){
+                $.jBox.tip(result.data, 'info');
+                setTimeout(function () {
+                    $("#searchForm").submit();
+                }, 500);
+            })
+        }
+
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/new/user/agency/regist">已注册用户咨询记录</a></li>
+    <li><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+    <li class="active"><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+</ul>
+<form:form id="searchForm" modelAttribute="cmConsulttype" action="${ctx}/consult/type/cmConsulttype/" method="post"
+           class="breadcrumb form-search">
+    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+    <label>类别名称:</label>
+    <form:input path="className" class="input-medium" maxlength="20"/>
+    <label>状态:</label>
+    <form:select path="status" class="input-xlarge" cssStyle="width: 150px">
+        <form:option value="" label="全部"></form:option>
+        <form:option value="1" label="启用"></form:option>
+        <form:option value="2" label="停用"></form:option>
+    </form:select>
+
+    &nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>&nbsp;&nbsp;
+
+    <a href="${ctx}/consult/type/cmConsulttype/form"  class="btn btn-primary" style="width: 70px">添加类别</a>
+
+    <input class="btn btn-primary" type="button" value="一键排序" onclick="updateSortIndex()" style="margin-left: 15px"/>
+
+    <div class="clearfix"></div>
+    </div>
+</form:form>
+<sys:message content="${message}"/>
+<table id="contentTable" class="table table-striped table-bordered table-condensed">
+    <thead>
+    <tr>
+        <th>序号</th>
+        <th>咨询类别名称</th>
+        <th>状态</th>
+        <th>排序</th>
+        <th>创建时间</th>
+        <th>操作</th>
+    </tr>
+    </thead>
+    <tbody id="sortbody">
+    <c:forEach items="${page.list}" var="cmConsulttype" varStatus="ct">
+        <tr>
+            <td>
+                <input type="text" id="cmConsulttypeId${ct.index}"
+                       value="${cmConsulttype.id}"
+                       style="width: 50px;display: none">
+                    ${ct.index+1}
+            </td>
+            <td>${cmConsulttype.className}</td>
+            <td><c:if test="${cmConsulttype.status eq 1}">
+                <div style="color: green">已启用<a style="text-decoration: none" href="${ctx}/consult/type/cmConsulttype/use?id=${cmConsulttype.id}&status=2">&nbsp&nbsp&nbsp 停用</a></div>
+            </c:if>
+                <c:if test="${cmConsulttype.status eq 2}">
+                    <div style="color: red">已停用<a style="text-decoration: none" href="${ctx}/consult/type/cmConsulttype/use?id=${cmConsulttype.id}&status=1">&nbsp&nbsp&nbsp 启用</a></div>
+                </c:if>
+            </td>
+            <td>
+                <input type="text" name="sortNumber" id="sortNumber${ct.index}"
+                       onchange="confirmSortIndex(${ct.index})"
+                       value="${cmConsulttype.sortNumber}"
+                       style="width: 50px">
+            </td>
+            <td><fmt:formatDate value="${cmConsulttype.createdTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+            <td>
+                <a href="${ctx}/consult/type/cmConsulttype/form?id=${cmConsulttype.id}">编辑</a>
+                <a href="${ctx}/consult/type/cmConsulttype/delete?id=${cmConsulttype.id}"
+                   onclick="return confirmx('确认要删除该咨询类别吗?', this.href)">删除</a>
+            </td>
+        </tr>
+    </c:forEach>
+    </tbody>
+</table>
+<div class="pagination">${page}</div>
+</body>
+</html>

+ 1 - 0
src/main/webapp/WEB-INF/views/modules/order/cmDiscernReceiptForm.jsp

@@ -359,6 +359,7 @@
                                     <span><a
                                             href="${ctx}/user/cmUserBalanceRecord/userBalanceRecord?userId=${orderInfo.userID}"
                                             style="text-decoration: underline">${receiptRecord.receiptAmount}</a></span>
+                                    (其中线下余额¥${receiptRecord.userMoney},线上余额¥${receiptRecord.onlineMoney})
                                 </c:if>
                                 <span>
     <%--                        一款多单的时候直接显示再订单上即可,无需收款记录显示--%>

+ 5 - 1
src/main/webapp/WEB-INF/views/modules/order/cmReturnedPurchaseList.jsp

@@ -174,9 +174,13 @@
 					</c:if>
 					<c:if test="${cmReturnedPurchase.returnedWay eq 1}">
 						<c:if test="${not empty cmReturnedPurchase.refundBalanceFee && cmReturnedPurchase.refundBalanceFee ne 0 }">
-							<div>余额账户:<fmt:formatNumber type="number" pattern="#,##0.00"
+							<div>线下余额账户:<fmt:formatNumber type="number" pattern="#,##0.00"
 												   value="${cmReturnedPurchase.refundBalanceFee}" />元<br></div>
 						</c:if>
+						<c:if test="${not empty cmReturnedPurchase.refundOnlineBalanceFee && cmReturnedPurchase.refundOnlineBalanceFee ne 0 }">
+							<div>线上余额账户:<fmt:formatNumber type="number" pattern="#,##0.00"
+														  value="${cmReturnedPurchase.refundOnlineBalanceFee}" />元<br></div>
+						</c:if>
 						<c:if test="${not empty cmReturnedPurchase.refundOnlineFee && cmReturnedPurchase.refundOnlineFee ne 0 }">
 							<div>线上退回:<fmt:formatNumber type="number" pattern="#,##0.00"
 												   value="${cmReturnedPurchase.refundOnlineFee}" />元<br></div>

+ 6 - 4
src/main/webapp/WEB-INF/views/modules/order/orderDetail.jsp

@@ -544,14 +544,16 @@
                 <c:if test="${order.balancePayFee gt 0}">
                     <a href="${ctx}/user/cmUserBalanceRecord/userBalanceRecord?userId=${order.userID}"
                        style="color: red;text-decoration: underline">
-                        (账户余额抵扣: <fmt:formatNumber value="${order.balancePayFee}" type="currency"/>)
                     </a>
+                    (账户余额抵扣: <fmt:formatNumber value="${order.balancePayFee}" type="currency"/>,
+                    其中线下余额<fmt:formatNumber value="${order.userMoney}" type="currency"/>,
+                    线上余额<fmt:formatNumber value="${order.onlineMoney}" type="currency"/>)
                 </c:if>
                 <c:if test="${order.balancePayFee le 0}">
-                    (账户余额抵扣: <fmt:formatNumber value="${order.balancePayFee}" type="currency"/>)
+                     <a href="${ctx}/user/cmUserBalanceRecord/userBalanceRecord?userId=${order.userID}"
+                        style="color: red;text-decoration: underline">
+                    </a>
                 </c:if>
-
-
             </span>
         </td>
         <td>

+ 156 - 0
src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleForm.jsp

@@ -0,0 +1,156 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>协销小组管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            //$("#name").focus();
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    var cc=$("#findgroup").val();
+                    // console.log(cc);
+                    if (null == cc || cc < 1) {
+                        alertx("请选择组员!");
+                        return false;
+                    }
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox") || element.is(":radio") || element.parent().is(".input-append")) {
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+
+
+        function getMember() {
+            var m = document.getElementsByName("ids");
+            var opts = "";
+            var count = 0;
+            for (let i = 0; i < m.length; i++) {
+                if (count >= 10) {
+                    var n = document.getElementsByName("ids");
+                    for (let i = 0; i < n.length; i++) {
+                        if (!n[i].checked) {
+                            var p = n[i].className;
+                            $('.' + p).hide();
+                        }
+                    }
+                } else {
+                    var n = document.getElementsByName("ids");
+                    for (let i = 0; i < n.length; i++) {
+                        if (!n[i].checked) {
+                            var p = n[i].className;
+                            $('.' + p).show();
+                        }
+                    }
+                }
+                if (m[i].checked && count < 10) {
+                    opts += "<option value='" + m[i].value + "'>" + m[i].id + "</option>";
+                    count++;
+                }
+            }
+            if (count >= 10) {
+                alert("最多选择十个组员!");
+            }
+            $("#findgroup").html('').append(opts);
+        }
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
+    <shiro:hasPermission name="user:newCmClub:edit">
+        <li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li>
+    </shiro:hasPermission>
+    <li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+    <li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
+    <li class="active"><a
+            href="${ctx}/serviceteam/cmServiceteamRole/form?teamId=${cmServiceteamRole.teamId}">协销小组${not empty cmServiceteamRole.teamId?'编辑':'添加'}</a>
+    </li>
+</ul>
+<br/>
+<form:form id="inputForm" modelAttribute="cmServiceteamRole" action="${ctx}/serviceteam/cmServiceteamRole/save"
+           method="post" class="form-horizontal">
+    <form:hidden path="id"/>
+    <form:hidden path="teamId"/>
+    <sys:message content="${message}"/>
+    <div class="control-group">
+        <div class="controls">
+            <c:if test="${not empty cmServiceteamRole.teamId}">
+                <span style="color:red;">本页面包含本组组员和所有未分组协销账号,上限选择十个,如已选十个则不可选更多组员,取消已选项可复选至十个</span>
+                <br/>
+                <br/>
+            </c:if>
+            <c:if test="${empty cmServiceteamRole.teamId}">
+                <span style="color:red;">本页面包含所有未分组协销账号,上限选择十个,如已选十个则不可选更多组员,取消已选项可复选至十个</span>
+                <br/>
+                <br/>
+            </c:if>
+        </div>
+        <label class="control-label">组员:</label>
+        <div class="controls">
+            <c:forEach items="${cmServiceteamRole.group}" var="group" varStatus="status">
+                <c:if test="${not empty group.teamFlag}">
+                    <input class="N${group.serviceProviderID}" type="checkbox" name="ids" id="${group.name}"
+                           value="${group.serviceProviderID}" style="zoom: 150%" checked
+                           onclick="getMember()">
+                    <span style="font-size: 15px;" id="${group.serviceProviderID}">${group.name}&nbsp;&nbsp;</span>
+                </c:if>
+                <c:if test="${empty group.teamFlag}">
+                    <c:if test="${empty cmServiceteamRole.fullFlag}">
+                        <input class="N${group.serviceProviderID}" type="checkbox" name="ids" id="${group.name}"
+                               value="${group.serviceProviderID}" style="zoom: 150%"
+                               onclick="getMember()">
+                        <span style="font-size: 15px;" id="${group.serviceProviderID}">${group.name}&nbsp;&nbsp;</span>
+                    </c:if>
+                    <c:if test="${not empty cmServiceteamRole.fullFlag}">
+                        <input class="N${group.serviceProviderID}" type="checkbox" name="ids" id="${group.name}"
+                               value="${group.serviceProviderID}" style="zoom: 150%;display: none"
+                               onclick="getMember()">
+                        <span style="font-size: 15px;" id="${group.serviceProviderID}">${group.name}&nbsp;&nbsp;</span>
+                    </c:if>
+                </c:if>
+                <c:if test="${status.count%10 eq 0}">
+                    <hr/>
+                </c:if>
+            </c:forEach>
+        </div>
+        <br/>
+        <br/>
+        <label class="control-label">小组管理员:</label>
+        <div class="controls">
+            <c:if test="${not empty cmServiceteamRole.teamId}">
+                <form:select path="leaderId" class="input-medium" id="findgroup">
+                    <form:option value="" label="请在组员中选择"/>
+                    <form:option value="${cmServiceteamRole.leaderId}" label="${cmServiceteamRole.leaderName}"/>
+                    <c:forEach items="${cmServiceteamRole.group}" var="group">
+                        <c:if test="${group.serviceProviderID ne cmServiceteamRole.leaderId && not empty group.teamFlag}">
+                            <form:option value="${group.serviceProviderID}" label="${group.name}"/>
+                        </c:if>
+                    </c:forEach>
+                </form:select>
+            </c:if>
+            <c:if test="${empty cmServiceteamRole.teamId}">
+                <form:select path="leaderId" class="input-medium" id="findgroup">
+                    <form:option value="" label="请在组员中选择"/>
+                </form:select>
+            </c:if>
+        </div>
+    </div>
+
+    <div class="form-actions">
+        <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp
+        <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+    </div>
+</form:form>
+</body>
+</html>

+ 96 - 0
src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleList.jsp

@@ -0,0 +1,96 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+	<title>协销小组管理</title>
+	<meta name="decorator" content="default"/>
+	<style type="text/css">
+		.table th{text-align: center;}
+		.table td{text-align: center;}
+	</style>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			
+		});
+		function page(n,s){
+			$("#pageNo").val(n);
+			$("#pageSize").val(s);
+			$("#searchForm").submit();
+        	return false;
+        }
+	</script>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
+		<shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>
+		<li class="active"><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+		<li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
+	</ul>
+	<form:form id="searchForm" modelAttribute="cmServiceteamRole" action="${ctx}/serviceteam/cmServiceteamRole/" method="post" class="breadcrumb form-search">
+		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+	<div class="flex-wrap">
+		<div class="item">
+			<label>协销姓名:</label>
+			<form:input path="leaderName" class="input-medium" maxlength="50"/>
+		</div>
+		<div class="item">
+			&nbsp;&nbsp;&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+		</div>
+		<div class="item">
+			<a class="btn btn-primary" href="${ctx}/serviceteam/cmServiceteamRole/form" style="margin-left: 15px">添加小组</a>
+		</div>
+		<div class="clearfix"></div>
+	</div>
+	</form:form>
+	<sys:message content="${message}"/>
+	<table id="contentTable" class="table table-striped table-bordered table-condensed">
+		<thead>
+			<tr>
+				<th>小组</th>
+				<th>组员</th>
+				<th>组员数量</th>
+				<th>小组管理员</th>
+				<th>创建时间</th>
+				<th>操作</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${page.list}" var="cmServiceteamRole" varStatus="status">
+			<tr>
+				<td>小组${status.index+1}</td>
+				<td>
+				<c:forEach items="${cmServiceteamRole.group}" var="group" varStatus="g">
+					<c:if test="${!g.last}">
+						${group.name},
+					</c:if>
+					<c:if test="${g.last}">
+					${group.name}
+					</c:if>
+				</c:forEach>
+				</td>
+				<td>
+					<c:forEach items="${cmServiceteamRole.group}" var="group" varStatus="g">
+						<c:if test="${g.last}">
+							${g.count}
+						</c:if>
+					</c:forEach>
+				</td>
+				<td>
+						${cmServiceteamRole.leaderName}<c:if test="${cmServiceteamRole.manager eq 1}"><span style="color: red">(总管理员)</span></c:if>
+				</td>
+				<td>
+					<fmt:formatDate value="${cmServiceteamRole.createdTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+    				<a href="${ctx}/serviceteam/cmServiceteamRole/form?teamId=${cmServiceteamRole.teamId}">编辑</a>
+					<a href="${ctx}/serviceteam/cmServiceteamRole/delete?teamId=${cmServiceteamRole.teamId}" onclick="return confirmx('确认要删除该协销小组吗?删除后,该小组的全部组员 需要重新分配新小组', this.href)">删除</a>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	<div class="pagination">${page}</div>
+</body>
+</html>

+ 9 - 1
src/main/webapp/WEB-INF/views/modules/user/cmRechargeForm.jsp

@@ -40,6 +40,10 @@
                 $('#isnumber').show();
                 return;
             }
+			if ("" == remarks || null == remarks) {
+				$('#note').show();
+				return;
+			}
             var rechargeInfo = remarks + "," + amount;
             return rechargeInfo;
         }
@@ -76,8 +80,12 @@
 	<div id="isnull" style="display: none">
 		<font color='red' style=" margin-left: 74px">充值金额不能为空</font>
 	</div>
+	<br/>
+	<div id="note" style="display: none">
+		<font color='red' style=" margin-left: 74px">充值备注不能为空</font>
+	</div>
 	<%--<input id="" name="" title="请输入此次充值的金额" value="">--%>
-	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;备注:&nbsp;<textarea id='remarks' name='remarks' rows='3' cols='4' style="width: 205px" maxlength="200"></textarea>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color='red'>*</font>备注:&nbsp;<textarea id='remarks' name='remarks' rows='3' cols='4' style="width: 205px" maxlength="200"></textarea>
 </form:form>
 </body>
 </html>

+ 24 - 16
src/main/webapp/WEB-INF/views/modules/user/cmUserBalanceList.jsp

@@ -97,6 +97,8 @@
 				<th>序号</th>
 				<th>机构名称</th>
 				<th>总余额</th>
+				<th>线下余额</th>
+				<th>线上余额</th>
 				<th>操作</th>
 			</tr>
 		</thead>
@@ -115,23 +117,29 @@
 				<td>
 					<fmt:formatNumber value="${empty cmUser.ableUserMoney ? 0:cmUser.ableUserMoney}" type="currency"/>
 				</td>
-					<td>
-						<a href="${ctx}/user/cmUserBalanceRecord/userBalanceRecord?userId=${cmUser.userID}" >查看详情</a>
-						<shiro:hasPermission name="balance:cmUserBalanceRecord:recharge">
-							<a href="javascript:void(0);" onclick="recharge('${cmUser.userID}')">充值</a>
-							<%--<font title="请使用充值订单的方式进行充值!">充值</font>--%>
-						</shiro:hasPermission>
-						<shiro:hasPermission name="balance:cmUserBalanceWithdrawals:withdrawals">
-							<c:if test="${cmUser.ableUserMoney > 0}">
-								<c:if test="${cmUser.pending}">
-									<font color="#666666">申请提现</font>
-								</c:if>
-								<c:if test="${!cmUser.pending}">
-									<a href="${ctx}/user/cmUserBalanceRecord/userWithdrawals?userID=${cmUser.userID}" >申请提现</a>
-								</c:if>
+				<td>
+					<fmt:formatNumber value="${empty cmUser.userMoney ? 0:cmUser.userMoney}" type="currency"/>
+				</td>
+				<td>
+					<fmt:formatNumber value="${empty cmUser.onlineMoney ? 0:cmUser.onlineMoney}" type="currency"/>
+				</td>
+				<td>
+					<a href="${ctx}/user/cmUserBalanceRecord/userBalanceRecord?userId=${cmUser.userID}" >查看详情</a>
+					<shiro:hasPermission name="balance:cmUserBalanceRecord:recharge">
+						<a href="javascript:void(0);" onclick="recharge('${cmUser.userID}')">充值</a>
+						<%--<font title="请使用充值订单的方式进行充值!">充值</font>--%>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="balance:cmUserBalanceWithdrawals:withdrawals">
+						<c:if test="${cmUser.ableUserMoney > 0}">
+							<c:if test="${cmUser.pending}">
+								<font color="#666666">申请提现</font>
+							</c:if>
+							<c:if test="${!cmUser.pending}">
+								<a href="${ctx}/user/cmUserBalanceRecord/userWithdrawals?userID=${cmUser.userID}" >申请提现</a>
 							</c:if>
-						</shiro:hasPermission>
-					</td>
+						</c:if>
+					</shiro:hasPermission>
+				</td>
 			</tr>
 		</c:forEach>
 		</tbody>

+ 46 - 0
src/main/webapp/WEB-INF/views/modules/user/cmUserBalanceRecordList.jsp

@@ -102,6 +102,12 @@
 				<form:option value="7">余额订单充值</form:option>
 				<form:option value="8">订金订单退款</form:option>
 				<form:option value="9">余额订单退款</form:option>
+				<form:option value="10">线上余额抵扣</form:option>
+				<form:option value="13">申请退款到线上余额</form:option>
+				<form:option value="16">线上订金订单充值</form:option>
+				<form:option value="17">线上余额订单充值</form:option>
+				<form:option value="18">线上订金订单退款</form:option>
+				<form:option value="19">线上余额订单退款</form:option>
 			</form:select>
 				&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
 			<div class="clearfix"></div>
@@ -114,6 +120,8 @@
 					<th>记录时间</th>
 					<th>收支类型</th>
 					<th>金额</th>
+					<th>线下余额</th>
+					<th>线上余额</th>
 					<th>余额类型</th>
 					<th>备注</th>
 				</tr>
@@ -136,6 +144,26 @@
 						<td>
 							<fmt:formatNumber value="${cmUserBalanceRecord.amount}" type="currency"/>
 						</td>
+						<td>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 1 || cmUserBalanceRecord.balanceType eq 2 || cmUserBalanceRecord.balanceType eq 3 || cmUserBalanceRecord.balanceType eq 4|| cmUserBalanceRecord.balanceType eq 5|| cmUserBalanceRecord.balanceType eq 6|| cmUserBalanceRecord.balanceType eq 7|| cmUserBalanceRecord.balanceType eq 8|| cmUserBalanceRecord.balanceType eq 9}">
+								<fmt:formatNumber value="${empty cmUserBalanceRecord.amount ? 0:cmUserBalanceRecord.amount}"
+												  type="currency"/>
+							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType ne 1 && cmUserBalanceRecord.balanceType ne 2 && cmUserBalanceRecord.balanceType ne 3 && cmUserBalanceRecord.balanceType ne 4&& cmUserBalanceRecord.balanceType ne 5&& cmUserBalanceRecord.balanceType ne 6&& cmUserBalanceRecord.balanceType ne 7&& cmUserBalanceRecord.balanceType ne 8&& cmUserBalanceRecord.balanceType ne 9}">
+								<fmt:formatNumber value="0"
+												  type="currency"/>
+							</c:if>
+						</td>
+						<td>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 10 || cmUserBalanceRecord.balanceType eq 13 || cmUserBalanceRecord.balanceType eq 16 || cmUserBalanceRecord.balanceType eq 17 || cmUserBalanceRecord.balanceType eq 18 || cmUserBalanceRecord.balanceType eq 19}">
+								<fmt:formatNumber value="${empty cmUserBalanceRecord.amount ? 0:cmUserBalanceRecord.amount}"
+												  type="currency"/>
+							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType ne 10 && cmUserBalanceRecord.balanceType ne 13 && cmUserBalanceRecord.balanceType ne 16 && cmUserBalanceRecord.balanceType ne 17 && cmUserBalanceRecord.balanceType ne 18 && cmUserBalanceRecord.balanceType ne 19}">
+								<fmt:formatNumber value="0"
+												  type="currency"/>
+							</c:if>
+						</td>
 						<td>
 							<c:if test="${cmUserBalanceRecord.balanceType eq 1 }">
 								<a href="${ctx}/order/detail?id=${cmUserBalanceRecord.orderId}">余额抵扣</a>
@@ -172,6 +200,24 @@
 									<font color="red">(${cmUserBalanceRecord.remark})</font>
 								</c:if>
 							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 10 }">
+								<a href="${ctx}/order/detail?id=${cmUserBalanceRecord.orderId}">线上余额抵扣</a>
+							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 13 }">
+								<a href="${ctx}/bulkpurchase/cmRefundsProduct/toRecturnRecord.rpc?id=${cmUserBalanceRecord.returnedId}&orderID=${cmUserBalanceRecord.orderId}">申请退款到线上余额</a>
+							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 16 }">
+								线上订金订单充值
+							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 17 }">
+								线上余额订单充值
+							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 18 }">
+								线上订金订单退款
+							</c:if>
+							<c:if test="${cmUserBalanceRecord.balanceType eq 19 }">
+								线上余额订单退款
+							</c:if>
 						</td>
 						<td>
 							<c:if test="${cmUserBalanceRecord.balanceType eq 1 && not empty cmUserBalanceRecord.closeReason}">

+ 18 - 5
src/main/webapp/WEB-INF/views/modules/user/cmUserBalanceWithdrawalsForm.jsp

@@ -30,6 +30,17 @@
 			});
 		});
 
+		function changeMoney(){
+			var money = $("#withdrawalsFee").val();
+			var ableUserMoney = $("#ableUserMoney").val();
+			if(money - ableUserMoney > 0){
+				$('#ts').show();
+				return;
+			}else{
+				$('#ts').hide();
+				return;
+			}
+		}
         /**
          * @param obj
          * jquery控制input只能输入数字和两位小数
@@ -51,7 +62,7 @@
 	</ul><br/>
 	<form:form id="inputForm" modelAttribute="cmUserBalanceWithdrawals" action="${ctx}/user/cmUserBalanceWithdrawals/save" method="post" class="form-horizontal">
 		<form:hidden path="userID" value="${cmUser.userID}"/>
-		<input type="hidden" id="ableUserMoney" value="${cmUser.ableUserMoney}"/>
+		<input type="hidden" id="ableUserMoney" value="${cmUser.userMoney}"/>
 		<sys:message content="${message}"/>
 		<c:if test="${not empty cmUser}">
 			<div class="control-group">
@@ -61,16 +72,18 @@
 				</div>
 			</div>
 			<div class="control-group">
-				<label class="control-label"><b>余额:</b></label>
+				<label class="control-label"><b>线下余额:</b></label>
 				<div class="controls">
-					<fmt:formatNumber value="${empty cmUser.ableUserMoney ? 0:cmUser.ableUserMoney}" type="currency"/>
+					<fmt:formatNumber value="${empty cmUser.userMoney ? 0:cmUser.userMoney}" type="currency"/>
+					(总余额:<fmt:formatNumber value="${empty cmUser.ableUserMoney ? 0:cmUser.ableUserMoney}" type="currency"/>)
 				</div>
 			</div>
 		</c:if>
 		<div class="control-group">
 			<label class="control-label"><font color="red">*</font><b>提现金额:</b></label>
-			<div class="controls">
-				<input type="number" name="withdrawalsFee" required placeholder="请输入此次提现金额" max="${empty cmUser.ableUserMoney ? 0:cmUser.ableUserMoney}">
+			<p class="controls">
+				<input type="number" id="withdrawalsFee" onchange="changeMoney()" required placeholder="请输入此次提现金额" max="${empty cmUser.ableUserMoney ? 0:cmUser.ableUserMoney}">
+				<div id="ts" class="controls" style="color: red;display: none">请输入一个最大为<fmt:formatNumber value="${empty cmUser.userMoney ? 0:cmUser.userMoney}" type="currency"/>的值</div>
 			</div>
 		</div>
 		<div class="control-group">

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/userNew/cmAgencyList.jsp

@@ -262,7 +262,7 @@
                     </shiro:hasPermission>
                 </c:if>
                 <shiro:hasPermission name="club:cmAgency:remarks">
-                    <a href="${ctx}/new/user/agency/remarks?clubId=${newCmClubList.clubID}">客户画像</a>
+                    <a href="${ctx}/new/user/agency/remarks?clubId=${newCmClubList.clubID}">咨询记录</a>
                 </shiro:hasPermission>
             </td>
         </tr>

+ 13 - 5
src/main/webapp/WEB-INF/views/modules/userNew/cmAgencyRemarksList.jsp

@@ -2,7 +2,7 @@
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <html>
 <head>
-	<title>客户画像</title>
+	<title>咨询记录</title>
 	<meta name="decorator" content="default"/>
 	<script type="text/javascript">
 		$(document).ready(function() {
@@ -45,7 +45,7 @@
 <body>
 	<ul class="nav nav-tabs">
 		<li><a href="${ctx}/new/user/agency/">机构列表</a></li>
-		<li class="active"><a href="${ctx}/new/user/agency/remarks?clubId=${cmClubRemarks.clubId}">客户画像</a></li>
+		<li class="active"><a href="${ctx}/new/user/agency/remarks?clubId=${cmClubRemarks.clubId}">咨询记录</a></li>
 	</ul><br/>
 <form:form id="searchForm" modelAttribute="cmClubRemarks" action="${ctx}/new/user/agency/remarks" method="post" class="breadcrumb form-search">
 	<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
@@ -58,12 +58,20 @@
 	<div style="overflow-x: hidden;word-break:break-all">
 		<c:forEach items="${page.list}" var="clubRemarks" varStatus="remark">
 			<div class="td clear" style="dashed #0066CC;">
-				<div style="font-weight: bold;width: 100%;float: left;"><span style="float: left;">${clubRemarks.spName}</span>
-					<span style="float: left;margin-left:10px;"><fmt:formatDate value="${clubRemarks.addTime}" pattern="yyyy-MM-dd HH:mm"/></span></div>
+
+				<div style="font-weight: bold;width: 100%;float: left;">
+					<span style="float: left;">${clubRemarks.spName}</span>
+					<span style="float: left;margin-left:10px;"><fmt:formatDate value="${clubRemarks.addTime}" pattern="yyyy-MM-dd HH:mm"/></span>
+					<span style="float: left;margin-left:120px;">管理员:${clubRemarks.leaderName}</span>
+				</div>
 				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
 					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询人:</div>
 					<div style="width: 800px;float: left;margin: 10px 0;">${clubRemarks.questionMan}</div>
 				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询类别:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">${clubRemarks.consultType}</div>
+				</div>
 				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
 					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">关键词记录:</div>
 					<div style="width: 800px;float: left;margin: 10px 0;">
@@ -100,7 +108,7 @@
 	<div class="pagination">${page}</div>
 	</c:if>
 	<c:if test="${empty page.list}">
-		<font size="3" style="text-align: center;display: block;line-height: 80px;" color="#0066CC">暂无任何备注..</font>
+		<font size="3" style="text-align: center;display: block;line-height: 80px;" color="#0066CC">暂无任何记录..</font>
 	</c:if>
 </form:form>
 </body>

+ 198 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmRegistRemarksList.jsp

@@ -0,0 +1,198 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>已注册用户咨询记录</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            //$("#name").focus();cmOrderRemarksFormNew.jsp
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox") || element.is(":radio") || element.parent().is(".input-append")) {
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+
+        function getmember() {
+            var leaderId = $("#leaderId").val();
+            if (leaderId > 0) {
+                $.get("${ctx}/new/user/agency/group", {'leaderId': leaderId}, function (data) {
+                    console.log(data);
+                    var opts = "<option value='" + data[0].serviceProviderID + "'>" + data[0].name + "</option>";
+                    if (data.length > 1) {
+                        for (let i = 1; i < data.length; i++) {
+                            opts += "<option value='" + data[i].serviceProviderID + "' >" + data[i].name + "</option>";
+                        }
+                    }
+                    $("#findgroup").html('').append(opts);
+                });
+            } else {
+                $("#findgroup").html('');
+            }
+        }
+
+        function previewFile(url) {
+            var index = url.lastIndexOf(".");
+            var suffix = url.substring(index);
+            if (suffix.startsWith(".png") || suffix.startsWith(".jpg") || suffix.startsWith(".pdf")) {
+                window.open(url, '_blank');
+            } else {
+                var previewUrl = "https://view.officeapps.live.com/op/view.aspx?src=" + encodeURIComponent(url);
+                window.open(previewUrl, '_blank');
+            }
+        }
+
+        function page(n, s) {
+            $("#pageNo").val(n);
+            $("#pageSize").val(s);
+            $("#searchForm").submit();
+            return false;
+        }
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li class="active"><a href="${ctx}/new/user/agency/regist">已注册用户咨询记录</a></li>
+    <li><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+    <li><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+</ul>
+<br/>
+<form:form id="searchForm" modelAttribute="cmClubRemarks" action="${ctx}/new/user/agency/regist" method="post"
+           class="breadcrumb form-search">
+    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+    <div class="flex-wrap">
+        <div>
+            <label>关键词:</label>
+            <form:input path="remarks" class="input-medium" maxlength="50"/>
+        </div>
+        <div class="item">
+            <label>咨询类别:</label>
+            <form:select path="consult" class="input-medium">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${cmClubRemarks.consults}" var="consults">
+                    <form:option value="${consults.id}">${consults.className}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>机构名称:</label>
+            <form:input path="clubName" class="input-medium" maxlength="50"/>
+        </div>
+        <div class="item">
+            <label>小组:</label>
+            <form:select path="leaderId" class="input-medium" onchange="getmember()">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${cmClubRemarks.teams}" var="team">
+                    <form:option value="${team.leaderId}">${team.leaderName}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>组员:</label>
+            <form:select path="serviceProviderId" class="input-medium" id="findgroup">
+                <form:option value="" label="全部"/>
+            </form:select>
+        </div>
+        <div class="item">
+            <label class="control-label">添加日期:</label>
+            <form:input path="startAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${cmClubRemarks.startAddTime}" cssStyle="width: 130px"
+                        onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+            -
+            <form:input path="endAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${cmClubRemarks.endAddTime}" cssStyle="width: 130px"
+                        onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+        </div>
+        <div class="item">
+            &nbsp;&nbsp;&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+        </div>
+    </div>
+</form:form>
+<form:form id="inputForm" modelAttribute="cmClubRemarks" action="${ctx}" method="post" class="form-horizontal">
+    <sys:message content="${message}"/>
+    <c:if test="${not empty page.list}">
+        <div style="overflow-x: hidden;word-break:break-all">
+            <c:forEach items="${page.list}" var="clubRemarks" varStatus="remark">
+                <div class="td clear" style="dashed:#0066CC;">
+                    <div style="font-weight: bold;width: 100%;float: left;">
+                        <span style="float: left;">${clubRemarks.spName}</span>
+                        <span style="float: left;margin-left:20px;"><fmt:formatDate value="${clubRemarks.addTime}"
+                                                                                    pattern="yyyy-MM-dd HH:mm"/></span>
+                        <span style="float: left;margin-left:120px;">管理员:${clubRemarks.leaderName}</span>
+                    </div>
+                    <div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+                        <div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">
+                            咨询人 :
+                        </div>
+                        <div style="width: 300px;float: left;margin: 10px 0;">${clubRemarks.questionMan}</div>
+                        <div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">
+                            机构名称:
+                        </div>
+                        <div style="width: 300px;float: left;margin: 10px 0;">${clubRemarks.clubName}</div>
+                    </div>
+                    <div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+                        <div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">
+                            咨询类别:
+                        </div>
+                        <div style="width: 300px;float: left;margin: 10px 0;">${clubRemarks.consultType}</div>
+                    </div>
+                    <div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+                        <div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">
+                            关键词记录:
+                        </div>
+                        <div style="width: 800px;float: left;margin: 10px 0;">
+                                ${clubRemarks.remarks}
+                        </div>
+                    </div>
+                    <div class="td-text" style="width: 100%;float: left;">
+                        <c:if test="${not empty clubRemarks.imageList}">
+                            <div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">
+                                图片:
+                            </div>
+                            <div style="width: 1000px;float: left;">
+                                <c:forEach items="${clubRemarks.imageList}" var="imageUrl" varStatus="remarkImage">
+                                    <a href="${imageUrl}" target="_blank">
+                                        <img class="enlarge-pic" style="height: 150px;width: 150px;margin-top: 10px"
+                                             src="${imageUrl}">&nbsp;
+                                    </a>
+                                </c:forEach>
+                            </div>
+                        </c:if>
+                    </div>
+                    <div class="td-text"
+                         style="width: 100%;float: left;margin-top: 20px;border-bottom:1px dashed #999999;padding: 10px 0;">
+                        <c:if test="${not empty clubRemarks.fileList}">
+                            <div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">
+                                文件:
+                            </div>
+                            <div style="width: 1000px;float: left;margin: 10px 0;">
+                                <c:forEach items="${clubRemarks.fileList}" var="item" varStatus="remarkFile">
+                                    <p>${item.fileName}&nbsp;&nbsp;&nbsp;&nbsp;
+                                        <a onclick="previewFile('${item.fileUrl}')" target="_blank">预览</a>&nbsp;&nbsp;&nbsp;&nbsp;
+                                        <a href="${ctx}/new/user/agency/remarks/download?fileName=${item.fileName}&ossName=${item.ossName}">下载</a>
+                                    </p>
+                                </c:forEach>
+                            </div>
+                        </c:if>
+                    </div>
+                </div>
+            </c:forEach>
+        </div>
+        <div class="pagination">${page}</div>
+    </c:if>
+    <c:if test="${empty page.list}">
+        <font size="3" style="text-align: center;display: block;line-height: 80px;" color="#0066CC">暂无任何备注..</font>
+    </c:if>
+</form:form>
+</body>
+</html>

+ 2 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmSpForm.jsp

@@ -57,6 +57,8 @@
 	<ul class="nav nav-tabs">
 		<li><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
 		<li class="active"><a href="${ctx}/new/user/cmSp/cmSpForm?id=${cmSp.id}"><shiro:hasPermission name="user:newCmClub:edit">${not empty cmSp.id?'编辑':'添加'}</shiro:hasPermission><shiro:lacksPermission name="user:newCmClub:edit">查看</shiro:lacksPermission>协销人员</a></li>
+		<li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+		<li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
 	</ul><br/>
 	<form id="inputForm" onsubmit="return false" action="##" method="post" class="form-horizontal">
 		<div class="control-group">

+ 2 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmSpList.jsp

@@ -32,6 +32,8 @@
 <ul class="nav nav-tabs">
 	<li class="active"><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
 	<shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>
+	<li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+	<li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
 </ul>
 <form:form id="searchForm" modelAttribute="newCmSp" action="${ctx}/new/user/cmSp/cmSpList/" method="post" class="breadcrumb form-search">
 	<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>

+ 55 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmSpTeamList.jsp

@@ -0,0 +1,55 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+  <title>编辑协销总管理员</title>
+  <meta name="decorator" content="default"/>
+  <script>
+    $(document).ready(function () {
+      $("#inputForm").validate({
+        submitHandler: function(form){
+          var cc = $("#serviceProviderID").val();
+          if (null == cc || cc < 1) {
+            alertx("请选择总管理员!");
+            return false;
+          }
+          loading('正在提交,请稍等...');
+          form.submit();
+        }
+      });
+    });
+  </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+  <li><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
+  <shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>
+  <li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+  <li class="active"><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
+</ul>
+<br/>
+<form:form id="inputForm" modelAttribute="newCmSp" action="${ctx}/new/user/cmSp/leader/save" method="post"
+           class="form-horizontal">
+  <sys:message content="${message}"/>
+
+  <div class="control-group">
+    <div class="controls" style="color: red;margin-left:4%">请在协销人员中选择某人作为协销总管理员,总管理员拥有管理全部协销小组的权限(未选择小组管理员前无可选项)</div>
+    <br/>
+    <label class="control-label"><span class="help-inline"><font color="red">*</font> </span>协销总管理员:</label>
+    <div class="controls">
+      <form:select path="serviceProviderID" class="input-medium">
+        <form:option value="" label="请选择"/>
+        <c:forEach items="${newCmSp.teams}" var="team">
+          <form:option value="${team.leaderId}">${team.leaderName}</form:option>
+        </c:forEach>
+      </form:select>
+    </div>
+  </div>
+
+  <div class="form-actions">
+    <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+  </div>
+</form:form>
+</body>
+
+</html>

+ 155 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmUnRegistRemarksList.jsp

@@ -0,0 +1,155 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+	<title>未注册用户咨询记录</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			//$("#name").focus();cmOrderRemarksFormNew.jsp
+			$("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+
+		function previewFile(url) {
+			var index = url.lastIndexOf(".");
+			var suffix = url.substring(index);
+			if (suffix.startsWith(".png") || suffix.startsWith(".jpg") || suffix.startsWith(".pdf")) {
+				window.open(url, '_blank');
+			} else {
+				var previewUrl = "https://view.officeapps.live.com/op/view.aspx?src="+encodeURIComponent(url);
+				window.open(previewUrl, '_blank');
+			}
+		}
+
+		function page(n,s){
+			$("#pageNo").val(n);
+			$("#pageSize").val(s);
+			$("#searchForm").submit();
+		}
+	</script>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/new/user/agency/regist">已注册用户咨询记录</a></li>
+		<li class="active"><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+		<li><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+	</ul><br/>
+<form:form id="searchForm" modelAttribute="visit" action="${ctx}/new/user/visit/unregist" method="post" class="breadcrumb form-search">
+	<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+	<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+    <div class="flex-wrap">
+        <div>
+            <label>关键词:</label>
+            <form:input path="remarks" class="input-medium" maxlength="50"/>
+        </div>
+        <div class="item">
+            <label>咨询类别:</label>
+            <form:select path="consult" class="input-medium">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${visit.consults}" var="consults">
+                    <form:option value="${consults.id}">${consults.className}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>小组:</label>
+            <form:select path="leaderId" class="input-medium" onchange="getmember()">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${visit.teams}" var="team">
+                    <form:option value="${team.leaderId}">${team.leaderName}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>组员:</label>
+            <form:select path="serviceProviderId" class="input-medium" id="findgroup">
+                <form:option value="" label="全部"/>
+            </form:select>
+        </div>
+        <div class="item">
+            <label class="control-label">添加日期:</label>
+			<form:input path="startAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${visit.startAddTime}" cssStyle="width: 130px"
+						onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+			-
+			<form:input path="endAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${visit.endAddTime}" cssStyle="width: 130px"
+						onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+        </div>
+        <div class="item">
+			&nbsp;&nbsp;&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+        </div>
+    </div>
+</form:form>
+<form:form id="inputForm" modelAttribute="visit" action="${ctx}" method="post" class="form-horizontal">
+	<sys:message content="${message}"/>
+	<c:if test="${not empty page.list}">
+	<div style="overflow-x: hidden;word-break:break-all">
+		<c:forEach items="${page.list}" var="visitRemarks" varStatus="remark">
+			<div class="td clear">
+				<div style="font-weight: bold;width: 100%;float: left;">
+                    <span style="float: left;">${visitRemarks.serviceName}</span>
+					<span style="float: left;margin-left:10px;"><fmt:formatDate value="${visitRemarks.addTime}" pattern="yyyy-MM-dd HH:mm"/></span>
+                    <span style="float: left;margin-left:120px;">管理员:${visitRemarks.leaderName}</span>
+                </div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询人:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">${visitRemarks.questionMan}</div>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询类别:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">${visitRemarks.consultType}</div>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">关键词记录:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">
+						${visitRemarks.remarks}
+					</div>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;">
+					<c:if test="${not empty visitRemarks.imageList}">
+						<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">图片:</div>
+						<div style="width: 1000px;float: left;">
+							<c:forEach items="${visitRemarks.imageList}" var="imageUrl" varStatus="remarkImage">
+								<a href="${imageUrl}" target="_blank">
+									<img class="enlarge-pic" style="height: 150px;width: 150px;margin-top: 10px" src="${imageUrl}">&nbsp;
+								</a>
+							</c:forEach>
+						</div>
+					</c:if>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;border-bottom:1px dashed #999999;padding: 10px 0;">
+					<c:if test="${not empty visitRemarks.fileList}">
+						<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">文件:</div>
+						<div style="width: 1000px;float: left;margin: 10px 0;">
+							<c:forEach items="${visitRemarks.fileList}" var="item" varStatus="remarkFile">
+								<p>${item.fileName}&nbsp;&nbsp;&nbsp;&nbsp;
+									<a onclick="previewFile('${item.fileUrl}')" target="_blank">预览</a>&nbsp;&nbsp;&nbsp;&nbsp;
+									<a href="${ctx}/new/user/agency/remarks/download?fileName=${item.fileName}&ossName=${item.ossName}">下载</a></p>
+							</c:forEach>
+						</div>
+					</c:if>
+				</div>
+			</div>
+		</c:forEach>
+	</div>
+	<div class="pagination">${page}</div>
+	</c:if>
+	<c:if test="${empty page.list}">
+		<font size="3" style="text-align: center;display: block;line-height: 80px;" color="#0066CC">暂无任何记录..</font>
+	</c:if>
+</form:form>
+</body>
+</html>

+ 2 - 2
src/main/webapp/WEB-INF/views/modules/userNew/cmVisitList.jsp

@@ -2,7 +2,7 @@
 <%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <head>
-    <title>潜在用户画像信息</title>
+    <title>未注册用户咨询记录</title>
     <meta name="decorator" content="default"/>
     <style>
         .reg-row .new-tag.active {
@@ -258,7 +258,7 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-    <li class="active"><a href="${ctx}/new/user/visit/">潜在用户画像信息</a></li>
+    <li class="active"><a href="${ctx}/new/user/visit/">未注册用户咨询记录</a></li>
 </ul>
 <form:form id="searchForm" modelAttribute="visitRemark" action="${ctx}/new/user/visit/remark" method="post"
            class="breadcrumb form-search">

+ 7 - 2
src/main/webapp/WEB-INF/views/modules/userNew/cmVisitRemarksList.jsp

@@ -44,7 +44,7 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li><a href="${ctx}/new/user/visit/">潜在用户画像信息</a></li>
+		<li><a href="${ctx}/new/user/visit/">未注册用户咨询记录</a></li>
 		<li class="active">   <a href="${ctx}/new/user/visit/find?questionManId=${visit.questionManId}">信息详情</a></li>
 	</ul><br/>
 <form:form id="questionManId" modelAttribute="visit" action="${ctx}/new/user/visit/find" method="post" class="breadcrumb form-search">
@@ -63,6 +63,11 @@
 				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
 					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询人:</div>
 					<div style="width: 800px;float: left;margin: 10px 0;">${visitRemarks.questionMan}</div>
+					<span style="float: left;margin-left:120px;">管理员:${visitRemarks.leaderName}</span>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询类别:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">${visitRemarks.consultType}</div>
 				</div>
 				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
 					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">关键词记录:</div>
@@ -100,7 +105,7 @@
 	<div class="pagination">${page}</div>
 	</c:if>
 	<c:if test="${empty page.list}">
-		<font size="3" style="text-align: center;display: block;line-height: 80px;" color="#0066CC">暂无任何备注..</font>
+		<font size="3" style="text-align: center;display: block;line-height: 80px;" color="#0066CC">暂无任何记录..</font>
 	</c:if>
 </form:form>
 </body>