|
@@ -1,5 +1,6 @@
|
|
|
package com.caimei.modules.user.web.newUser;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.caimei.constants.ServiceProviderStatus;
|
|
|
import com.caimei.constants.UserIdentity;
|
|
|
import com.caimei.constants.UserType;
|
|
@@ -9,13 +10,19 @@ import com.caimei.modules.project.dao.ClubDao;
|
|
|
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.SMSUtils;
|
|
|
import com.caimei.modules.sys.utils.ValidateUtils;
|
|
|
import com.caimei.modules.user.aop.OperationLogAnnotation;
|
|
|
+import com.caimei.modules.user.dao.NewCmClubDao;
|
|
|
import com.caimei.modules.user.entity.*;
|
|
|
import com.caimei.modules.user.service.*;
|
|
|
-import com.caimei.utils.AppKeys;
|
|
|
-import com.caimei.utils.DateUtils;
|
|
|
-import com.caimei.utils.MD5Utils;
|
|
|
+import com.caimei.modules.utils.MessageUtil;
|
|
|
+import com.caimei.modules.utils.RequestUtil;
|
|
|
+import com.caimei.modules.utils.message.InsideMessage;
|
|
|
+import com.caimei.modules.utils.message.MessageModel;
|
|
|
+import com.caimei.modules.utils.message.MqInfo;
|
|
|
+import com.caimei.modules.utils.message.enums.MessageType;
|
|
|
+import com.caimei.utils.*;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.thinkgem.jeesite.common.config.Global;
|
|
|
import com.thinkgem.jeesite.common.persistence.Page;
|
|
@@ -36,11 +43,10 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Description
|
|
@@ -68,6 +74,8 @@ public class SpController extends BaseController {
|
|
|
private SysLogService sysLogService;
|
|
|
@Resource
|
|
|
private NewCmClubService newCmClubService;
|
|
|
+ @Resource
|
|
|
+ private NewCmClubDao newCmClubDao;
|
|
|
|
|
|
@ModelAttribute
|
|
|
public NewCmSp get(@RequestParam(required = false) String id) {
|
|
@@ -130,6 +138,7 @@ public class SpController extends BaseController {
|
|
|
}
|
|
|
// 查询serviceprovider协销表
|
|
|
List<ServiceProviderModel> serviceprovider = serviceProviderDao.getServiceproviderById(cssp.getNewSpID());
|
|
|
+
|
|
|
// 查询cm_bind表
|
|
|
if (CollectionUtils.isNotEmpty(serviceprovider)) {
|
|
|
ServiceProviderModel serviceProvider = serviceprovider.get(0);
|
|
@@ -174,6 +183,68 @@ public class SpController extends BaseController {
|
|
|
if (null != serviceProvider.getServiceProviderID()) {
|
|
|
sysLogService.insetProvider(serviceProvider.getServiceProviderID(), clubId, username);
|
|
|
}
|
|
|
+ //短信
|
|
|
+ if (StringUtils.isNotEmpty(serviceProvider.getContractMobile())) {
|
|
|
+ NewCmClub newCmClub = newCmClubService.get(clubId.toString());
|
|
|
+ ServiceProviderModel oldServiceprovider = serviceProviderDao.getServiceproviderById(cssp.getOldSpID()).get(0);
|
|
|
+
|
|
|
+ //站内信
|
|
|
+ MessageModel<InsideMessage> insideMessageMessageModel = new MessageModel<>();
|
|
|
+ insideMessageMessageModel.code(MessageType.WEB_INSIDE_MESSAGE)
|
|
|
+ .mqInfo(new MqInfo().topic("MessageLine").delay(1).async(1))
|
|
|
+ .info(new InsideMessage()
|
|
|
+ .userType(3)
|
|
|
+ .messageType(3)
|
|
|
+ .shopTieredType(2)
|
|
|
+ .name(newCmClub.getName())
|
|
|
+ .userName(newCmClub.getLinkMan())
|
|
|
+ .mobile(newCmClub.getContractMobile())
|
|
|
+ .superUserName(oldServiceprovider.getName())
|
|
|
+ .thisId(serviceProvider.getServiceProviderID())
|
|
|
+ .clubId(newCmClub.getClubID())
|
|
|
+ );
|
|
|
+ MessageUtil.sendMessage(insideMessageMessageModel);
|
|
|
+ if(1342!=serviceProvider.getServiceProviderID()){
|
|
|
+ insideMessageMessageModel.info(new InsideMessage()
|
|
|
+ .userType(3)
|
|
|
+ .messageType(3)
|
|
|
+ .shopTieredType(3)
|
|
|
+ .name(newCmClub.getName())
|
|
|
+ .userName(newCmClub.getLinkMan())
|
|
|
+ .mobile(newCmClub.getContractMobile())
|
|
|
+ .superUserName(serviceProvider.getName())
|
|
|
+ .thisId(oldServiceprovider.getServiceProviderID())
|
|
|
+ .clubId(newCmClub.getClubID())
|
|
|
+ );
|
|
|
+ MessageUtil.sendMessage(insideMessageMessageModel);
|
|
|
+ insideMessageMessageModel.info(new InsideMessage()
|
|
|
+ .userType(1)
|
|
|
+ .messageType(3)
|
|
|
+ .shopTieredType(6)
|
|
|
+ .userName(serviceProvider.getName())
|
|
|
+ .mobile(serviceProvider.getContractMobile())
|
|
|
+ .clubId(newCmClub.getClubID())
|
|
|
+ );
|
|
|
+ MessageUtil.sendMessage(insideMessageMessageModel);
|
|
|
+ SMSUtils.sendSms(4, newCmClub.getContractMobile(), "【采美365】因公司内部人员调整需要,采美平台已为您更换客户经理。客户经理【" + serviceProvider.getName() + "】,手机号【" + serviceProvider.getContractMobile() + "】。");
|
|
|
+ SMSUtils.sendSms(4, serviceProvider.getContractMobile(), "【采美365】系统已为你分配机构客户,请及时跟进。机构名称【" + newCmClub.getName() + "】,联系人【" + newCmClub.getLinkMan() + "】,手机号【" + newCmClub.getContractMobile() + "】,上一任销售【" + oldServiceprovider.getName() + "】。");
|
|
|
+ SMSUtils.sendSms(4, oldServiceprovider.getContractMobile(), "【采美365】系统已将你的机构客户转移给其他销售人员,你已无权管理该客户。机构名称【" + newCmClub.getName() + "】,联系人【" + newCmClub.getLinkMan() + "】,手机号【" + newCmClub.getContractMobile() + "】,下一任销售【" + serviceProvider.getName() + "】。");
|
|
|
+ }else {
|
|
|
+ insideMessageMessageModel.info(new InsideMessage()
|
|
|
+ .userType(3)
|
|
|
+ .messageType(3)
|
|
|
+ .shopTieredType(8)
|
|
|
+ .name(newCmClub.getName())
|
|
|
+ .userName(newCmClub.getLinkMan())
|
|
|
+ .mobile(newCmClub.getContractMobile())
|
|
|
+ .thisId(oldServiceprovider.getServiceProviderID())
|
|
|
+ .clubId(newCmClub.getClubID())
|
|
|
+ );
|
|
|
+ MessageUtil.sendMessage(insideMessageMessageModel);
|
|
|
+ SMSUtils.sendSms(4, oldServiceprovider.getContractMobile(), "【采美365】系统已将你的机构客户进行回收,你已无权管理该客户。机构名称【" + newCmClub.getName() + "】,联系人【"+ newCmClub.getLinkMan() +"】,手机号【"+ newCmClub.getContractMobile() +"】。");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
} else {
|
|
|
map.put("success", false);
|
|
|
map.put("msg", "操作失败");
|
|
@@ -242,6 +313,82 @@ public class SpController extends BaseController {
|
|
|
return "modules/userNew/cmSpList";
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 功能描述: 机构活跃分析列表
|
|
|
+ *
|
|
|
+ * @param newCmSp
|
|
|
+ * @param request
|
|
|
+ * @param response
|
|
|
+ * @param model
|
|
|
+ * @return [newCmSp, request, response, model]
|
|
|
+ * @auther: Kaick
|
|
|
+ * @date: 2023/8/25 14:50
|
|
|
+ */
|
|
|
+ @RequestMapping(value = {"cmSpLivelyClubList"})
|
|
|
+ public String cmSpLivelyClubList(NewCmSp newCmSp, HttpServletRequest request, HttpServletResponse response, Model model) {
|
|
|
+ newCmSp.setStatus(90);
|
|
|
+ Page<NewCmSp> page = cmSpService.findPage(new Page<NewCmSp>(request, response), newCmSp);
|
|
|
+ page.getList().forEach(s->{
|
|
|
+ Map<String, Object> spUserLoginSum = cmSpService.findSpUserLoginSum(s.getServiceProviderID().toString());
|
|
|
+ Integer loginSum = Integer.valueOf(spUserLoginSum.get("loginSum").toString());
|
|
|
+ Integer not_loginSum = Integer.valueOf(spUserLoginSum.get("not_loginSum").toString());
|
|
|
+ // 机构活跃与不活跃占比计算方法,例如:机构活跃数/机构活跃数+机构不活跃数(60/(60+30)=0.666...),保留小数点后2位,四舍五入,0.67;
|
|
|
+ BigDecimal livelyClubProportion = new BigDecimal((loginSum + not_loginSum) != 0 ?(double) loginSum / (loginSum + not_loginSum) * 100 : 0).setScale(2, RoundingMode.UP);
|
|
|
+ s.setLivelyClub(loginSum);
|
|
|
+ s.setNolivelyClub(not_loginSum);
|
|
|
+ s.setLivelyClubProportion(livelyClubProportion);
|
|
|
+ s.setNolivelyClubProportion(MathUtil.sub(100, livelyClubProportion).setScale(2));
|
|
|
+ });
|
|
|
+ Map<String, Object> spUserLoginSum = cmSpService.findSpUserLoginSum(null);
|
|
|
+ Integer loginSum = Integer.valueOf(spUserLoginSum.get("loginSum").toString());
|
|
|
+ Integer not_loginSum = Integer.valueOf(spUserLoginSum.get("not_loginSum").toString());
|
|
|
+ // 机构活跃与不活跃占比计算方法,例如:机构活跃数/机构活跃数+机构不活跃数(60/(60+30)=0.666...),保留小数点后2位,四舍五入,0.67;
|
|
|
+ BigDecimal livelyClubProportion = new BigDecimal((loginSum + not_loginSum) != 0 ?(double) loginSum / (loginSum + not_loginSum) * 100 : 0).setScale(2, RoundingMode.UP);
|
|
|
+ model.addAttribute("livelyClub", loginSum);
|
|
|
+ model.addAttribute("nolivelyClub", not_loginSum);
|
|
|
+ model.addAttribute("livelyClubProportion", livelyClubProportion);
|
|
|
+ model.addAttribute("nolivelyClubProportion", MathUtil.sub(100, livelyClubProportion).setScale(2));
|
|
|
+ model.addAttribute("page", page);
|
|
|
+ return "modules/userNew/cmSpLivelyClubList";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 功能描述: 机构活跃分析查看详情
|
|
|
+ *
|
|
|
+ * @param request
|
|
|
+ * @param response
|
|
|
+ * @param model
|
|
|
+ * @return [newCmSp, request, response, model]
|
|
|
+ * @auther: Kaick
|
|
|
+ * @date: 2023/8/25 14:50
|
|
|
+ */
|
|
|
+ @RequestMapping(value = {"cmSpLivelyClubFrom"})
|
|
|
+ public String cmSpLivelyClubFrom(NewCmClub newCmClub, HttpServletRequest request, HttpServletResponse response, Model model) {
|
|
|
+ if (StringUtils.isBlank(newCmClub.getStartLoginTime())&&StringUtils.isBlank(newCmClub.getEndLoginTime())) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.add(Calendar.MONTH, -6);
|
|
|
+ newCmClub.setStartLoginTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()));
|
|
|
+ }
|
|
|
+ newCmClub.setStatus(90);
|
|
|
+ Page<NewCmClub> page = newCmClubService.findPage(new Page<NewCmClub>(request, response, 20), newCmClub);
|
|
|
+ Map<String, Object> spUserLoginSum = cmSpService.findSpUserLoginSum(newCmClub.getSpID().toString());
|
|
|
+ Integer loginSum = Integer.valueOf(spUserLoginSum.get("loginSum").toString());
|
|
|
+ Integer not_loginSum = Integer.valueOf(spUserLoginSum.get("not_loginSum").toString());
|
|
|
+ // 机构活跃与不活跃占比计算方法,例如:机构活跃数/机构活跃数+机构不活跃数(60/(60+30)=0.666...),保留小数点后2位,四舍五入,0.67;
|
|
|
+ BigDecimal livelyClubProportion = new BigDecimal((loginSum + not_loginSum) != 0 ? (double)loginSum / (loginSum + not_loginSum) * 100 : 0).setScale(2, RoundingMode.UP);
|
|
|
+ model.addAttribute("livelyClub", loginSum);
|
|
|
+ model.addAttribute("nolivelyClub", not_loginSum);
|
|
|
+ model.addAttribute("livelyClubProportion", livelyClubProportion);
|
|
|
+ model.addAttribute("nolivelyClubProportion", MathUtil.sub(100, livelyClubProportion).setScale(2));
|
|
|
+ model.addAttribute("spId", newCmClub.getSpID());
|
|
|
+ model.addAttribute("page", page);
|
|
|
+ return "modules/userNew/cmSpLivelyClubFrom";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 添加协销人员
|
|
|
*
|
|
@@ -305,6 +452,7 @@ public class SpController extends BaseController {
|
|
|
}
|
|
|
NewCmSp cmSp = new NewCmSp();
|
|
|
CmUser cmUser = new CmUser();
|
|
|
+ cmSp.setName(linkMan);
|
|
|
cmSp.setLinkMan(linkMan);
|
|
|
cmSp.setContractMobile(mobile);
|
|
|
if ("1".equals(duty)) {
|
|
@@ -331,6 +479,7 @@ public class SpController extends BaseController {
|
|
|
}
|
|
|
cmUser.setUserOrganizeID(0);
|
|
|
cmUser.setMobile(mobile);
|
|
|
+ cmUser.setBindMobile(mobile);
|
|
|
cmUser.setUserIdentity(UserIdentity.MAKER.getCode());
|
|
|
cmUser.setRegisterTime(DateUtils.getDateTime());
|
|
|
cmUser.setServiceProviderStatus(ServiceProviderStatus.WAIT_CHECK_DATA.getCode() + "");
|
|
@@ -455,8 +604,9 @@ public class SpController extends BaseController {
|
|
|
if ("0".equals(newCmSp.getPosition())) {
|
|
|
cmUser.setRegisterUserTypeID(UserType.SERVICEEMPLOYEE.getCode() + ""); // 设置为协销员工
|
|
|
}
|
|
|
-
|
|
|
+ newCmSp.setName(newCmSp.getLinkMan());
|
|
|
cmUser.setMobile(newCmSp.getContractMobile());
|
|
|
+ cmUser.setBindMobile(newCmSp.getContractMobile());
|
|
|
cmSpService.save(newCmSp);
|
|
|
cmUserService.update(cmUser);
|
|
|
addMessage(redirectAttributes, "保存协销人员管理成功");
|
|
@@ -483,4 +633,5 @@ public class SpController extends BaseController {
|
|
|
return "redirect:" + Global.getAdminPath() + "/serviceteam/cmServiceteamRole/?repage";
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|