فهرست منبع

fix: 工作日志查询SQL优化

zhangying 8 ماه پیش
والد
کامیت
d12a1f1edb

+ 2 - 2
src/main/java/com/hz/employmentsite/vo/taskAndLog/DoWorkVo.java

@@ -36,8 +36,8 @@ public class DoWorkVo {
     public String streetCode;
     public String streetName;
 
-    public Integer RecordsCompanyNum;
-    public Integer RecordsJobuserNum;
+    public int RecordsCompanyNum;
+    public int RecordsJobuserNum;
 
     @SiteID
     public String siteID;

+ 26 - 23
src/main/resources/mapping/cquery/DoWorkCQuery.xml

@@ -2,29 +2,32 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.hz.employmentsite.mapper.cquery.DoWorkCQuery">
     <select id="getList" resultType="com.hz.employmentsite.vo.taskAndLog.DoWorkVo">
-        select workLog.*,siteUser.SiteUserName as UserName,siteUser.UserId as UserId, region.name as
-        RegionName,street.name as StreetName, site.SiteName as siteName,dic_logType.name as LogTypeName,modifyUser.Name
-        as
-        modifyUserName,
-        (
-        SELECT COUNT(company.CompanyID) FROM pc_company company WHERE company.CreateUserID = siteUser.UserId AND
-        DATE(company.CreateTime) = DATE(workLog.WorkTime)
-        ) AS RecordsCompanyNum,
-        (
-        SELECT COUNT(jobuser.JobuserID) FROM pc_jobuser jobuser WHERE jobuser.CreateUserID = siteUser.UserId AND
-        DATE(jobuser.CreateTime) = DATE(workLog.WorkTime)
-        ) AS RecordsJobuserNum
-        ,inSites.InstitutionID as institutionID
-        from pc_dowork workLog
-        left join (select * from sys_dictionary_item where DictionaryCode ='LogType' ) dic_logType on workLog.doTypeID =
-        dic_logType.Value
-        left join area_code region on workLog.RegionCode = region.code
-        left join area_code street on workLog.StreetCode = street.code
-        left join pc_site_user siteUser on workLog.SiteUserID = siteUser.SiteUserID
-        left join pc_site site on workLog.siteID = site.siteID
-        left join pc_site_institution inSites on site.SiteID = inSites.SiteID
-        left join pc_institution institution on inSites.institutionID = institution.InstitutionID
-        left join sys_user modifyUser on workLog.ModifyUserID = modifyUser.UserID
+        SELECT
+        workLog.*,
+        siteUser.SiteUserName AS UserName,
+        siteUser.UserId AS UserId,
+        region.NAME AS RegionName,
+        street.NAME AS StreetName,
+        site.SiteName AS siteName,
+        dic_logType.NAME AS LogTypeName,
+        modifyUser.NAME AS modifyUserName,
+        companyCounts.RecordsCompanyNum,
+        jobuserCounts.RecordsJobuserNum,
+        inSites.InstitutionID AS institutionID
+        FROM
+        pc_dowork workLog
+        LEFT JOIN ( SELECT `Value`, NAME FROM sys_dictionary_item WHERE DictionaryCode = 'LogType' ) dic_logType ON workLog.doTypeID = dic_logType.`Value`
+        LEFT JOIN area_code region ON workLog.RegionCode = region.`code`
+        LEFT JOIN area_code street ON workLog.StreetCode = street.`code`
+        LEFT JOIN pc_site_user siteUser ON workLog.SiteUserID = siteUser.SiteUserID
+        LEFT JOIN pc_site site ON workLog.siteID = site.siteID
+        LEFT JOIN pc_site_institution inSites ON site.SiteID = inSites.SiteID
+        LEFT JOIN pc_institution institution ON inSites.institutionID = institution.InstitutionID
+        LEFT JOIN sys_user modifyUser ON workLog.ModifyUserID = modifyUser.UserID
+        LEFT JOIN ( SELECT CreateUserID, DATE( CreateTime ) AS CreateDate, COUNT( CompanyID ) AS RecordsCompanyNum FROM pc_company GROUP BY CreateUserID, DATE( CreateTime ) ) companyCounts ON siteUser.UserId = companyCounts.CreateUserID
+        AND DATE( workLog.WorkTime ) = companyCounts.CreateDate
+        LEFT JOIN ( SELECT CreateUserID, DATE( CreateTime ) AS CreateDate, COUNT( JobuserID ) AS RecordsJobuserNum FROM pc_jobuser GROUP BY CreateUserID, DATE( CreateTime ) ) jobuserCounts ON siteUser.UserId = jobuserCounts.CreateUserID
+        AND DATE( workLog.WorkTime ) = jobuserCounts.CreateDate
         where 1=1
         <if test="doWorkIDList!='' and doWorkIDList!=null">
             and doworkID in (${doWorkIDList})