Browse Source

销售用户拉取逻辑修改

qxp 5 năm trước cách đây
mục cha
commit
8f44140476
23 tập tin đã thay đổi với 631 bổ sung106 xóa
  1. 1 1
      suishenbang-admin/src/main/resources/templates/system/config/add.html
  2. 1 1
      suishenbang-admin/src/main/resources/templates/system/config/edit.html
  3. 13 21
      suishenbang-api/src/test/java/test/MyTest.java
  4. 2 2
      suishenbang-apiframework/src/main/java/com/dgtly/apiframework/config/SwitchEnSqlInterceptorConfig.java
  5. 10 10
      suishenbang-apiframework/src/main/java/com/dgtly/apiframework/interceptor/SwitchEnSqlInterceptor.java
  6. 12 0
      suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserMapper.java
  7. 8 0
      suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserService.java
  8. 7 0
      suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserServiceImpl.java
  9. 21 2
      suishenbang-system/src/main/resources/mapper/system/SysUserMapper.xml
  10. 30 22
      suishenbang-wxportal/suishenbang-wxportal-api/src/main/java/com/dgtly/wxportal/controller/WxController.java
  11. 20 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/domain/SendOrderNoticeTaskModel.java
  12. 36 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/domain/SendOrderNoticeTaskModelCredit.java
  13. 24 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/domain/SendOrderNoticeTaskModelCustomer.java
  14. 59 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/BatchSendCustomerCreditMessage.java
  15. 11 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/BatchSendQyWxMessage.java
  16. 6 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/BatchSendGetSendMessage.java
  17. 6 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/BatchSendGetToUser.java
  18. 35 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetSendMessageCus.java
  19. 48 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetSendMessageSale.java
  20. 41 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetSendMessageSubAndOffice.java
  21. 22 0
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetToUser.java
  22. 217 46
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/qywxutils/QyWxSendMessageUtil.java
  23. 1 1
      suishenbang-wxportal/suishenbang-wxportal-common/src/main/resources/mapper/wxportal/WxSendMessageMapper.xml

+ 1 - 1
suishenbang-admin/src/main/resources/templates/system/config/add.html

@@ -21,7 +21,7 @@
         <div class="form-group">	
             <label class="col-sm-3 control-label">参数键值:</label>
             <div class="col-sm-8">
-                <input id="configValue" name="configValue" class="form-control" type="text" required>
+                <textarea id="configValue" name="configValue" class="form-control" type="text" required></textarea>
             </div>
         </div>
         <div class="form-group">

+ 1 - 1
suishenbang-admin/src/main/resources/templates/system/config/edit.html

@@ -22,7 +22,7 @@
             <div class="form-group">	
                 <label class="col-sm-3 control-label">参数键值:</label>
                 <div class="col-sm-8">
-                    <input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text" required>
+                    <textarea id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text" required></textarea>
                 </div>
             </div>
 			<div class="form-group">

+ 13 - 21
suishenbang-api/src/test/java/test/MyTest.java

@@ -3,7 +3,9 @@ package test;
 
 import com.dgtly.ApiApplication;
 import com.dgtly.system.domain.SysUser;
+import com.dgtly.system.mapper.SysUserMapper;
 import com.dgtly.system.service.ISysUserService;
+import com.dgtly.system.service.impl.SysUserServiceImpl;
 import com.dgtly.wxportal.config.ESignConfig;
 import com.dgtly.wxportal.service.ESignService;
 import com.dgtly.wxportal.service.IEsignOrganRealVerifyService;
@@ -18,6 +20,10 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.*;
 import java.net.URL;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes=ApiApplication.class)
@@ -37,9 +43,15 @@ public class MyTest {
     private IEsignSignService signService;
     @Autowired
     private ISysUserService userService;
+    @Autowired
+    private SysUserServiceImpl sysUserService;
     @Test
     public void test() throws Exception {
-
+        Set<String> s = new LinkedHashSet<>();
+        s.add("0110065150");
+        s.add("0110017419");
+        Map<String,Map<String,Object>> map =  sysUserService.selectLoginNamesByCostumerCode(s);
+        System.out.println("1111111111");
 
         //创建文件
         /*SysUser user = new SysUser();
@@ -101,27 +113,7 @@ public class MyTest {
 
     public static void getURLResource(String ourputFile,String urlStr) throws Exception {
 
-        FileWriter fw = new FileWriter(ourputFile);
-
-        PrintWriter pw = new PrintWriter(fw);
-
-        URL resourceUrl = new URL(urlStr);
-
-        InputStream content = (InputStream) resourceUrl.getContent();
-
-        BufferedReader in = new BufferedReader(new InputStreamReader(content));
-
-        String line;
-
-        while ((line = in.readLine()) != null) {
-
-            pw.println(line);
-
-        }
-
-        pw.close();
 
-        fw.close();
     }
 
 

+ 2 - 2
suishenbang-apiframework/src/main/java/com/dgtly/apiframework/config/SwitchEnSqlInterceptorConfig.java

@@ -15,8 +15,8 @@ import java.util.List;
 import java.util.Properties;
 
 
-@Configuration
-@AutoConfigureAfter({PageHelperAutoConfiguration.class})
+//@Configuration
+//@AutoConfigureAfter({PageHelperAutoConfiguration.class})
 public class SwitchEnSqlInterceptorConfig {
 
         @Autowired

+ 10 - 10
suishenbang-apiframework/src/main/java/com/dgtly/apiframework/interceptor/SwitchEnSqlInterceptor.java

@@ -20,16 +20,16 @@ import java.lang.reflect.Method;
 import java.util.Properties;
 
 /*放过中英文切换*/
-@Component
-@Intercepts({@Signature(
-        type = Executor.class,
-        method = "query",
-        args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
-), @Signature(
-        type = Executor.class,
-        method = "query",
-        args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}
-)})
+//@Component
+//@Intercepts({@Signature(
+//        type = Executor.class,
+//        method = "query",
+//        args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
+//), @Signature(
+//        type = Executor.class,
+//        method = "query",
+//        args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}
+//)})
 public class SwitchEnSqlInterceptor  implements Interceptor {
     private Logger log= LoggerFactory.getLogger(SwitchEnSqlInterceptor.class);
     public SwitchEnSqlInterceptor() {

+ 12 - 0
suishenbang-system/src/main/java/com/dgtly/system/mapper/SysUserMapper.java

@@ -172,6 +172,16 @@ public interface SysUserMapper
      */
     @MapKey("customer_code")
     Map<String,Map<String,Object>> selectLoginNamesByCostumerCode(String[] customerCodes);
+
+    /**
+     * 根据销售组织代码 获取所属的用户登陆名称
+     *
+     * @param employeeCode 经销商列表
+     * @return 结果
+     */
+    @MapKey("employee_code")
+    Map<String,Map<String,Object>> selectLoginNamesByEmployeeCode(String[] employeeCode);
+
     /**
      * @description: 根据经销商code查询经销人员列表
      * @param: [orgCode]
@@ -181,4 +191,6 @@ public interface SysUserMapper
      */
     List<SysUser> selectUserByOrgCode(String orgCode);
 
+    Map<String,Object> selectLoginNamesByCostumerCode1(String[] customerCodes);
+
 }

+ 8 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/ISysUserService.java

@@ -238,6 +238,12 @@ public interface ISysUserService
      */
     Map<String,Map<String,Object>> selectLoginNamesByCostumerCode(Set<String> customerCodes);
 
+    /**
+     * 根据销售的 员工号获取登陆敏成set
+     * @param employeeSet
+     * @return
+     */
+    Map<String,Map<String,Object>> selectLoginNamesByEmployeeCode(Set<String> employeeSet);
 
     public int insertPersonalAccount(SysUser user);
 
@@ -249,4 +255,6 @@ public interface ISysUserService
      * @date: 2020/10/19 14:38
      */ 
     List<SysUser> selectUserByOrgCode(String orgCode);
+
+
 }

+ 7 - 0
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysUserServiceImpl.java

@@ -600,6 +600,13 @@ public class SysUserServiceImpl implements ISysUserService
         return userMapper.selectLoginNamesByCostumerCode(a);
     }
 
+    @Override
+    public Map<String, Map<String, Object>> selectLoginNamesByEmployeeCode(Set<String> employeeSet) {
+        String[] a = new String[employeeSet.size()];
+        a = employeeSet.toArray(a);
+        return userMapper.selectLoginNamesByEmployeeCode(a);
+    }
+
 
     @Override
     public int insertPersonalAccount(SysUser user) {

+ 21 - 2
suishenbang-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -356,7 +356,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
 
 
-	<select id="selectLoginNamesByCostumerCode" resultType="Map">
+	<select id="selectLoginNamesByCostumerCode" resultType="Map" parameterType="String">
 		select DISTINCT sue.org_code customer_code,GROUP_CONCAT(su.login_name SEPARATOR '|') touser from sys_user  su
 		left join sys_user_ext sue on sue.user_id = su.user_id
 		where sue.org_code in
@@ -365,7 +365,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</foreach>
 		GROUP BY sue.org_code
 	</select>
-	<select id="selectUserByOrgCode" resultMap="SysUserResult">
+	<select id="selectLoginNamesByCostumerCode1" resultType="Map" parameterType="String">
+		select DISTINCT sue.org_code customer_code,GROUP_CONCAT(su.login_name SEPARATOR '|') touser from sys_user  su
+		left join sys_user_ext sue on sue.user_id = su.user_id
+		where sue.org_code in
+		<foreach collection="array" item="customerCode" open="(" separator="," close=")">
+			#{customerCode}
+		</foreach>
+		GROUP BY sue.org_code
+	</select>
+
+	<select id="selectLoginNamesByEmployeeCode" resultType="Map" parameterType="String">
+		select DISTINCT sue.sap_employee_id employee_code,GROUP_CONCAT(su.login_name SEPARATOR '|') touser ,sue.org_code from sys_user  su
+		left join sys_user_ext sue on sue.user_id = su.user_id
+		where sue.sap_employee_id in
+		<foreach collection="array" item="employeeCode" open="(" separator="," close=")">
+			#{employeeCode}
+		</foreach>
+		GROUP BY sue.sap_employee_id
+	</select>
+	<select id="selectUserByOrgCode" resultMap="SysUserResult" >
 		SELECT
 			u.user_id,
 			u.user_name,

+ 30 - 22
suishenbang-wxportal/suishenbang-wxportal-api/src/main/java/com/dgtly/wxportal/controller/WxController.java

@@ -8,28 +8,22 @@ import com.dgtly.common.core.domain.ParameterObject;
 import com.dgtly.common.utils.http.HttpUtils;
 import com.dgtly.common.utils.security.EncryptPassWordClass;
 import com.dgtly.system.service.ISysConfigService;
-import com.dgtly.wxportal.domain.WxSendMessage;
 import com.dgtly.wxportal.mapper.WxSendMessageMapper;
+import com.dgtly.wxportal.domain.SendOrderNoticeTaskModel;
 import com.dgtly.wxportal.utils.qywxutils.QyWxSendMessageUtil;
 import com.dgtly.wxportal.utils.qywxutils.QyWxUserUtil;
-import com.dgtly.common.utils.RedisUtil;
 import com.dgtly.system.domain.SysUser;
 import com.dgtly.system.service.ISysUserService;
 import com.dgtly.wxportal.service.IWxQyUserService;
-import com.dgtly.wxportal.utils.qywxutils.messageModel.QyWxTextMessage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -142,24 +136,38 @@ public class WxController extends ApiBaseController {
     }
 
 
-    @ApiOperation(value = "根据用户经销商组织代码 customer_code发送文本",
-            notes = "参数:{\"XXX\":\"123,456\"}(说明:key是经销商code 值是订单编号列表)" )
+//    @ApiOperation(value = "根据用户经销商组织代码 customer_code发送文本",
+//            notes = "参数:{\"XXX\":\"123,456\"}(说明:key是经销商code 值是订单编号列表)" )
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(name = "params" , paramType = "body")
+//    })
+//    @PostMapping("sendTextMessageByCustomerCode")
+//    public Object sendTextMessage(){
+//
+//        ParameterObject obj =  getParameterObject();
+//        JSONObject jobj = obj.getJSONObject();
+//        Set<String> customerCodes = jobj.keySet();
+//        logger.info("收到需要通知过信息的请求参数:"+jobj.toString());
+//        logger.info("收到需要通知的经销商组织代码:"+customerCodes.toString());
+//        Map<String,Map<String,Object>> maps = sysUserService.selectLoginNamesByCostumerCode(customerCodes);
+//        if(customerCodes.size()>0){
+//            qyWxSendMessageUtil.sendNoticeMessage(customerCodes,obj.getJSONObject(),maps);
+//        }
+//        return AjaxResult.success();
+//    }
+
+
+    @ApiOperation(value = "发送过信用未确认要货,未过信用通知",
+            notes = "" )
     @ApiImplicitParams({
             @ApiImplicitParam(name = "params" , paramType = "body")
     })
-    @PostMapping("sendTextMessageByCustomerCode")
-    public Object sendTextMessage(){
+    @PostMapping("sendCreditMessage")
+    public Object sendCreditMessage(@RequestBody SendOrderNoticeTaskModel model){
+        logger.info("收到需要通知的确认要货及未过信用通知参数:"+model.toString());
+        //异步通知
+        qyWxSendMessageUtil.sendCreditMessage(model);
 
-        ParameterObject obj =  getParameterObject();
-        JSONObject jobj = obj.getJSONObject();
-        Set<String> customerCodes = jobj.keySet();
-        logger.info("收到需要通知过信息的请求参数:"+jobj.toString());
-        logger.info("收到需要通知的经销商组织代码:"+customerCodes.toString());
-        Map<String,Map<String,Object>> maps = sysUserService.selectLoginNamesByCostumerCode(customerCodes);
-        String temple =configService.selectConfigByKey("wx.notification.time");
-        if(customerCodes.size()>0){
-            qyWxSendMessageUtil.sendNoticeMessage(customerCodes,obj.getJSONObject(),maps,temple);
-        }
         return AjaxResult.success();
     }
 

+ 20 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/domain/SendOrderNoticeTaskModel.java

@@ -0,0 +1,20 @@
+package com.dgtly.wxportal.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 过信未过信订单 微信通知信息 参数类
+ */
+@Data
+public class SendOrderNoticeTaskModel implements Serializable {
+    /**
+     * 过信用未要货信息列表
+     */
+    private SendOrderNoticeTaskModelCredit credit = new SendOrderNoticeTaskModelCredit();
+    /**
+     * 未过信用 信息列表
+     */
+    private SendOrderNoticeTaskModelCredit notCredit = new SendOrderNoticeTaskModelCredit();
+}

+ 36 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/domain/SendOrderNoticeTaskModelCredit.java

@@ -0,0 +1,36 @@
+package com.dgtly.wxportal.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 信用信息通知实体
+ */
+@Data
+public class SendOrderNoticeTaskModelCredit implements Serializable {
+    /**
+     * 经销商-订单个数
+     */
+    private Map<String,Integer> customerMap = new HashMap<>();
+
+    /**
+     * 销售员-经销商
+     */
+    private Map<String,List<SendOrderNoticeTaskModelCustomer>> salesMap= new HashMap<>();
+
+    /**
+     * 销售分部主管-销售员
+     *
+     */
+    private Map<String,Set<String>> subOfficeMap = new HashMap<>();
+
+    /**
+     * 销售主管 -销售分部主管
+     */
+    private Map<String,Set<String>> officeMap = new HashMap<>();
+}

+ 24 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/domain/SendOrderNoticeTaskModelCustomer.java

@@ -0,0 +1,24 @@
+package com.dgtly.wxportal.domain;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class SendOrderNoticeTaskModelCustomer implements Serializable {
+
+
+    /**
+     * 经销商编号
+     *
+     */
+    private String customerCode;
+
+    /**
+     * 经销商名称
+     */
+    private String customerName;
+
+}

+ 59 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/BatchSendCustomerCreditMessage.java

@@ -0,0 +1,59 @@
+package com.dgtly.wxportal.service;
+
+
+import com.dgtly.wxportal.domain.WxSendMessage;
+import com.dgtly.wxportal.utils.BatchSendGetToUser;
+import com.dgtly.wxportal.utils.BatchSendGetSendMessage;
+import com.dgtly.wxportal.utils.qywxutils.QyWxSendMessageUtil;
+import com.dgtly.wxportal.utils.qywxutils.messageModel.QyWxBaseMessage;
+import com.dgtly.wxportal.utils.qywxutils.messageModel.QyWxTextMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class BatchSendCustomerCreditMessage<T,V> implements BatchSendQyWxMessage {
+    private static final Logger log = LoggerFactory.getLogger(BatchSendCustomerCreditMessage.class);
+
+    //组织代码set 遍历的主键
+    private Set<T> orgCodeSet;
+    //  获取toUser字段的类
+    private BatchSendGetToUser<T> getToUser;
+    //  获取toText字段的类
+    private BatchSendGetSendMessage getSendMessage;
+
+    public BatchSendCustomerCreditMessage (Set<T> orgCodeSet, BatchSendGetToUser<T> getToUser,
+                                           BatchSendGetSendMessage getSendMessage) {
+        this.orgCodeSet = orgCodeSet;
+        this.getToUser = getToUser;
+        this.getSendMessage = getSendMessage;
+    }
+
+    @Override
+    public List<QyWxBaseMessage> getMessageList() {
+        List<QyWxBaseMessage> res = new ArrayList<>();
+        for (T code : orgCodeSet) {
+            try{
+                String toUser = getToUser.getToUser(code);
+
+                if (toUser == null || toUser.trim().equals("")) {
+                    log.error("code为:" + code + "发送消息失败,为查询到toUser的存在");
+                    continue;
+                }
+                //发送的文字
+                String text = getSendMessage.getSendText(code);
+                QyWxTextMessage qyWxTextMessage = new QyWxTextMessage();
+                qyWxTextMessage.setTouser(toUser);
+                qyWxTextMessage.setText(text);
+                res.add(qyWxTextMessage);
+            }catch (Exception e){
+                log.error("获取待发送信息发生异常",e);
+            }
+        }
+        return res;
+    }
+
+}

+ 11 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/service/BatchSendQyWxMessage.java

@@ -0,0 +1,11 @@
+package com.dgtly.wxportal.service;
+
+import com.dgtly.wxportal.domain.WxSendMessage;
+import com.dgtly.wxportal.utils.qywxutils.messageModel.QyWxBaseMessage;
+
+import java.util.List;
+
+public interface BatchSendQyWxMessage {
+
+    public List<QyWxBaseMessage> getMessageList();
+}

+ 6 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/BatchSendGetSendMessage.java

@@ -0,0 +1,6 @@
+package com.dgtly.wxportal.utils;
+
+public interface BatchSendGetSendMessage<T> {
+
+    String getSendText(T key);
+}

+ 6 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/BatchSendGetToUser.java

@@ -0,0 +1,6 @@
+package com.dgtly.wxportal.utils;
+
+public interface BatchSendGetToUser<T> {
+
+    String getToUser(T code);
+}

+ 35 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetSendMessageCus.java

@@ -0,0 +1,35 @@
+package com.dgtly.wxportal.utils;
+
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 不是销售 获取发送文字的方法;
+ */
+public class CreditGetSendMessageCus<T> implements BatchSendGetSendMessage<T>{
+
+    //发送文字模版
+    private String temple;
+    //发送文字和其他参数的map
+    private Map<T,Integer> textObject;
+
+    public CreditGetSendMessageCus(String template, Map<T,Integer> textObject){
+        this.temple = template;
+        this.textObject = textObject;
+    }
+
+    @Override
+    public String getSendText(T code) {
+        String str = "";
+        if(textObject.containsKey(code)){
+            return String.format(temple,textObject.get(code).toString(),code.toString());
+        }else{
+            throw new RuntimeException("未查询到相应组织代码对应的文字参数,code:"+code.toString());
+        }
+
+    }
+
+
+
+}

+ 48 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetSendMessageSale.java

@@ -0,0 +1,48 @@
+package com.dgtly.wxportal.utils;
+
+import com.dgtly.wxportal.domain.SendOrderNoticeTaskModelCustomer;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 销售 获取发送文字的方法;
+ */
+public class CreditGetSendMessageSale<T> implements BatchSendGetSendMessage<T> {
+
+    //发送信息模板
+    private String temple;
+
+    //经销商连接模版
+    private String cusLintTemp;
+    //文字参数集合
+    private Map<T,List<SendOrderNoticeTaskModelCustomer>> map;
+    public CreditGetSendMessageSale(String template,String cusLintTemp,Map<T,List<SendOrderNoticeTaskModelCustomer>> map){
+
+        this.temple = template;
+        this.cusLintTemp = cusLintTemp;
+        this.map = map;
+    }
+
+    @Override
+    public String getSendText(T code) {
+        String str="";
+        if(map.containsKey(code)){
+            List<SendOrderNoticeTaskModelCustomer> list = map.get(code);
+            if(list.size()>5){
+                str = list.size()+"个";
+            }else{
+                for(SendOrderNoticeTaskModelCustomer cus:list){
+                    str+="<a href='"+String.format(cusLintTemp,cus.getCustomerCode())+"'>"+cus.getCustomerName()+"</a>、";
+                }
+                str  = str.substring(0,str.length()-1);
+            }
+            return String.format(temple,str,code);
+        }else{
+            throw new RuntimeException("未找到code:"+code+"的文字内容");
+        }
+
+    }
+
+
+}

+ 41 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetSendMessageSubAndOffice.java

@@ -0,0 +1,41 @@
+package com.dgtly.wxportal.utils;
+
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 不是销售 获取发送文字的方法;
+ */
+public class CreditGetSendMessageSubAndOffice<T> implements BatchSendGetSendMessage<T>{
+
+    //发送文字模版
+    private String temple;
+    //发送文字和其他参数的map
+    private Map<T,Set<String>> textObject;
+    private Map<String,Map<String,Object>> employeeCodeTouser;
+    public CreditGetSendMessageSubAndOffice(String template, Map<T,Set<String>> textObject,Map<String,Map<String,Object>> employeeCodeTouser){
+        this.temple = template;
+        this.textObject = textObject;
+        this.employeeCodeTouser = employeeCodeTouser;
+    }
+
+    @Override
+    public String getSendText(T code) {
+        String str = "";
+        if(textObject.containsKey(code)&&employeeCodeTouser.containsKey(code)){
+            String orgCode = employeeCodeTouser.get(code).get("org_code").toString();
+            for(String s :textObject.get(code)){
+                str+=s+",";
+            }
+            str = str.substring(0, str.length() - 1);
+            return String.format(temple,str,orgCode);
+        }else{
+            throw new RuntimeException("未查询到相应组织代码对应的文字参数,code:"+code.toString());
+        }
+
+    }
+
+
+
+}

+ 22 - 0
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/CreditGetToUser.java

@@ -0,0 +1,22 @@
+package com.dgtly.wxportal.utils;
+
+import java.util.Map;
+
+public class CreditGetToUser<T> implements BatchSendGetToUser<T>{
+
+    //key为组织code 值为toUser 和 1321||4123的简直对
+    private Map<T,Map<String,Object>> toUserMap;
+
+    public CreditGetToUser(Map<T,Map<String,Object>> toUserMap){
+        this.toUserMap = toUserMap;
+    }
+    @Override
+    public String getToUser(T code) {
+        if(toUserMap.containsKey(code)){
+            return toUserMap.get(code).get("touser").toString();
+        }else{
+            throw new RuntimeException("为查询到组织code为:"+code.toString()+"touser值");
+        }
+
+    }
+}

+ 217 - 46
suishenbang-wxportal/suishenbang-wxportal-common/src/main/java/com/dgtly/wxportal/utils/qywxutils/QyWxSendMessageUtil.java

@@ -1,17 +1,19 @@
 package com.dgtly.wxportal.utils.qywxutils;
 
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.dgtly.common.utils.http.HttpUtils;
-import com.dgtly.system.service.ISysConfigService;
 import com.dgtly.system.service.ISysUserService;
 import com.dgtly.system.service.impl.SysConfigServiceImpl;
 import com.dgtly.system.service.impl.SysUserServiceImpl;
+import com.dgtly.wxportal.domain.SendOrderNoticeTaskModel;
+import com.dgtly.wxportal.domain.SendOrderNoticeTaskModelCredit;
 import com.dgtly.wxportal.domain.WxSendMessage;
 import com.dgtly.wxportal.exception.QyWeixinException;
 import com.dgtly.wxportal.mapper.WxSendMessageMapper;
-import com.dgtly.wxportal.service.IWxSendMessageService;
+import com.dgtly.wxportal.service.BatchSendCustomerCreditMessage;
+import com.dgtly.wxportal.service.BatchSendQyWxMessage;
+import com.dgtly.wxportal.utils.*;
 import com.dgtly.wxportal.utils.qywxutils.messageModel.QyWxBaseMessage;
 import com.dgtly.wxportal.utils.qywxutils.messageModel.QyWxTextMessage;
 import org.slf4j.Logger;
@@ -20,10 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 企业微信发送信息工具类
@@ -31,34 +30,24 @@ import java.util.Set;
 @Component
 public class QyWxSendMessageUtil {
     private static final Logger log = LoggerFactory.getLogger(QyWxSendMessageUtil.class);
-
     @Autowired
     private QyWxAccessTokenUtil qyWxAccessTokenUtil;
 
 
     @Autowired
     private SysConfigServiceImpl configService;
+    @Autowired
+    private ISysUserService sysUserService;
+
     @Autowired
     private WxSendMessageMapper wxSendMessageMapper;
 
 
-    public boolean sendMessage(QyWxBaseMessage message){
 
-        message.setAgentid(qyWxAccessTokenUtil.getAgentId());
-        String url = QyWxServiceUrl.SEND_MESSAGE_URL.getformatUrl(qyWxAccessTokenUtil.getAccessToken());
-        String result =  HttpUtils.sendJsonPost(url,message);
-        JSONObject json = JSONObject.parseObject(result);
 
-        Integer errcode = json.getInteger("errcode");
-        if(errcode!=0){
-            throw new QyWeixinException(errcode,url);
-        }
-        return true;
-
-    }
 
     @Async
-    public void sendNoticeMessage(Set<String> customerCodes,JSONObject obj, Map<String,Map<String,Object>> maps,String temple){
+    public void sendDeliveryMessage(Set<String> customerCodes,Map<String,Map<String,Object>> maps,String msg){
         List<WxSendMessage> wmList = new ArrayList<>();
         if(customerCodes.size()>0){
             for(String code:customerCodes){
@@ -67,14 +56,12 @@ public class QyWxSendMessageUtil {
                     QyWxTextMessage qyWxTextMessage = new QyWxTextMessage();
                     qyWxTextMessage.setTouser(maps.get(code).get("touser").toString());
                     wm.setToUser(qyWxTextMessage.getTouser());
-                    String str = obj.getString(code).split(",").length+"";
-                    String text = String.format(temple,str,code);
-                    qyWxTextMessage.setText(text);
+                    qyWxTextMessage.setText(msg);
                     wm.setSendText(qyWxTextMessage.getText().getContent());
                     try{
                         sendMessage(qyWxTextMessage);
                         wm.setIsSuccess("1");
-                        wm.setForm("0");
+                        wm.setForm("1");
                     }catch (Exception e){
                         log.error("对"+maps.get(code).get("touser")+"发送消息失败",e);
                     }finally {
@@ -96,41 +83,225 @@ public class QyWxSendMessageUtil {
     }
 
     @Async
-    public void sendDeliveryMessage(Set<String> customerCodes,Map<String,Map<String,Object>> maps,String msg){
+    public void sendCreditMessage(SendOrderNoticeTaskModel model) {
+
+        if(model.getCredit()!=null){
+            sendCreditMessage(model.getCredit(),0);
+        }
+        if(model.getNotCredit()!=null){
+            sendCreditMessage(model.getNotCredit(),1);
+        }
+
+
+    }
+
+    /**
+     * 发送信用相关信息
+     * @param credit
+     * @param type 0过信用未要货  1 未过信用
+     */
+    void sendCreditMessage(SendOrderNoticeTaskModelCredit credit,int type){
+        //发送经销商过信用通知
+        if(credit.getCustomerMap()!=null&&credit.getCustomerMap().size()>0){
+            try{
+                //需要发送的组织codeset列表
+                Set<String> orgCodeSet = credit.getCustomerMap().keySet();
+                //需要发送的组织凑的
+
+                Map<String,Map<String,Object>> orgCodeTouser = sysUserService.selectLoginNamesByCostumerCode(orgCodeSet);
+                String conKey = "";
+                String form="";
+                if(type==0){
+                    System.out.println("发送经销商过信用");
+                    conKey ="wx.notification.credit.customer";
+                    form="3";
+                }else {
+                    System.out.println("发送经销商未过信用");
+                    conKey ="wx.notification.nocredit.customer";
+                    form="7";
+                }
+                String temple =configService.selectConfigByKey(conKey);
+                BatchSendGetToUser<String> getToUser = new CreditGetToUser<>(orgCodeTouser);
+                BatchSendGetSendMessage getText = new CreditGetSendMessageCus(temple,credit.getCustomerMap());
+
+                BatchSendQyWxMessage batchSendQyWxMessage = new BatchSendCustomerCreditMessage<String,Map<String,Object>>(orgCodeSet,getToUser,getText);
+                List<QyWxBaseMessage> messageList = batchSendQyWxMessage.getMessageList();
+                int success =  batchSendMessage(messageList,form);
+                log.info("批量发送信息,成功:"+success+"条,总共:"+messageList.size());
+            }catch (Exception e){
+                log.error("发送信用相关经销商通知出错",e);
+            }
+
+
+
+        }
+
+        //发送销售过信用通知
+        if(credit.getSalesMap()!=null&&credit.getSalesMap().size()>0){
+            try{
+                //codeSet 为销售的雇员id
+                Set<String> employeeSet = credit.getSalesMap().keySet();
+                Map<String,Map<String,Object>> employeeCodeTouser = sysUserService.selectLoginNamesByEmployeeCode(employeeSet);
+
+
+                String conKey = "";
+                String form="";
+                if(type==0){
+                    conKey ="wx.notification.credit.sales";
+                    form="4";
+                }else {
+                    conKey ="wx.notification.nocredit.sales";
+                    form="8";
+                }
+                //信息模板
+                String temple =configService.selectConfigByKey(conKey);
+                //经销商链接模板
+                String cusLintTemp =configService.selectConfigByKey("wx.notification.credit.sales.cuslink");
+
+                BatchSendGetToUser getToUser = new CreditGetToUser(employeeCodeTouser);
+
+                //String template,String cusLintTemp,Map<T,List<SendOrderNoticeTaskModelCustomer>> map
+                BatchSendGetSendMessage getText = new CreditGetSendMessageSale(temple,cusLintTemp,credit.getSalesMap());
+
+                BatchSendQyWxMessage batchSendQyWxMessage = new BatchSendCustomerCreditMessage<String,Map<String,Object>>(employeeSet,getToUser,getText);
+                List<QyWxBaseMessage> messageList = batchSendQyWxMessage.getMessageList();
+                int success =  batchSendMessage(messageList,form);
+                log.info("批量发送信息,成功:"+success+"条,总共:"+messageList.size());
+            }catch (Exception e){
+                log.error("发送信用相关销售通知出错",e);
+            }
+
+
+        }
+
+        //发送分部过信用通知
+        if(credit.getSubOfficeMap()!=null&&credit.getSubOfficeMap().size()>0){
+            try{
+
+                Set<String> orgCodeSet = credit.getSubOfficeMap().keySet();
+                Map<String,Map<String,Object>> maps = sysUserService.selectLoginNamesByEmployeeCode(orgCodeSet);
+                String conKey = "";
+                String form="";
+                if(type==0){
+                    conKey ="wx.notification.credit.suboffice";
+                    form = "5";
+                }else {
+                    conKey ="wx.notification.nocredit.suboffice";
+                    form = "9";
+                }
+                sendMessageSubAndOffice(orgCodeSet,maps,credit.getSubOfficeMap(),conKey,form);
+            }catch (Exception e){
+                log.error("发送信用相关分部通知出错",e);
+            }
+
+        }
+        //发送销售部过信用通知
+
+        if(credit.getOfficeMap()!=null&&credit.getOfficeMap().size()>0){
+            try{
+                Set<String> employeeCodeSet = credit.getOfficeMap().keySet();
+                Map<String,Map<String,Object>> maps = sysUserService.selectLoginNamesByEmployeeCode(employeeCodeSet);
+                String conKey = "";
+                String form="";
+                if(type==0){
+                    conKey ="wx.notification.credit.office";
+                    form="6";
+                }else {
+                    conKey ="wx.notification.nocredit.office";
+                    form="10";
+                }
+                sendMessageSubAndOffice(employeeCodeSet,maps,credit.getOfficeMap(),conKey,form);
+            }catch (Exception e){
+                log.error("发送信用相关销售部通知出错",e);
+            }
+
+        }
+    }
+
+
+    /**
+     *
+     * @param orgCodeSet 组织代码Set
+     * @param orgCodeTouser 组织代码为KET 值为 toUser:123||456
+     * @param configKey
+     * @param form
+     */
+    /**
+     * 批量发送企业微信信息  销售部和分部
+     * @param orgCodeSet
+     * @param employeeCodeTouser
+     * @param orgCodeValue
+     * @param configKey
+     * @param form
+     */
+    public void sendMessageSubAndOffice(Set<String> orgCodeSet,Map<String,Map<String,Object>> employeeCodeTouser,Map<String,Set<String>> orgCodeValue,String configKey,String form){
+        //信息模板
+        String temple =configService.selectConfigByKey(configKey);
+        BatchSendGetToUser<String> getToUser = new CreditGetToUser<>(employeeCodeTouser);
+
+        BatchSendGetSendMessage getText = new CreditGetSendMessageSubAndOffice(temple,orgCodeValue,employeeCodeTouser);
+
+        BatchSendQyWxMessage batchSendQyWxMessage = new BatchSendCustomerCreditMessage<String,Map<String,Object>>(orgCodeSet,getToUser,getText);
+        List<QyWxBaseMessage> messageList = batchSendQyWxMessage.getMessageList();
+        int success =  batchSendMessage(messageList,form);
+        log.info("批量发送信息,成功:"+success+"条,总共:"+messageList.size());
+
+    }
+
+    public int batchSendMessage(List<QyWxBaseMessage> messageList,String form){
+        int success = 0;
+        int faile =0;
         List<WxSendMessage> wmList = new ArrayList<>();
-        if(customerCodes.size()>0){
-            for(String code:customerCodes){
-                if(maps.containsKey(code)&&maps.get(code).get("touser")!=null&&!maps.get(code).get("touser").toString().trim().equals("")){
-                    WxSendMessage wm= new WxSendMessage();
-                    QyWxTextMessage qyWxTextMessage = new QyWxTextMessage();
-                    qyWxTextMessage.setTouser(maps.get(code).get("touser").toString());
-                    wm.setToUser(qyWxTextMessage.getTouser());
-                    qyWxTextMessage.setText(msg);
-                    wm.setSendText(qyWxTextMessage.getText().getContent());
-                    try{
-                        sendMessage(qyWxTextMessage);
-                        wm.setIsSuccess("1");
-                        wm.setForm("1");
-                    }catch (Exception e){
-                        log.error("对"+maps.get(code).get("touser")+"发送消息失败",e);
-                    }finally {
-                        wmList.add(wm);
-                    }
+        for(QyWxBaseMessage qyWxBaseMessage:messageList){
+            WxSendMessage wm = new WxSendMessage();
+            try{
+                wm.setForm(form);
+                wm.setToUser(qyWxBaseMessage.getTouser());
+                if(qyWxBaseMessage.getClass()==QyWxTextMessage.class){
+                    QyWxTextMessage qt = (QyWxTextMessage)qyWxBaseMessage;
+                    wm.setSendText(qt.getText().getContent());
+                }
+                boolean f =  sendMessage(qyWxBaseMessage);
+                if(f){
+                   success++;
+                   wm.setIsSuccess("1");
                 }else{
-                    log.error("经销商code为:"+code+"的经销商未发现相应人员!!");
+                   faile++;
                 }
+            }catch (Exception e){
+                log.error("对" + qyWxBaseMessage.getTouser() + "发送消息失败", e);
+                faile++;
+            } finally {
+                wmList.add(wm);
             }
         }
         if(wmList.size()>0){
             try{
                 wxSendMessageMapper.bathInsertWxSendMessage(wmList);
             }catch (Exception e){
-
                 log.error("发送微信信息时插入记录出错!!",e);
             }
         }
+        return success;
     }
 
+    /**
+     * 发送一条企业微信
+     * @param message
+     * @return
+     */
+    public boolean sendMessage(QyWxBaseMessage message){
+        message.setAgentid(qyWxAccessTokenUtil.getAgentId());
+        String url = QyWxServiceUrl.SEND_MESSAGE_URL.getformatUrl(qyWxAccessTokenUtil.getAccessToken());
+        String result =  HttpUtils.sendJsonPost(url,message);
+        JSONObject json = JSONObject.parseObject(result);
 
+        Integer errcode = json.getInteger("errcode");
+        if(errcode!=0){
+            throw new QyWeixinException(errcode,url);
+        }
+        return true;
+
+    }
 
 }

+ 1 - 1
suishenbang-wxportal/suishenbang-wxportal-common/src/main/resources/mapper/wxportal/WxSendMessageMapper.xml

@@ -33,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
             </if>
         </where>
-        GROUP BY create_time DESC
+        ORDER BY create_time DESC
     </select>
     
     <select id="selectWxSendMessageById" parameterType="Long" resultMap="WxSendMessageResult">