فهرست منبع

九州-投诉 显示客户所属关系/小访客-链接跳转小程序

三七 1 هفته پیش
والد
کامیت
accb77ebed

+ 10 - 0
fs-admin/src/main/java/com/fs/course/controller/FsUserCourseComplaintRecordController.java

@@ -75,6 +75,16 @@ public class FsUserCourseComplaintRecordController extends BaseController
         return AjaxResult.success(fsUserCourseComplaintRecordService.selectFsUserCourseComplaintRecordByRecordId(recordId));
     }
 
+    /**
+    * 获取 看课投诉记录详细信息-客户所属关系
+    */
+    @PreAuthorize("@ss.hasPermi('course:userCourseComplaintRecord:queryQw')")
+    @GetMapping(value = "/getInfoByUserId/{userId}")
+    public AjaxResult getInfoByUserId(@PathVariable("userId") Long userId)
+    {
+        return AjaxResult.success(fsUserCourseComplaintRecordService.selectFsUserCourseComplaintRecordByUserId(userId));
+    }
+
     /**
      * 新增看课投诉记录
      */

+ 5 - 2
fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -103,6 +103,10 @@ public class CommonController {
     @Autowired
     private IQwMaterialService iQwMaterialService;
 
+
+    @Autowired
+    private IFsCourseLinkService iFsCourseLinkService;
+
     /**
     * 发官方通连
     */
@@ -142,8 +146,7 @@ public class CommonController {
     @GetMapping("/testSop")
     public R testSop() throws Exception {
 
-        iQwMaterialService.updateQwMaterialByQw();
-        return R.ok();
+        return iFsCourseLinkService.getWxaCodeGenerateScheme("/pages_course/video.html?course={\"companyId\":100,\"companyUserId\":2020,\"corpId\":\"wweb0666cc79d79da5\",\"courseId\":61,\"link\":\"1950497651577323520\",\"linkType\":3,\"qwExternalId\":2356946,\"qwUserId\":\"1682\",\"uNo\":\"b8b010e1-ee0f-42ec-8ad8-06681d1b449a\",\"videoId\":366}","wx34bba1ae94d34986");
     }
 
     @GetMapping("/testRatingSop")

+ 2 - 0
fs-service/src/main/java/com/fs/course/service/IFsCourseLinkService.java

@@ -92,4 +92,6 @@ public interface IFsCourseLinkService
      * @return
      */
     String getGotoWxAppLink(String linkStr,String appid);
+
+    R getWxaCodeGenerateScheme(String linkStr,String appId);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/service/IFsUserCourseComplaintRecordService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.course.domain.FsUserCourseComplaintRecord;
 import com.fs.course.param.UserCourseComplaintRecordParam;
 import com.fs.course.vo.FsUserCourseComplaintRecordPageListVO;
+import com.fs.qw.vo.QwExternalContactComplaintVO;
 
 /**
  * 看课投诉记录Service接口
@@ -21,6 +22,8 @@ public interface IFsUserCourseComplaintRecordService extends IService<FsUserCour
      */
     FsUserCourseComplaintRecordPageListVO selectFsUserCourseComplaintRecordByRecordId(Long recordId);
 
+    List<QwExternalContactComplaintVO> selectFsUserCourseComplaintRecordByUserId(Long userId);
+
     /**
      * 查询看课投诉记录列表
      *

+ 97 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsCourseLinkServiceImpl.java

@@ -12,8 +12,10 @@ import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.config.cloud.CloudHostProper;
+import com.fs.core.config.WxMaConfig;
 import com.fs.core.config.WxMaConfiguration;
 import com.fs.course.config.CourseConfig;
+import com.fs.course.config.CourseMaConfig;
 import com.fs.course.domain.*;
 import com.fs.course.mapper.FsCourseDomainNameMapper;
 import com.fs.course.mapper.FsCourseLinkMapper;
@@ -25,6 +27,7 @@ import com.fs.course.service.IFsCourseLinkService;
 import com.fs.course.service.IFsUserCourseService;
 import com.fs.his.config.FsSysConfig;
 import com.fs.his.utils.ConfigUtil;
+import com.fs.his.utils.HttpUtil;
 import com.fs.qw.domain.QwGroupChat;
 import com.fs.qw.domain.QwGroupChatUser;
 import com.fs.qw.domain.QwUser;
@@ -33,8 +36,12 @@ import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.service.IQwGroupChatService;
 import com.fs.qw.service.IQwGroupChatUserService;
 import com.fs.qw.vo.GroupUserExternalVo;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.service.ISysConfigService;
 import com.fs.voice.utils.StringUtil;
+import com.google.common.reflect.TypeToken;
+import com.google.gson.Gson;
 import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
@@ -42,6 +49,7 @@ import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -104,9 +112,15 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
     @Autowired
     private CompanyUserMapper companyUserMapper;
 
+    @Autowired
+    private ConfigUtil configUtil;
+
     @Autowired
     CloudHostProper cloudHostProper;
 
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+
     private static String TOKEN_VALID_CODE = "40001";
 
     private volatile Integer version = 0;
@@ -817,4 +831,87 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
         }
         return "";
     }
+
+    @Override
+    public R getWxaCodeGenerateScheme(String linkStr,String appId) {
+        CloseableHttpClient client = null;
+        try {
+            client = HttpClients.createDefault();
+            String[] split = linkStr.split("\\?");
+            if (split.length == 2 && split[0].length() > 0 && split[1].length() > 0) {
+                //处理页面路径
+                String pageUrl = split[0];
+                if (pageUrl.startsWith("/")) {
+//                    pageUrl = pageUrl.substring(1);
+                    pageUrl = "pages_course/video";
+                }
+                //处理参数
+                String query = split[1];
+                query = URLEncoder.encode(query, StandardCharsets.UTF_8.toString());
+
+
+
+                SysConfig sysConfig3 = sysConfigMapper.selectConfigByConfigKey("courseMa.config");
+                List<CourseMaConfig> courseMaConfigs = JSON.parseArray(sysConfig3.getConfigValue(), CourseMaConfig.class);
+                if (courseMaConfigs!=null&& !courseMaConfigs.isEmpty()){
+                    for (CourseMaConfig courseMaConfig : courseMaConfigs) {
+                        if (appId.equals(courseMaConfig.getAppid())) {
+
+                            //获取微信token
+
+                            String url="https://api.weixin.qq.com/cgi-bin/stable_token";
+                            HashMap<String, String> map = new HashMap<>();
+                            map.put("grant_type","client_credential");
+                            map.put("appid",courseMaConfig.getAppid());
+                            map.put("secret",courseMaConfig.getSecret());
+
+
+                            String accessToken = HttpUtil.endApi(url, null, map);
+
+                            Map<String, String> accessTokenMap  = new Gson().fromJson(accessToken, new TypeToken<Map<String, Object>>(){}.getType());
+
+
+                            HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + accessTokenMap.get("access_token"));
+                            JSONObject bodyObj = new JSONObject();
+                            bodyObj.put("path", pageUrl);
+                            bodyObj.put("query", query);
+                            bodyObj.put("env_version", "release");
+
+                            StringEntity entity = new StringEntity(bodyObj.toJSONString(),"UTF-8");
+                            httpPost.setEntity(entity);
+                            httpPost.setHeader("Content-type", "application/json");
+                            httpPost.setHeader("cache-control","max-age=0");
+                            HttpEntity response = client.execute(httpPost).getEntity();
+                            String responseString = EntityUtils.toString(response);
+
+                            JSONObject jsonObject = JSONObject.parseObject(responseString);
+
+
+
+                            if(null != jsonObject && !jsonObject.isEmpty() && jsonObject.containsKey("url_link")){
+                                return R.ok().put("urlLink",jsonObject.getString("url_link")) ;
+                            }else {
+                                return R.error("获取失败:"+jsonObject.getString("errmsg"));
+                            }
+                        }else {
+                            return R.error("未配置小程序id");
+                        }
+                    }
+                }
+
+
+
+            } else {
+                return R.error("页面链接错误,获取失败");
+            }
+
+        } catch (ClientProtocolException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return R.ok();
+    }
+
+
 }

+ 6 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseComplaintRecordServiceImpl.java

@@ -12,6 +12,7 @@ import com.fs.course.param.UserCourseComplaintRecordParam;
 import com.fs.course.vo.FsUserCourseComplaintRecordPageListVO;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.mapper.QwExternalContactMapper;
+import com.fs.qw.vo.QwExternalContactComplaintVO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,6 +44,11 @@ public class FsUserCourseComplaintRecordServiceImpl extends ServiceImpl<FsUserCo
         return baseMapper.selectFsUserCourseComplaintRecordByRecordId(recordId);
     }
 
+    @Override
+    public List<QwExternalContactComplaintVO> selectFsUserCourseComplaintRecordByUserId(Long userId) {
+        return qwExternalContactMapper.selectFsUserCourseComplaintRecordByUserId(userId);
+    }
+
     /**
      * 查询看课投诉记录列表
      *

+ 1 - 0
fs-service/src/main/java/com/fs/his/service/IFsInquiryOrderService.java

@@ -128,4 +128,5 @@ public interface IFsInquiryOrderService
     void exportFeedbackData(FsInquiryOrderParam fsInquiryOrder);
 
     byte[] getWxaCodeInquiryOrderUnLimit(Long orderId);
+
 }

+ 2 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -410,4 +410,6 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
 
     List<QwExternalContact> selectExternalByFsUserIds(@Param("userIds")List<Long> userIds);
 
+    List<QwExternalContactComplaintVO> selectFsUserCourseComplaintRecordByUserId(Long userId);
+
 }

+ 70 - 0
fs-service/src/main/java/com/fs/qw/vo/QwExternalContactComplaintVO.java

@@ -0,0 +1,70 @@
+package com.fs.qw.vo;
+
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QwExternalContactComplaintVO extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+
+    private Long id;
+
+    /** 属于员工账号 */
+    private String userId;
+
+    /** 属于员工id */
+    private Long qwUserId;
+
+    /**
+    * 属于员工名称
+    */
+    private String qwUserName;
+
+    /**
+    * 销售账号
+    */
+    private String userName;
+
+    /**
+    * 销售昵称
+    */
+    private String nickName;
+
+
+    /**
+    * 客户小程序id
+    */
+    private Long fsUserId;
+
+    /** 外部联系人id */
+    private String externalUserId;
+
+    /** 客户名称 */
+    private String name;
+
+    /** 头像 */
+    private String avatar;
+
+    private Integer status;
+
+    //看课评论状态,1-拉黑;0-正常
+    private Integer commentStatus;
+
+    /**
+    * 备注
+    */
+    private String remark;
+
+    /** 描述信息 */
+    private String description;
+
+
+
+
+
+}

+ 10 - 1
fs-service/src/main/resources/mapper/qw/QwExternalContactMapper.xml

@@ -39,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="unionid"    column="unionid"    />
         <result property="isInteract"    column="is_interact"    />
         <result property="level"    column="level"    />
-        <result property="leveType"    column="level_type"    />
+        <result property="levelType"    column="level_type"    />
         <result property="firstTime"    column="first_time"    />
         <result property="lastWatchTime"    column="last_watch_time"    />
         <result property="registerTime"    column="register_time"    />
@@ -584,4 +584,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </select>
 
+    <select id="selectFsUserCourseComplaintRecordByUserId" resultType="com.fs.qw.vo.QwExternalContactComplaintVO">
+        select qec.id,qec.qw_user_id,qec.status,qec.user_id,qec.name,qec.avatar,qec.remark,qec.description,qec.fs_user_id,
+               qu.qw_user_name,cu.user_name ,cu.nick_name
+        from qw_external_contact qec
+               left join qw_user qu on qu.id=qec.qw_user_id
+               left join company_user cu on cu.user_id=qu.company_user_id
+        where fs_user_id = #{userId}
+    </select>
+
 </mapper>