Prechádzať zdrojové kódy

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

zhouzeyu@c-top.com.cn 4 rokov pred
rodič
commit
65d751bcea
61 zmenil súbory, kde vykonal 1027 pridanie a 263 odobranie
  1. 33 0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/MD5Util.java
  2. 1 0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  3. 220 79
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/controller/CwjsPolicyInfoController.java
  4. 2 2
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/entity/CwjsCompanyApprovalUser.java
  5. 4 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/entity/CwjsCompanySubject.java
  6. 16 7
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/entity/CwjsPolicyInfo.java
  7. 5 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsCompanyApprovalUserMapper.java
  8. 5 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsCompanySubjectMapper.java
  9. 5 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsPolicyInfoMapper.java
  10. 3 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsPolicyProductMapper.java
  11. 9 3
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsCompanyApprovalUserMapper.xml
  12. 7 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsCompanySubjectMapper.xml
  13. 38 5
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsPolicyInfoMapper.xml
  14. 4 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsPolicyProductMapper.xml
  15. 9 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/ICwjsPolicyInfoService.java
  16. 3 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/ICwjsPolicyProductService.java
  17. 1 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/impl/CwjsPolicyApprovalLogServiceImpl.java
  18. 49 3
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/impl/CwjsPolicyInfoServiceImpl.java
  19. 7 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/impl/CwjsPolicyProductServiceImpl.java
  20. 19 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/utils/ListPageUtil.java
  21. 1 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/DemoReportController.java
  22. 9 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/ExportReportController.java
  23. 28 2
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/SettlementController.java
  24. 41 3
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/SettlementFileController.java
  25. 4 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/entity/pojo/ctopCwjsSettlementInfo.java
  26. 5 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/entity/vo/SettlementFileParamsVo.java
  27. 15 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/ReportSettlementMapper.java
  28. 36 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/ReportSettlementMapper.xml
  29. 18 3
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/SettlementFileInfoMapper.xml
  30. 7 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/SettlementInfoMapper.xml
  31. 5 0
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/IReportSettlementService.java
  32. 57 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/serviceImpl/ReportSettlementServiceImpl.java
  33. 3 3
      jeecg-boot-finance/src/main/resources/application.yml
  34. 19 0
      jeecg-boot-finance/src/test/java/org/jeecg/modules/finance/FinanceTest.java
  35. 5 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/MaterialAscription.java
  36. 1 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/UserCompany.java
  37. 2 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/CtopOauthTokenMapper.java
  38. 1 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/MaterialInfoMapper.java
  39. 9 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/CtopOauthTokenMapper.xml
  40. 3 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialInfoMapper.xml
  41. 12 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/SysUserMapper.xml
  42. 5 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java
  43. 4 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IUserCompanyService.java
  44. 4 3
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java
  45. 173 12
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  46. 8 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/UserCompanyServiceImpl.java
  47. 8 3
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java
  48. 0 5
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouAudienceReportDailyServiceImpl.java
  49. 1 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/report/controller/BytedanceAccountReportCtrl.java
  50. 2 12
      jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceHomepageMapper.xml
  51. 0 1
      jeecg-boot-module-system/src/main/java/org/jeecg/common/constant/AccountReportConstants.java
  52. 7 3
      jeecg-boot-module-system/src/main/java/org/jeecg/common/utils/JsonResourceUtil.java
  53. 14 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialAscriptionController.java
  54. 13 9
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java
  55. 7 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  56. 20 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/fileupload/controller/FileController.java
  57. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  58. 21 80
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  59. 4 4
      jeecg-cloud-module/jeecg-cloud-gateway/src/main/resources/application-dev.yml
  60. 7 1
      jeecg-cloud-module/jeecg-cloud-gateway/src/main/resources/application-prod.yml
  61. 7 1
      jeecg-cloud-module/jeecg-cloud-gateway/src/main/resources/application-test.yml

+ 33 - 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/MD5Util.java

@@ -3,6 +3,10 @@ package org.jeecg.common.util;
 import org.springframework.util.DigestUtils;
 
 import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
@@ -30,6 +34,35 @@ public class MD5Util {
 		return String.valueOf(str);
 	}
 
+	public static String md5ByUrl(String imgUrl){
+		String md5 = "";
+		InputStream inputStream = null;
+		try {
+			//url路径
+			URL url=new URL(imgUrl);
+			//获取连接
+			HttpURLConnection connection=(HttpURLConnection)url.openConnection();
+			connection.setConnectTimeout(3*1000);
+			//设置请求头
+			connection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36");
+			inputStream = connection.getInputStream();
+			//DigestUtils为org.apache.commons.codec.digest.DigestUtils下的类
+			md5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(inputStream);
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally{
+			try {
+				if (inputStream != null) {
+					//关闭流
+					inputStream.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return  md5;
+	}
+
 	public static String getMd5(String url) {
 		MessageDigest md5 = MD5.get();
 		md5.reset();

+ 1 - 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java

@@ -211,6 +211,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/kuaishou/batch/*", "anon");
         filterChainDefinitionMap.put("/dimension/kuaiShouDimensionAccount/*", "anon");
         filterChainDefinitionMap.put("/ai/projectCreate/*", "anon");
+        filterChainDefinitionMap.put("/cwjsPolicyInfo/**", "anon");
 
         // 添加自己的过滤器并且取名为jwt
         Map<String, Filter> filterMap = new HashMap<>(1);

+ 220 - 79
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/controller/CwjsPolicyInfoController.java

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletResponse;
 
 import cn.com.ctop.common.module.entity.UserCompany;
 import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.mapper.SysUserMapper;
 import cn.com.ctop.common.module.service.IUserCompanyService;
 import cn.com.ctop.common.module.utils.CorpWexinUtils;
 import com.alibaba.fastjson.JSONArray;
@@ -19,6 +20,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
@@ -32,6 +34,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 
 import org.jeecg.ctop.finance.policy.utils.Check;
+import org.jeecg.ctop.finance.policy.utils.ListPageUtil;
+import org.jeecg.modules.ctop.service.IMaterialReportOverViewService;
 import org.jeecg.modules.system.service.ISysRoleService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -57,7 +61,7 @@ import io.swagger.annotations.ApiOperation;
 @Slf4j
 @Api(tags="政策模块")
 @RestController
-@RequestMapping("/finance/cwjsPolicyInfo")
+@RequestMapping("/cwjsPolicyInfo")
 public class CwjsPolicyInfoController {
 	@Autowired
 	private ICwjsPolicyInfoService cwjsPolicyInfoService;
@@ -93,46 +97,72 @@ public class CwjsPolicyInfoController {
 
 	 }
 
-	 @PostMapping(value = "/policyApproval")
+	 @GetMapping(value = "/policyApproval")
 	 public Result policyApproval(@RequestParam(name="id",required=true) Integer id,
 	 							@RequestParam(name="type",required=true) Integer type,
+								  @RequestParam(name="userId",required=true) String userId,
 								@RequestParam(name="approvalContent",required=false) String approvalContent){
-		LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//		LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 		CwjsPolicyInfo cwjsPolicyInfoEntity = cwjsPolicyInfoService.getById(id);
 		 if(cwjsPolicyInfoEntity==null) {
-			 return Result.error("未找到对应实体");
+			 return Result.error("参数传递有误");
 		 }
-		 String companyId = companySubjectService.getById(cwjsPolicyInfoEntity.getCompanySubjectId()).getCompanyId();
-		 CwjsCompanyApprovalUser cwjsCompanyApprovalUser = companyApprovalUserMapper.queryByCompanyIdAndUserId(companyId, user.getId());
-
+		 Integer companySubjectId= cwjsPolicyInfoEntity.getCompanySubjectId();
+		 CwjsCompanyApprovalUser cwjsCompanyApprovalUser = companyApprovalUserMapper.queryByCompanySubjectIdAndUserId(companySubjectId, userId);
 		 if(type == 1){	//审核提交	等于新增的时候
+//			 cwjsPolicyInfoEntity.setApprovedStatus(1);
 			if(!Check.isNull(cwjsCompanyApprovalUser)){//当前登录的用户所提交的政策是审核链里的人的提交的  直接状态到2给终审的人员
 				cwjsPolicyInfoEntity.setApprovedStatus(2);
 			}else{	//除了销售总监提交的申请都是-待审核
 				cwjsPolicyInfoEntity.setApprovedStatus(1);
 			}
+			 JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId(cwjsPolicyInfoEntity.getApprovedProgress());
+			 StringBuilder text = new StringBuilder();
+			 text.append("您有一条销售政策需要审核,该客户为:");
+			 text.append(cwjsPolicyInfoEntity.getCompanyName());
+			 text.append(",请及时登录助手平台-销售政策页面进行审核,谢谢!");
+			 corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
 		}
-	 	if(type == 2){	//审核通过  是不是终审,不是就给当前的下一个人发企业微信
-			if(!Check.isNull(cwjsCompanyApprovalUser) && !"final".equalsIgnoreCase(cwjsCompanyApprovalUser.getLevel())){//不是终审的
-				cwjsPolicyInfoEntity.setApprovedStatus(2);
-			}else{	//是终审的就搞成3
+		 if(type == 2){	//审核通过  是不是终审,不是就给当前的下一个人发企业微信
+			 CwjsCompanyApprovalUser nextApprovalUser = companyApprovalUserMapper.queryByCompanySubjectIdAndLevel(companySubjectId, cwjsCompanyApprovalUser.getLevel() + 1);
+			 if(!Check.isNull(cwjsCompanyApprovalUser) && Check.isNull(nextApprovalUser)){//没有下一个审核人员,是终审
 				cwjsPolicyInfoEntity.setApprovedStatus(3);
+			}else{	//不是终审
+				cwjsPolicyInfoEntity.setApprovedStatus(2);
+				cwjsPolicyInfoEntity.setApprovedProgress(nextApprovalUser.getApprovalUserId());	//设置一下个人为审核人员
+				 JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId(nextApprovalUser.getApprovalUserId());
+				 StringBuilder text = new StringBuilder();
+				 text.append("您有一条销售政策需要审核,该客户为:");
+				 text.append(cwjsPolicyInfoEntity.getCompanyName());
+				 text.append(",请及时登录助手平台-销售政策页面进行审核,谢谢!");
+				 corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
 			}
 			CwjsPolicyApprovalLog policyApprovalLog = new CwjsPolicyApprovalLog();
-			policyApprovalLog.setCreateUserId(user.getId());
+			policyApprovalLog.setPolicyId(id);
+			policyApprovalLog.setCreateUserId(userId);
 			policyApprovalLog.setApprovalStatus(0);
 			policyApprovalLogService.save(policyApprovalLog);
+
+
 		}
 	 	if(type == 3){	//审核拒绝	给申请人发企业微信
 			cwjsPolicyInfoEntity.setApprovedStatus(4);
 			CwjsPolicyApprovalLog policyApprovalLog = new CwjsPolicyApprovalLog();
-			policyApprovalLog.setCreateUserId(user.getId());
+			policyApprovalLog.setPolicyId(id);
+			policyApprovalLog.setCreateUserId(userId);
 			policyApprovalLog.setApprovalContent(approvalContent);
 			policyApprovalLog.setApprovalStatus(1);
 			policyApprovalLogService.save(policyApprovalLog);
+
+			JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId(cwjsPolicyInfoEntity.getCreateUserId());
+			StringBuilder text = new StringBuilder();
+			text.append("您有一条销售政策审核未通过,客户为:");
+			text.append(cwjsPolicyInfoEntity.getCompanyName());
+			text.append(",请及时登录助手平台-销售政策页面进行政策修改,谢谢!");
+			corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
 		}
 		cwjsPolicyInfoService.updateById(cwjsPolicyInfoEntity);
-	 	return Result.successMsg("提交成功",null);
+	 	return Result.successMsg("成功",cwjsPolicyInfoEntity);
 	 }
 
 	/**
@@ -148,89 +178,113 @@ public class CwjsPolicyInfoController {
 	public Result<PageInfo<CwjsPolicyInfo>> queryPageList(CwjsPolicyInfo cwjsPolicyInfo,
 									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
 									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  @RequestParam(name="userId",required=true) String userId,
 									  HttpServletRequest req) {
 
-		LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-		List<CwjsCompanyApprovalUser> cwjsCompanyApprovalUserList = companyApprovalUserMapper.queryByUserId(user.getId());
-		if(Check.isNull(cwjsCompanyApprovalUserList)){
-			cwjsPolicyInfo.setCreateUserId(user.getId());
-		}else{
-			List<Integer> companySubjectIds = new ArrayList<>();
-			cwjsCompanyApprovalUserList.forEach(cwjsCompanyApprovalUser -> {
-				List<CwjsCompanySubject> cwjsCompanySubjects = companySubjectMapper.queryByCompanyId(cwjsCompanyApprovalUser.getCompanyId());
-				cwjsCompanySubjects.forEach(cwjsCompanySubject -> companySubjectIds.add(cwjsCompanySubject.getId()));
-			});
-			cwjsPolicyInfo.setCompanySubjectIds(companySubjectIds);
+        String roleCode = roleService.getRoleCodeByUserId(userId);
+        List<CwjsCompanyApprovalUser> cwjsCompanyApprovalUserList = companyApprovalUserMapper.queryByUserId(userId);
+		List<CwjsPolicyInfo> cwjsPolicyInfoList = cwjsPolicyInfoService.queryPageList(cwjsPolicyInfo);
+		if(Check.isNull(cwjsPolicyInfoList)){
+			PageInfo<CwjsPolicyInfo> pageInfo = new PageInfo<>(cwjsPolicyInfoList);
+			return Result.successMsg("目前没有政策,请新增",pageInfo);
 		}
-//		String roleCode = roleService.getRoleCodeByUserId(user.getId());
-//		if (roleCode.equals("admin")&&Check.isNull(cwjsPolicyInfo.getCreateUserId())) {	//1.当前登录用户为管理员角色,并且没有传递销售id来精确查询。  则不触发sql的过滤条件
-//			cwjsPolicyInfo.setCreateUserIds(null);
-//		}else if(roleCode.equals("admin")&&!Check.isNull(cwjsPolicyInfo.getCreateUserId())){//2.当前登录用户为管理员角色,并且传递了销售的id,则需要触发
-//			List<String> userIds = new ArrayList<>();
-//			userIds.add(cwjsPolicyInfo.getCreateUserId());
-//			cwjsPolicyInfo.setCreateUserIds(userIds);
-//		}else if(roleCode.equals("saleDirector")){	//3.如果是销售总监	查询自己和手下创建的所有政策
-//			List<SysUser> allList = userMapper.selectAllUser();
-//			List<SysUser>  mulUserList = treeCategoryData(allList, user.getId());
-//			List<String> userIds = new ArrayList<>();
-//			mulUserList.forEach(sysUser -> userIds.add(sysUser.getId()));
-//			userIds.add(user.getId());
-//			cwjsPolicyInfo.setCreateUserIds(userIds);
-//			if(!Check.isNull(cwjsPolicyInfo.getCreateUserId())&& userIds.contains(cwjsPolicyInfo.getCreateUserId())){//总监精确查询了某个销售id的政策,那么先看这个销售是不是他的手下
-//				List<String> newUserIds = new ArrayList<>();
-//				newUserIds.add(cwjsPolicyInfo.getCreateUserId());
-//				cwjsPolicyInfo.setCreateUserIds(newUserIds);
-//			}
-//		}else {	//其他的人,谁登录看谁自己的
-//			List<String> userIds = new ArrayList<>();
-//			userIds.add(user.getId());
-//			cwjsPolicyInfo.setCreateUserIds(userIds);
-//		}
-
-		PageHelper.startPage(pageNo,pageSize);
-		List<CwjsPolicyInfo> cwjsPolicyInfos = cwjsPolicyInfoService.queryPageList(cwjsPolicyInfo);
+        /**如果是管理员,就全部看,该搜索搜索,不搜索就全看*/
+
+        /**如果不是管理员,也不是审核人员。看自己和自己下属的所有政策。*/
+        if(!"admin".equalsIgnoreCase(roleCode) && !"finance".equalsIgnoreCase(roleCode) && Check.isNull(cwjsCompanyApprovalUserList)){
+//			Set<String> userIds= materialReportOverViewService.recursiveQuerySubordinate(userId);
+			List<String> userIds = cwjsPolicyInfoService.getAllSubordinate(userId);
+			List<CwjsPolicyInfo> removeList = new ArrayList<>();
+            cwjsPolicyInfoList.forEach(cwjsPolicy -> {
+                if(!userIds.contains(cwjsPolicy.getCreateUserId())){
+                    removeList.add(cwjsPolicy);
+                }
+            });
+            cwjsPolicyInfoList.removeAll(removeList);
+        }
+        /**如果不是管理员,是审核人员。看自己创建的和自己下属的所有政策、和该自己审核。*/
+        if(!"admin".equalsIgnoreCase(roleCode) && !"finance".equalsIgnoreCase(roleCode) && !Check.isNull(cwjsCompanyApprovalUserList)){
+//			Set<String> userIds= materialReportOverViewService.recursiveQuerySubordinate(userId);
+			List<String> userIds = cwjsPolicyInfoService.getAllSubordinate(userId);
+
+			List<CwjsPolicyInfo> removeList = new ArrayList<>();
+            cwjsPolicyInfoList.forEach(cwjsPolicy -> {
+                if(!userIds.contains(cwjsPolicy.getCreateUserId()) && !userId.equalsIgnoreCase(cwjsPolicy.getApprovedProgress())){
+                    removeList.add(cwjsPolicy);
+                }
+            });
+            cwjsPolicyInfoList.removeAll(removeList);
+        }
+
+
+		cwjsPolicyInfoList.sort((CwjsPolicyInfo o1, CwjsPolicyInfo o2) -> o2.getCreateTime().after(o1.getCreateTime()) ? 1 : -1 );
+		List<CwjsPolicyInfo> cwjsPolicyInfos = ListPageUtil.page(cwjsPolicyInfoList, pageSize, pageNo);
+
 		cwjsPolicyInfos.forEach(cwjsPolicy ->{
 			CwjsPolicyApprovalLog log = policyApprovalLogMapper.getOneByPolicyId(cwjsPolicy.getId());	//添加日志记录最新的第一条
 			if(!Check.isNull(log)){
 				cwjsPolicy.setApprovalContent(log.getApprovalContent());
 			}
-			if(Check.isNull(cwjsCompanyApprovalUserList)){	//普通销售
-				if(cwjsPolicy.getApprovedStatus() == 4){
-					cwjsPolicy.setOperation("编辑|提交审核");
-				}else{
-					cwjsPolicy.setOperation("查看");
-				}
-			}else{	//审核人员
-				if(cwjsPolicy.getApprovedStatus() == 1 || cwjsPolicy.getApprovedStatus() == 2){
-					cwjsPolicy.setOperation("查看|审核通过|审核拒绝");
-				}else{
-					cwjsPolicy.setOperation("查看");
-				}
-			}
+            cwjsPolicy.setOperation("查看");  //所有人只要能看到就能有查看的按钮
+			if(userId.equals(cwjsPolicy.getCreateUserId()) && cwjsPolicy.getApprovedStatus() == 4){ //创建人是自己且状态是审核拒绝的
+                cwjsPolicy.setOperation("查看|编辑|提交审核");
+            }
+
+			if(userId.equals(cwjsPolicy.getApprovedProgress()) && (cwjsPolicy.getApprovedStatus() == 1 || cwjsPolicy.getApprovedStatus() == 2)){
+                cwjsPolicy.setOperation("查看|审核通过|审核拒绝");
+            }
+
+			UserCompany userCompany = userCompanyService.getByUserId(cwjsPolicy.getCreateUserId());
 
+			if(!Check.isNull(userCompany) && Check.isNull(cwjsPolicy.getCreateUserName())){
+				cwjsPolicy.setCreateUserName(userCompany.getUserName());
+			}
+			CwjsCompanySubject cwjsCompanySubject = companySubjectService.getById(cwjsPolicy.getCompanySubjectId());
+			cwjsPolicy.setCompanySubjectName(cwjsCompanySubject.getCompanySubjectName());
+			cwjsPolicy.setAreaInfo(cwjsCompanySubject.getAreaInfo());
 		});
 		PageInfo<CwjsPolicyInfo> pageInfo = new PageInfo<>(cwjsPolicyInfos);
+		pageInfo.setTotal(cwjsPolicyInfoList.size());
+		pageInfo.setPageSize(pageSize);
+		pageInfo.setPageNum(pageNo);
 		return Result.successMsg("成功。",pageInfo);
 	}
 
 
+
+	@ApiOperation(value="政策信息表-获取当前公司的销售", notes="政策信息表-获取当前公司的销售")
+	@GetMapping(value = "/getAllSaleList")
+	public Result getAllSaleList(@RequestParam(name="userId",required=true) String userId){
+        String roleCode = roleService.getRoleCodeByUserId(userId);
+        List<JSONObject> allSaleList;
+        if("admin".equalsIgnoreCase(roleCode) || "finance".equalsIgnoreCase(roleCode)){
+            allSaleList = cwjsPolicyInfoService.getAllSale();
+        }else{
+            allSaleList = cwjsPolicyInfoService.getAllSaleByUserId(userId);
+        }
+		return Result.OK(allSaleList);
+	}
+
 	 /**
-	  * 分页列表查询
+	  * 获取当前用户的公司、区域、和主体
 	  * @param userId
 	  * @return
 	  */
-
-	 @ApiOperation(value="政策信息表-分页列表查询", notes="政策信息表-分页列表查询")
+	 @ApiOperation(value="政策信息表-获取当前用户的公司、区域、和主体", notes="政策信息表-获取当前用户的公司、区域、和主体")
 	 @GetMapping(value = "/queryAeraByUserId")
-	 public Result<JSONObject> queryAeraByUserId(@RequestParam(name="userId",required=true) String userId) {
-		 Result<JSONObject> result = new Result<>();
-		 UserCompany userCompany = userCompanyService.getByUserId(userId);
-		 List<CwjsCompanySubject> companySubjects = companySubjectMapper.queryByCompanyId(userCompany.getCompanyId());
-		 JSONObject jsonObject = new JSONObject();
-		 jsonObject.put("UserCompany",userCompany);
-		 jsonObject.put("companySubjects",companySubjects);
+	 public Result<JSONArray> queryAeraByUserId(@RequestParam(name="userId",required=true) String userId) {
+		 Result<JSONArray> result = new Result<>();
+		 List<UserCompany> userCompany = userCompanyService.getAllByUserId(userId);
+		 JSONArray res = new JSONArray();
+		 userCompany.forEach(user -> {
+			 List<CwjsCompanySubject> companySubjects = companySubjectMapper.queryAllSubjectName();
+			 JSONObject jsonObject = new JSONObject();
+			 jsonObject.put("UserCompany",userCompany);
+			 jsonObject.put("companySubjects",companySubjects);
+			 res.add(jsonObject);
+		 });
 		 result.setSuccess(true);
-		 result.setResult(jsonObject);
+		 result.setResult(res);
 		 return result;
 	 }
 
@@ -244,7 +298,23 @@ public class CwjsPolicyInfoController {
 	public Result<CwjsPolicyInfo> add(@RequestBody CwjsPolicyInfo cwjsPolicyInfo) {
 		Result<CwjsPolicyInfo> result = new Result<>();
 		try {
-			cwjsPolicyInfo.setApprovedStatus(1);
+			cwjsPolicyInfo.setApprovedStatus(1);	//新增出来的政策全部都是待审核状态
+			String companySubjectName = cwjsPolicyInfo.getCompanySubjectName();
+			String areaInfo = cwjsPolicyInfo.getAreaInfo();
+			Integer companySubjectId = companySubjectMapper.queryIdBySubjectNameAndArea(companySubjectName, areaInfo);
+			if(Check.isNull(companySubjectId)){
+				return  Result.errorMsg("您选择的区域和公司主体系统不支持,请联系开发人员开放");
+			}
+			cwjsPolicyInfo.setCompanySubjectId(companySubjectId);
+			List<CwjsCompanyApprovalUser> cwjsCompanyApprovalUsers = companyApprovalUserMapper.queryByCompanySubjectId(companySubjectId);
+			if(Check.isNull(cwjsCompanyApprovalUsers)){
+				return Result.errorMsg("此业务线暂时无审核人员,提交审核无效,请联系开发人员添加此区域主体的审核人员");
+			}
+			cwjsCompanyApprovalUsers.forEach(cwjsCompanyApprovalUser -> {
+				if(cwjsCompanyApprovalUser.getLevel() == 0){
+					cwjsPolicyInfo.setApprovedProgress(cwjsCompanyApprovalUser.getApprovalUserId());
+				}
+			});
 			cwjsPolicyInfoService.save(cwjsPolicyInfo);
 			JSONArray products = cwjsPolicyInfo.getPolicyProductName();
 			List<CwjsPolicyProduct> policyProductList = new ArrayList<>();
@@ -257,7 +327,13 @@ public class CwjsPolicyInfoController {
 				policyProductList.add(policyProduct);
 			});
 			cwjsPolicyProductService.saveBatch(policyProductList);
-			//先给first发企业微信
+			//先给first发企业微信 -- 先注释掉
+			JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId(cwjsPolicyInfo.getApprovedProgress());
+			StringBuilder text = new StringBuilder();
+			text.append("您有一条销售政策需要审核,该客户为:");
+			text.append(cwjsPolicyInfo.getCompanyName());
+			text.append(",请及时登录助手平台-销售政策页面进行审核,谢谢!");
+			corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
 			result.success("添加成功!");
 		} catch (Exception e) {
 			log.error(e.getMessage(),e);
@@ -279,6 +355,28 @@ public class CwjsPolicyInfoController {
 		if(cwjsPolicyInfoEntity==null) {
 			result.error500("未找到对应实体");
 		}else {
+			String companySubjectName = cwjsPolicyInfo.getCompanySubjectName();
+			String areaInfo = cwjsPolicyInfo.getAreaInfo();
+			Integer companySubjectId = companySubjectMapper.queryIdBySubjectNameAndArea(companySubjectName, areaInfo);
+			if(Check.isNull(companySubjectId)){
+				return  Result.errorMsg("您要修改的区域和公司主体系统不支持,请联系开发人员开放");
+			}
+			cwjsPolicyInfo.setCompanySubjectId(companySubjectId);
+			//删除旧的产品
+			cwjsPolicyProductService.deleteProductsByPolicyId(cwjsPolicyInfo.getId());
+			//保存新的产品
+			List<CwjsPolicyProduct> policyProductList = new ArrayList<>();
+			JSONArray products = cwjsPolicyInfo.getPolicyProductName();
+			products.forEach(productName -> {
+				CwjsPolicyProduct policyProduct = new CwjsPolicyProduct();
+				policyProduct.setCreateUserId(cwjsPolicyInfo.getCreateUserId());
+				policyProduct.setDelFlag(0);
+				policyProduct.setPolicyProductName((String) productName);
+				policyProduct.setPolicyId(cwjsPolicyInfo.getId());
+				policyProductList.add(policyProduct);
+			});
+			cwjsPolicyProductService.saveBatch(policyProductList);
+
 			boolean ok = cwjsPolicyInfoService.updateById(cwjsPolicyInfo);
 			if(ok) {
 				result.success("修改成功!");
@@ -297,7 +395,7 @@ public class CwjsPolicyInfoController {
 	 */
 	@ApiOperation(value="政策信息表-通过id查询", notes="政策信息表-通过id查询")
 	@GetMapping(value = "/queryById")
-	public Result<CwjsPolicyInfo> queryById(@RequestParam(name="id",required=true) String id) throws ParseException {
+	public Result<CwjsPolicyInfo> queryById(@RequestParam(name="id",required=true) Integer id) throws ParseException {
 		Result<CwjsPolicyInfo> result = new Result<>();
 		CwjsPolicyInfo cwjsPolicyInfo = cwjsPolicyInfoService.getById(id);
 		Date startDate = DateUtils.parseDate(cwjsPolicyInfo.getPolicyStartDate(),"yyyy-MM-dd");
@@ -427,4 +525,47 @@ public class CwjsPolicyInfoController {
       return Result.ok("文件导入失败!");
   }
 
+
+  @GetMapping(value = "/weiXinNotice")
+  public Result weiXinNotice(){
+	  CwjsPolicyInfo cwjsPolicyInfo = new CwjsPolicyInfo();
+	  cwjsPolicyInfo.setApprovedStatus(1);
+	  //待审核的状态的 政策
+	  List<CwjsPolicyInfo> cwjsPolicyInfoListStatus1 = cwjsPolicyInfoService.queryPageList(cwjsPolicyInfo);
+	  cwjsPolicyInfoListStatus1.forEach(cwjsPolicy -> {
+		  JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId(cwjsPolicy.getApprovedProgress());
+		  StringBuilder text = new StringBuilder();
+		  text.append("您有一条销售政策需要审核,该客户为:");
+		  text.append(cwjsPolicy.getCompanyName());
+		  text.append(",请及时登录助手平台-销售政策页面进行审核,谢谢!");
+		  corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
+	  });
+
+	  //审核中的状态的政策
+	  cwjsPolicyInfo.setApprovedStatus(2);
+	  List<CwjsPolicyInfo> cwjsPolicyInfoListStatus2 = cwjsPolicyInfoService.queryPageList(cwjsPolicyInfo);
+	  cwjsPolicyInfoListStatus2.forEach(cwjsPolicy -> {
+		  JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId(cwjsPolicy.getApprovedProgress());
+		  StringBuilder text = new StringBuilder();
+		  text.append("您有一条销售政策需要审核,该客户为:");
+		  text.append(cwjsPolicy.getCompanyName());
+		  text.append(",请及时登录助手平台-销售政策页面进行审核,谢谢!");
+		  corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
+	  });
+
+	  //审核拒绝的状态的政策
+	  cwjsPolicyInfo.setApprovedStatus(4);
+	  List<CwjsPolicyInfo> cwjsPolicyInfoListStatus4 = cwjsPolicyInfoService.queryPageList(cwjsPolicyInfo);
+	  cwjsPolicyInfoListStatus4.forEach(cwjsPolicy -> {
+		  JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId(cwjsPolicy.getCreateUserId());
+		  StringBuilder text = new StringBuilder();
+		  text.append("您有一条销售政策审核未通过,该客户为:");
+		  text.append(cwjsPolicy.getCompanyName());
+		  text.append(",请及时登录助手平台-销售政策页面进行政策修改,谢谢!");
+		  corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
+	  });
+
+  	return Result.OK();
+  }
+
 }

+ 2 - 2
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/entity/CwjsCompanyApprovalUser.java

@@ -35,7 +35,7 @@ public class CwjsCompanyApprovalUser {
 	/**公司id*/
 	@Excel(name = "公司id", width = 15)
     @ApiModelProperty(value = "公司id")
-	private String companyId;
+	private String companySubjectId;
 	/**审核人员id*/
 	@Excel(name = "审核人员id", width = 15)
     @ApiModelProperty(value = "审核人员id")
@@ -47,7 +47,7 @@ public class CwjsCompanyApprovalUser {
 	/**是否是终审(0:不是 ,1:是)*/
 	@Excel(name = "是否是终审(0:不是 ,1:是)", width = 15)
     @ApiModelProperty(value = "是否是终审(0:不是 ,1:是)")
-	private String level;
+	private Integer level;
 	/**删除状态(0,正常,1已删除)*/
 	@Excel(name = "删除状态(0,正常,1已删除)", width = 15)
     @ApiModelProperty(value = "删除状态(0,正常,1已删除)")

+ 4 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/entity/CwjsCompanySubject.java

@@ -40,6 +40,10 @@ public class CwjsCompanySubject {
 	@Excel(name = "公司主体名称", width = 15)
     @ApiModelProperty(value = "公司主体名称")
 	private String companySubjectName;
+	/**区域*/
+	@Excel(name = "区域", width = 15)
+	@ApiModelProperty(value = "区域")
+	private String areaInfo;
 	/**删除状态(0,正常,1已删除)*/
 	@Excel(name = "删除状态(0,正常,1已删除)", width = 15)
     @ApiModelProperty(value = "删除状态(0,正常,1已删除)")

+ 16 - 7
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/entity/CwjsPolicyInfo.java

@@ -47,14 +47,10 @@ public class CwjsPolicyInfo {
 	@Excel(name = "媒体类型", width = 15)
     @ApiModelProperty(value = "媒体类型")
 	private Integer mediaType;
-	/**区域 华北,华南,华东*/
-	@Excel(name = "区域 华北,华南,华东", width = 15)
-    @ApiModelProperty(value = "区域 华北,华南,华东")
-	private String userCompanyId;
 	/**我司主体*/
 	@Excel(name = "我司主体", width = 15)
     @ApiModelProperty(value = "我司主体")
-	private String companySubjectId;
+	private Integer companySubjectId;
 	/**集团简称*/
 	@Excel(name = "集团简称", width = 15)
     @ApiModelProperty(value = "集团简称")
@@ -63,6 +59,8 @@ public class CwjsPolicyInfo {
 	@Excel(name = "状态 0:待审核 1:审核中 2:审核通过3:审核拒绝", width = 15)
     @ApiModelProperty(value = "状态 0:待审核 1:审核中 2:审核通过3:审核拒绝")
 	private Integer approvedStatus;
+	@ApiModelProperty(value = "审核进度,当前该谁审核")
+	private String approvedProgress;
 	/**是否预付:0:否  1:是 */
 	@Excel(name = "是否预付:0:否  1:是 ", width = 15)
     @ApiModelProperty(value = "是否预付:0:否  1:是 ")
@@ -115,6 +113,9 @@ public class CwjsPolicyInfo {
 	@Excel(name = "创建人", width = 15)
 	@ApiModelProperty(value = "创建人")
 	private String createUserId;
+	@Excel(name = "创建人名字", width = 15)
+	@ApiModelProperty(value = "创建人名字")
+	private String createUserName;
 	/**创建时间*/
     @ApiModelProperty(value = "创建时间")
 	private Date createTime;
@@ -129,9 +130,9 @@ public class CwjsPolicyInfo {
 	private String productName;
 
 	@TableField(exist = false)
-	private Date startTime;
+	private String startTime;
 	@TableField(exist = false)
-	private Date endTime;
+	private String endTime;
 	@TableField(exist = false)
 	private List<String> createUserIds;
 	@TableField(exist = false)
@@ -140,4 +141,12 @@ public class CwjsPolicyInfo {
 	private String approvalContent;
 	@TableField(exist = false)
 	private String operation;
+	@TableField(exist = false)
+	private String nickName;
+	@TableField(exist = false)
+	private String companySubjectName;
+
+	/**区域 华北,华南,华东*/
+	@TableField(exist = false)
+	private String areaInfo;
 }

+ 5 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsCompanyApprovalUserMapper.java

@@ -13,7 +13,11 @@ import org.jeecg.ctop.finance.policy.entity.CwjsCompanyApprovalUser;
  * @version V1.0
  */
 public interface CwjsCompanyApprovalUserMapper extends BaseMapper<CwjsCompanyApprovalUser> {
-    CwjsCompanyApprovalUser queryByCompanyIdAndUserId(String companyId, String userId);
+    CwjsCompanyApprovalUser queryByCompanySubjectIdAndUserId(Integer companySubjectId, String userId);
 
     List<CwjsCompanyApprovalUser> queryByUserId(String userId);
+
+    List<CwjsCompanyApprovalUser> queryByCompanySubjectId(Integer companySubjectId);
+
+    CwjsCompanyApprovalUser queryByCompanySubjectIdAndLevel(Integer companySubjectId, Integer level);
 }

+ 5 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsCompanySubjectMapper.java

@@ -13,5 +13,9 @@ import org.jeecg.ctop.finance.policy.entity.CwjsCompanySubject;
  * @version V1.0
  */
 public interface CwjsCompanySubjectMapper extends BaseMapper<CwjsCompanySubject> {
-    List<CwjsCompanySubject> queryByCompanyId(String companyId);
+    List<CwjsCompanySubject> queryAllSubjectName();
+
+    List<CwjsCompanySubject>  queryByCompanyId(String companyId);
+
+    Integer queryIdBySubjectNameAndArea(String companySubjectName, String areaInfo);
 }

+ 5 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsPolicyInfoMapper.java

@@ -2,6 +2,7 @@ package org.jeecg.ctop.finance.policy.mapper;
 
 import java.util.List;
 
+import com.alibaba.fastjson.JSONObject;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.ctop.finance.policy.entity.CwjsPolicyInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -14,4 +15,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface CwjsPolicyInfoMapper extends BaseMapper<CwjsPolicyInfo> {
     List<CwjsPolicyInfo> selectPolicyInfos(CwjsPolicyInfo policyInfo);
+
+    List<JSONObject> getAllSale();
+
+    List<JSONObject> getAllSaleByUserId(String userId);
 }

+ 3 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/CwjsPolicyProductMapper.java

@@ -13,5 +13,7 @@ import org.jeecg.ctop.finance.policy.entity.CwjsPolicyProduct;
  * @version V1.0
  */
 public interface CwjsPolicyProductMapper extends BaseMapper<CwjsPolicyProduct> {
-    List<CwjsPolicyProduct> queryProductsByPolicyId(String policyId);
+    List<CwjsPolicyProduct> queryProductsByPolicyId(Integer policyId);
+
+    void deleteProductsByPolicyId(Integer policyId);
 }

+ 9 - 3
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsCompanyApprovalUserMapper.xml

@@ -1,10 +1,16 @@
 <?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="org.jeecg.ctop.finance.policy.mapper.CwjsCompanyApprovalUserMapper">
-    <select id="queryByCompanyIdAndUserId" resultType="org.jeecg.ctop.finance.policy.entity.CwjsCompanyApprovalUser">
-        select * from ctop_cwjs_company_approval_user where company_id = #{companyId} and create_user_id = #{userId}  limit 1
+    <select id="queryByCompanySubjectIdAndUserId" resultType="org.jeecg.ctop.finance.policy.entity.CwjsCompanyApprovalUser">
+        select * from ctop_cwjs_company_approval_user where company_subject_id = #{companySubjectId} and approval_user_id = #{userId}  limit 1
     </select>
     <select id="queryByUserId" resultType="org.jeecg.ctop.finance.policy.entity.CwjsCompanyApprovalUser">
-        select * from ctop_cwjs_company_approval_user where create_user_id = #{userId}
+        select * from ctop_cwjs_company_approval_user where approval_user_id = #{userId}
+    </select>
+    <select id="queryByCompanySubjectId" resultType="org.jeecg.ctop.finance.policy.entity.CwjsCompanyApprovalUser">
+        select * from ctop_cwjs_company_approval_user where company_subject_id = #{companySubjectId}
+    </select>
+    <select id="queryByCompanySubjectIdAndLevel" resultType="org.jeecg.ctop.finance.policy.entity.CwjsCompanyApprovalUser">
+        select * from ctop_cwjs_company_approval_user where company_subject_id = #{companySubjectId} and level = #{level}
     </select>
 </mapper>

+ 7 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsCompanySubjectMapper.xml

@@ -1,7 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.ctop.finance.policy.mapper.CwjsCompanySubjectMapper">
+    <select id="queryAllSubjectName" resultType="org.jeecg.ctop.finance.policy.entity.CwjsCompanySubject">
+        select distinct company_subject_name from ctop_cwjs_company_subject
+    </select>
     <select id="queryByCompanyId" resultType="org.jeecg.ctop.finance.policy.entity.CwjsCompanySubject">
-        select * from ctop_cwjs_company_subject where company_id = {companyId}
+        select * from ctop_cwjs_company_subject where company_id = #{companyId}
+    </select>
+    <select id="queryIdBySubjectNameAndArea" resultType="integer">
+        select id from ctop_cwjs_company_subject where company_subject_name = #{companySubjectName} and area_info = #{areaInfo}
     </select>
 </mapper>

+ 38 - 5
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsPolicyInfoMapper.xml

@@ -6,11 +6,12 @@
         where 1=1
         <if test="companyName != null and companyName != ''">and t2.company_name like concat(concat('%',#{companyName}),'%')</if>
         <if test="advertiserName != null and advertiserName != ''">and t2.advertiser_name like concat(concat('%',#{advertiserName}),'%')</if>
-        <if test="productName != null and productName != ''">and t2.policy_product_name like concat(concat('%',#{productName}),'%')</if>
+        <if test="productName != null and productName != ''">and t1.policy_product_name like concat(concat('%',#{productName}),'%')</if>
         <if test="dianPayCompanyName != null and dianPayCompanyName != ''">and t2.dian_pay_company_name like concat(concat('%',#{dianPayCompanyName}),'%')</if>
-        <if test="mediaType != null and mediaType != ''">and t2.media_type = #{mediaType}</if>
-        <if test="rebateType != null and rebateType != ''">and t2.rebate_type = #{rebateType}</if>
+        <if test="mediaType != null">and t2.media_type = #{mediaType}</if>
+        <if test="rebateType != null">and t2.rebate_type = #{rebateType}</if>
         <if test="createUserId != null and createUserId != ''">and t2.create_user_id = #{createUserId}</if>
+        <if test="createUserName != null and createUserName != ''">and t2.create_user_name = #{createUserName}</if>
         <if test="createUserIds != null and createUserIds != ''">and  t2.create_user_id in
          <foreach item="item" index="index" collection="createUserIds" open="(" separator="," close=")">
             #{item}
@@ -19,10 +20,42 @@
             <foreach item="item" index="index" collection="companySubjectIds" open="(" separator="," close=")">
                 #{item}
             </foreach></if>
-        <if test="promotionType != null and promotionType != ''">and t2.promotion_type = #{promotionType}</if>
+        <if test="promotionType != null">and t2.promotion_type = #{promotionType}</if>
         <if test="approvedStatus != null and approvedStatus != ''">and t2.approved_status = #{approvedStatus}</if>
         <if test="startTime != null and startTime != ''">and t2.create_time &gt;= #{startTime}</if>
         <if test="endTime != null and endTime != ''">and t2.create_time &lt;= #{endTime}</if>
-        order by create_time desc
+        <if test="approvedProgress != null and approvedProgress != ''">and t2.approved_progress = #{approvedProgress}</if>
+        order by t2.create_time desc
+    </select>
+
+    <select id="getAllSale" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.user_id AS 'userId',
+	LEFT (t1.company_name, 2) AS 'companyName',
+	t3.role_name AS 'ruleName',
+	t1.user_name AS 'userName'
+        FROM
+            user_company t1
+            LEFT JOIN sys_user_role t2
+        ON t1.user_id = t2.user_id
+            LEFT JOIN sys_role t3 ON t2.role_id = t3.id
+        WHERE
+            t3.role_code IN (
+            'externalSale'
+            , 'saleDirector'
+            , 'sale'
+            , 'saleAssistant'
+            , 'salesSupportManager'
+            , 'saleAm'
+            )
+
+    </select>
+
+    <select id="getAllSaleByUserId" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.create_user_id AS 'userId',
+	           t1.create_user_name AS 'userName'
+        FROM
+            ctop_cwjs_policy_info t1
+        WHERE
+            t1.approved_progress = #{userId} or t1.create_user_id = #{userId}
     </select>
 </mapper>

+ 4 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/mapper/xml/CwjsPolicyProductMapper.xml

@@ -4,4 +4,8 @@
     <select id="queryProductsByPolicyId" resultType="org.jeecg.ctop.finance.policy.entity.CwjsPolicyProduct">
         select * from ctop_cwjs_policy_product where policy_id = #{policyId} and del_flag = 0
     </select>
+
+    <delete id="deleteProductsByPolicyId">
+        delete from ctop_cwjs_policy_product where policy_id = #{policyId}
+    </delete>
 </mapper>

+ 9 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/ICwjsPolicyInfoService.java

@@ -1,5 +1,8 @@
 package org.jeecg.ctop.finance.policy.service;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.ctop.finance.policy.entity.CwjsPolicyInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -13,4 +16,10 @@ import java.util.List;
  */
 public interface ICwjsPolicyInfoService extends IService<CwjsPolicyInfo> {
     List<CwjsPolicyInfo> queryPageList(CwjsPolicyInfo policyInfo);
+
+    List<JSONObject> getAllSale();
+
+    List<JSONObject> getAllSaleByUserId(String userId);
+
+    List<String> getAllSubordinate(String userId);
 }

+ 3 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/ICwjsPolicyProductService.java

@@ -13,5 +13,7 @@ import java.util.List;
  */
 public interface ICwjsPolicyProductService extends IService<CwjsPolicyProduct> {
 
-    List<CwjsPolicyProduct> queryProductsByPolicyId(String policyId);
+    List<CwjsPolicyProduct> queryProductsByPolicyId(Integer policyId);
+
+    void deleteProductsByPolicyId(Integer policyId);
 }

+ 1 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/impl/CwjsPolicyApprovalLogServiceImpl.java

@@ -20,7 +20,7 @@ public class CwjsPolicyApprovalLogServiceImpl extends ServiceImpl<CwjsPolicyAppr
     @Resource
     CwjsPolicyApprovalLogMapper policyApprovalLogMapper;
 
-
+    @Override
     public CwjsPolicyApprovalLog getOneByPolicyId(Integer policyId){
         return policyApprovalLogMapper.getOneByPolicyId(policyId);
     }

+ 49 - 3
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/impl/CwjsPolicyInfoServiceImpl.java

@@ -1,9 +1,15 @@
 package org.jeecg.ctop.finance.policy.service.impl;
 
+import cn.com.ctop.common.module.mapper.SysUserMapper;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
+import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.ctop.finance.policy.entity.CwjsPolicyInfo;
 import org.jeecg.ctop.finance.policy.mapper.CwjsPolicyInfoMapper;
 import org.jeecg.ctop.finance.policy.service.ICwjsPolicyInfoService;
+import org.jeecg.ctop.finance.policy.utils.Check;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -29,8 +35,10 @@ public class CwjsPolicyInfoServiceImpl extends ServiceImpl<CwjsPolicyInfoMapper,
         List<CwjsPolicyInfo> result = new ArrayList<>();
         //1.过滤所有已通过审核的政策到结果表中
         policyInfoList.forEach(policy->{
-            if(policy.getApprovedStatus() == 2){
-                policy.getPolicyProductName().add(policy.getProductName());
+            if(policy.getApprovedStatus() == 3){
+                JSONArray policyProductName = new JSONArray();
+                policyProductName.add(policy.getProductName());
+                policy.setPolicyProductName(policyProductName);
                 result.add(policy);
             }
         });
@@ -41,7 +49,9 @@ public class CwjsPolicyInfoServiceImpl extends ServiceImpl<CwjsPolicyInfoMapper,
             if(map.containsKey(policy.getId())){
                 map.get(policy.getId()).getPolicyProductName().add(policy.getProductName());
             }else{
-                policy.getPolicyProductName().add(policy.getProductName());
+                JSONArray policyProductName = new JSONArray();
+                policyProductName.add(policy.getProductName());
+                policy.setPolicyProductName(policyProductName);
                 map.put(policy.getId(),policy);
             }
         });
@@ -50,6 +60,42 @@ public class CwjsPolicyInfoServiceImpl extends ServiceImpl<CwjsPolicyInfoMapper,
         for(Integer key : keys){
             result.add(map.get(key));
         }
+
+
         return result;
     }
+
+    @Override
+    public List<JSONObject> getAllSale(){
+        return policyInfoMapper.getAllSale();
+    }
+
+    @Override
+    public List<JSONObject> getAllSaleByUserId(String userId){
+        return policyInfoMapper.getAllSaleByUserId(userId);
+    }
+
+
+    @Autowired
+    private SysUserMapper userMapper;
+    @Override
+    public List<String> getAllSubordinate(String userId){
+        List<SysUser> allList = userMapper.selectAllUser();
+        List<SysUser> mulUserList = treeCategoryData(allList, userId);
+        List<String> userIds = new ArrayList<>();
+        userIds.add(userId);
+        mulUserList.forEach(mulUser -> userIds.add(mulUser.getId()));
+        return userIds;
+    }
+    public List<SysUser> treeCategoryData(List<SysUser> allList, String leaderId) {
+        List<SysUser> mapList = new ArrayList<>();
+        for (SysUser vo : allList) {
+            if (leaderId.equals(vo.getLeaderId())){
+                mapList.add(vo);
+                mapList.addAll(treeCategoryData(allList,vo.getId()));
+            }
+        }
+        return mapList;
+
+    }
 }

+ 7 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/service/impl/CwjsPolicyProductServiceImpl.java

@@ -22,7 +22,13 @@ public class CwjsPolicyProductServiceImpl extends ServiceImpl<CwjsPolicyProductM
     CwjsPolicyProductMapper policyProductMapper;
 
     @Override
-    public List<CwjsPolicyProduct> queryProductsByPolicyId(String policyId){
+    public List<CwjsPolicyProduct> queryProductsByPolicyId(Integer policyId){
         return policyProductMapper.queryProductsByPolicyId(policyId);
     }
+
+
+    @Override
+    public void deleteProductsByPolicyId(Integer policyId){
+        policyProductMapper.deleteProductsByPolicyId(policyId);
+    }
 }

+ 19 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/policy/utils/ListPageUtil.java

@@ -0,0 +1,19 @@
+package org.jeecg.ctop.finance.policy.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ListPageUtil {
+
+    public static <T> List<T> page(List<T> dataList, int pageSize, int currentPage) {
+        List<T> currentPageList = new ArrayList<>();
+        if (dataList != null && dataList.size() > 0) {
+            int currIdx = (currentPage > 1 ? (currentPage - 1) * pageSize : 0);
+            for (int i = 0; i < pageSize && i < dataList.size() - currIdx; i++) {
+                T data = dataList.get(currIdx + i);
+                currentPageList.add(data);
+            }
+        }
+        return currentPageList;
+    }
+}

+ 1 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/DemoReportController.java

@@ -41,7 +41,7 @@ import java.util.Map;
 
 @Slf4j
 @RestController
-@RequestMapping("/finance/exportReportDemoController")
+@RequestMapping("/exportReportDemoController")
 public class DemoReportController {
 
     @Autowired

+ 9 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/ExportReportController.java

@@ -19,7 +19,7 @@ import javax.servlet.http.HttpServletResponse;
 
 @Slf4j
 @RestController
-@RequestMapping("/finance/exportReportController")
+@RequestMapping("/exportReportController")
 public class ExportReportController {
 
     @Autowired
@@ -63,4 +63,12 @@ public class ExportReportController {
     }
 
 
+    @ApiOperation(value = "财务结算-给运营发送消息", notes = "财务结算-给运营发送消息")
+    @GetMapping(value = "/sendMessageToOperate")
+    public Result sendMessageToOperate(@RequestParam(value = "userId",required = false) String userId) {
+        return reportSettlementService.sendMessageToOperate(userId);
+
+    }
+
+
 }

+ 28 - 2
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/SettlementController.java

@@ -3,14 +3,20 @@ package org.jeecg.ctop.finance.settlement.controller;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.ctop.finance.policy.utils.Check;
 import org.jeecg.ctop.finance.settlement.entity.pojo.ctopCwjsSettlementInfo;
 
 
 import org.jeecg.ctop.finance.settlement.service.ISettlementInfoService;
+import org.jeecg.modules.ctop.service.IMaterialReportOverViewService;
+import org.jeecg.modules.system.service.ISysRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.HashSet;
+import java.util.Set;
+
 
 /**
  * Administrator
@@ -19,18 +25,38 @@ import org.springframework.web.multipart.MultipartFile;
 
 @Slf4j
 @RestController
-@RequestMapping("/finance/settLementController")
+@RequestMapping("/settLementController")
 public class SettlementController {
 
     @Autowired
     private ISettlementInfoService settlementInfoService;
 
+    @Autowired
+    private ISysRoleService sysRoleService;
+
+
+    @Autowired
+    private IMaterialReportOverViewService materialReportOverViewService;
+
     @ApiOperation(value="财务结算-账户列表查询", notes="财务结算-账户列表查询")
     @GetMapping(value = "/getSettlementList")
     public Result getSettlementList(ctopCwjsSettlementInfo settlementInfo,
                                                                       @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                                                       @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
-        //TODO 根据用户角色查询列表
+        //查询用户角色
+        String roleCode = sysRoleService.getRoleCodeByUserId(settlementInfo.getCreateUserId());
+        //普通用户
+        settlementInfo.setUserIds(new HashSet<String>(){{
+            add(settlementInfo.getCreateUserId());
+        }});
+        if ("admin".equals(roleCode)){
+            settlementInfo.setUserIds(null);
+            //销售总监
+        }else if ("saleDirector".equals(roleCode)){
+            //查询所有包含自己的下级
+            Set<String> subordinates= materialReportOverViewService.recursiveQuerySubordinate(settlementInfo.getCreateUserId());
+            settlementInfo.setUserIds(subordinates);
+        }
        return settlementInfoService.getSettlementList(settlementInfo,pageNo,pageSize);
     }
 

+ 41 - 3
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/SettlementFileController.java

@@ -10,12 +10,16 @@ import org.jeecg.ctop.finance.settlement.entity.pojo.ctopCwjsSettlementInfo;
 import org.jeecg.ctop.finance.settlement.entity.vo.SettlementFileParamsVo;
 import org.jeecg.ctop.finance.settlement.service.ISettlementFileInfoService;
 import org.jeecg.ctop.finance.settlement.service.ISettlementInfoService;
+import org.jeecg.modules.ctop.service.IMaterialReportOverViewService;
+import org.jeecg.modules.system.service.ISysRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 
 /**
@@ -25,23 +29,57 @@ import java.util.Map;
 
 @Slf4j
 @RestController
-@RequestMapping("/finance/settLementFileController")
+@RequestMapping("/settLementFileController")
 public class SettlementFileController {
 
     @Autowired
     private ISettlementFileInfoService settlementFileInfoService;
 
+
+    @Autowired
+    private ISysRoleService sysRoleService;
+
+
+    @Autowired
+    private IMaterialReportOverViewService materialReportOverViewService;
+
+
+
     @ApiOperation(value="结算单-结算单列表查询", notes="结算单-结算单列表查询")
     @GetMapping(value = "/getSettlementSheetList")
     public Result<PageInfo<Map<String,String>>> getSettlementSheetList(SettlementFileParamsVo paramsVo,
                                                                        @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                                                        @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
-        //TODO 根据用户角色查询列表
+        //查询用户角色
+        String roleCode = sysRoleService.getRoleCodeByUserId(paramsVo.getCreateUserId());
+
+        if ("admin".equals(roleCode)){
+            paramsVo.setOperatorUserIds(null);
+            paramsVo.setSaleUserIds(null);
+         //运营经理   touTiaoOperationManager-头条运营经理   kuaishouOperationManager-快手运营经理
+        }else if (roleCode.contains("OperationManager")){
+            //查询所有包含自己的下级
+            Set<String> operatorUserIds= materialReportOverViewService.recursiveQuerySubordinate(paramsVo.getCreateUserId());
+            paramsVo.setOperatorUserIds(operatorUserIds);
+        //运营助理 || 运营专员
+        }else if("operationAssistant".equals(roleCode) || "operator".equals(roleCode)){
+            paramsVo.setOperatorUserIds(new HashSet<String>(){{
+                add(paramsVo.getCreateUserId());
+            }});
+        //销售总监 || 销售支持经理
+        }else if("saleDirector".equals(roleCode) || "salesSupportManager".equals(roleCode)){
+            Set<String> saleUserIds= materialReportOverViewService.recursiveQuerySubordinate(paramsVo.getCreateUserId());
+            paramsVo.setSaleUserIds(saleUserIds);
+            //外部销售 || 销售AM || 销售助理 || 销售
+        }else if ("externalSale".equals(roleCode) || "saleAm".equals(roleCode) || "saleAssistant".equals(roleCode) || "sale".equals(roleCode)){
+            paramsVo.setSaleUserIds(new HashSet<String>(){{
+                add(paramsVo.getCreateUserId());
+            }});
+        }
        return settlementFileInfoService.getSettlementSheetList(paramsVo,pageNo,pageSize);
     }
 
 
-
     @ApiOperation(value="结算单-删除", notes="结算单-删除")
     @GetMapping(value = "/deleteSettlementFile")
     public Result deleteSettlementFile(SettlementFileParamsVo paramsVo) {

+ 4 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/entity/pojo/ctopCwjsSettlementInfo.java

@@ -8,6 +8,7 @@ import org.jeecg.common.aspect.annotation.Dict;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Set;
 
 /**
  * 财务结算 账户信息
@@ -103,4 +104,7 @@ public class ctopCwjsSettlementInfo implements Serializable {
      */
     private Date updateTime;
 
+
+    private Set<String> userIds;
+
 }

+ 5 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/entity/vo/SettlementFileParamsVo.java

@@ -7,6 +7,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Set;
 
 /**
  * 财务结算 结算单信息
@@ -75,4 +76,8 @@ public class SettlementFileParamsVo implements Serializable {
     private String endTime;
 
 
+
+    private Set<String> operatorUserIds;
+    private Set<String> saleUserIds;
+
 }

+ 15 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/ReportSettlementMapper.java

@@ -79,4 +79,19 @@ public interface ReportSettlementMapper {
 
 
 
+    /**
+     * 查询 所有已绑定用户的运营人员id
+     * @return
+     */
+    List<Map<String,Object>> getAccountOperateUserId();
+
+    /**
+     * 查询运营人员 绑定的账户 以及产品
+     * @return
+     */
+    List<Map<String,Object>> getAccountAndProductByOperate(String userId);
+
+
+
+
 }

+ 36 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/ReportSettlementMapper.xml

@@ -197,4 +197,40 @@
 
 
 
+    <!--  给运营人员发送微信通知 -->
+
+
+<!--  查询 所有已绑定用户的运营人员id -->
+    <select id="getAccountOperateUserId" resultType="java.util.LinkedHashMap">
+        SELECT user_id userId,user_name userName
+        from ctop_user_allocation
+        GROUP BY user_id
+    </select>
+
+    <!-- 查询运营人员 绑定的账户 以及产品 -->
+    <select id="getAccountAndProductByOperate" resultType="java.util.LinkedHashMap">
+        SELECT
+            c.user_id as userId,
+            c.user_name as userName,
+            c.account_id as accountId,
+            c.project_id as projectId,
+            p.product_id as productId,
+            d.product_name as productName
+        FROM
+            ctop_user_allocation c
+                LEFT JOIN ctop_project p ON c.project_id = p.id
+                LEFT JOIN ctop_product d ON p.product_id = d.id
+        WHERE
+            c.account_status = 0
+        AND p.product_id IS NOT NULL
+	AND c.user_id = #{userId}
+    </select>
+
+
+
+
+
+    <!--  给运营人员发送微信通知 -->
+
+
 </mapper>

+ 18 - 3
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/SettlementFileInfoMapper.xml

@@ -56,9 +56,6 @@
             <if test="createUserId !=null and createUserId != ''">
                 AND saleUserId = #{createUserId}
             </if>
-
-
-
             <if test="mediaId !=null and mediaId != ''">
                 AND media_id = #{mediaId}
             </if>
@@ -68,6 +65,24 @@
             <if test="endTime !=null and endTime != ''">
                 AND imageCreateTIme &lt;= #{endTime}
             </if>
+
+            <if test="operatorUserIds !=null and operatorUserIds != ''">
+                AND operateUserId in
+                <foreach collection="operatorUserIds" item="item" separator=","
+                         open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+
+            <if test="saleUserIds !=null and saleUserIds != ''">
+                AND saleUserId in
+                <foreach collection="saleUserIds" item="item" separator=","
+                         open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+
+
         </where>
 
         GROUP BY t.advertiserId,t.productId,t.uploadYears,t.operateUserId

+ 7 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/SettlementInfoMapper.xml

@@ -53,6 +53,13 @@
             <if test="endTime !=null and endTime != ''">
                 AND create_time &lt;= #{endTime}
             </if>
+            <if test="userIds !=null and userIds != ''">
+                AND create_user_id in
+              <foreach collection="userIds" item="item" separator=","
+                       open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
         </where>
     </select>
 

+ 5 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/IReportSettlementService.java

@@ -25,4 +25,9 @@ public interface IReportSettlementService {
 
     Result porfitReportKuaiShou(SettlementFileParamsVo paramsVo,HttpServletResponse response);
 
+
+
+
+    Result sendMessageToOperate(String userId);
+
 }

+ 57 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/serviceImpl/ReportSettlementServiceImpl.java

@@ -2,6 +2,10 @@ package org.jeecg.ctop.finance.settlement.service.serviceImpl;
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.utils.CorpWexinUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.*;
@@ -24,9 +28,12 @@ import javax.servlet.http.HttpServletResponse;
 import java.awt.image.BufferedImage;
 import java.io.*;
 import java.net.URLEncoder;
+import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 @Slf4j
@@ -36,6 +43,12 @@ public class ReportSettlementServiceImpl implements IReportSettlementService {
     @Resource
     private ReportSettlementMapper reportSettlementMapper;
 
+    @Resource
+    private CorpWexinUtils corpWexinUtils;
+    @Resource
+    private MailLogMapper mailLogMapper;
+
+
     @Override
     public List<SettlementReportBytedanceVo> getAccountTransactionDayBytedance() {
         return reportSettlementMapper.getAccountTransactionDayBytedance(null);
@@ -550,8 +563,51 @@ public class ReportSettlementServiceImpl implements IReportSettlementService {
     }
 
 
+    /**
+     *
+     * @description: 给运营发送消息
+     *
+     * @param userId
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     */
+    @Override
+    public Result sendMessageToOperate(String userId) {
+        int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
+        int productNum = 0;
+        int accountNum = 0;
+        String productInfo = null;
+        String message =  "运营人{0},您好!您{1}月份有{2}个产品的账户需要进行媒体后台消耗截图上传,共计{3}个账户。产品分别为:{4}。请及时上传,多谢配合!";
+
+        //查询所有 运营绑定的账户
+        List<Map<String,Object>> userList = reportSettlementMapper.getAccountOperateUserId();
+        for (Map<String, Object> userMap : userList) {
+             userId = userMap.get("userId").toString();
+            //查询运营下的 账户 和 产品信息
+            List<Map<String,Object>> productList = reportSettlementMapper.getAccountAndProductByOperate(userId);
+            if (Check.isNull(productList)){
+                continue;
+            }
+            //产品名称
+            List product = productList.stream().map(map -> map.get("productName")).distinct().collect(Collectors.toList());
+            productNum = product.size();
+            accountNum = productList.size();
+            productInfo = StringUtils.join(product.toArray(),"、");
+
+            //发送微信通知
+            JSONObject jsonObject =  mailLogMapper.getWChatIdByUserId("f990f815ecef43fab9cbe1bb22bb6d63");
+            String msg = MessageFormat.format(message,userMap.get("userName").toString(),month,productNum,accountNum,productInfo);
+            corpWexinUtils.sendMessageByWeChatId(jsonObject,msg);
+        }
+        return Result.successMsg("成功。",null);
+    }
 
 
-
+    public static void main(String[] args) {
+        String a =  "woshiwoshi{1}woshi{2}111{3}===";
+        String b = MessageFormat.format(a,"测试","我","你","结束");
+        System.out.println(a);
+        System.out.println(b);
+    }
 
 }

+ 3 - 3
jeecg-boot-finance/src/main/resources/application.yml

@@ -1,17 +1,17 @@
 server:
   port: 7005
   servlet:
-    context-path: /jeecg-boot-finance
+    context-path: /finance
 
 spring:
   application:
-    name: jeecg-boot-finance
+    name: jeecg-cloud-finance
   profiles:
     active: @activatedProperties@
   cloud:
     nacos:
       discovery:
         server-addr: 127.0.0.1:8848
-        service: jeecg-boot-finance
+        service: jeecg-cloud-finance
   main:
     allow-bean-definition-overriding: true

+ 19 - 0
jeecg-boot-finance/src/test/java/org/jeecg/modules/finance/FinanceTest.java

@@ -1,11 +1,16 @@
 package org.jeecg.modules.finance;
 
+import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.utils.CorpWexinUtils;
+import com.alibaba.fastjson.JSONObject;
 import org.jeecg.JeecgSystemApplication;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import javax.annotation.Resource;
+
 /**
  * zian Y
  * 2021/8/3
@@ -15,6 +20,20 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeecgSystemApplication.class)
 public class FinanceTest {
+    @Resource
+    CorpWexinUtils corpWexinUtils;
+    @Resource
+    MailLogMapper mailLogMapper;
+    @Test
+    public void weixin(){
+        JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId("26bbe90edc5b475ca41ec3f76aa65067");
+        StringBuilder text = new StringBuilder();
+        text.append("您有一条销售政策需要审核,该客户为:");
+        text.append("测试");
+        text.append(",请及时登录助手平台-销售政策页面进行审核,谢谢!");
+        corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
+    }
+
 
     @Test
     public void getAccountId(){

+ 5 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/MaterialAscription.java

@@ -40,6 +40,11 @@ public class MaterialAscription {
     private String planId;
     private String planName;
     /**
+     * 设计负责人
+     */
+    private String leaderId;
+    private String leaderName;
+    /**
      * 平面id
      */
     private String planeId;

+ 1 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/UserCompany.java

@@ -57,6 +57,7 @@ public class UserCompany {
     @ApiModelProperty(value = "公司名称")
     private String companyName;
 
+    private String nickName;
 
     private Date createTime;
     private Date updateTime;

+ 2 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/CtopOauthTokenMapper.java

@@ -59,4 +59,6 @@ public interface CtopOauthTokenMapper extends BaseMapper<CtopOauthToken> {
     List<CtopOauthToken> queryKsValidRuleAccountsToken();
 
     List<CtopOauthToken> queryTtValidRuleAccountsToken();
+
+    List<CtopOauthToken> selectTokensByProjectId(@Param("projectId") Long projectId);
 }

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/MaterialInfoMapper.java


+ 9 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/CtopOauthTokenMapper.xml

@@ -158,4 +158,13 @@
               )
     </select>
 
+    <select id="selectTokensByProjectId" resultType="cn.com.ctop.common.module.entity.CtopOauthToken">
+        select t1.*
+        from ctop_oauth_token t1
+        left join ctop_user_allocation t2
+        on t1.account_id = t2.account_id
+        where t2.account_status = 0
+        and t2.project_id = #{projectId}
+        group by account_id
+    </select>
 </mapper>

+ 3 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialInfoMapper.xml

@@ -126,6 +126,9 @@
         <if test="planId !=null and planId != ''">
             and ascription.plan_id = #{planId}
         </if>
+        <if test="leaderName !=null and leaderName != ''">
+            and ascription.leader_name like concat('%',#{leaderName},'%')
+        </if>
         <if test="status != null">
             and matInfo.status = #{status}
         </if>

+ 12 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/SysUserMapper.xml

@@ -7,8 +7,19 @@
 	</select>
 
     <!-- 根据用户名查询 -->
+    <!-- 修改前的版本select * from  sys_user  where username = #{username} and del_flag = 0 -->
     <select id="getUserByName" resultType="org.jeecg.common.system.entity.SysUser">
-		select * from  sys_user  where username = #{username} and del_flag = 0
+
+		SELECT
+            t2.*,
+            t4.role_name
+        FROM
+            sys_user t2
+        LEFT JOIN sys_user_role t3 ON t2.id = t3.user_id
+        LEFT JOIN sys_role t4 ON t3.role_id = t4.id
+        WHERE
+            t2.username = #{username}
+        AND t2.del_flag = 0
 	</select>
 
     <!-- 根据部门Id查询 -->

+ 5 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java

@@ -81,5 +81,9 @@ public interface IMaterialInfoService extends IService<MaterialInfo> {
 
     JSONArray getIdListByProject(Long projectId);
 
-    Map<String, Object> getListByParams(String tagCode, String type, Integer status, String materialName, List<Long> projectIds, String code, String startDate, String endDate, String userId, String clipId, String shotId, String planId, Integer offlineFlag, Integer pageNo, Integer pageSize);
+    Map<String, Object> getListByParams(String tagCode, String type, Integer status, String materialName, List<Long> projectIds, String code, String startDate, String endDate, String userId, String clipId, String shotId, String planId, String leaderName,Integer offlineFlag, Integer pageNo, Integer pageSize);
+
+    void correlationUploadV2(JSONObject json);
+
+    JSONArray checkArrayCode(JSONArray array);
 }

+ 4 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IUserCompanyService.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.entity.SysUser;
 
+import java.util.List;
+
 /**
  * 用户够公司
  *
@@ -20,5 +22,7 @@ public interface IUserCompanyService extends IService<UserCompany> {
 
     UserCompany getByUserId(String userId);
 
+    List<UserCompany> getAllByUserId(String userId);
+
     Result<Object> allCompany();
 }

+ 4 - 3
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java

@@ -232,9 +232,10 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
 
     @Override
     public List<CtopOauthToken> getByProjectId(Long projectId) {
-        QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("project_id", projectId).eq("account_status", 0);
-        return this.list(queryWrapper);
+//        QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.eq("project_id", projectId).eq("account_status", 0);
+//        return this.list(queryWrapper);
+        return ctopOauthTokenMapper.selectTokensByProjectId(projectId);
     }
 
     @Override

+ 173 - 12
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java

@@ -22,7 +22,9 @@ import it.sauronsoftware.jave.EncoderException;
 import it.sauronsoftware.jave.MultimediaInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.MD5Util;
 import org.jeecg.common.util.encryption.AesEncryptUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -453,7 +455,6 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                         e.printStackTrace();
                     } catch (EncoderException e) {
                         e.printStackTrace();
-
                     } finally {
                         try {
                             if (fis != null) {
@@ -465,8 +466,6 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                     }
                 }
             }
-
-
         });
     }
 
@@ -500,6 +499,151 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
      * @return
      */
     @Override
+    public void correlationUploadV2(JSONObject json) {
+        String userId = json.getString("userId");
+        Map<String, Object> resultMap = new HashMap<>();
+        try {
+            String type = json.getString("type");
+            String url = json.getString("url");
+            String code = json.getString("code");
+            MaterialInfo info = new MaterialInfo();
+            Long projectId = json.getLong("projectId");
+            Project project = projectService.getById(projectId);
+            Long productId = project.getProductId();
+
+            info.setId(UUID.randomUUID().toString().replace("-", ""));
+            info.setCode(code);
+            if (!Check.isNull(json.getString("watermarkUrl"))) {
+                info.setWatermarkUrl(json.getString("watermarkUrl"));
+            }
+            info.setUrl(url);
+            info.setUserId(userId);
+            info.setProjectId(projectId);
+            info.setProductId(productId);
+            info.setWatermarkCode(json.getString("watermarkCode"));
+            info.setStatus(0);
+            info.setMaterialName(StringUtils.getFileNameNoEx(json.getString("materialName")));
+            info.setWatermarkMaterialName(json.getString("watermarkMaterialName"));
+            info.setMaterialDescribe(json.getString("materialDescribe"));
+            info.setCreateTime(new Date());
+            info.setUpdateTime(new Date());
+            info.setType(type);
+            if (!Check.isNull(project.getSupplierCode())) {
+                info.setSupplierCode(project.getSupplierCode());
+            }
+
+            MaterialCutFrame cutFrame = materialCutFrameService.getCutFrameByCode(code);
+            if (Check.isNull(cutFrame)) {
+                String videoUrl = URLDecoder.decode(info.getUrl()).replace("https://media-1301855440.cos.ap-chongqing.myqcloud.com/", "");
+                String loadImage = "cutFrame/" + code + "/zero.jpg";
+                String coverUrl = CloudVideoProcessUtil.videoCutPictureHandle(videoUrl, loadImage);
+                info.setCoverUrl(coverUrl);
+                Thread thread = new Thread() {
+                    @Override
+                    public void run() {
+                        try {
+                            log.info("开始抽帧,code:{}", code);
+                            materialCutFrameService.getTencentCutFrame(videoUrl, code, coverUrl);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                };
+                thread.start();
+            } else {
+                info.setCoverUrl(cutFrame.getUrl());
+            }
+            this.save(info);
+            JSONArray imageArr = json.getJSONArray("imageArr");
+            if (!Check.isNull(imageArr)) {
+                JSONObject imageJson = new JSONObject();
+                imageJson.put("videoId", info.getCode());
+                imageJson.put("userId", userId);
+                imageJson.put("imageArr", imageArr);
+                materialImageInfoService.insertImage(imageJson);
+            }
+            Map<String, Object> deleteMap = new HashMap<>();
+            deleteMap.put("material_id", info.getCode());
+            JSONObject ascription = json.getJSONObject("ascription");
+            if (!Check.isNull(ascription)) {
+                MaterialAscription materialAscription = new MaterialAscription();
+                materialAscription.setMaterialId(info.getCode());
+                String clipId = ascription.getString("clipId");
+                if (null != clipId && !"".equals(clipId.trim())) {
+                    materialAscription.setClipId(clipId);
+                }
+                materialAscription.setShotId(ascription.getString("shotId"));
+                materialAscription.setPlanId(ascription.getString("planId"));
+                materialAscription.setPlaneId(ascription.getString("planeId"));
+                materialAscription.setCode(info.getCode());
+                materialAscriptionMapper.deleteByMap(deleteMap);
+                //TODO 需要添加获取设计负责人代码
+                SysUser clip = userService.getById(clipId);
+                String roleCode = userService.getRoleCodeByUserId(clipId);
+                log.info("剪辑人员名称:"+clip.getRealname()+";ID:"+clipId);
+                String leaderName = "";
+                String leaderId = "";
+                if("designTeamLeader".equals(roleCode)){
+                    leaderId = clipId;
+                    leaderName = clip.getRealname();
+                }else{
+                    leaderId = clip.getLeaderId();
+                    leaderName = clip.getLeaderName();
+                }
+                log.info("负责人名称:"+leaderName+";ID:"+leaderId);
+                materialAscription.setLeaderName(leaderName);
+                materialAscription.setLeaderId(leaderId);
+                int result = materialAscriptionMapper.insert(materialAscription);
+                if (result > 0) {
+                    log.info("素材归属信息入库完成,MaterialId:{}", info.getId());
+                }
+            }
+            materialTagInfoService.deleteByCode(code);
+            JSONArray modalityTagList = json.getJSONArray("modalityTagList");
+            insertTagList(code, userId, modalityTagList);
+            JSONArray contentTagList = json.getJSONArray("contentTagList");
+            insertTagList(code, userId, contentTagList);
+            JSONArray senceTagList = json.getJSONArray("senceTagList");
+            insertTagList(code, userId, senceTagList);
+            JSONArray modTagList = json.getJSONArray("modTagList");
+            insertTagList(code, userId, modTagList);
+            getFile(info);
+            ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
+        } catch (Exception e) {
+            ResultMapUtils.setResultMap(resultMap, StatusCode.MATERIAL_UPLOAD_FAIL.getCode());
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public JSONArray checkArrayCode(JSONArray array) {
+        if(null == array||array.isEmpty()){
+            return new JSONArray();
+        }
+        Map<String,String> codeMap = new HashMap<>();
+        JSONArray resultArray = new JSONArray();
+        for(int i=0;i<array.size();i++){
+            JSONObject data = array.getJSONObject(i);
+            String url = "https:"+data.getString("url");
+            data.put("url",url);
+            String code = MD5Util.md5ByUrl(url);
+            if(codeMap.containsKey(code)){
+                continue;
+            }
+            codeMap.put(code,code);
+            data.put("code",code);
+            resultArray.add(data);
+        }
+        return resultArray;
+    }
+
+    /**
+     * 素材库关联上传素材 1
+     *
+     * @param json
+     * @return
+     */
+    @Override
     public Map<String, Object> correlationUpload(JSONObject json) {
         String userId = json.getString("userId");
         Map<String, Object> resultMap = new HashMap<>();
@@ -531,13 +675,11 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
             info.setCreateTime(new Date());
             info.setUpdateTime(new Date());
             info.setType(type);
-            //TODO 此处逻辑待调整
-            //      Project project = projectService.getById(projectId);
-            if (!Check.isNull(project)) {
-                if (!Check.isNull(project.getSupplierCode())) {
-                    info.setSupplierCode(project.getSupplierCode());
-                }
+
+            if (!Check.isNull(project.getSupplierCode())) {
+                info.setSupplierCode(project.getSupplierCode());
             }
+
             MaterialCutFrame cutFrame = materialCutFrameService.getCutFrameByCode(code);
             if (Check.isNull(cutFrame)) {
                 String videoUrl = URLDecoder.decode(info.getUrl()).replace("https://media-1301855440.cos.ap-chongqing.myqcloud.com/", "");
@@ -583,6 +725,22 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                 materialAscription.setPlaneId(ascription.getString("planeId"));
                 materialAscription.setCode(info.getCode());
                 materialAscriptionMapper.deleteByMap(deleteMap);
+                //TODO 需要添加获取设计负责人代码
+                SysUser clip = userService.getById(clipId);
+                String roleCode = userService.getRoleCodeByUserId(clipId);
+                log.info("剪辑人员名称:"+clip.getRealname()+";ID:"+clipId);
+                String leaderName = "";
+                String leaderId = "";
+                if("designTeamLeader".equals(roleCode)){
+                    leaderId = clipId;
+                    leaderName = clip.getRealname();
+                }else{
+                    leaderId = clip.getLeaderId();
+                    leaderName = clip.getLeaderName();
+                }
+                log.info("负责人名称:"+leaderName+";ID:"+leaderId);
+                materialAscription.setLeaderName(leaderName);
+                materialAscription.setLeaderId(leaderId);
                 int result = materialAscriptionMapper.insert(materialAscription);
                 if (result > 0) {
                     log.info("素材归属信息入库完成,MaterialId:{}", info.getId());
@@ -605,6 +763,8 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         }
         return resultMap;
     }
+    @Autowired
+    private ISysUserService userService;
 
     @Override
     public String platformUploadVideo(JSONObject json) {
@@ -775,12 +935,13 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
 
 
     @Override
-    public Map<String, Object> getListByParams(String tagCode, String type, Integer status, String materialName, List<Long> projectIds, String code, String startDate, String endDate, String userId, String clipId, String shotId, String planId, Integer offlineFlag, Integer pageNo, Integer pageSize) {
+    public Map<String, Object> getListByParams(String tagCode, String type, Integer status, String materialName, List<Long> projectIds, String code, String startDate, String endDate, String userId, String clipId, String shotId, String planId, String leaderName,Integer offlineFlag, Integer pageNo, Integer pageSize) {
         Map<String, Object> result = new HashMap<>();
         PageHelper.startPage(pageNo, pageSize);
 
         String ascription = null;
-        if (!Check.isNull(clipId) || !Check.isNull(shotId) || !Check.isNull(planId)) {
+        //剪辑 || 拍摄 || 策划 || 设计
+        if (!Check.isNull(clipId) || !Check.isNull(shotId) || !Check.isNull(planId) || !Check.isNull(leaderName)) {
             ascription = "true";
         }
 
@@ -792,7 +953,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
             endDate = endDate + " 23:59:59";
         }
 
-        List<MaterialInfo> dailyList = materialInfoMapper.getListByParams(tagCode, type, status, materialName, code, startDate, endDate, userId, projectIds, ascription, clipId, shotId, planId, offlineFlag);
+        List<MaterialInfo> dailyList = materialInfoMapper.getListByParams(tagCode, type, status, materialName, code, startDate, endDate, userId, projectIds, ascription, clipId, shotId, planId,leaderName, offlineFlag);
         List<MaterialInfo> setList = new ArrayList<>();
         PageInfo<MaterialInfo> pageInfo = new PageInfo<>(dailyList);
         if (null != dailyList && !dailyList.isEmpty()) {

+ 8 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/UserCompanyServiceImpl.java

@@ -102,7 +102,14 @@ public class UserCompanyServiceImpl extends ServiceImpl<UserCompanyMapper, UserC
         QueryWrapper<UserCompany> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("user_id", userId);
         queryWrapper.last("limit 1");
-        return null;
+        return this.getOne(queryWrapper);
+    }
+
+    @Override
+    public List<UserCompany> getAllByUserId(String userId) {
+        QueryWrapper<UserCompany> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", userId);
+        return this.list(queryWrapper);
     }
 
     @Override

+ 8 - 3
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

@@ -1890,6 +1890,13 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                     JSONObject dataJson = resultJson.getJSONObject("data");
                     if (!Check.isNullMap(dataJson)) {
                         JSONObject returnJson = new JSONObject();
+                        returnJson.put("isAdWatch5times",dataJson.getInteger("is_ad_watch_5_times"));
+                        returnJson.put("isAdWatch20times",dataJson.getInteger("is_ad_watch_20_times"));
+                        returnJson.put("isAdWatch10Times",dataJson.getInteger("is_ad_watch_10_times"));
+                        returnJson.put("isSevenDayRoi",dataJson.getInteger("is_seven_day_roi"));
+                        returnJson.put("isAppointJumpClick",dataJson.getInteger("is_appoint_jump_click"));
+                        returnJson.put("isEventWeekPayTimes",dataJson.getInteger("is_event_week_pay_times"));
+                        returnJson.put("isAppointForm",dataJson.getInteger("is_appoint_form"));
                         returnJson.put("isActivate", dataJson.getInteger("is_activate"));
                         returnJson.put("isFormSubmit", dataJson.getInteger("is_form_submit"));
                         returnJson.put("isCreditGrant", dataJson.getInteger("is_credit_grant"));
@@ -1903,10 +1910,8 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                         returnJson.put("isAppInvoked", dataJson.getInteger("is_app_invoked"));
                         returnJson.put("isMultiConversion", dataJson.getInteger("is_multi_conversion"));
                         returnJson.put("isAdWatchTimes", dataJson.getInteger("is_ad_watch_times"));
-                        returnJson.put("isAppInvoked", dataJson.getInteger("is_app_invoked"));
-                        returnJson.put("isMultiConversion", dataJson.getInteger("is_multi_conversion"));
-                        returnJson.put("isAdWatchTimes", dataJson.getInteger("is_ad_watch_times"));
                         returnJson.put("isOrderPaied", dataJson.getInteger("is_order_paied"));
+                        returnJson.put("isKeyAction", dataJson.getInteger("is_key_action"));
 
                         JSONArray deep_conversion_types = dataJson.getJSONArray("deep_conversion_types");
                         JSONArray deepConversionTypes = new JSONArray();

+ 0 - 5
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouAudienceReportDailyServiceImpl.java

@@ -338,11 +338,6 @@ public class KuaishouAudienceReportDailyServiceImpl extends ServiceImpl<Kuaishou
                         System.out.print("》》5秒后重试,accountId:"+unit+",日期:"+date+"《《 "+resultJson);
                         try{Thread.sleep(5000);} catch (InterruptedException e){}
                         crowdAnalysisReport2(token,date, type, plan, unit, page, pageSize);
-                    }else if(code == 402000 || code == 402004){
-                        System.out.print("》》10分钟后重试,accountId:"+unit+",日期:"+date+"《《 "+resultJson);
-                        try{Thread.sleep(5000 * 60 * 2);} catch (InterruptedException e){}
-                        token = tokenService.getTokenByAccountId(token.getAccountId());
-                        crowdAnalysisReport2(token,date, type, plan, unit, page, pageSize);
                     }else{
                         log.error("查询人群分析报表数据返回信息错误:unit:{},日期{},返回信息:{}", unit,date, resultJson);
                     }

+ 1 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/report/controller/BytedanceAccountReportCtrl.java

@@ -123,7 +123,7 @@ public class BytedanceAccountReportCtrl {
         if (columns.isEmpty()) {
             log.error("请选择需要导出的字段");
         }
-        String filed = JsonResourceUtil.joinFiled(AccountReportConstants.getDicMapByVideo(), columns);
+        String filed = JsonResourceUtil.joinFiled(AccountReportConstants.getDictMapBy(), columns);
         List<String> titles = new ArrayList<>();
         titles.add("账户Id");
         titles.add("账户名称");

+ 2 - 12
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceHomepageMapper.xml

@@ -75,18 +75,8 @@
                sum(show_num)                          showNum,
                sum(click)                             click,
                CASE
-                   WHEN (sum(click) / sum(show_num)) IS NULL THEN
-                       0
-                   ELSE
-                       CONCAT(
-                               cast(
-                                       ROUND(
-                                               (sum(click) / sum(show_num)) * 100,
-                                               2
-                                           ) as char),
-                               '%'
-                           )
-                   END AS                             'clickRate',
+                   WHEN sum(click)>=0 and um(show_num)>0 THEN CONCAT(ROUND(sum(click) / sum(show_num) * 100,2) ,'%')
+                   else '0%' end AS   'clickRate',
                CASE
                    WHEN (sum(cost) / sum(show_num)) IS NULL THEN
                        0

+ 0 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/common/constant/AccountReportConstants.java

@@ -917,7 +917,6 @@ public class AccountReportConstants {
     public static Map<String, Map<String, Object>> getDicMapKs(){
         Object jsonKs = JSON.parseObject(KUAISHOU_FILED_MAPPING_JSON);
         return JsonResourceUtil.jsonToMap(jsonKs);
-
     }
     public static Map<String, Map<String, Object>> getDicMapByVideo(){
         Object jsonByVideo = JSON.parseObject(BYTEDANCE_VIDEO_REPORT_MAPPING_JSON);

+ 7 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/common/utils/JsonResourceUtil.java

@@ -83,12 +83,15 @@ public class JsonResourceUtil {
      * 拼接字段
      */
     public static String joinFiled(Map<String, Map<String,Object>> mapMap,JSONArray array) {
+        System.out.println(mapMap);
+        System.out.println(array);
         StringBuilder sb = new StringBuilder();
         array.forEach(it -> {
-            if (mapMap.get(it.toString()).isEmpty()) {
+            String filedName = it.toString();
+            if (null== mapMap.get(filedName)||mapMap.get(filedName).isEmpty()) {
                 sb.append(it).append(",");
             } else {
-                sb.append(mapMap.get(it.toString()).get("filed")).append(",");
+                sb.append(mapMap.get(filedName).get("filed")).append(",");
             }
         });
         return sb.deleteCharAt(sb.length() - 1).toString();
@@ -100,7 +103,8 @@ public class JsonResourceUtil {
     public static List<String> joinTitle(Map<String, Map<String,Object>> mapMap,JSONArray array) {
         List<String> titles = new ArrayList<>(20);
         array.forEach(it -> {
-            if (mapMap.get(it.toString()).isEmpty()) {
+            String titleName = it.toString();
+            if (null== mapMap.get(titleName)||mapMap.get(titleName).isEmpty()) {
                 titles.add(it.toString());
             } else {
                 titles.add(mapMap.get(it.toString()).get("comment").toString());

+ 14 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialAscriptionController.java

@@ -150,6 +150,20 @@ public class MaterialAscriptionController {
             if (!Check.isNull(clip)) {
                 clipName = clip.getRealname();
                 materialAscription.setClipName(clipName);
+                String roleCode = sysUserService.getRoleCodeByUserId(clipId);
+                log.info("剪辑人员名称:"+clip.getRealname()+";ID:"+clipId);
+                String leaderName = "";
+                String leaderId = "";
+                if("designTeamLeader".equals(roleCode)){
+                    leaderId = clipId;
+                    leaderName = clip.getRealname();
+                }else{
+                    leaderId = clip.getLeaderId();
+                    leaderName = clip.getLeaderName();
+                }
+                log.info("负责人名称:"+leaderName+";ID:"+leaderId);
+                materialAscription.setLeaderName(leaderName);
+                materialAscription.setLeaderId(leaderId);
             }
         }
         QueryWrapper<MaterialAscription> ascriptionQueryWrapper = new QueryWrapper<>();
@@ -185,7 +199,6 @@ public class MaterialAscriptionController {
             reportBytedanceVideoService.update(updateByteDanceVideoInfo, updateByteDanceQueryWrapper);
         }
 
-
         boolean ok;
         if (Check.isNull(one)) {
             ok = materialAscriptionService.save(materialAscription);

+ 13 - 9
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java

@@ -106,7 +106,6 @@ public class MaterialInfoController {
             String s = null;
             if (!Check.isNull(templateId)) {
                 s = materialInfoService.watermarkVideoBySupplierCode(materialInfo.getCode(), materialInfo.getUrl(), templateId);
-
             }
             if (Check.isNull(s)) {
                 result.setSuccess(false);
@@ -125,13 +124,18 @@ public class MaterialInfoController {
 
     /**
      * 修改名称
-     * @param id
-     * @param name
+     * @param data
      * @return
      */
     @PostMapping("/editName")
-    public Map<String, Object> editName(String id,String name) {
+    public Map<String, Object> editName(@RequestBody JSONObject data) {
         Map<String,Object>result = new HashMap<>();
+        String id = data.getString("id");
+        String name = data.getString("name");
+        if(null == id||"".equals(id.trim())||null == name||"".equals(name.trim())){
+            ResultMapUtils.setResultMap(result,StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
         MaterialInfo info = materialInfoService.getById(id);
         if(null == info){
             ResultMapUtils.setResultMap(result,StatusCode.COMMON_DATA_NOT_EXIST);
@@ -319,7 +323,7 @@ public class MaterialInfoController {
     @GetMapping(value = "/listV2")
     public Map<String, Object> queryPageList(String type, Integer status, Long productId, String materialName, String code,
                                              String startDate, String endDate, String tagCode,
-                                             Long projectId, String clipId, String shotId, String planId,
+                                             Long projectId, String clipId, String shotId, String planId,String leaderName,
                                              @RequestParam(name = "offlineFlag", required = false) Integer offlineFlag,
                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
@@ -338,7 +342,7 @@ public class MaterialInfoController {
                 List<Long> projectIdsByProductId = projectService.getProjectIdsByProductId(productId);
                 projectIds.addAll(projectIdsByProductId);
             }
-            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, null, clipId, shotId, planId, offlineFlag, pageNo, pageSize);
+            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, null, clipId, shotId, planId,leaderName, offlineFlag, pageNo, pageSize);
             //运营经理、运营、运营助理
         } else if ("operator".equals(roleCode) || "kuaishouOperationManager".equals(roleCode) || "operationAssistant".equals(roleCode) || "touTiaoOperationManager".equals(roleCode)) {
             if (!Check.isNull(projectId)) {
@@ -354,7 +358,7 @@ public class MaterialInfoController {
                 projectIds.addAll(partakeProjectIds);
                 projectIds.addAll(productProjectIds);
             }
-            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, null, clipId, shotId, planId, offlineFlag, pageNo, pageSize);
+            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, null, clipId, shotId, planId, leaderName,offlineFlag, pageNo, pageSize);
 
         } else if ("designTeamLeader".equals(roleCode) || "planeLeader".equals(roleCode) || "plane".equals(roleCode) || "plan".equals(roleCode) || "shot".equals(roleCode)||"clip".equals(roleCode)) {
             //查询自己所在项目下的数据
@@ -365,7 +369,7 @@ public class MaterialInfoController {
             } else {
                 projectIds = projectMemberService.getProjectIdsByProductId(null, userId);
             }
-            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, null, clipId, shotId, planId, offlineFlag, pageNo, pageSize);
+            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, null, clipId, shotId, planId, leaderName,offlineFlag, pageNo, pageSize);
         } else {
             //查询自己上传的视频
             if (!Check.isNull(projectId)) {
@@ -373,7 +377,7 @@ public class MaterialInfoController {
             } else if (!Check.isNull(productId)) {
                 projectIds = projectMemberService.getProjectIdsByProductId(productId, userId);
             }
-            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, userId, clipId, shotId, planId, offlineFlag, pageNo, pageSize);
+            return materialInfoService.getListByParams(tagCode, type, status, materialName, projectIds, code, startDate, endDate, userId, clipId, shotId, planId,leaderName, offlineFlag, pageNo, pageSize);
         }
     }
 

+ 7 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java

@@ -1527,7 +1527,7 @@ public class TestController {
     static CountDownLatch countDownLatch = null;
     @Resource
     AiKuaishouUnitLevelOperationRecordMapper kuaishouUnitLevelOperationRecordMapper;
-    @PostMapping(value = "/getAudienceDataNew")
+    @GetMapping(value = "/getAudienceDataNew")
     public void getAudienceData() throws Exception {
         int page = 1;
         int pageSize = 2000;
@@ -1535,8 +1535,14 @@ public class TestController {
         List<CtopOauthToken> tokens = tokenService.getByProjectId(458l);    //淘特项目
         for (CtopOauthToken token : tokens) {
             Date startDate = DateUtils.getNowDate();
+            if(startDate.after(token.getAccessTokenExpiresIn())){   //过期跳过
+                continue;
+            }
             Date enDate = DateUtils.addDay(startDate, 30);
             List<AiKuaishouUnitLevelOperationRecord> planIdsAndUnitIds = kuaishouUnitLevelOperationRecordMapper.selectAllByAccountIdAndDate(token.getAccountId(), startDate, enDate);
+            if(Check.isNull(planIdsAndUnitIds)){
+                continue;
+            }
             countDownLatch = new CountDownLatch(planIdsAndUnitIds.size());
             planIdsAndUnitIds.forEach(planIdAndUnitId -> executorService.submit(() -> {
                 try {

+ 20 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/fileupload/controller/FileController.java

@@ -42,7 +42,6 @@ public class FileController {
         return materialImageInfoService.checkMaterialInfo(code, videoId);
     }
 
-
     @PostMapping("/insertV2")
     public Map<String, Object> insertV2(@RequestBody JSONObject json) {
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -50,6 +49,26 @@ public class FileController {
         return materialInfoService.correlationUpload(json);
     }
 
+    @PostMapping("/insertV3")
+    public Map<String, Object> insertV3(@RequestBody JSONObject data) {
+        Map<String,Object>result = new HashMap<>();
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        Long projectId = data.getLong("projectId");
+        JSONArray array = data.getJSONArray("videoArray");
+        //校验重复code逻辑
+        JSONArray checkArray = materialInfoService.checkArrayCode(array);
+        if(null!=checkArray&&!checkArray.isEmpty()){
+            for (int i=0;i<array.size();i++){
+                JSONObject json = array.getJSONObject(i);
+                json.put("userId", user.getId());
+                json.put("projectId",projectId);
+                materialInfoService.correlationUploadV2(json);
+            }
+        }
+        ResultMapUtils.setResultMap(result,StatusCode.COMMON_SUCCESS);
+        return result;
+    }
+
 
     @PostMapping("/insertImage")
     public Map<String, Object> insertImage(@RequestBody JSONObject json) {

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -1396,7 +1396,7 @@ public class SysUserController {
 
                 //汇报上级选择合法性校验:校验被修改人的汇报上级的汇报上级是不是本人
                 String leaderId = user.getLeaderId();
-                if(!Check.isNull(leaderId) && !sysUser.getLeaderId().equals(leaderId)){    //判断此次修改是否修改了leadId
+                if(!Check.isNull(leaderId) && !leaderId.equals(sysUser.getLeaderId())){    //判断此次修改是否修改了leadId
                     String leaderIdOfLeaderUser = sysUserService.getById(leaderId).getLeaderId();
                     if(!Check.isNull(leaderIdOfLeaderUser) && leaderIdOfLeaderUser.equals(user.getId())){   //汇报上级的上级领导不为空,且恰好是自己构成了管理循环
                         result.error500("要修改的汇报上级是自己的下属,请重新选择!");

+ 21 - 80
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -1,89 +1,30 @@
 package org.jeecg;
-//
-//import org.jeecg.modules.demo.mock.MockController;
-//import org.jeecg.modules.demo.test.entity.JeecgDemo;
-//import org.jeecg.modules.demo.test.mapper.JeecgDemoMapper;
-//import org.jeecg.modules.demo.test.service.IJeecgDemoService;
-//import org.junit.Assert;
-//import org.junit.Test;
-import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.kuaishou.modules.report.service.IKuaishouAudienceReportDailyService;
-import com.alibaba.fastjson.JSONArray;
+
+import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.utils.CorpWexinUtils;
+import com.alibaba.fastjson.JSONObject;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
-//
-//import javax.annotation.Resource;
-//import java.util.List;
-//
+
+import javax.annotation.Resource;
+
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeecgSystemApplication.class)
 public class SampleTest {
-    @Autowired
-    private ICtopOauthTokenService tokenService;
-    @Autowired
-    IKuaishouAudienceReportDailyService kuaishouAudienceReportDailyService;
-//    @Test
-//    public void haha(){
-//        CtopOauthToken token = tokenService.getTokenByAccountId(9556431l);
-//        JSONArray types = new JSONArray();
-//        // province: 省级地域分布, city: 地级地域分布,gender: 性别分布,ageSegment: 年龄分布, clientId: 系统分布 businessInterestTags: 商业兴趣分布
-//
-//        types.add("province");
-//        types.add("city");
-//        types.add("gender");
-//        types.add("ageSegment");
-//        types.add("businessInterestTags");
-//        types.add("clientId");
-//        kuaishouAudienceReportDailyService.crowdAnalysisReport3(token, "2021-05-01", types, 50293820l, 216264247l, 1, 2000);
-//    }
-//
-//	@Resource
-//	private JeecgDemoMapper jeecgDemoMapper;
-//	@Resource
-//	private IJeecgDemoService jeecgDemoService;
-////	@Resource
-////	private ISysDataLogService sysDataLogService;
-//	@Resource
-//	private MockController mock;
-//
-//	@Test
-//	public void testSelect() {
-//		System.out.println(("----- selectAll method test ------"));
-//		List<JeecgDemo> userList = jeecgDemoMapper.selectList(null);
-//		Assert.assertEquals(5, userList.size());
-//		userList.forEach(System.out::println);
-//	}
-//
-//	@Test
-//	public void testXmlSql() {
-//		System.out.println(("----- selectAll method test ------"));
-//		List<JeecgDemo> userList = jeecgDemoMapper.getDemoByName("Sandy12");
-//		userList.forEach(System.out::println);
-//	}
-//
-//	/**
-//	 * 测试事务
-//	 */
-//	@Test
-//	public void testTran() {
-//		jeecgDemoService.testTran();
-//	}
-//
-//	//author:lvdandan-----date:20190315---for:添加数据日志测试----
-//	/**
-//	 * 测试数据日志添加
-//	 */
-////	@Test
-////	public void testDataLogSave() {
-////		System.out.println(("----- datalog test ------"));
-////		String tableName = "jeecg_demo";
-////		String dataId = "4028ef81550c1a7901550c1cd6e70001";
-////		String dataContent = mock.sysDataLogJson();
-////		sysDataLogService.addDataLog(tableName, dataId, dataContent);
-////	}
-//	//author:lvdandan-----date:20190315---for:添加数据日志测试----
+    @Resource
+    CorpWexinUtils corpWexinUtils;
+    @Resource
+    MailLogMapper mailLogMapper;
+    @Test
+    public void weixin(){
+        JSONObject wChatIdByUserId = mailLogMapper.getWChatIdByUserId("26bbe90edc5b475ca41ec3f76aa65067");
+        StringBuilder text = new StringBuilder();
+        text.append("您有一条销售政策需要审核,该客户为:");
+        text.append("测试");
+        text.append(",请及时登录助手平台-销售政策页面进行审核,谢谢!");
+        corpWexinUtils.sendMessageByWeChatId(wChatIdByUserId,text.toString());
+    }
+
 }

+ 4 - 4
jeecg-cloud-module/jeecg-cloud-gateway/src/main/resources/application-dev.yml

@@ -26,12 +26,12 @@ spring:
           - Path=/jeecg-boot/**
         filters:
           - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
-      - id: finance
-        uri: lb://jeecg-boot-finance
-        predicates:
-          - Path=/jeecg-boot-finance/**
+      - id: jeecg-cloud-finance
+        uri: lb://jeecg-cloud-finance
         filters:
           - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
+        predicates:
+          - Path=/finance/**
       - id: jeecg-bytedance-ad
         uri: lb://jeecg-bytedance-ad
         predicates:

+ 7 - 1
jeecg-cloud-module/jeecg-cloud-gateway/src/main/resources/application-prod.yml

@@ -43,7 +43,13 @@ spring:
         filters:
           - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
         predicates:
-          - Path=/bytedance/ad/**
+          - Path=/bytedanceAd/**
+      - id: jeecg-cloud-finance
+        uri: lb://jeecg-cloud-finance
+        filters:
+          - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
+        predicates:
+          - Path=/finance/**
 # hystrix 信号量隔离,3秒后自动超时
 hystrix:
   enabled: true

+ 7 - 1
jeecg-cloud-module/jeecg-cloud-gateway/src/main/resources/application-test.yml

@@ -43,7 +43,13 @@ spring:
         filters:
           - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
         predicates:
-          - Path=/bytedance/ad/**
+          - Path=/bytedanceAd/**
+      - id: jeecg-cloud-finance
+        uri: lb://jeecg-cloud-finance
+        filters:
+          - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
+        predicates:
+          - Path=/finance/**
 # hystrix 信号量隔离,3秒后自动超时
 hystrix:
   enabled: true