Просмотр исходного кода

Merge branch 'master' of http://git.dgtis.com/15896567520/RuoYi-flowable-master

armg 9 месяцев назад
Родитель
Сommit
09a47d6dea
33 измененных файлов с 4042 добавлено и 627 удалено
  1. 217 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/dingding/DingAuthController.java
  2. 197 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/fg/FgController.java
  3. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  4. 80 71
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/CrmController.java
  5. 1 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/CrmFileController.java
  6. 115 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TCustomerController.java
  7. 13 1
      ruoyi-admin/src/main/resources/application.yml
  8. 164 130
      ruoyi-common/pom.xml
  9. 24 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
  10. 11 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  11. 56 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/dingding/config/DingAppConfig.java
  12. 42 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/dingding/config/DingUrlConstant.java
  13. 24 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/fg/FgUrlConstant.java
  14. 274 273
      ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
  15. 212 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/http/OkHttpFGUtils.java
  16. 2 1
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/crm/Impl/CrmServiceImpl.java
  17. 148 148
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  18. 2 2
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
  19. 163 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/crm/TCustomer.java
  20. 737 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/fg/Blogger.java
  21. 273 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/fg/SalesTrendData.java
  22. 199 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/fg/School.java
  23. 61 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/crm/TCustomerMapper.java
  24. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/fg/BloggerMapper.java
  25. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/crm/ITCustomerService.java
  26. 94 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/crm/impl/TCustomerServiceImpl.java
  27. 27 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/dingding/DingAuthService.java
  28. 169 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/dingding/DingTokenService.java
  29. 49 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/dingding/impl/DingAuthServiceImpl.java
  30. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/fg/IBloggerService.java
  31. 94 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/fg/impl/BloggerServiceImpl.java
  32. 104 0
      ruoyi-system/src/main/resources/mapper/crm/TCustomerMapper.xml
  33. 303 0
      ruoyi-system/src/main/resources/mapper/fg/BloggerMapper.xml

+ 217 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/dingding/DingAuthController.java

@@ -0,0 +1,217 @@
+package com.ruoyi.web.controller.dingding;
+
+import com.aliyun.dingtalkcontact_1_0.models.GetUserHeaders;
+import com.aliyun.dingtalkcontact_1_0.models.GetUserResponse;
+import com.aliyun.dingtalkcontact_1_0.Client;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teaopenapi.models.Config;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiUserGetRequest;
+import com.dingtalk.api.request.OapiUserGetuserinfoRequest;
+import com.dingtalk.api.response.OapiUserGetResponse;
+import com.dingtalk.api.response.OapiUserGetuserinfoResponse;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.dingding.config.DingUrlConstant;
+import com.ruoyi.framework.web.service.SysLoginService;
+import com.ruoyi.system.service.dingding.DingAuthService;
+import com.ruoyi.system.service.dingding.DingTokenService;
+import com.taobao.api.ApiException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Optional;
+
+/**
+ * <p>DingLoginController 此类用于:钉钉企业内部应用免登(H5微应用)</p>
+ * <p>@remark:钉钉企业内部微应用DEMO, 实现了身份验证(免登)功能</p>
+ */
+@Api(value = "dingAuthController", tags = "钉钉企业内部应用免登(H5微应用)")
+@Controller
+@RequestMapping(value = "/ding")
+public class DingAuthController {
+
+
+    @Resource
+    private DingTokenService dingTokenService;
+
+    @Resource
+    private DingAuthService dingAuthService;
+
+    @Autowired
+    private SysLoginService loginService;
+
+    /**
+     * 钉钉用户登录,显示当前登录用户的userId和名称
+     *
+     * @param authCode 免登临时authCode
+     * @return 当前用户
+     */
+    @ApiOperation(value = "钉钉用户登录,显示当前登录用户的userId和名称")
+    @PostMapping("/avoidLogin")
+    @ResponseBody
+    public AjaxResult login(@RequestBody String authCode) {
+        String accessToken;
+
+        // 获取accessToken
+        AjaxResult accessTokenSr = dingTokenService.getAccessToken();
+        if (!accessTokenSr.isSuccess()) {
+            return accessTokenSr;
+        }
+        accessToken = accessTokenSr.get(accessTokenSr.MSG_TAG).toString();
+
+        // 获取用户userId
+        AjaxResult userIdSr = getUserInfo(accessToken, authCode);
+        if (!userIdSr.isSuccess()) {
+            return userIdSr;
+        }
+
+        // 获取用户详情
+        AjaxResult userInfo = this.getUser(accessToken, userIdSr.get(userIdSr.MSG_TAG).toString());
+
+        return userInfo;
+    }
+
+    /**
+     * 访问/user/getuserinfo接口获取用户userId
+     *
+     * @param accessToken access_token
+     * @param authCode    临时授权码
+     * @return 用户userId或错误信息
+     */
+    private AjaxResult getUserInfo(String accessToken, String authCode) {
+        DingTalkClient client = new DefaultDingTalkClient(DingUrlConstant.URL_GET_USER_INFO);
+        OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
+        request.setCode(authCode);
+        request.setHttpMethod("GET");
+        OapiUserGetuserinfoResponse response;
+        try {
+            response = client.execute(request, accessToken);
+        } catch (ApiException e) {
+            return AjaxResult.error(e.getErrCode(), "Failed to getUserInfo: " + e.getErrMsg());
+        }
+        if (!response.isSuccess()) {
+            return AjaxResult.error(response.getErrorCode(), response.getErrmsg());
+        }
+        return AjaxResult.success(response.getUserid());
+    }
+
+
+    /**
+     * 访问/user/get 获取用户名称
+     *
+     * @param accessToken access_token
+     * @param userId      用户userId
+     * @return 用户名称或错误信息
+     */
+    private AjaxResult getUser(String accessToken, String userId) {
+        DingTalkClient client = new DefaultDingTalkClient(DingUrlConstant.URL_USER_GET);
+        OapiUserGetRequest request = new OapiUserGetRequest();
+        request.setUserid(userId);
+        request.setHttpMethod("GET");
+
+        OapiUserGetResponse response;
+        try {
+            response = client.execute(request, accessToken);
+        } catch (ApiException e) {
+            return AjaxResult.error(Integer.parseInt(e.getErrCode()), "Failed to getUserName: " + e.getErrMsg());
+        }
+
+        SysUser user = this.assembleUserDTO(response, accessToken);
+
+        return AjaxResult.success(user);
+    }
+
+    /**
+     * 封装返回的用户信息
+     *
+     * @param response    response
+     * @param accessToken accessToken
+     * @return 用户信息
+     */
+    private SysUser assembleUserDTO(OapiUserGetResponse response, String accessToken) {
+        String userid = response.getUserid();
+        String mobile = response.getMobile();
+        try {
+            SysUser sysUser = Optional.ofNullable(dingAuthService.getUserByUserId(userid))
+                    .orElse(dingAuthService.getUserByUsername(mobile));
+            sysUser.setAccessToken(accessToken);
+            sysUser.setNickName(response.getName());
+            sysUser.setAvatar(response.getAvatar());
+            return sysUser;
+        } catch (Exception e) {
+            return new SysUser();
+        }
+    }
+
+
+    /**
+     * 钉钉用户登录
+     *
+     * @param authCode 免登临时authCode
+     * @return 当前用户
+     */
+    @ApiOperation(value = "钉钉用户登录")
+    @PostMapping("/authToken2")
+    @ResponseBody
+    public AjaxResult authToken2(@RequestBody String authCode){
+        // 获取accessToken
+        try {
+            AjaxResult accessTokenSr = dingTokenService.getUserAccessToken(authCode);
+
+            Client client = this.createClient();
+            GetUserHeaders getUserHeaders = new GetUserHeaders();
+            getUserHeaders.xAcsDingtalkAccessToken = accessTokenSr.get(accessTokenSr.MSG_TAG).toString();
+            try {
+                GetUserResponse response = client.getUserWithOptions("me", getUserHeaders, new RuntimeOptions());
+                accessTokenSr.put("sysUser",response.getBody());
+
+                SysUser sysUser = dingAuthService.getUserByUsername(response.getBody().getMobile());
+
+                if(StringUtils.isNull(sysUser) ){
+                    // todo 生成用户信息进行登录
+
+                }
+
+                String token = loginService.authSingleSignIn(sysUser.getUserName());
+                if (StringUtils.isNotEmpty(token)){
+                    accessTokenSr.put(Constants.TOKEN, token);
+                }
+            } catch (TeaException e) {
+                return AjaxResult.error(e.getMessage(),e);
+            } catch (Exception e) {
+                return AjaxResult.error(e.getMessage(),e);
+            }
+            return accessTokenSr;
+        } catch (Exception e) {
+            return AjaxResult.error("获取用户登录请求异常!");
+        }
+    }
+
+    /**
+     * 使用 Token 初始化账号Client
+     * @return Client
+     * @throws Exception
+     */
+    public static Client createClient() throws Exception {
+        Config config = new Config();
+        config.protocol = "https";
+        config.regionId = "central";
+        return new Client(config);
+    }
+
+
+
+}

+ 197 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/fg/FgController.java

@@ -0,0 +1,197 @@
+package com.ruoyi.web.controller.fg;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.fg.FgUrlConstant;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.common.utils.http.OkHttpFGUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.fg.SalesTrendData;
+import com.ruoyi.system.domain.fg.School;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Api(value = "fgController", tags = "飞瓜数据抓取接口")
+@Controller
+@RequestMapping(value = "/fg")
+public class FgController {
+
+
+
+
+
+
+
+
+    /**
+     * 获取数据
+     * @param response
+     */
+    @ApiOperation(value = "导出茶90天直播销售额与视频销售额")
+    @PostMapping("/exportSalesTrendData")
+    @ResponseBody
+    public void exportSalesTrendData(HttpServletResponse response) {
+
+        String URL = "http://120.27.232.118/api/v1/goodsDataOverView/salesTrendData";
+
+        List<SalesTrendData> resultList = new ArrayList<>();
+
+        String result = HttpUtils.sendGet(URL,"periodType=90&fromDateCode=20230829&toDateCode=20231126&cateId=20004");
+
+        Map maps = (Map) JSON.parse(result);
+        for(Object map : maps.entrySet()){
+            if(((Map.Entry)map).getKey().toString().equals("Data")){
+
+                JSONArray dataJArray = JSONObject.parseArray(((Map.Entry)map).getValue().toString());
+                List<Object> dataList = dataJArray;
+
+                for (Object po:
+                        dataList) {
+                    Map poMap = (Map) JSON.parse(po.toString());
+
+                    poMap.get("DateCode").toString();
+                    SalesTrendData salesTrendData = new SalesTrendData();
+
+                    salesTrendData.setAwemeSalesCount(poMap.get("AwemeSalesCount").toString());
+                    salesTrendData.setAwemeSalesCountStr(poMap.get("AwemeSalesCountStr").toString());
+                    salesTrendData.setAwemeSaleCountRatio(poMap.get("AwemeSaleCountRatio").toString());
+                    salesTrendData.setAwemeSales(poMap.get("AwemeSales").toString());
+                    salesTrendData.setAwemeSalesStr(poMap.get("AwemeSalesStr").toString());
+                    salesTrendData.setAwemeSalesRatio(poMap.get("AwemeSalesRatio").toString());
+
+                    salesTrendData.setDateCode(poMap.get("DateCode").toString());
+
+                    salesTrendData.setLiveSalesCount(poMap.get("LiveSalesCount").toString());
+                    salesTrendData.setLiveSalesCountStr(poMap.get("LiveSalesCountStr").toString());
+                    salesTrendData.setLiveSaleCountRatio(poMap.get("LiveSaleCountRatio").toString());
+                    salesTrendData.setLiveSales(poMap.get("LiveSales").toString());
+                    salesTrendData.setLiveSalesStr(poMap.get("LiveSalesStr").toString());
+                    salesTrendData.setLiveSalesRatio(poMap.get("LiveSalesRatio").toString());
+
+                    salesTrendData.setOtherSalesCount(poMap.get("OtherSalesCount").toString());
+                    salesTrendData.setOtherSalesCountStr(poMap.get("OtherSalesCountStr").toString());
+                    salesTrendData.setOtherSaleCountRatio(poMap.get("OtherSaleCountRatio").toString());
+                    salesTrendData.setOtherSales(poMap.get("OtherSales").toString());
+                    salesTrendData.setOtherSalesStr(poMap.get("OtherSalesStr").toString());
+                    salesTrendData.setOtherSalesRatio(poMap.get("OtherSalesRatio").toString());
+
+                    salesTrendData.setPV(poMap.get("PV").toString());
+                    salesTrendData.setPVStr(poMap.get("PVStr").toString());
+                    salesTrendData.setStatDate(poMap.get("StatDate").toString());
+                    salesTrendData.setSumSalesCount(poMap.get("SumSalesCount").toString());
+                    salesTrendData.setSumSalesCountStr(poMap.get("SumSalesCountStr").toString());
+                    salesTrendData.setTotalSales(poMap.get("TotalSales").toString());
+                    salesTrendData.setTotalSalesStr(poMap.get("TotalSalesStr").toString());
+
+                    resultList.add(salesTrendData);
+
+                }
+            }
+        }
+
+        ExcelUtil<SalesTrendData> util = new ExcelUtil<SalesTrendData>(SalesTrendData.class);
+        util.exportExcel(response, resultList, "茶90天直播销售额与视频销售额");
+
+    }
+
+
+    /**
+     * 导出crm附件列表
+     */
+    @ApiOperation("")
+    @Log(title = "导出中国大学专业排名", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, String year) throws InterruptedException {
+        String URL = "https://www.shanghairanking.cn/api/pub/v1/bcmr/rank";
+
+        List<School> resultList = new ArrayList<>();
+
+        String result = HttpUtils.sendGet(URL,"year=2023&majorCode=010101");
+
+        Map<String, List<Object>> map = OkHttpFGUtils.getSchoolMap(result);
+
+        for (Object majors: map.get("majorsList")) {
+
+            Map majorsMap = (Map) JSON.parse(majors.toString());
+
+            JSONArray childrens = JSONObject.parseArray(majorsMap.get("children").toString());
+            List<Object> childrenList = childrens;
+            if(StringUtils.isNotEmpty(childrenList)){
+                for (Object children: childrenList) {
+                    Map childrenMap = (Map) JSON.parse(children.toString());
+
+                    JSONArray childrens1 = JSONObject.parseArray(childrenMap.get("children").toString());
+                    List<Object> children1List = childrens1;
+                    if(StringUtils.isNotEmpty(children1List)) {
+                        for (Object children1 : children1List) {
+                            Map children1Map = (Map) JSON.parse(children1.toString());
+                            String rankingsResult = HttpUtils.sendGet(URL,"year=2023&majorCode="+children1Map.get("code").toString());
+
+                            Thread.sleep(10000); // 暂停10秒
+                            Map<String, List<Object>> univMap = OkHttpFGUtils.getSchoolMap(rankingsResult);
+
+                            for (Object rankings:
+                                    univMap.get("rankingsList")) {
+                                Map rankingsMap = (Map) JSON.parse(rankings.toString());
+
+                                if(rankingsMap.get("grade").toString().equals("A+")||rankingsMap.get("grade").toString().equals("A")){
+
+                                    School school = new School();
+
+                                    school.setlName(majorsMap.get("name").toString());
+                                    school.setlCode(majorsMap.get("code").toString());
+                                    school.setpName(childrenMap.get("name").toString());
+                                    school.setpCode(childrenMap.get("code").toString());
+                                    school.setzName(children1Map.get("name").toString());
+                                    school.setzCode(children1Map.get("code").toString());
+                                    school.setGrade(rankingsMap.get("grade").toString());
+                                    school.setUnivNameCn(rankingsMap.get("univNameCn").toString());
+                                    school.setScore(rankingsMap.get("score").toString());
+                                    school.setProvince(rankingsMap.get("province").toString());
+                                    school.setCity(rankingsMap.get("city").toString());
+                                    school.setUnivLikeCount(rankingsMap.get("univLikeCount").toString());
+                                    school.setUnivTags(rankingsMap.get("univTags").toString());
+                                    school.setRanking(rankingsMap.get("ranking").toString());
+
+                                    Map indGradesMap = (Map) JSON.parse(rankingsMap.get("indGrades").toString());
+                                    if (!indGradesMap.isEmpty()){
+                                        school.setNameCn12(indGradesMap.get(12)!=null?indGradesMap.get(12).toString():"/");
+                                        school.setNameCn13(indGradesMap.get(13)!=null?indGradesMap.get(13).toString():"/");
+                                        school.setNameCn14(indGradesMap.get(14)!=null?indGradesMap.get(14).toString():"/");
+                                        school.setNameCn15(indGradesMap.get(15)!=null?indGradesMap.get(15).toString():"/");
+                                        school.setNameCn16(indGradesMap.get(16)!=null?indGradesMap.get(16).toString():"/");
+                                    }
+
+                                    resultList.add(school);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        ExcelUtil<School> util = new ExcelUtil<School>(School.class);
+        util.exportExcel(response, resultList, "学校附件数据统计");
+
+    }
+
+
+
+}

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -2,7 +2,6 @@ package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import java.util.Set;
-
 import com.ruoyi.system.domain.dhrm.DhrmCompany;
 import com.ruoyi.system.service.dhrm.IDhrmCompanyService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -107,4 +106,5 @@ public class SysLoginController
         return AjaxResult.success(menuService.buildMenus(menus));
     }
 
+
 }

+ 80 - 71
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/CrmController.java

@@ -1,71 +1,80 @@
-package com.ruoyi.web.controller.tool;
-
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.flowable.domain.vo.FlowTaskVo;
-import com.ruoyi.flowable.service.crm.CrmService;
-import com.ruoyi.system.domain.crm.Customer;
-import com.ruoyi.system.service.crm.ICustomerService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- *  crm系统
- */
-@Api(tags = "CRM系统")
-@RestController
-@RequestMapping("/crmSystem")
-public class CrmController extends BaseController {
-
-    @Autowired
-    private CrmService crmService;
-
-    @Autowired
-    private ICustomerService customerService;
-
-    @ApiOperation(value = "发起流程")
-    @PostMapping("/start/{procDefId}")
-    public AjaxResult start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
-                            @ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables
-    ) {
-        return crmService.startProcessInstanceById(procDefId,variables);
-    }
-
-    /**
-     * 获取公司客户列表
-     */
-    @ApiOperation(value = "获取公司客户列表")
-    @PreAuthorize("@ss.hasPermi('crmSystem:crm:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(Customer customer)
-    {
-        startPage();
-        List<Customer> list = customerService.selectCustomerList(customer);
-        return getDataTable(list);
-    }
-
-    @ApiOperation(value = "获取待办列表", response = Customer.class)
-    @GetMapping(value = "/myTaskList")
-    public TableDataInfo myTaskList(@ApiParam(value = "客户实体") @RequestBody Customer customer)
-    {
-        startPage();
-        List<Customer> list = customerService.myTaskList(customer);
-        return getDataTable(list);
-    }
-
-
-
-
-
-
-
-
-}
+package com.ruoyi.web.controller.tool;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.flowable.domain.vo.FlowTaskVo;
+import com.ruoyi.flowable.service.crm.CrmService;
+import com.ruoyi.system.domain.crm.Customer;
+import com.ruoyi.system.service.crm.ICustomerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *  crm系统
+ */
+@Api(tags = "CRM系统")
+@RestController
+@RequestMapping("/crmSystem")
+public class CrmController extends BaseController {
+
+    @Autowired
+    private CrmService crmService;
+
+    @Autowired
+    private ICustomerService customerService;
+
+    @ApiOperation(value = "发起流程")
+    @PostMapping("/start/{procDefId}")
+    public AjaxResult start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
+                            @ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables
+    ) {
+        return crmService.startProcessInstanceById(procDefId,variables);
+    }
+
+    /**
+     * 获取公司客户列表
+     */
+    @ApiOperation(value = "获取公司客户列表")
+    @PreAuthorize("@ss.hasPermi('crmSystem:crm:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(Customer customer)
+    {
+        startPage();
+        List<Customer> list = customerService.selectCustomerList(customer);
+        return getDataTable(list);
+    }
+
+    @ApiOperation(value = "获取待办列表", response = Customer.class)
+    @GetMapping(value = "/myTaskList")
+    public TableDataInfo myTaskList(@ApiParam(value = "客户实体") @RequestBody Customer customer)
+    {
+        startPage();
+        List<Customer> list = customerService.myTaskList(customer);
+        return getDataTable(list);
+    }
+
+
+    @ApiOperation(value = "修改客户和项目信息,进入流程")
+    @PostMapping("/submit")
+    public AjaxResult submit(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
+                            @ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables
+    ) {
+        return AjaxResult.success("审批成功");
+    }
+
+    @ApiOperation(value = "审批任务")
+    @PostMapping(value = "/complete")
+    public AjaxResult complete(@RequestBody FlowTaskVo flowTaskVo) {
+        return AjaxResult.success("审批成功");
+    }
+
+
+}

+ 1 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/CrmFileController.java

@@ -102,4 +102,5 @@ public class CrmFileController extends BaseController
     {
         return toAjax(crmFileService.deleteCrmFileByIds(ids));
     }
+
 }

+ 115 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TCustomerController.java

@@ -0,0 +1,115 @@
+package com.ruoyi.web.controller.tool;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.system.domain.crm.TCustomer;
+import com.ruoyi.system.service.crm.ITCustomerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * crmController
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+@Api(tags = "CRM系统接口")
+@RestController
+@RequestMapping("/system/customer")
+public class TCustomerController extends BaseController
+{
+    @Autowired
+    private ITCustomerService tCustomerService;
+
+    /**
+     * 查询crm列表
+     */
+    @ApiOperation(value = "获取客户列表")
+    @PreAuthorize("@ss.hasPermi('system:customer:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCustomer tCustomer)
+    {
+        startPage();
+        List<TCustomer> list = tCustomerService.selectTCustomerList(tCustomer);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出crm列表
+     */
+    @ApiOperation(value = "导出客户列表")
+    @PreAuthorize("@ss.hasPermi('system:customer:export')")
+    @Log(title = "crm", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCustomer tCustomer)
+    {
+        List<TCustomer> list = tCustomerService.selectTCustomerList(tCustomer);
+        ExcelUtil<TCustomer> util = new ExcelUtil<TCustomer>(TCustomer.class);
+        util.exportExcel(response, list, "crm数据");
+    }
+
+    /**
+     * 获取crm详细信息
+     */
+    @ApiOperation(value = "获取crm详细信息")
+    @PreAuthorize("@ss.hasPermi('system:customer:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(tCustomerService.selectTCustomerById(id));
+    }
+
+    /**
+     * 新增crm
+     */
+    @ApiOperation(value = "新增crm")
+    @PreAuthorize("@ss.hasPermi('system:customer:add')")
+    @Log(title = "crm", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCustomer tCustomer)
+    {
+        tCustomer.setCreateBy(getUsername());
+        return toAjax(tCustomerService.insertTCustomer(tCustomer));
+    }
+
+    /**
+     * 修改crm
+     */
+    @ApiOperation(value = "修改crm")
+    @PreAuthorize("@ss.hasPermi('system:customer:edit')")
+    @Log(title = "crm", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCustomer tCustomer)
+    {
+        return toAjax(tCustomerService.updateTCustomer(tCustomer));
+    }
+
+    /**
+     * 删除crm
+     */
+    @ApiOperation(value = "删除crm")
+    @PreAuthorize("@ss.hasPermi('system:customer:remove')")
+    @Log(title = "crm", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(tCustomerService.deleteTCustomerByIds(ids));
+    }
+}

+ 13 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -135,4 +135,16 @@ flowable:
   # true 会对数据库中所有表进行更新操作。如果表不存在,则自动创建(建议开发时使用)
   database-schema-update: false
   # 关闭定时任务JOB
-  async-executor-activate: false
+  async-executor-activate: false
+
+# DingDing配置
+dingtalk:
+  # 应用的唯一标识key。
+  app_key: dingwlimimzllguvqf8x
+  # 应用的密钥。
+  app_secret: pH4lgZ_k8lgkAU9jboz0SBpybX2kpGKotzL_sg5Gu8Whd-s7n3S_5rrziiK2Hde9
+  # 应用的标识
+  agent_id: 2803464118
+  # 企业ID
+  corp_id: ding4ab75ecd53106cde4ac5d6980864d335
+

+ 164 - 130
ruoyi-common/pom.xml

@@ -1,131 +1,165 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>ruoyi</artifactId>
-        <groupId>com.ruoyi</groupId>
-        <version>3.8.6</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>ruoyi-common</artifactId>
-
-    <description>
-        common通用工具
-    </description>
-
-    <dependencies>
-
-        <!-- Spring框架基本的核心工具 -->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context-support</artifactId>
-        </dependency>
-
-        <!-- SpringWeb模块 -->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-        </dependency>
-
-        <!-- spring security 安全认证 -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-security</artifactId>
-        </dependency>
-
-        <!-- pagehelper 分页插件 -->
-        <dependency>
-            <groupId>com.github.pagehelper</groupId>
-            <artifactId>pagehelper-spring-boot-starter</artifactId>
-        </dependency>
-
-        <!-- 自定义验证注解 -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
-        </dependency>
-
-        <!--常用工具类 -->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-  
-        <!-- JSON工具类 -->
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        
-        <!-- 动态数据源 -->
-		<dependency>
-			<groupId>com.baomidou</groupId>
-			<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
-			<version>3.5.2</version>
-		</dependency>
-
-        <!-- 阿里JSON解析器 -->
-        <dependency>
-            <groupId>com.alibaba.fastjson2</groupId>
-            <artifactId>fastjson2</artifactId>
-        </dependency>
-
-        <!-- io常用工具类 -->
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-        </dependency>
-
-        <!-- excel工具 -->
-        <dependency>
-            <groupId>org.apache.poi</groupId>
-            <artifactId>poi-ooxml</artifactId>
-        </dependency>
-
-        <!-- yml解析器 -->
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-        </dependency>
-
-        <!-- Token生成与解析-->
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt</artifactId>
-        </dependency>
-
-        <!-- Jaxb -->
-        <dependency>
-            <groupId>javax.xml.bind</groupId>
-            <artifactId>jaxb-api</artifactId>
-        </dependency>
-
-        <!-- redis 缓存操作 -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis</artifactId>
-        </dependency>
-
-        <!-- pool 对象池 -->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-pool2</artifactId>
-        </dependency>
-
-        <!-- 解析客户端操作系统、浏览器等 -->
-        <dependency>
-            <groupId>eu.bitwalker</groupId>
-            <artifactId>UserAgentUtils</artifactId>
-        </dependency>
-
-        <!-- servlet包 -->
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-        </dependency>
-
-    </dependencies>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.8.6</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-common</artifactId>
+
+    <description>
+        common通用工具
+    </description>
+
+    <dependencies>
+
+        <!-- Spring框架基本的核心工具 -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context-support</artifactId>
+        </dependency>
+
+        <!-- SpringWeb模块 -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+
+        <!-- spring security 安全认证 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
+        <!-- pagehelper 分页插件 -->
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 自定义验证注解 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <!--常用工具类 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+  
+        <!-- JSON工具类 -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        
+        <!-- 动态数据源 -->
+		<dependency>
+			<groupId>com.baomidou</groupId>
+			<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+			<version>3.5.2</version>
+		</dependency>
+
+        <!-- 阿里JSON解析器 -->
+        <dependency>
+            <groupId>com.alibaba.fastjson2</groupId>
+            <artifactId>fastjson2</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.9</version>
+        </dependency>
+
+        <!-- io常用工具类 -->
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+
+        <!-- excel工具 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
+        <!-- yml解析器 -->
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+        </dependency>
+
+        <!-- Token生成与解析-->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+        </dependency>
+
+        <!-- Jaxb -->
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+        </dependency>
+
+        <!-- redis 缓存操作 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+
+        <!-- pool 对象池 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+
+        <!-- 解析客户端操作系统、浏览器等 -->
+        <dependency>
+            <groupId>eu.bitwalker</groupId>
+            <artifactId>UserAgentUtils</artifactId>
+        </dependency>
+
+        <!-- servlet包 -->
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+        </dependency>
+
+        <!--新版本-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dingtalk</artifactId>
+            <version>1.4.78</version>
+        </dependency>
+
+        <!-- 钉钉SDK -->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+        <!-- okhttp3 -->
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <version>3.11.0</version>
+
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.android</groupId>
+                    <artifactId>android</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+    </dependencies>
+
 </project>

+ 24 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java

@@ -144,4 +144,28 @@ public class Constants
      */
     public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
             "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config" };
+
+    /**
+     *  钉钉redis缓存key
+     */
+    public static final String DAILY_DING_ACCESS_TOKEN = "DAILY_DING_ACCESS_TOKEN";
+
+    /**
+     * 钉钉redis缓存key
+     */
+    public static final String DAILY_DING_JS_TICKET = "DAILY_DING_JS_TICKET";
+
+    /**
+     * 钉钉 GrantType
+     */
+    public static final String AUTHORIZATION_CODE = "authorization_code";
+
+    /**
+     * 钉钉 GrantType
+     */
+    public static final String REFRESH_TOKEN = "refresh_token";
+
+
+
+
 }

+ 11 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -74,6 +74,9 @@ public class SysUser extends BaseEntity
     @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
     private Date loginDate;
 
+    /** 钉钉认证Token */
+    private String accessToken;
+
     /** 部门对象 */
     @Excels({
         @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
@@ -321,6 +324,14 @@ public class SysUser extends BaseEntity
         this.employNo = employNo;
     }
 
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 56 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/dingding/config/DingAppConfig.java

@@ -0,0 +1,56 @@
+package com.ruoyi.common.utils.dingding.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * <p>DingAppConfig 此类用于:应用凭证配置</p>
+ * <p>@remark:</p>
+ */
+@Configuration
+public class DingAppConfig {
+
+    @Value("${dingtalk.app_key}")
+    private String appKey;
+
+    @Value("${dingtalk.app_secret}")
+    private String appSecret;
+
+    @Value("${dingtalk.agent_id}")
+    private String agentId;
+
+    @Value("${dingtalk.corp_id}")
+    private String corpId;
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+    public String getAgentId() {
+        return agentId;
+    }
+
+    public void setAgentId(String agentId) {
+        this.agentId = agentId;
+    }
+
+    public String getCorpId() {
+        return corpId;
+    }
+
+    public void setCorpId(String corpId) {
+        this.corpId = corpId;
+    }
+}

+ 42 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/dingding/config/DingUrlConstant.java

@@ -0,0 +1,42 @@
+package com.ruoyi.common.utils.dingding.config;
+
+/**
+ * 钉钉开放接口网关常量
+ *
+ * @author Administrator
+ */
+public class DingUrlConstant {
+
+    private static final String HOST = "https://oapi.dingtalk.com";
+
+    /**
+     * 获取access_token url
+     */
+    public static final String URL_GET_TOKEN = HOST + "/gettoken";
+
+    /**
+     * 获取jsapi_ticket url
+     */
+    public static final String URL_GET_JSTICKET = HOST + "/get_jsapi_ticket";
+
+    /**
+     * 通过免登授权码获取用户信息 url
+     */
+    public static final String URL_GET_USER_INFO = HOST + "/user/getuserinfo";
+
+    /**
+     * 根据用户id获取用户详情 url
+     */
+    public static final String URL_USER_GET = HOST + "/user/get";
+
+    /**
+     * 获取部门列表 url
+     */
+    public static final String URL_DEPARTMENT_LIST = HOST + "/department/list";
+
+    /**
+     * 获取部门用户 url
+     */
+    public static final String URL_USER_SIMPLELIST = HOST + "/user/simplelist";
+
+}

+ 24 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/fg/FgUrlConstant.java

@@ -0,0 +1,24 @@
+package com.ruoyi.common.utils.fg;
+
+public class FgUrlConstant {
+
+    private static final String HOST = "http://120.27.232.118/api/v1";
+
+    /**
+     * 获取 url
+     */
+    public static final String URL_GET_USER_INFO = HOST + "/user/info";
+
+    /**
+     *
+     */
+    public static final String URL_POST_BLOGGER_LIST = HOST + "/bloggersearch/list";
+
+    /**
+     *
+     */
+    public static final String URL_POST_SALES_TREND_LIST = HOST + "/goodsDataOverView/salesTrendData";
+
+
+
+}

+ 274 - 273
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java

@@ -1,274 +1,275 @@
-package com.ruoyi.common.utils.http;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.net.ConnectException;
-import java.net.SocketTimeoutException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.charset.StandardCharsets;
-import java.security.cert.X509Certificate;
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 通用http发送方法
- * 
- * @author ruoyi
- */
-public class HttpUtils
-{
-    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
-
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url)
-    {
-        return sendGet(url, StringUtils.EMPTY);
-    }
-
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param)
-    {
-        return sendGet(url, param, Constants.UTF8);
-    }
-
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @param contentType 编码类型
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param, String contentType)
-    {
-        StringBuilder result = new StringBuilder();
-        BufferedReader in = null;
-        try
-        {
-            String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
-            log.info("sendGet - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection connection = realUrl.openConnection();
-            connection.setRequestProperty("accept", "*/*");
-            connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            connection.connect();
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (Exception ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    /**
-     * 向指定 URL 发送POST方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendPost(String url, String param)
-    {
-        PrintWriter out = null;
-        BufferedReader in = null;
-        StringBuilder result = new StringBuilder();
-        try
-        {
-            log.info("sendPost - {}", url);
-            URL realUrl = new URL(url);
-            URLConnection conn = realUrl.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            out = new PrintWriter(conn.getOutputStream());
-            out.print(param);
-            out.flush();
-            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (out != null)
-                {
-                    out.close();
-                }
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (IOException ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    public static String sendSSLPost(String url, String param)
-    {
-        StringBuilder result = new StringBuilder();
-        String urlNameString = url + "?" + param;
-        try
-        {
-            log.info("sendSSLPost - {}", urlNameString);
-            SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
-            URL console = new URL(urlNameString);
-            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-
-            conn.setSSLSocketFactory(sc.getSocketFactory());
-            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
-            conn.connect();
-            InputStream is = conn.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String ret = "";
-            while ((ret = br.readLine()) != null)
-            {
-                if (ret != null && !"".equals(ret.trim()))
-                {
-                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
-                }
-            }
-            log.info("recv - {}", result);
-            conn.disconnect();
-            br.close();
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
-        }
-        return result.toString();
-    }
-
-    private static class TrustAnyTrustManager implements X509TrustManager
-    {
-        @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType)
-        {
-        }
-
-        @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType)
-        {
-        }
-
-        @Override
-        public X509Certificate[] getAcceptedIssuers()
-        {
-            return new X509Certificate[] {};
-        }
-    }
-
-    private static class TrustAnyHostnameVerifier implements HostnameVerifier
-    {
-        @Override
-        public boolean verify(String hostname, SSLSession session)
-        {
-            return true;
-        }
-    }
+package com.ruoyi.common.utils.http;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 通用http发送方法
+ * 
+ * @author ruoyi
+ */
+public class HttpUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url)
+    {
+        return sendGet(url, StringUtils.EMPTY);
+    }
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param)
+    {
+        return sendGet(url, param, Constants.UTF8);
+    }
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @param contentType 编码类型
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param, String contentType)
+    {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try
+        {
+            String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
+            log.info("sendGet - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+            URLConnection connection = realUrl.openConnection();
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            connection.setRequestProperty("Cookie", "PHPSESSID=d70rjglm2evabnm2dqfvmtcnp9; body_collapsed=0");
+            connection.connect();
+            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 向指定 URL 发送POST方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendPost(String url, String param)
+    {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            log.info("sendPost - {}", url);
+            URL realUrl = new URL(url);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    public static String sendSSLPost(String url, String param)
+    {
+        StringBuilder result = new StringBuilder();
+        String urlNameString = url + "?" + param;
+        try
+        {
+            log.info("sendSSLPost - {}", urlNameString);
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
+            URL console = new URL(urlNameString);
+            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+            conn.connect();
+            InputStream is = conn.getInputStream();
+            BufferedReader br = new BufferedReader(new InputStreamReader(is));
+            String ret = "";
+            while ((ret = br.readLine()) != null)
+            {
+                if (ret != null && !"".equals(ret.trim()))
+                {
+                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
+                }
+            }
+            log.info("recv - {}", result);
+            conn.disconnect();
+            br.close();
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+        }
+        return result.toString();
+    }
+
+    private static class TrustAnyTrustManager implements X509TrustManager
+    {
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers()
+        {
+            return new X509Certificate[] {};
+        }
+    }
+
+    private static class TrustAnyHostnameVerifier implements HostnameVerifier
+    {
+        @Override
+        public boolean verify(String hostname, SSLSession session)
+        {
+            return true;
+        }
+    }
 }

+ 212 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/OkHttpFGUtils.java

@@ -0,0 +1,212 @@
+package com.ruoyi.common.utils.http;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.common.utils.StringUtils;
+import okhttp3.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+/**
+ * 飞瓜 okHttp3 接口数据抓取Utils
+ */
+public class OkHttpFGUtils {
+
+    private static final Logger log = LoggerFactory.getLogger(OkHttpFGUtils.class);
+
+    public  static  String sentPOST(String url,String param,String PHPSESSID){
+        try {
+
+            OkHttpClient client = new OkHttpClient().newBuilder()
+                    .build();
+            MediaType mediaType = MediaType.parse("application/json");
+            RequestBody body = RequestBody.create(mediaType, param);
+            Request request = new Request.Builder()
+                    .url(url)
+                    .method("POST", body)
+                    .addHeader("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
+                    .addHeader("Accept-Encoding", " gzip, deflate")
+                    .addHeader("Accept-Language", " zh-CN,zh;q=0.9")
+                    .addHeader("Cache-Control", " max-age=0")
+                    .addHeader("Connection", " keep-alive")
+                    .addHeader("Cookie", " PHPSESSID="+PHPSESSID+"; body_collapsed=0")
+                    .addHeader("Host", " 120.27.232.118")
+                    .addHeader("Upgrade-Insecure-Requests", " 1")
+                    .addHeader("User-Agent", " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
+                    .addHeader("Content-Type", "application/json")
+                    .build();
+            Response response = client.newCall(request).execute();
+            return response.body().toString();
+        } catch (Exception e) {
+            log.error("调用OkHttpFGUtils.sendPost Exception, url=" + url + ",param=" + param, e);
+            return StringUtils.EMPTY;
+        }
+    }
+
+
+    public static String sendGet(String url,String PHPSESSID){
+        try {
+            OkHttpClient client = new OkHttpClient().newBuilder()
+                    .build();
+            Request request = new Request.Builder()
+                    .url(url)
+                    .addHeader("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
+                    .addHeader("Accept-Encoding", " gzip, deflate")
+                    .addHeader("Accept-Language", " zh-CN,zh;q=0.9")
+                    .addHeader("Cache-Control", " max-age=0")
+                    .addHeader("Connection", " keep-alive")
+                    .addHeader("Cookie", " PHPSESSID="+PHPSESSID+"; body_collapsed=0")
+                    .addHeader("Host", " 120.27.232.118")
+                    .addHeader("Upgrade-Insecure-Requests", " 1")
+                    .addHeader("User-Agent", " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
+                    .build();
+            Response response = client.newCall(request).execute();
+            return response.body().toString();
+        } catch (Exception e) {
+            log.error("调用OkHttpFGUtils.sendGet Exception, url=" + url , e);
+            return StringUtils.EMPTY;
+        }
+    }
+
+
+
+    public static <object> void main(String[] args) {
+
+        String URL = "http://120.27.232.118/api/v1/goodsDataOverView/salesTrendData";
+
+//        List<SalesTrendData> resultList = new ArrayList<>();
+
+        String result = HttpUtils.sendGet(URL,"periodType=90&fromDateCode=20230829&toDateCode=20231126&cateId=20004");
+
+        Map maps = (Map) JSON.parse(result);
+        for(Object map : maps.entrySet()){
+            if(((Map.Entry)map).getKey().toString().equals("Data")){
+
+                JSONArray dataJArray = JSONObject.parseArray(((Map.Entry)map).getValue().toString());
+                List<Object> dataList = dataJArray;
+
+                for (Object po:
+                dataList) {
+                    Map poMap = (Map) JSON.parse(po.toString());
+
+                    poMap.get("DateCode").toString();
+
+
+                }
+            }
+        }
+
+
+//        Map<String, List<Object>> map = getSchoolMap(result);
+//
+//        for (Object majors: map.get("majorsList")) {
+//
+//            Map majorsMap = (Map) JSON.parse(majors.toString());
+//
+//            JSONArray childrens = JSONObject.parseArray(majorsMap.get("children").toString());
+//            List<Object> childrenList = childrens;
+//            if(StringUtils.isNotEmpty(childrenList)){
+//                for (Object children: childrenList) {
+//                    Map childrenMap = (Map) JSON.parse(children.toString());
+//
+//                    JSONArray childrens1 = JSONObject.parseArray(childrenMap.get("children").toString());
+//                    List<Object> children1List = childrens1;
+//                    if(StringUtils.isNotEmpty(children1List)) {
+//                        for (Object children1 : children1List) {
+//                            Map children1Map = (Map) JSON.parse(children1.toString());
+//                            String rankingsResult = HttpUtils.sendGet(URL,"year=2023&majorCode="+children1Map.get("code").toString());
+//
+//                            Map<String, List<Object>> univMap = getSchoolMap(rankingsResult);
+//
+//                            for (Object rankings:
+//                                    univMap.get("rankingsList")) {
+//                                Map rankingsMap = (Map) JSON.parse(rankings.toString());
+//
+//                                if(rankingsMap.get("grade").toString().equals("A+")||rankingsMap.get("grade").toString().equals("A")){
+//
+//                                    Map<String,String> univ = new HashMap<>();
+//                                    univ.put("lName",majorsMap.get("name").toString());
+//                                    univ.put("lCode",majorsMap.get("code").toString());
+//                                    univ.put("pName",childrenMap.get("name").toString());
+//                                    univ.put("pCode",childrenMap.get("code").toString());
+//                                    univ.put("zName",children1Map.get("name").toString());
+//                                    univ.put("zCode",children1Map.get("code").toString());
+//                                    univ.put("grade",rankingsMap.get("grade").toString());
+//                                    univ.put("univNameCn",rankingsMap.get("univNameCn").toString());
+//                                    univ.put("score",rankingsMap.get("score").toString());
+//                                    univ.put("province",rankingsMap.get("province").toString());
+//                                    univ.put("city",rankingsMap.get("city").toString());
+//                                    univ.put("univLikeCount",rankingsMap.get("univLikeCount").toString());
+//                                    univ.put("univTags",rankingsMap.get("univTags").toString());
+//                                    univ.put("ranking",rankingsMap.get("ranking").toString());
+//
+//                                    Map indGradesMap = (Map) JSON.parse(rankingsMap.get("indGrades").toString());
+//                                    if (!indGradesMap.isEmpty()){
+//                                        univ.put("12",indGradesMap.get(12)!=null?indGradesMap.get(12).toString():"");
+//                                        univ.put("13",indGradesMap.get(13)!=null?indGradesMap.get(15).toString():"");
+//                                        univ.put("14",indGradesMap.get(15)!=null?indGradesMap.get(15).toString():"");
+//                                        univ.put("15",indGradesMap.get(15)!=null?indGradesMap.get(15).toString():"");
+//                                        univ.put("16",indGradesMap.get(15)!=null?indGradesMap.get(15).toString():"");
+//                                    }else {
+//                                        univ.put("12","/");
+//                                        univ.put("13","/");
+//                                        univ.put("14","/");
+//                                        univ.put("15","/");
+//                                        univ.put("16","/");
+//                                    }
+//
+//                                    resultList.add(univ);
+//
+//                                }
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        }
+
+    }
+
+
+    /**
+     * 封装返回数据类型
+     * @param result
+     * @return
+     */
+    public static Map<String, List<Object>> getSchoolMap(String result){
+
+        List<Object> majorsList = new ArrayList<>();
+        List<Object> indsList = new ArrayList<>();
+        List<Object> rankingsList = new ArrayList<>();
+        Map maps = (Map) JSON.parse(result);
+        for(Object map : maps.entrySet()){
+            if(((Map.Entry)map).getKey().toString().equals("data")){
+
+                Map dataMap = (Map) JSON.parse( ((Map.Entry)map).getValue().toString());
+
+                JSONArray inds = JSONObject.parseArray(dataMap.get("inds").toString());
+                indsList = inds;
+
+                JSONArray majors = JSONObject.parseArray(dataMap.get("majors").toString());
+                majorsList = majors;
+
+                JSONArray rankings = JSONObject.parseArray(dataMap.get("rankings").toString());
+                rankingsList = rankings;
+
+            }
+        }
+        Map<String, List<Object>> resultMap = new HashMap<>();
+
+        resultMap.put("majorsList",majorsList);
+        resultMap.put("indsList",indsList);
+        resultMap.put("rankingsList",rankingsList);
+
+        return resultMap;
+    }
+
+
+
+}

+ 2 - 1
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/crm/Impl/CrmServiceImpl.java

@@ -88,8 +88,9 @@ public class CrmServiceImpl extends FlowServiceFactory implements CrmService {
             identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
             variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
             //设置部门领导审批人
-            variables.put("MANAGER", sysUser.getUserId());
 
+
+            variables.put("MANAGER", sysUser.getUserId());
             //设置事业部负责人审批人
             variables.put("LEADER", sysUser.getUserId());
             //设置事业群领导审批人

+ 148 - 148
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -1,148 +1,148 @@
-package com.ruoyi.framework.config;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.http.HttpMethod;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-import org.springframework.security.web.authentication.logout.LogoutFilter;
-import org.springframework.web.filter.CorsFilter;
-import com.ruoyi.framework.config.properties.PermitAllUrlProperties;
-import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
-import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
-import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
-
-/**
- * spring security配置
- * 
- * @author ruoyi
- */
-@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
-public class SecurityConfig extends WebSecurityConfigurerAdapter
-{
-    /**
-     * 自定义用户认证逻辑
-     */
-    @Autowired
-    private UserDetailsService userDetailsService;
-    
-    /**
-     * 认证失败处理类
-     */
-    @Autowired
-    private AuthenticationEntryPointImpl unauthorizedHandler;
-
-    /**
-     * 退出处理类
-     */
-    @Autowired
-    private LogoutSuccessHandlerImpl logoutSuccessHandler;
-
-    /**
-     * token认证过滤器
-     */
-    @Autowired
-    private JwtAuthenticationTokenFilter authenticationTokenFilter;
-    
-    /**
-     * 跨域过滤器
-     */
-    @Autowired
-    private CorsFilter corsFilter;
-
-    /**
-     * 允许匿名访问的地址
-     */
-    @Autowired
-    private PermitAllUrlProperties permitAllUrl;
-
-    /**
-     * 解决 无法直接注入 AuthenticationManager
-     *
-     * @return
-     * @throws Exception
-     */
-    @Bean
-    @Override
-    public AuthenticationManager authenticationManagerBean() throws Exception
-    {
-        return super.authenticationManagerBean();
-    }
-
-    /**
-     * anyRequest          |   匹配所有请求路径
-     * access              |   SpringEl表达式结果为true时可以访问
-     * anonymous           |   匿名可以访问
-     * denyAll             |   用户不能访问
-     * fullyAuthenticated  |   用户完全认证可以访问(非remember-me下自动登录)
-     * hasAnyAuthority     |   如果有参数,参数表示权限,则其中任何一个权限可以访问
-     * hasAnyRole          |   如果有参数,参数表示角色,则其中任何一个角色可以访问
-     * hasAuthority        |   如果有参数,参数表示权限,则其权限可以访问
-     * hasIpAddress        |   如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
-     * hasRole             |   如果有参数,参数表示角色,则其角色可以访问
-     * permitAll           |   用户可以任意访问
-     * rememberMe          |   允许通过remember-me登录的用户访问
-     * authenticated       |   用户登录后可访问
-     */
-    @Override
-    protected void configure(HttpSecurity httpSecurity) throws Exception
-    {
-        // 注解标记允许匿名访问的url
-        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
-        permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());
-
-        httpSecurity
-                // CSRF禁用,因为不使用session
-                .csrf().disable()
-                // 禁用HTTP响应标头
-                .headers().cacheControl().disable().and()
-                // 认证失败处理类
-                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
-                // 基于token,所以不需要session
-                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
-                // 过滤请求
-                .authorizeRequests()
-                // 对于登录login 单点登录authSingleSignIn 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login","/authSingleSignIn", "/register", "/captchaImage").permitAll()
-                // 静态资源,可匿名访问
-                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
-                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
-                // 除上面外的所有请求全部需要鉴权认证
-                .anyRequest().authenticated()
-                .and()
-                .headers().frameOptions().disable();
-        // 添加Logout filter
-        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
-        // 添加JWT filter
-        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
-        // 添加CORS filter
-        httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
-        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
-    }
-
-    /**
-     * 强散列哈希加密实现
-     */
-    @Bean
-    public BCryptPasswordEncoder bCryptPasswordEncoder()
-    {
-        return new BCryptPasswordEncoder();
-    }
-
-    /**
-     * 身份认证接口
-     */
-    @Override
-    protected void configure(AuthenticationManagerBuilder auth) throws Exception
-    {
-        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
-    }
-}
+package com.ruoyi.framework.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.authentication.logout.LogoutFilter;
+import org.springframework.web.filter.CorsFilter;
+import com.ruoyi.framework.config.properties.PermitAllUrlProperties;
+import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
+import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl;
+import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
+
+/**
+ * spring security配置
+ * 
+ * @author ruoyi
+ */
+@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
+public class SecurityConfig extends WebSecurityConfigurerAdapter
+{
+    /**
+     * 自定义用户认证逻辑
+     */
+    @Autowired
+    private UserDetailsService userDetailsService;
+    
+    /**
+     * 认证失败处理类
+     */
+    @Autowired
+    private AuthenticationEntryPointImpl unauthorizedHandler;
+
+    /**
+     * 退出处理类
+     */
+    @Autowired
+    private LogoutSuccessHandlerImpl logoutSuccessHandler;
+
+    /**
+     * token认证过滤器
+     */
+    @Autowired
+    private JwtAuthenticationTokenFilter authenticationTokenFilter;
+    
+    /**
+     * 跨域过滤器
+     */
+    @Autowired
+    private CorsFilter corsFilter;
+
+    /**
+     * 允许匿名访问的地址
+     */
+    @Autowired
+    private PermitAllUrlProperties permitAllUrl;
+
+    /**
+     * 解决 无法直接注入 AuthenticationManager
+     *
+     * @return
+     * @throws Exception
+     */
+    @Bean
+    @Override
+    public AuthenticationManager authenticationManagerBean() throws Exception
+    {
+        return super.authenticationManagerBean();
+    }
+
+    /**
+     * anyRequest          |   匹配所有请求路径
+     * access              |   SpringEl表达式结果为true时可以访问
+     * anonymous           |   匿名可以访问
+     * denyAll             |   用户不能访问
+     * fullyAuthenticated  |   用户完全认证可以访问(非remember-me下自动登录)
+     * hasAnyAuthority     |   如果有参数,参数表示权限,则其中任何一个权限可以访问
+     * hasAnyRole          |   如果有参数,参数表示角色,则其中任何一个角色可以访问
+     * hasAuthority        |   如果有参数,参数表示权限,则其权限可以访问
+     * hasIpAddress        |   如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
+     * hasRole             |   如果有参数,参数表示角色,则其角色可以访问
+     * permitAll           |   用户可以任意访问
+     * rememberMe          |   允许通过remember-me登录的用户访问
+     * authenticated       |   用户登录后可访问
+     */
+    @Override
+    protected void configure(HttpSecurity httpSecurity) throws Exception
+    {
+        // 注解标记允许匿名访问的url
+        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
+        permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());
+
+        httpSecurity
+                // CSRF禁用,因为不使用session
+                .csrf().disable()
+                // 禁用HTTP响应标头
+                .headers().cacheControl().disable().and()
+                // 认证失败处理类
+                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
+                // 基于token,所以不需要session
+                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
+                // 过滤请求
+                .authorizeRequests()
+                // 对于登录login 单点登录authSingleSignIn 注册register 验证码captchaImage 允许匿名访问
+                .antMatchers("/login","/authSingleSignIn","/ding/**","/fg/**", "/register", "/captchaImage").permitAll()
+                // 静态资源,可匿名访问
+                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
+                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
+                // 除上面外的所有请求全部需要鉴权认证
+                .anyRequest().authenticated()
+                .and()
+                .headers().frameOptions().disable();
+        // 添加Logout filter
+        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
+        // 添加JWT filter
+        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
+        // 添加CORS filter
+        httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);
+        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
+    }
+
+    /**
+     * 强散列哈希加密实现
+     */
+    @Bean
+    public BCryptPasswordEncoder bCryptPasswordEncoder()
+    {
+        return new BCryptPasswordEncoder();
+    }
+
+    /**
+     * 身份认证接口
+     */
+    @Override
+    protected void configure(AuthenticationManagerBuilder auth) throws Exception
+    {
+        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
+    }
+}

+ 2 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -196,13 +196,13 @@ public class SysLoginService
         }
         SysUser sysUser = userService.selectUserByUserName(username);
         // 登录前置校验
-        loginPreCheck(username, sysUser.getPhonenumber());
+        loginPreCheck(username, "admin123");
 
         // 用户验证
         Authentication authentication = null;
         try
         {
-            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, sysUser.getPhonenumber());
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, "admin123");
             AuthenticationContextHolder.setContext(authenticationToken);
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager.authenticate(authenticationToken);

+ 163 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/crm/TCustomer.java

@@ -0,0 +1,163 @@
+package com.ruoyi.system.domain.crm;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * crm对象 t_customer
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+public class TCustomer extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private String id;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String companyName;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String companyWhere;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String companyEnterprisepro;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String companyState;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String companyCapital;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String companySales;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String userName;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String userPhone;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String userDepartment;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setCompanyName(String companyName) 
+    {
+        this.companyName = companyName;
+    }
+
+    public String getCompanyName() 
+    {
+        return companyName;
+    }
+    public void setCompanyWhere(String companyWhere) 
+    {
+        this.companyWhere = companyWhere;
+    }
+
+    public String getCompanyWhere() 
+    {
+        return companyWhere;
+    }
+    public void setCompanyEnterprisepro(String companyEnterprisepro) 
+    {
+        this.companyEnterprisepro = companyEnterprisepro;
+    }
+
+    public String getCompanyEnterprisepro() 
+    {
+        return companyEnterprisepro;
+    }
+    public void setCompanyState(String companyState) 
+    {
+        this.companyState = companyState;
+    }
+
+    public String getCompanyState() 
+    {
+        return companyState;
+    }
+    public void setCompanyCapital(String companyCapital) 
+    {
+        this.companyCapital = companyCapital;
+    }
+
+    public String getCompanyCapital() 
+    {
+        return companyCapital;
+    }
+    public void setCompanySales(String companySales) 
+    {
+        this.companySales = companySales;
+    }
+
+    public String getCompanySales() 
+    {
+        return companySales;
+    }
+    public void setUserName(String userName) 
+    {
+        this.userName = userName;
+    }
+
+    public String getUserName() 
+    {
+        return userName;
+    }
+    public void setUserPhone(String userPhone) 
+    {
+        this.userPhone = userPhone;
+    }
+
+    public String getUserPhone() 
+    {
+        return userPhone;
+    }
+    public void setUserDepartment(String userDepartment) 
+    {
+        this.userDepartment = userDepartment;
+    }
+
+    public String getUserDepartment() 
+    {
+        return userDepartment;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("companyName", getCompanyName())
+            .append("companyWhere", getCompanyWhere())
+            .append("companyEnterprisepro", getCompanyEnterprisepro())
+            .append("companyState", getCompanyState())
+            .append("companyCapital", getCompanyCapital())
+            .append("companySales", getCompanySales())
+            .append("userName", getUserName())
+            .append("userPhone", getUserPhone())
+            .append("userDepartment", getUserDepartment())
+            .toString();
+    }
+}

+ 737 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/fg/Blogger.java

@@ -0,0 +1,737 @@
+package com.ruoyi.system.domain.fg;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 达人数据对象 t_blogger
+ * 
+ * @author ruoyi
+ * @date 2023-11-24
+ */
+public class Blogger extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String age;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avatar;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avgGuestPrice;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avgGuestPriceStr;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avglike30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avgTotalUserCount30Day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avgUserCount30Day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avgUserSale;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String avgUserSaleStr;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String awemeavgsalescount30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String awemeavgsalesgmv30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String awemeCount30Day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String awemecount30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String awemesalescount30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String awemesalesgmv30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String awemes;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String city;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String contentTags;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String customVerify;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String enterpriseVerify;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String fansinc30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String gender;
+
+    /** $column.columnComment */
+    private String id;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String includeState;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Boolean isBrandSelf;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Boolean isFavorite;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Boolean isFocus;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Boolean isMcn;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Boolean isRooming;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String likeCount;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String likesinc30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String liveavggmv30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String liveavgsalescount30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String liveCount30Day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String livegmv30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String livesalescount30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String liveTags;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String location;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String nickName;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String platformFans;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String province;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String score;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String sellgoodsawemecount30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String sellgoodslivecount30day;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String shortId;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String signature;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String tags;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String uid;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String uniqueId;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String url;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Boolean withFusionShopEntry;
+
+    public void setAge(String age) 
+    {
+        this.age = age;
+    }
+
+    public String getAge() 
+    {
+        return age;
+    }
+    public void setAvatar(String avatar) 
+    {
+        this.avatar = avatar;
+    }
+
+    public String getAvatar() 
+    {
+        return avatar;
+    }
+    public void setAvgGuestPrice(String avgGuestPrice) 
+    {
+        this.avgGuestPrice = avgGuestPrice;
+    }
+
+    public String getAvgGuestPrice() 
+    {
+        return avgGuestPrice;
+    }
+    public void setAvgGuestPriceStr(String avgGuestPriceStr) 
+    {
+        this.avgGuestPriceStr = avgGuestPriceStr;
+    }
+
+    public String getAvgGuestPriceStr() 
+    {
+        return avgGuestPriceStr;
+    }
+    public void setAvglike30day(String avglike30day) 
+    {
+        this.avglike30day = avglike30day;
+    }
+
+    public String getAvglike30day() 
+    {
+        return avglike30day;
+    }
+    public void setAvgTotalUserCount30Day(String avgTotalUserCount30Day) 
+    {
+        this.avgTotalUserCount30Day = avgTotalUserCount30Day;
+    }
+
+    public String getAvgTotalUserCount30Day() 
+    {
+        return avgTotalUserCount30Day;
+    }
+    public void setAvgUserCount30Day(String avgUserCount30Day) 
+    {
+        this.avgUserCount30Day = avgUserCount30Day;
+    }
+
+    public String getAvgUserCount30Day() 
+    {
+        return avgUserCount30Day;
+    }
+    public void setAvgUserSale(String avgUserSale) 
+    {
+        this.avgUserSale = avgUserSale;
+    }
+
+    public String getAvgUserSale() 
+    {
+        return avgUserSale;
+    }
+    public void setAvgUserSaleStr(String avgUserSaleStr) 
+    {
+        this.avgUserSaleStr = avgUserSaleStr;
+    }
+
+    public String getAvgUserSaleStr() 
+    {
+        return avgUserSaleStr;
+    }
+    public void setAwemeavgsalescount30day(String awemeavgsalescount30day) 
+    {
+        this.awemeavgsalescount30day = awemeavgsalescount30day;
+    }
+
+    public String getAwemeavgsalescount30day() 
+    {
+        return awemeavgsalescount30day;
+    }
+    public void setAwemeavgsalesgmv30day(String awemeavgsalesgmv30day) 
+    {
+        this.awemeavgsalesgmv30day = awemeavgsalesgmv30day;
+    }
+
+    public String getAwemeavgsalesgmv30day() 
+    {
+        return awemeavgsalesgmv30day;
+    }
+    public void setAwemeCount30Day(String awemeCount30Day) 
+    {
+        this.awemeCount30Day = awemeCount30Day;
+    }
+
+    public String getAwemeCount30Day() 
+    {
+        return awemeCount30Day;
+    }
+    public void setAwemecount30day(String awemecount30day) 
+    {
+        this.awemecount30day = awemecount30day;
+    }
+
+    public String getAwemecount30day() 
+    {
+        return awemecount30day;
+    }
+    public void setAwemesalescount30day(String awemesalescount30day) 
+    {
+        this.awemesalescount30day = awemesalescount30day;
+    }
+
+    public String getAwemesalescount30day() 
+    {
+        return awemesalescount30day;
+    }
+    public void setAwemesalesgmv30day(String awemesalesgmv30day) 
+    {
+        this.awemesalesgmv30day = awemesalesgmv30day;
+    }
+
+    public String getAwemesalesgmv30day() 
+    {
+        return awemesalesgmv30day;
+    }
+    public void setAwemes(String awemes) 
+    {
+        this.awemes = awemes;
+    }
+
+    public String getAwemes() 
+    {
+        return awemes;
+    }
+    public void setCity(String city) 
+    {
+        this.city = city;
+    }
+
+    public String getCity() 
+    {
+        return city;
+    }
+    public void setContentTags(String contentTags) 
+    {
+        this.contentTags = contentTags;
+    }
+
+    public String getContentTags() 
+    {
+        return contentTags;
+    }
+    public void setCustomVerify(String customVerify) 
+    {
+        this.customVerify = customVerify;
+    }
+
+    public String getCustomVerify() 
+    {
+        return customVerify;
+    }
+    public void setEnterpriseVerify(String enterpriseVerify) 
+    {
+        this.enterpriseVerify = enterpriseVerify;
+    }
+
+    public String getEnterpriseVerify() 
+    {
+        return enterpriseVerify;
+    }
+    public void setFansinc30day(String fansinc30day) 
+    {
+        this.fansinc30day = fansinc30day;
+    }
+
+    public String getFansinc30day() 
+    {
+        return fansinc30day;
+    }
+    public void setGender(String gender) 
+    {
+        this.gender = gender;
+    }
+
+    public String getGender() 
+    {
+        return gender;
+    }
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setIncludeState(String includeState) 
+    {
+        this.includeState = includeState;
+    }
+
+    public String getIncludeState() 
+    {
+        return includeState;
+    }
+    public void setIsBrandSelf(Boolean isBrandSelf) 
+    {
+        this.isBrandSelf = isBrandSelf;
+    }
+
+    public Boolean getIsBrandSelf() 
+    {
+        return isBrandSelf;
+    }
+    public void setIsFavorite(Boolean isFavorite) 
+    {
+        this.isFavorite = isFavorite;
+    }
+
+    public Boolean getIsFavorite() 
+    {
+        return isFavorite;
+    }
+    public void setIsFocus(Boolean isFocus) 
+    {
+        this.isFocus = isFocus;
+    }
+
+    public Boolean getIsFocus() 
+    {
+        return isFocus;
+    }
+    public void setIsMcn(Boolean isMcn) 
+    {
+        this.isMcn = isMcn;
+    }
+
+    public Boolean getIsMcn() 
+    {
+        return isMcn;
+    }
+    public void setIsRooming(Boolean isRooming) 
+    {
+        this.isRooming = isRooming;
+    }
+
+    public Boolean getIsRooming() 
+    {
+        return isRooming;
+    }
+    public void setLikeCount(String likeCount) 
+    {
+        this.likeCount = likeCount;
+    }
+
+    public String getLikeCount() 
+    {
+        return likeCount;
+    }
+    public void setLikesinc30day(String likesinc30day) 
+    {
+        this.likesinc30day = likesinc30day;
+    }
+
+    public String getLikesinc30day() 
+    {
+        return likesinc30day;
+    }
+    public void setLiveavggmv30day(String liveavggmv30day) 
+    {
+        this.liveavggmv30day = liveavggmv30day;
+    }
+
+    public String getLiveavggmv30day() 
+    {
+        return liveavggmv30day;
+    }
+    public void setLiveavgsalescount30day(String liveavgsalescount30day) 
+    {
+        this.liveavgsalescount30day = liveavgsalescount30day;
+    }
+
+    public String getLiveavgsalescount30day() 
+    {
+        return liveavgsalescount30day;
+    }
+    public void setLiveCount30Day(String liveCount30Day) 
+    {
+        this.liveCount30Day = liveCount30Day;
+    }
+
+    public String getLiveCount30Day() 
+    {
+        return liveCount30Day;
+    }
+    public void setLivegmv30day(String livegmv30day) 
+    {
+        this.livegmv30day = livegmv30day;
+    }
+
+    public String getLivegmv30day() 
+    {
+        return livegmv30day;
+    }
+    public void setLivesalescount30day(String livesalescount30day) 
+    {
+        this.livesalescount30day = livesalescount30day;
+    }
+
+    public String getLivesalescount30day() 
+    {
+        return livesalescount30day;
+    }
+    public void setLiveTags(String liveTags) 
+    {
+        this.liveTags = liveTags;
+    }
+
+    public String getLiveTags() 
+    {
+        return liveTags;
+    }
+    public void setLocation(String location) 
+    {
+        this.location = location;
+    }
+
+    public String getLocation() 
+    {
+        return location;
+    }
+    public void setNickName(String nickName) 
+    {
+        this.nickName = nickName;
+    }
+
+    public String getNickName() 
+    {
+        return nickName;
+    }
+    public void setPlatformFans(String platformFans) 
+    {
+        this.platformFans = platformFans;
+    }
+
+    public String getPlatformFans() 
+    {
+        return platformFans;
+    }
+    public void setProvince(String province) 
+    {
+        this.province = province;
+    }
+
+    public String getProvince() 
+    {
+        return province;
+    }
+    public void setScore(String score) 
+    {
+        this.score = score;
+    }
+
+    public String getScore() 
+    {
+        return score;
+    }
+    public void setSellgoodsawemecount30day(String sellgoodsawemecount30day) 
+    {
+        this.sellgoodsawemecount30day = sellgoodsawemecount30day;
+    }
+
+    public String getSellgoodsawemecount30day() 
+    {
+        return sellgoodsawemecount30day;
+    }
+    public void setSellgoodslivecount30day(String sellgoodslivecount30day) 
+    {
+        this.sellgoodslivecount30day = sellgoodslivecount30day;
+    }
+
+    public String getSellgoodslivecount30day() 
+    {
+        return sellgoodslivecount30day;
+    }
+    public void setShortId(String shortId) 
+    {
+        this.shortId = shortId;
+    }
+
+    public String getShortId() 
+    {
+        return shortId;
+    }
+    public void setSignature(String signature) 
+    {
+        this.signature = signature;
+    }
+
+    public String getSignature() 
+    {
+        return signature;
+    }
+    public void setTags(String tags) 
+    {
+        this.tags = tags;
+    }
+
+    public String getTags() 
+    {
+        return tags;
+    }
+    public void setUid(String uid) 
+    {
+        this.uid = uid;
+    }
+
+    public String getUid() 
+    {
+        return uid;
+    }
+    public void setUniqueId(String uniqueId) 
+    {
+        this.uniqueId = uniqueId;
+    }
+
+    public String getUniqueId() 
+    {
+        return uniqueId;
+    }
+    public void setUrl(String url) 
+    {
+        this.url = url;
+    }
+
+    public String getUrl() 
+    {
+        return url;
+    }
+    public void setWithFusionShopEntry(Boolean withFusionShopEntry) 
+    {
+        this.withFusionShopEntry = withFusionShopEntry;
+    }
+
+    public Boolean getWithFusionShopEntry() 
+    {
+        return withFusionShopEntry;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("age", getAge())
+            .append("avatar", getAvatar())
+            .append("avgGuestPrice", getAvgGuestPrice())
+            .append("avgGuestPriceStr", getAvgGuestPriceStr())
+            .append("avglike30day", getAvglike30day())
+            .append("avgTotalUserCount30Day", getAvgTotalUserCount30Day())
+            .append("avgUserCount30Day", getAvgUserCount30Day())
+            .append("avgUserSale", getAvgUserSale())
+            .append("avgUserSaleStr", getAvgUserSaleStr())
+            .append("awemeavgsalescount30day", getAwemeavgsalescount30day())
+            .append("awemeavgsalesgmv30day", getAwemeavgsalesgmv30day())
+            .append("awemeCount30Day", getAwemeCount30Day())
+            .append("awemecount30day", getAwemecount30day())
+            .append("awemesalescount30day", getAwemesalescount30day())
+            .append("awemesalesgmv30day", getAwemesalesgmv30day())
+            .append("awemes", getAwemes())
+            .append("city", getCity())
+            .append("contentTags", getContentTags())
+            .append("customVerify", getCustomVerify())
+            .append("enterpriseVerify", getEnterpriseVerify())
+            .append("fansinc30day", getFansinc30day())
+            .append("gender", getGender())
+            .append("id", getId())
+            .append("includeState", getIncludeState())
+            .append("isBrandSelf", getIsBrandSelf())
+            .append("isFavorite", getIsFavorite())
+            .append("isFocus", getIsFocus())
+            .append("isMcn", getIsMcn())
+            .append("isRooming", getIsRooming())
+            .append("likeCount", getLikeCount())
+            .append("likesinc30day", getLikesinc30day())
+            .append("liveavggmv30day", getLiveavggmv30day())
+            .append("liveavgsalescount30day", getLiveavgsalescount30day())
+            .append("liveCount30Day", getLiveCount30Day())
+            .append("livegmv30day", getLivegmv30day())
+            .append("livesalescount30day", getLivesalescount30day())
+            .append("liveTags", getLiveTags())
+            .append("location", getLocation())
+            .append("nickName", getNickName())
+            .append("platformFans", getPlatformFans())
+            .append("province", getProvince())
+            .append("score", getScore())
+            .append("sellgoodsawemecount30day", getSellgoodsawemecount30day())
+            .append("sellgoodslivecount30day", getSellgoodslivecount30day())
+            .append("shortId", getShortId())
+            .append("signature", getSignature())
+            .append("tags", getTags())
+            .append("uid", getUid())
+            .append("uniqueId", getUniqueId())
+            .append("url", getUrl())
+            .append("withFusionShopEntry", getWithFusionShopEntry())
+            .toString();
+    }
+}

+ 273 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/fg/SalesTrendData.java

@@ -0,0 +1,273 @@
+package com.ruoyi.system.domain.fg;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+public class SalesTrendData extends BaseEntity {
+
+    @Excel(name = "视频销量总数")
+    private String AwemeSalesCount;
+    @Excel(name = "视频销量区间数")
+    private String AwemeSalesCountStr;
+    @Excel(name = "视频销量百分比")
+    private String AwemeSaleCountRatio;
+    @Excel(name = "视频销售额")
+    private String AwemeSales;
+    @Excel(name = "视频销售额区间数")
+    private String AwemeSalesStr;
+    @Excel(name = "视频销售额百分比")
+    private String AwemeSalesRatio;
+
+    @Excel(name = "日期")
+    private String DateCode;
+    @Excel(name = "直播销量总数")
+    private String LiveSalesCount;
+    @Excel(name = "直播销量区间数")
+    private String LiveSalesCountStr;
+    @Excel(name = "直播销量百分比")
+    private String LiveSaleCountRatio;
+    @Excel(name = "直播销售额")
+    private String LiveSales;
+    @Excel(name = "直播销售额区间数")
+    private String LiveSalesStr;
+    @Excel(name = "直播销售额百分比")
+    private String LiveSalesRatio;
+
+    @Excel(name = "商品卡销量总数")
+    private String OtherSalesCount;
+    @Excel(name = "商品卡销售区间数")
+    private String OtherSalesCountStr;
+    @Excel(name = "商品卡销量百分比")
+    private String OtherSaleCountRatio;
+    @Excel(name = "商品卡销量额")
+    private String OtherSales;
+    @Excel(name = "商品卡销量额区间数")
+    private String OtherSalesStr;
+    @Excel(name = "商品卡销售额百分比")
+    private String OtherSalesRatio;
+
+
+
+    @Excel(name = "总PV")
+    private String PV;
+    @Excel(name = "总PV区间值")
+    private String PVStr;
+    @Excel(name = "时间")
+    private String StatDate;
+    @Excel(name = "总计")
+    private String SumSalesCount;
+    @Excel(name = "总计区间值")
+    private String SumSalesCountStr;
+    @Excel(name = "总量")
+    private String TotalSales;
+    @Excel(name = "总量区间值")
+    private String TotalSalesStr;
+
+    public String getAwemeSalesCount() {
+        return AwemeSalesCount;
+    }
+
+    public void setAwemeSalesCount(String awemeSalesCount) {
+        AwemeSalesCount = awemeSalesCount;
+    }
+
+    public String getAwemeSalesCountStr() {
+        return AwemeSalesCountStr;
+    }
+
+    public void setAwemeSalesCountStr(String awemeSalesCountStr) {
+        AwemeSalesCountStr = awemeSalesCountStr;
+    }
+
+    public String getAwemeSaleCountRatio() {
+        return AwemeSaleCountRatio;
+    }
+
+    public void setAwemeSaleCountRatio(String awemeSaleCountRatio) {
+        AwemeSaleCountRatio = awemeSaleCountRatio;
+    }
+
+    public String getAwemeSales() {
+        return AwemeSales;
+    }
+
+    public void setAwemeSales(String awemeSales) {
+        AwemeSales = awemeSales;
+    }
+
+    public String getAwemeSalesStr() {
+        return AwemeSalesStr;
+    }
+
+    public void setAwemeSalesStr(String awemeSalesStr) {
+        AwemeSalesStr = awemeSalesStr;
+    }
+
+    public String getAwemeSalesRatio() {
+        return AwemeSalesRatio;
+    }
+
+    public void setAwemeSalesRatio(String awemeSalesRatio) {
+        AwemeSalesRatio = awemeSalesRatio;
+    }
+
+    public String getDateCode() {
+        return DateCode;
+    }
+
+    public void setDateCode(String dateCode) {
+        DateCode = dateCode;
+    }
+
+    public String getLiveSalesCount() {
+        return LiveSalesCount;
+    }
+
+    public void setLiveSalesCount(String liveSalesCount) {
+        LiveSalesCount = liveSalesCount;
+    }
+
+    public String getLiveSalesCountStr() {
+        return LiveSalesCountStr;
+    }
+
+    public void setLiveSalesCountStr(String liveSalesCountStr) {
+        LiveSalesCountStr = liveSalesCountStr;
+    }
+
+    public String getLiveSaleCountRatio() {
+        return LiveSaleCountRatio;
+    }
+
+    public void setLiveSaleCountRatio(String liveSaleCountRatio) {
+        LiveSaleCountRatio = liveSaleCountRatio;
+    }
+
+    public String getLiveSales() {
+        return LiveSales;
+    }
+
+    public void setLiveSales(String liveSales) {
+        LiveSales = liveSales;
+    }
+
+    public String getLiveSalesStr() {
+        return LiveSalesStr;
+    }
+
+    public void setLiveSalesStr(String liveSalesStr) {
+        LiveSalesStr = liveSalesStr;
+    }
+
+    public String getLiveSalesRatio() {
+        return LiveSalesRatio;
+    }
+
+    public void setLiveSalesRatio(String liveSalesRatio) {
+        LiveSalesRatio = liveSalesRatio;
+    }
+
+    public String getOtherSalesCount() {
+        return OtherSalesCount;
+    }
+
+    public void setOtherSalesCount(String otherSalesCount) {
+        OtherSalesCount = otherSalesCount;
+    }
+
+    public String getOtherSalesCountStr() {
+        return OtherSalesCountStr;
+    }
+
+    public void setOtherSalesCountStr(String otherSalesCountStr) {
+        OtherSalesCountStr = otherSalesCountStr;
+    }
+
+    public String getOtherSaleCountRatio() {
+        return OtherSaleCountRatio;
+    }
+
+    public void setOtherSaleCountRatio(String otherSaleCountRatio) {
+        OtherSaleCountRatio = otherSaleCountRatio;
+    }
+
+    public String getOtherSales() {
+        return OtherSales;
+    }
+
+    public void setOtherSales(String otherSales) {
+        OtherSales = otherSales;
+    }
+
+    public String getOtherSalesStr() {
+        return OtherSalesStr;
+    }
+
+    public void setOtherSalesStr(String otherSalesStr) {
+        OtherSalesStr = otherSalesStr;
+    }
+
+    public String getOtherSalesRatio() {
+        return OtherSalesRatio;
+    }
+
+    public void setOtherSalesRatio(String otherSalesRatio) {
+        OtherSalesRatio = otherSalesRatio;
+    }
+
+    public String getPV() {
+        return PV;
+    }
+
+    public void setPV(String PV) {
+        this.PV = PV;
+    }
+
+    public String getPVStr() {
+        return PVStr;
+    }
+
+    public void setPVStr(String PVStr) {
+        this.PVStr = PVStr;
+    }
+
+    public String getStatDate() {
+        return StatDate;
+    }
+
+    public void setStatDate(String statDate) {
+        StatDate = statDate;
+    }
+
+    public String getSumSalesCount() {
+        return SumSalesCount;
+    }
+
+    public void setSumSalesCount(String sumSalesCount) {
+        SumSalesCount = sumSalesCount;
+    }
+
+    public String getSumSalesCountStr() {
+        return SumSalesCountStr;
+    }
+
+    public void setSumSalesCountStr(String sumSalesCountStr) {
+        SumSalesCountStr = sumSalesCountStr;
+    }
+
+    public String getTotalSales() {
+        return TotalSales;
+    }
+
+    public void setTotalSales(String totalSales) {
+        TotalSales = totalSales;
+    }
+
+    public String getTotalSalesStr() {
+        return TotalSalesStr;
+    }
+
+    public void setTotalSalesStr(String totalSalesStr) {
+        TotalSalesStr = totalSalesStr;
+    }
+}

+ 199 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/fg/School.java

@@ -0,0 +1,199 @@
+package com.ruoyi.system.domain.fg;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+public class School extends BaseEntity {
+
+    @Excel(name = "大类")
+    private String lName;
+
+    @Excel(name = "大类code")
+    private String lCode;
+    @Excel(name = "小类")
+    private String pName;
+    @Excel(name = "小类code")
+    private String pCode;
+    @Excel(name = "子类")
+    private String zName;
+    @Excel(name = "子类code")
+    private String zCode;
+    @Excel(name = "评级")
+    private String grade;
+    @Excel(name = "学校名称")
+    private String univNameCn;
+    @Excel(name = "总分")
+    private String score;
+    @Excel(name = "省")
+    private String province;
+    @Excel(name = "市")
+    private String city;
+    @Excel(name = "总分数")
+    private String univLikeCount;
+    @Excel(name = "学校类型")
+    private String univTags;
+    @Excel(name = "排名")
+    private String ranking;
+    @Excel(name = "学校条件")
+    private String nameCn12;
+    @Excel(name = "学校支撑")
+    private String nameCn13;
+    @Excel(name = "专业生源")
+    private String nameCn14;
+    @Excel(name = "专业就业")
+    private String nameCn15;
+    @Excel(name = "专业条件")
+    private String nameCn16;
+
+    public String getlName() {
+        return lName;
+    }
+
+    public void setlName(String lName) {
+        this.lName = lName;
+    }
+
+    public String getlCode() {
+        return lCode;
+    }
+
+    public void setlCode(String lCode) {
+        this.lCode = lCode;
+    }
+
+    public String getpName() {
+        return pName;
+    }
+
+    public void setpName(String pName) {
+        this.pName = pName;
+    }
+
+    public String getpCode() {
+        return pCode;
+    }
+
+    public void setpCode(String pCode) {
+        this.pCode = pCode;
+    }
+
+    public String getzName() {
+        return zName;
+    }
+
+    public void setzName(String zName) {
+        this.zName = zName;
+    }
+
+    public String getzCode() {
+        return zCode;
+    }
+
+    public void setzCode(String zCode) {
+        this.zCode = zCode;
+    }
+
+    public String getGrade() {
+        return grade;
+    }
+
+    public void setGrade(String grade) {
+        this.grade = grade;
+    }
+
+    public String getUnivNameCn() {
+        return univNameCn;
+    }
+
+    public void setUnivNameCn(String univNameCn) {
+        this.univNameCn = univNameCn;
+    }
+
+    public String getScore() {
+        return score;
+    }
+
+    public void setScore(String score) {
+        this.score = score;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getUnivLikeCount() {
+        return univLikeCount;
+    }
+
+    public void setUnivLikeCount(String univLikeCount) {
+        this.univLikeCount = univLikeCount;
+    }
+
+    public String getUnivTags() {
+        return univTags;
+    }
+
+    public void setUnivTags(String univTags) {
+        this.univTags = univTags;
+    }
+
+    public String getRanking() {
+        return ranking;
+    }
+
+    public void setRanking(String ranking) {
+        this.ranking = ranking;
+    }
+
+    public String getNameCn12() {
+        return nameCn12;
+    }
+
+    public void setNameCn12(String nameCn12) {
+        this.nameCn12 = nameCn12;
+    }
+
+    public String getNameCn13() {
+        return nameCn13;
+    }
+
+    public void setNameCn13(String nameCn13) {
+        this.nameCn13 = nameCn13;
+    }
+
+    public String getNameCn14() {
+        return nameCn14;
+    }
+
+    public void setNameCn14(String nameCn14) {
+        this.nameCn14 = nameCn14;
+    }
+
+    public String getNameCn15() {
+        return nameCn15;
+    }
+
+    public void setNameCn15(String nameCn15) {
+        this.nameCn15 = nameCn15;
+    }
+
+    public String getNameCn16() {
+        return nameCn16;
+    }
+
+    public void setNameCn16(String nameCn16) {
+        this.nameCn16 = nameCn16;
+    }
+}

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/crm/TCustomerMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.system.mapper.crm;
+
+import com.ruoyi.system.domain.crm.TCustomer;
+
+import java.util.List;
+/**
+ * crmMapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+public interface TCustomerMapper 
+{
+    /**
+     * 查询crm
+     * 
+     * @param id crm主键
+     * @return crm
+     */
+    public TCustomer selectTCustomerById(String id);
+
+    /**
+     * 查询crm列表
+     * 
+     * @param tCustomer crm
+     * @return crm集合
+     */
+    public List<TCustomer> selectTCustomerList(TCustomer tCustomer);
+
+    /**
+     * 新增crm
+     * 
+     * @param tCustomer crm
+     * @return 结果
+     */
+    public int insertTCustomer(TCustomer tCustomer);
+
+    /**
+     * 修改crm
+     * 
+     * @param tCustomer crm
+     * @return 结果
+     */
+    public int updateTCustomer(TCustomer tCustomer);
+
+    /**
+     * 删除crm
+     * 
+     * @param id crm主键
+     * @return 结果
+     */
+    public int deleteTCustomerById(String id);
+
+    /**
+     * 批量删除crm
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerByIds(String[] ids);
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/fg/BloggerMapper.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.mapper.fg;
+
+import com.ruoyi.system.domain.fg.Blogger;
+
+import java.util.List;
+
+/**
+ * 达人数据Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-11-24
+ */
+public interface BloggerMapper 
+{
+    /**
+     * 查询达人数据
+     * 
+     * @param age 达人数据主键
+     * @return 达人数据
+     */
+    public Blogger selectBloggerByAge(String age);
+
+    /**
+     * 查询达人数据列表
+     * 
+     * @param blogger 达人数据
+     * @return 达人数据集合
+     */
+    public List<Blogger> selectBloggerList(Blogger blogger);
+
+    /**
+     * 新增达人数据
+     * 
+     * @param blogger 达人数据
+     * @return 结果
+     */
+    public int insertBlogger(Blogger blogger);
+
+    /**
+     * 修改达人数据
+     * 
+     * @param blogger 达人数据
+     * @return 结果
+     */
+    public int updateBlogger(Blogger blogger);
+
+    /**
+     * 删除达人数据
+     * 
+     * @param age 达人数据主键
+     * @return 结果
+     */
+    public int deleteBloggerByAge(String age);
+
+    /**
+     * 批量删除达人数据
+     * 
+     * @param ages 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBloggerByAges(String[] ages);
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/crm/ITCustomerService.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.service.crm;
+
+import com.ruoyi.system.domain.crm.TCustomer;
+
+import java.util.List;
+
+/**
+ * crmService接口
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+public interface ITCustomerService 
+{
+    /**
+     * 查询crm
+     * 
+     * @param id crm主键
+     * @return crm
+     */
+    public TCustomer selectTCustomerById(String id);
+
+    /**
+     * 查询crm列表
+     * 
+     * @param tCustomer crm
+     * @return crm集合
+     */
+    public List<TCustomer> selectTCustomerList(TCustomer tCustomer);
+
+    /**
+     * 新增crm
+     * 
+     * @param tCustomer crm
+     * @return 结果
+     */
+    public int insertTCustomer(TCustomer tCustomer);
+
+    /**
+     * 修改crm
+     * 
+     * @param tCustomer crm
+     * @return 结果
+     */
+    public int updateTCustomer(TCustomer tCustomer);
+
+    /**
+     * 批量删除crm
+     * 
+     * @param ids 需要删除的crm主键集合
+     * @return 结果
+     */
+    public int deleteTCustomerByIds(String[] ids);
+
+    /**
+     * 删除crm信息
+     * 
+     * @param id crm主键
+     * @return 结果
+     */
+    public int deleteTCustomerById(String id);
+}

+ 94 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/crm/impl/TCustomerServiceImpl.java

@@ -0,0 +1,94 @@
+package com.ruoyi.system.service.crm.impl;
+
+import java.util.List;
+
+import com.ruoyi.system.domain.crm.TCustomer;
+import com.ruoyi.system.mapper.crm.TCustomerMapper;
+import com.ruoyi.system.service.crm.ITCustomerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * crmService业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+@Service
+public class TCustomerServiceImpl implements ITCustomerService
+{
+    @Autowired
+    private TCustomerMapper tCustomerMapper;
+
+    /**
+     * 查询crm
+     * 
+     * @param id crm主键
+     * @return crm
+     */
+    @Override
+    public TCustomer selectTCustomerById(String id)
+    {
+        return tCustomerMapper.selectTCustomerById(id);
+    }
+
+    /**
+     * 查询crm列表
+     * 
+     * @param tCustomer crm
+     * @return crm
+     */
+    @Override
+    public List<TCustomer> selectTCustomerList(TCustomer tCustomer)
+    {
+        return tCustomerMapper.selectTCustomerList(tCustomer);
+    }
+
+    /**
+     * 新增crm
+     * 
+     * @param tCustomer crm
+     * @return 结果
+     */
+    @Override
+    public int insertTCustomer(TCustomer tCustomer)
+    {
+        return tCustomerMapper.insertTCustomer(tCustomer);
+    }
+
+    /**
+     * 修改crm
+     * 
+     * @param tCustomer crm
+     * @return 结果
+     */
+    @Override
+    public int updateTCustomer(TCustomer tCustomer)
+    {
+        return tCustomerMapper.updateTCustomer(tCustomer);
+    }
+
+    /**
+     * 批量删除crm
+     * 
+     * @param ids 需要删除的crm主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTCustomerByIds(String[] ids)
+    {
+        return tCustomerMapper.deleteTCustomerByIds(ids);
+    }
+
+    /**
+     * 删除crm信息
+     * 
+     * @param id crm主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTCustomerById(String id)
+    {
+        return tCustomerMapper.deleteTCustomerById(id);
+    }
+}

+ 27 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/dingding/DingAuthService.java

@@ -0,0 +1,27 @@
+package com.ruoyi.system.service.dingding;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+
+/**
+ * <p>DingAuthService 此接口用于:</p>
+ * <p>@remark:</p>
+ */
+public interface DingAuthService {
+
+    /**
+     * 根据用户手机号查询是否是公司员工
+     *
+     * @param userId 钉钉用户id
+     * @return UIOT员工信息
+     */
+    SysUser getUserByUserId(String userId);
+
+    /**
+     * 根据用户手机号查询是否是公司员工
+     *
+     * @param mobile 钉钉用户手机号
+     * @return UIOT员工信息
+     */
+    SysUser getUserByUsername(String mobile);
+
+}

+ 169 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/dingding/DingTokenService.java

@@ -0,0 +1,169 @@
+package com.ruoyi.system.service.dingding;
+
+import com.aliyun.dingtalkoauth2_1_0.Client;
+import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenRequest;
+import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenResponse;
+import com.aliyun.teaopenapi.models.Config;
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.request.OapiGetJsapiTicketRequest;
+import com.dingtalk.api.request.OapiGettokenRequest;
+import com.dingtalk.api.response.OapiGetJsapiTicketResponse;
+import com.dingtalk.api.response.OapiGettokenResponse;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.dingding.config.DingAppConfig;
+import com.ruoyi.common.utils.dingding.config.DingUrlConstant;
+import com.taobao.api.ApiException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * <p>DingLoginController 此类用于:获取access_token 和 jsTicket方法</p>
+ * <p>@remark:钉钉企业内部微应用DEMO, 实现了身份验证(免登)功能</p>
+ */
+@Slf4j
+@Service
+public class DingTokenService {
+
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * 缓存时间:一小时50分钟
+     */
+    private static final Integer CACHE_TTL = 60 * 55 * 2;
+
+    @Resource
+    private DingAppConfig dingAppConfig;
+
+    /**
+     * 在此方法中,为了避免频繁获取access_token,
+     * 在距离上一次获取access_token时间在两个小时之内的情况,
+     * 将直接从持久化存储中读取access_token
+     * <p>
+     * 因为access_token和jsapi_ticket的过期时间都是7200秒
+     * 所以在获取access_token的同时也去获取了jsapi_ticket
+     * 注:jsapi_ticket是在前端页面JSAPI做权限验证配置的时候需要使用的
+     * 具体信息请查看开发者文档--权限验证配置
+     *
+     * @return accessToken 或错误信息
+     */
+    public AjaxResult getAccessToken() {
+        // 从持久化存储中读取
+        String accessToken = redisCache.getCacheObject(Constants.DAILY_DING_ACCESS_TOKEN);
+        log.info("从Redis缓存中获取到的accessToken = {}", accessToken);
+        if (accessToken != null) {
+            return AjaxResult.success(accessToken);
+        }
+
+        DefaultDingTalkClient client = new DefaultDingTalkClient(DingUrlConstant.URL_GET_TOKEN);
+        OapiGettokenRequest request = new OapiGettokenRequest();
+        OapiGettokenResponse response;
+
+        request.setAppkey(dingAppConfig.getAppKey());
+        request.setAppsecret(dingAppConfig.getAppSecret());
+        request.setHttpMethod("GET");
+
+        try {
+            response = client.execute(request);
+        } catch (ApiException e) {
+            log.error("getAccessToken failed", e);
+            return AjaxResult.error(e.getErrCode(), e.getErrMsg());
+        }
+
+        accessToken = response.getAccessToken();
+        log.info("向Redis缓存中存取accessToken = {}", accessToken);
+
+        redisCache.setCacheObject(Constants.DAILY_DING_ACCESS_TOKEN, accessToken, CACHE_TTL, TimeUnit.MINUTES);
+
+        return AjaxResult.success(accessToken);
+    }
+
+    /**
+     * 使用 Token 初始化账号Client
+     * @return Client
+     * @throws Exception
+     */
+    public static Client createClient() throws Exception {
+        Config config = new Config();
+        config.protocol = "https";
+        config.regionId = "central";
+        return new Client(config);
+    }
+
+    /**
+     *  获取用户toKen
+     * @return
+     */
+    public AjaxResult getUserAccessToken(String code){
+        try {
+            Client client = this.createClient();
+            GetUserTokenRequest request = new GetUserTokenRequest()
+                    .setClientSecret(dingAppConfig.getAppSecret())
+                    .setClientId(dingAppConfig.getAppKey())
+                    .setCode(code).setGrantType(Constants.AUTHORIZATION_CODE);
+
+            GetUserTokenResponse response;
+
+            response = client.getUserToken(request);
+
+            return AjaxResult.success(response.getBody().getAccessToken(),response.getBody());
+
+        } catch (ApiException e) {
+            log.error("getAccessToken failed", e);
+            return AjaxResult.error(e.getErrCode(), e.getErrMsg());
+        } catch (Exception e) {
+            log.error("getAccessToken failed", e);
+            return AjaxResult.error(e.hashCode(), e.getMessage());
+        }
+
+    }
+
+    /**
+     * 获取JSTicket, 用于js的签名计算
+     * 正常的情况下,jsapi_ticket的有效期为7200秒,所以开发者需要在某个地方设计一个定时器,定期去更新jsapi_ticket
+     *
+     * @return jsTicket或错误信息
+     */
+    public AjaxResult getJsTicket() {
+        // 从持久化存储中读取
+        String ticket = redisCache.getCacheObject(Constants.DAILY_DING_JS_TICKET);
+        if (ticket != null) {
+            return AjaxResult.success(ticket);
+        }
+
+        String accessToken;
+        AjaxResult tokenSr = getAccessToken();
+        if (!tokenSr.isSuccess()) {
+            return tokenSr;
+        }
+        accessToken = (String) tokenSr.get(tokenSr.MSG_TAG);
+
+        DefaultDingTalkClient client = new DefaultDingTalkClient(DingUrlConstant.URL_GET_JSTICKET);
+        OapiGetJsapiTicketRequest request = new OapiGetJsapiTicketRequest();
+        OapiGetJsapiTicketResponse response;
+
+        request.setHttpMethod("GET");
+
+        try {
+            response = client.execute(request, accessToken);
+        } catch (ApiException e) {
+            log.error("getAccessToken failed", e);
+            return AjaxResult.error(e.getErrCode(), e.getErrMsg());
+        }
+
+        if (!response.isSuccess()) {
+            return AjaxResult.error(response.getErrorCode(), response.getErrmsg());
+        }
+        ticket = response.getTicket();
+        redisCache.setCacheObject(Constants.DAILY_DING_JS_TICKET, ticket, CACHE_TTL, TimeUnit.SECONDS);
+
+        return AjaxResult.success(ticket);
+    }
+
+
+}

+ 49 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/dingding/impl/DingAuthServiceImpl.java

@@ -0,0 +1,49 @@
+package com.ruoyi.system.service.dingding.impl;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.service.dingding.DingAuthService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>DingAuthServiceImpl 此类用于:</p>
+ * <p>@author:hujm</p>
+ * <p>@date:2021年05月20日 15:56</p>
+ * <p>@remark:</p>
+ */
+@Slf4j
+@Service
+public class DingAuthServiceImpl implements DingAuthService {
+
+    @Resource
+    private SysUserMapper sysUserMapper;
+
+    @Override
+    public SysUser getUserByUserId(String userId) {
+
+        if (userId == null) {
+            log.error("根据用户手机号查询UIOT用户时,当前钉钉用户id为空!");
+            return new SysUser();
+        }
+
+        SysUser sysUser = sysUserMapper.selectUserByUserName(userId);
+
+        return sysUser;
+    }
+
+    @Override
+    public SysUser getUserByUsername(String mobile) {
+
+        if (mobile == null) {
+            log.error("根据用户手机号查询UIOT用户时,当前钉钉用户id为空!");
+            return new SysUser();
+        }
+
+        SysUser sysUser = sysUserMapper.selectUserByUserName(mobile);
+
+        return sysUser;
+    }
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/fg/IBloggerService.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.service.fg;
+
+import com.ruoyi.system.domain.fg.Blogger;
+
+import java.util.List;
+
+/**
+ * 达人数据Service接口
+ * 
+ * @author ruoyi
+ * @date 2023-11-24
+ */
+public interface IBloggerService 
+{
+    /**
+     * 查询达人数据
+     * 
+     * @param age 达人数据主键
+     * @return 达人数据
+     */
+    public Blogger selectBloggerByAge(String age);
+
+    /**
+     * 查询达人数据列表
+     * 
+     * @param blogger 达人数据
+     * @return 达人数据集合
+     */
+    public List<Blogger> selectBloggerList(Blogger blogger);
+
+    /**
+     * 新增达人数据
+     * 
+     * @param blogger 达人数据
+     * @return 结果
+     */
+    public int insertBlogger(Blogger blogger);
+
+    /**
+     * 修改达人数据
+     * 
+     * @param blogger 达人数据
+     * @return 结果
+     */
+    public int updateBlogger(Blogger blogger);
+
+    /**
+     * 批量删除达人数据
+     * 
+     * @param ages 需要删除的达人数据主键集合
+     * @return 结果
+     */
+    public int deleteBloggerByAges(String[] ages);
+
+    /**
+     * 删除达人数据信息
+     * 
+     * @param age 达人数据主键
+     * @return 结果
+     */
+    public int deleteBloggerByAge(String age);
+}

+ 94 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/fg/impl/BloggerServiceImpl.java

@@ -0,0 +1,94 @@
+package com.ruoyi.system.service.fg.impl;
+
+import java.util.List;
+
+import com.ruoyi.system.domain.fg.Blogger;
+import com.ruoyi.system.mapper.fg.BloggerMapper;
+import com.ruoyi.system.service.fg.IBloggerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 达人数据Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-11-24
+ */
+@Service
+public class BloggerServiceImpl implements IBloggerService
+{
+    @Autowired
+    private BloggerMapper bloggerMapper;
+
+    /**
+     * 查询达人数据
+     * 
+     * @param age 达人数据主键
+     * @return 达人数据
+     */
+    @Override
+    public Blogger selectBloggerByAge(String age)
+    {
+        return bloggerMapper.selectBloggerByAge(age);
+    }
+
+    /**
+     * 查询达人数据列表
+     * 
+     * @param blogger 达人数据
+     * @return 达人数据
+     */
+    @Override
+    public List<Blogger> selectBloggerList(Blogger blogger)
+    {
+        return bloggerMapper.selectBloggerList(blogger);
+    }
+
+    /**
+     * 新增达人数据
+     * 
+     * @param blogger 达人数据
+     * @return 结果
+     */
+    @Override
+    public int insertBlogger(Blogger blogger)
+    {
+        return bloggerMapper.insertBlogger(blogger);
+    }
+
+    /**
+     * 修改达人数据
+     * 
+     * @param blogger 达人数据
+     * @return 结果
+     */
+    @Override
+    public int updateBlogger(Blogger blogger)
+    {
+        return bloggerMapper.updateBlogger(blogger);
+    }
+
+    /**
+     * 批量删除达人数据
+     * 
+     * @param ages 需要删除的达人数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBloggerByAges(String[] ages)
+    {
+        return bloggerMapper.deleteBloggerByAges(ages);
+    }
+
+    /**
+     * 删除达人数据信息
+     * 
+     * @param age 达人数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBloggerByAge(String age)
+    {
+        return bloggerMapper.deleteBloggerByAge(age);
+    }
+}

+ 104 - 0
ruoyi-system/src/main/resources/mapper/crm/TCustomerMapper.xml

@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.crm.TCustomerMapper">
+    
+    <resultMap type="TCustomer" id="TCustomerResult">
+        <result property="id"    column="id"    />
+        <result property="companyName"    column="company_name"    />
+        <result property="companyWhere"    column="company_where"    />
+        <result property="companyEnterprisepro"    column="company_enterprisepro"    />
+        <result property="companyState"    column="company_state"    />
+        <result property="companyCapital"    column="company_capital"    />
+        <result property="companySales"    column="company_sales"    />
+        <result property="userName"    column="user_name"    />
+        <result property="userPhone"    column="user_phone"    />
+        <result property="userDepartment"    column="user_department"    />
+        <result property="createBy"     column="create_by"    />
+        <result property="createTime"   column="create_time"  />
+    </resultMap>
+
+    <sql id="selectTCustomerVo">
+        select id, company_name, company_where, company_enterprisepro, company_state, company_capital, company_sales, user_name, user_phone, user_department, create_by, create_time from t_customer
+    </sql>
+
+    <select id="selectTCustomerList" parameterType="TCustomer" resultMap="TCustomerResult">
+        <include refid="selectTCustomerVo"/>
+        <where>  
+            <if test="companyName != null  and companyName != ''"> and company_name like concat('%', #{companyName}, '%')</if>
+            <if test="companyWhere != null  and companyWhere != ''"> and company_where = #{companyWhere}</if>
+            <if test="companyEnterprisepro != null  and companyEnterprisepro != ''"> and company_enterprisepro = #{companyEnterprisepro}</if>
+            <if test="companyState != null  and companyState != ''"> and company_state = #{companyState}</if>
+            <if test="companyCapital != null  and companyCapital != ''"> and company_capital = #{companyCapital}</if>
+            <if test="companySales != null  and companySales != ''"> and company_sales = #{companySales}</if>
+            <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
+            <if test="userPhone != null  and userPhone != ''"> and user_phone = #{userPhone}</if>
+            <if test="userDepartment != null  and userDepartment != ''"> and user_department = #{userDepartment}</if>
+            <if test="createBy != null  and createBy != ''"> and create_by like concat('%', #{createBy}, '%')</if>
+        </where>
+    </select>
+    
+    <select id="selectTCustomerById" parameterType="String" resultMap="TCustomerResult">
+        <include refid="selectTCustomerVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTCustomer" parameterType="TCustomer" useGeneratedKeys="true" keyProperty="id">
+        insert into t_customer
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="companyName != null">company_name,</if>
+            <if test="companyWhere != null">company_where,</if>
+            <if test="companyEnterprisepro != null">company_enterprisepro,</if>
+            <if test="companyState != null">company_state,</if>
+            <if test="companyCapital != null">company_capital,</if>
+            <if test="companySales != null">company_sales,</if>
+            <if test="userName != null">user_name,</if>
+            <if test="userPhone != null">user_phone,</if>
+            <if test="userDepartment != null">user_department,</if>
+            <if test="createBy != null">create_by,</if>
+            create_time,
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="companyName != null">#{companyName},</if>
+            <if test="companyWhere != null">#{companyWhere},</if>
+            <if test="companyEnterprisepro != null">#{companyEnterprisepro},</if>
+            <if test="companyState != null">#{companyState},</if>
+            <if test="companyCapital != null">#{companyCapital},</if>
+            <if test="companySales != null">#{companySales},</if>
+            <if test="userName != null">#{userName},</if>
+            <if test="userPhone != null">#{userPhone},</if>
+            <if test="userDepartment != null">#{userDepartment},</if>
+            <if test="createBy != null">#{createBy},</if>
+            sysdate(),
+         </trim>
+    </insert>
+
+    <update id="updateTCustomer" parameterType="TCustomer">
+        update t_customer
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="companyName != null">company_name = #{companyName},</if>
+            <if test="companyWhere != null">company_where = #{companyWhere},</if>
+            <if test="companyEnterprisepro != null">company_enterprisepro = #{companyEnterprisepro},</if>
+            <if test="companyState != null">company_state = #{companyState},</if>
+            <if test="companyCapital != null">company_capital = #{companyCapital},</if>
+            <if test="companySales != null">company_sales = #{companySales},</if>
+            <if test="userName != null">user_name = #{userName},</if>
+            <if test="userPhone != null">user_phone = #{userPhone},</if>
+            <if test="userDepartment != null">user_department = #{userDepartment},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTCustomerById" parameterType="String">
+        delete from t_customer where id = #{id}
+    </delete>
+
+    <delete id="deleteTCustomerByIds" parameterType="String">
+        delete from t_customer where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

Разница между файлами не показана из-за своего большого размера
+ 303 - 0
ruoyi-system/src/main/resources/mapper/fg/BloggerMapper.xml