From 152f0820342137ae305b748e49e446e492003686 Mon Sep 17 00:00:00 2001
From: purple <purple_lihe@163.com>
Date: Mon, 27 Jul 2020 14:13:25 +0800
Subject: [PATCH] =?UTF-8?q?feature=20(=E5=8A=9E=E5=85=AC=E4=BD=9C=E4=BB=B7?=
 =?UTF-8?q?)=EF=BC=9A=E5=8A=9E=E5=85=AC=E4=BD=9C=E4=BB=B7=E8=87=AA?=
 =?UTF-8?q?=E5=8A=A8=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../java/com/ruoyi/framework/task/RyTask.java |  10 ++
 .../mapper/OriginalOfficeCaseMapper.java      |  14 +-
 .../DownloadOriginalOfficeCaseMapper.java     |   7 +-
 .../service/IOriginalOfficeCaseService.java   |   5 +
 ...alResidenceSaleOpeningCaseServiceImpl.java |   5 +-
 .../impl/OriginalOfficeCaseServiceImpl.java   |  45 +++----
 .../data/DownloadOriginalOfficeCaseMapper.xml |   3 +-
 ...OriginalResidenceSaleOpeningCaseMapper.xml | 120 +++++++++---------
 .../clear_residence_sale_opening_case.sql     |   2 +
 .../java/com/ruoyi/GenerateTableTests.java    |   8 ++
 10 files changed, 127 insertions(+), 92 deletions(-)

diff --git a/ruoyi/src/main/java/com/ruoyi/framework/task/RyTask.java b/ruoyi/src/main/java/com/ruoyi/framework/task/RyTask.java
index 60b144c81..6cc8758ee 100644
--- a/ruoyi/src/main/java/com/ruoyi/framework/task/RyTask.java
+++ b/ruoyi/src/main/java/com/ruoyi/framework/task/RyTask.java
@@ -1,5 +1,6 @@
 package com.ruoyi.framework.task;
 
+import com.ruoyi.project.data.cases.service.IOriginalOfficeCaseService;
 import com.ruoyi.project.data.cases.service.IOriginalResidenceRentOpeningCaseService;
 import com.ruoyi.project.data.cases.service.impl.DownloadOriginalNewHouseCaseServiceImpl;
 import com.ruoyi.project.data.cases.service.impl.DownloadOriginalResidenceSaleClosingCaseServiceImpl;
@@ -22,6 +23,8 @@ public class RyTask {
     private DownloadOriginalResidenceSaleClosingCaseServiceImpl downloadOriginalResidenceSaleClosingCaseService;
     @Autowired
     private DownloadOriginalNewHouseCaseServiceImpl downloadOriginalNewHouseCaseService;
+    @Autowired
+    private IOriginalOfficeCaseService originalOfficeCaseService;
 
     public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
         System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
@@ -63,4 +66,11 @@ public class RyTask {
         downloadOriginalNewHouseCaseService.downloadSecond();
     }
 
+    /**
+     * 下载办公案例和作价
+     */
+    public void downloadOfficeCase() {
+        originalOfficeCaseService.compute();
+    }
+
 }
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/OriginalOfficeCaseMapper.java b/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/OriginalOfficeCaseMapper.java
index 7c1fc4356..0c4b63ac1 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/OriginalOfficeCaseMapper.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/OriginalOfficeCaseMapper.java
@@ -26,13 +26,13 @@ public interface OriginalOfficeCaseMapper {
      * @param yearMonth
      */
     void createArtificialTable(@Param("yearMonth") Integer yearMonth);
-
-    /**
-     * 创建案例汇总表
-     *
-     * @param yearMonth
-     */
-    void createAssembleTable(@Param("yearMonth") Integer yearMonth);
+//
+//    /**
+//     * 创建案例汇总表
+//     *
+//     * @param yearMonth
+//     */
+//    void createAssembleTable(@Param("yearMonth") Integer yearMonth);
 
     /**
      * 初始化案例汇总表
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/sync/DownloadOriginalOfficeCaseMapper.java b/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/sync/DownloadOriginalOfficeCaseMapper.java
index 9a0a408b1..e188c6f2b 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/sync/DownloadOriginalOfficeCaseMapper.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/cases/mapper/sync/DownloadOriginalOfficeCaseMapper.java
@@ -6,10 +6,15 @@ import com.ruoyi.project.data.cases.domain.OriginalOfficeCase;
 import java.util.Date;
 import java.util.List;
 
+/**
+ * 爬取库中的办公案例
+ *
+ * @author lihe
+ */
 @DS("spider")
 public interface DownloadOriginalOfficeCaseMapper {
     /**
-     * 下载案例
+     * 下载办公案例
      *
      * @param startDate
      * @param endDate
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/IOriginalOfficeCaseService.java b/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/IOriginalOfficeCaseService.java
index 1b005d2b0..851624e04 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/IOriginalOfficeCaseService.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/IOriginalOfficeCaseService.java
@@ -1,5 +1,10 @@
 package com.ruoyi.project.data.cases.service;
 
+/**
+ * 办公基价计算Service
+ *
+ * @author lihe
+ */
 public interface IOriginalOfficeCaseService {
     /**
      * 计算
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/DownloadOriginalResidenceSaleOpeningCaseServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/DownloadOriginalResidenceSaleOpeningCaseServiceImpl.java
index 92e4e359c..39467d105 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/DownloadOriginalResidenceSaleOpeningCaseServiceImpl.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/DownloadOriginalResidenceSaleOpeningCaseServiceImpl.java
@@ -43,7 +43,7 @@ public class DownloadOriginalResidenceSaleOpeningCaseServiceImpl {
      */
     public void download() {
         Integer tableRoute = DateUtils.getNextYearMonth();
-        Integer remoteTableRoute = DateUtils.getLastYearMonth();
+        Integer remoteTableRoute = DateUtils.getYearMonth();
 
         download(tableRoute, remoteTableRoute);
     }
@@ -82,6 +82,9 @@ public class DownloadOriginalResidenceSaleOpeningCaseServiceImpl {
         originalResidenceSaleOpeningCaseMapper.createRawTable(tableRoute);
         originalResidenceSaleOpeningCaseMapper.createCleanTable(tableRoute);
         originalResidenceSaleOpeningCaseMapper.createAssembleTable(tableRoute);
+        originalResidenceSaleOpeningCaseMapper.createComputePriceTable(tableRoute);
+        originalResidenceSaleOpeningCaseMapper.createArtificialPriceTable(tableRoute);
+        originalResidenceSaleOpeningCaseMapper.createUltimatePriceTable(tableRoute);
         syncOriginalResidenceSaleOpeningCaseMapper.createRawTable(remoteTableRoute);
     }
 
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/OriginalOfficeCaseServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/OriginalOfficeCaseServiceImpl.java
index 266840891..c820630a2 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/OriginalOfficeCaseServiceImpl.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/cases/service/impl/OriginalOfficeCaseServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.project.data.cases.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.LoadUtil;
 import com.ruoyi.project.data.cases.domain.OriginalOfficeCase;
 import com.ruoyi.project.data.cases.mapper.OriginalOfficeCaseMapper;
@@ -20,6 +21,11 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
+/**
+ * 办公基价计算Service
+ *
+ * @author lihe
+ */
 @Service
 @DS("compute")
 public class OriginalOfficeCaseServiceImpl implements IOriginalOfficeCaseService {
@@ -39,26 +45,18 @@ public class OriginalOfficeCaseServiceImpl implements IOriginalOfficeCaseService
      * 计算
      */
     @Override
-    @Scheduled(cron = "0 0 17 28 * ?")
     public void compute() {
+
+        Integer yearMonth = DateUtils.getNextYearMonth();
+        Integer lastYearMonth = DateUtils.getYearMonth();
+
         Date date = new Date();
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 15);
         Date startDate = calendar.getTime();
-        Integer lastYearMonth = new Integer(String.format("%d%02d", calendar.get(Calendar.YEAR),
-                calendar.get(Calendar.MONTH) + 1));
         calendar.add(Calendar.MONTH, 1);
         Date endDate = calendar.getTime();
-        Integer yearMonth = new Integer(String.format("%d%02d", calendar.get(Calendar.YEAR),
-                calendar.get(Calendar.MONTH) + 1));
-
-//        yearMonth = 202007;
-////        lastYearMonth = 202006;
-////        calendar.set(2020, 5, 16);
-////        startDate = calendar.getTime();
-////        calendar.set(2020, 6, 16);
-////        endDate = calendar.getTime();
 
         before(yearMonth, startDate, endDate);
         running(yearMonth, lastYearMonth);
@@ -72,23 +70,26 @@ public class OriginalOfficeCaseServiceImpl implements IOriginalOfficeCaseService
     private void before(Integer yearMonth, Date startDate, Date endDate) {
         // 创建表
         originalOfficeCaseMapper.createTable(yearMonth);
-        originalOfficeCaseMapper.createArtificialTable(yearMonth);
         originalOfficeCaseMapper.initAssembleTable(yearMonth);
         originalOfficeCaseMapper.initPriceTable(yearMonth);
+        originalOfficeCaseMapper.createArtificialTable(yearMonth);
 
         // 下载列表
         List<OriginalOfficeCase> downloadList = downloadOriginalOfficeCaseMapper.download(startDate, endDate);
         SqlParameterSource[] batchParams = SqlParameterSourceUtils.createBatch(downloadList.toArray());
         namedParameterJdbcTemplate.batchUpdate("insert into dbo.ODS_OFFICECASELISTED_" + yearMonth.toString() + "_RAW" +
-                "(case_id,url, title,容积率,总价售,均价售, 楼盘名称, 楼盘名称_M, 楼层, 面积, 物业费, 工位数, 地址, 地铁, 发布时间, 房源编号, 百度lng, 百度lat, " +
-                "区域, 分类, " +
-                "来源, 等级, 楼盘网址, 装修,类型, 板块, 挂牌中介, 月租金租, 标准租金租, 得房率, 总价, 单价,更新时间) values(replace(newid(),'-',''),:url," +
-                ":title," +
-                ":floorAreaRatio," +
-                ":caseTotalPrice," +
-                ":caseUnitPrice,:name,:name_m,:caseFloor,:area,:managementFee,:seatCount,:address,:metro," +
-                ":publishDate,:sourceNo,:lng,:lat,:county,:catalog,:source,:level,:homePageUrl,:decoration," +
-                ":type,:block,:agency,:rentOfMonthly,:rentOfStandard,:score,:totalPrice,:unitPrice,:updateDate) ",
+                        "(case_id,url, title,容积率,总价售,均价售, 楼盘名称, 楼盘名称_M, 楼层, 面积, 物业费, 工位数, 地址, 地铁, 发布时间, 房源编号, 百度lng, " +
+                        "百度lat, " +
+                        "区域, 分类, " +
+                        "来源, 等级, 楼盘网址, 装修,类型, 板块, 挂牌中介, 月租金租, 标准租金租, 得房率, 总价, 单价,更新时间) values(replace(newid(),'-','')" +
+                        ",:url," +
+                        ":title," +
+                        ":floorAreaRatio," +
+                        ":caseTotalPrice," +
+                        ":caseUnitPrice,:name,:name_m,:caseFloor,:area,:managementFee,:seatCount,:address,:metro," +
+                        ":publishDate,:sourceNo,:lng,:lat,:county,:catalog,:source,:level,:homePageUrl,:decoration," +
+                        ":type,:block,:agency,:rentOfMonthly,:rentOfStandard,:score,:totalPrice,:unitPrice," +
+                        ":updateDate) ",
                 batchParams);
     }
 
diff --git a/ruoyi/src/main/resources/mybatis/data/DownloadOriginalOfficeCaseMapper.xml b/ruoyi/src/main/resources/mybatis/data/DownloadOriginalOfficeCaseMapper.xml
index 9169deb09..4b163a1cd 100644
--- a/ruoyi/src/main/resources/mybatis/data/DownloadOriginalOfficeCaseMapper.xml
+++ b/ruoyi/src/main/resources/mybatis/data/DownloadOriginalOfficeCaseMapper.xml
@@ -36,6 +36,7 @@
         <result property="unitPrice" column="单价" javaType="java.math.BigDecimal"/>
         <result property="updateDate" column="更新时间" javaType="java.sql.Date"/>
     </resultMap>
+    <!-- 获取爬虫库中的办公案例 -->
     <select id="download" resultMap="DownloadMapping">
         select url, title, 容积率, 总价售, 均价售, 楼盘名称, 楼层, case 面积 when 'nan' then NULL ELSE 面积 END 面积,
          物业费, 工位数, 地址, 地铁,
@@ -46,6 +47,6 @@
         case when 分类 = '售' then (case 均价售 when 'nan' then NULL ELSE 均价售 END)
             when 分类 = '租' then (case 标准租金租 when 'nan' then NULL ELSE 标准租金租 END) end as 单价
         from dbo.办公
-        where 更新时间 >= #{startDate} and 更新时间 <![CDATA[ < ]]> #{endDate}
+        where 更新时间 >= #{startDate,jdbcType=DATE} and 更新时间 <![CDATA[ < ]]> #{endDate,jdbcType=DATE}
     </select>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi/src/main/resources/mybatis/data/OriginalResidenceSaleOpeningCaseMapper.xml b/ruoyi/src/main/resources/mybatis/data/OriginalResidenceSaleOpeningCaseMapper.xml
index f1235978f..be38561c0 100644
--- a/ruoyi/src/main/resources/mybatis/data/OriginalResidenceSaleOpeningCaseMapper.xml
+++ b/ruoyi/src/main/resources/mybatis/data/OriginalResidenceSaleOpeningCaseMapper.xml
@@ -79,7 +79,7 @@
             #{casePrice},
             #{caseCommunityName},
             #{caseVisitedNum},
-            #{caseFirstVisitTime},
+            #{caseFirstVisitTime,jdbcType=DATE},
             #{caseVisitedNum15},
             #{caseVisitedNum30},
             #{caseUrl},
@@ -262,65 +262,65 @@
 
         create table ${targetTableName}
         (
-        SID int not null identity(1,1)
-        , ProjectID nvarchar(20) primary key
-        , ProjectName nvarchar(1024)
-        , ProjectAddr nvarchar(1024)
-        , County nvarchar(512)
-        , Block nvarchar(512)
-        , Loop nvarchar(512)
-        , IsIndxGen tinyint
-        , IsPstCalc tinyint
-        , StatusRun tinyint
-        , ProjectSPLabel nvarchar(64)
-        , PropertyType nvarchar(256)
-        , ProjectType nvarchar(256)
-        , ProjectTypeDtl nvarchar(256)
-        , ProjectLevel nvarchar(64)
-        , Year int
-        , MainArea decimal(18, 2)
-        , AreaCoff decimal(7, 4)
-        , YearCoff decimal(7, 4)
-        , PriceNote nvarchar(1024)
-        , BasePriceDft decimal(18, 2)
-        , MainPriceDft decimal(18, 2)
-        , BasePrice_1 decimal(18, 2)
-        , PriceUnitAdj decimal(18, 2)
-        , Visited_Num int
-        , First_Visit_Time date
-        , Visited_Num_15 int
-        , Visited_Num_30 int
-        , PriceDealMean_1 decimal(18, 2)
-        , PriceDealMax_1 decimal(18, 2)
-        , SumDeal_1 int
-        , PriceDealMean decimal(18, 2)
-        , PriceDealMax decimal(18, 2)
-        , SumDeal int
-        , PriceListedMin decimal(18, 2)
-        , PriceCase1_ToAI_Pst decimal(18, 6)
-        , PriceCase2_ToAI_Pst decimal(18, 6)
-        , PriceCase1_ToLst_Pst decimal(18, 6)
-        , PriceCase2_ToLst_Pst decimal(18, 6)
-        , PriceCase1 decimal(18, 2)
-        , PriceCase1AdjPst decimal(18, 6)
-        , SumCase1 int
-        , PriceCase2 decimal(18, 2)
-        , PriceCase2AdjPst decimal(18, 6)
-        , SumCase2 int
-        , VOPPBT varchar(64)
-        , VOPPB decimal(18, 6)
-        , BindProjID int
-        , Bind_Proj_Pst decimal(18, 6)
-        , Bind_Block_Class nvarchar(128)
-        , Bind_Block_Class_Pst decimal(18, 6)
-        , Bind_Block_Plevel nvarchar(128)
-        , Bind_Block_Plevel_Pst decimal(18, 6)
-        , Bind_Block_PType nvarchar(128)
-        , Bind_Block_Ptype_Pst decimal(18, 6)
-        , Bind_County_PType nvarchar(128)
-        , Bind_County_Ptype_Pst decimal(18, 6)
-        , VOPPAT varchar(64)
-        , VOPPA decimal(18, 6)
+            SID int not null identity(1,1)
+            , ProjectID nvarchar(20) primary key
+            , ProjectName nvarchar(1024)
+            , ProjectAddr nvarchar(1024)
+            , County nvarchar(512)
+            , Block nvarchar(512)
+            , Loop nvarchar(512)
+            , IsIndxGen tinyint
+            , IsPstCalc tinyint
+            , StatusRun tinyint
+            , ProjectSPLabel nvarchar(64)
+            , PropertyType nvarchar(256)
+            , ProjectType nvarchar(256)
+            , ProjectTypeDtl nvarchar(256)
+            , ProjectLevel nvarchar(64)
+            , Year int
+            , MainArea decimal(18, 2)
+            , AreaCoff decimal(7, 4)
+            , YearCoff decimal(7, 4)
+            , PriceNote nvarchar(1024)
+            , BasePriceDft decimal(18, 2)
+            , MainPriceDft decimal(18, 2)
+            , BasePrice_1 decimal(18, 2)
+            , PriceUnitAdj decimal(18, 2)
+            , Visited_Num int
+            , First_Visit_Time date
+            , Visited_Num_15 int
+            , Visited_Num_30 int
+            , PriceDealMean_1 decimal(18, 2)
+            , PriceDealMax_1 decimal(18, 2)
+            , SumDeal_1 int
+            , PriceDealMean decimal(18, 2)
+            , PriceDealMax decimal(18, 2)
+            , SumDeal int
+            , PriceListedMin decimal(18, 2)
+            , PriceCase1_ToAI_Pst decimal(18, 6)
+            , PriceCase2_ToAI_Pst decimal(18, 6)
+            , PriceCase1_ToLst_Pst decimal(18, 6)
+            , PriceCase2_ToLst_Pst decimal(18, 6)
+            , PriceCase1 decimal(18, 2)
+            , PriceCase1AdjPst decimal(18, 6)
+            , SumCase1 int
+            , PriceCase2 decimal(18, 2)
+            , PriceCase2AdjPst decimal(18, 6)
+            , SumCase2 int
+            , VOPPBT varchar(64)
+            , VOPPB decimal(18, 6)
+            , BindProjID int
+            , Bind_Proj_Pst decimal(18, 6)
+            , Bind_Block_Class nvarchar(128)
+            , Bind_Block_Class_Pst decimal(18, 6)
+            , Bind_Block_Plevel nvarchar(128)
+            , Bind_Block_Plevel_Pst decimal(18, 6)
+            , Bind_Block_PType nvarchar(128)
+            , Bind_Block_Ptype_Pst decimal(18, 6)
+            , Bind_County_PType nvarchar(128)
+            , Bind_County_Ptype_Pst decimal(18, 6)
+            , VOPPAT varchar(64)
+            , VOPPA decimal(18, 6)
         );
     </update>
     <!-- 人工修正价格表和作价表一摸一样 -->
diff --git a/ruoyi/src/main/resources/sql-template/clear_residence_sale_opening_case.sql b/ruoyi/src/main/resources/sql-template/clear_residence_sale_opening_case.sql
index 6dc22d2b7..4a20ff6d6 100644
--- a/ruoyi/src/main/resources/sql-template/clear_residence_sale_opening_case.sql
+++ b/ruoyi/src/main/resources/sql-template/clear_residence_sale_opening_case.sql
@@ -1,3 +1,5 @@
+truncate table ODS_HOUSINGCASELISTED_LJ_#yearMonth#;
+
 update a
 set a.uv_community_id=b.ITEM_ProjectID,
     a.uv_building_id=b.ITEM_BuildingID,
diff --git a/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java b/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java
index 9e01d414a..409ada2e2 100644
--- a/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java
+++ b/ruoyi/src/test/java/com/ruoyi/GenerateTableTests.java
@@ -14,6 +14,14 @@ import java.util.stream.Stream;
 
 public class GenerateTableTests {
 
+    @Test
+    public void testLastYearMonth() {
+
+        Integer lastYearMonth =  DateUtils.getLastYearMonth();
+        Assert.assertTrue(202007 == lastYearMonth);
+
+    }
+
     @Test
     public void getELTableColumn() {
         Class<?> targetClass = ComputeResidenceSaleBasePrice.class;