瀏覽代碼

Merge branch 'dev'

傅行帆 5 年之前
父節點
當前提交
cd73ebee04
共有 100 個檔案被更改,包括 8284 行新增953 行删除
  1. 1
    1
      pom.xml
  2. 65
    0
      src/main/java/com/huiju/estateagents/bo/request/HousingRaiseRequestBO.java
  3. 72
    0
      src/main/java/com/huiju/estateagents/bo/request/PresecretRecordRequestBO.java
  4. 75
    0
      src/main/java/com/huiju/estateagents/bo/request/RaiseOrderRequestBO.java
  5. 95
    0
      src/main/java/com/huiju/estateagents/bo/request/RaiseRecordRequestBO.java
  6. 3
    5
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserAuthMenuController.java
  7. 2
    2
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserController.java
  8. 8
    0
      src/main/java/com/huiju/estateagents/center/taUser/entity/TaUser.java
  9. 3
    2
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserAuthMenuService.java
  10. 17
    5
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserService.java
  11. 57
    13
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserAuthMenuServiceImpl.java
  12. 607
    593
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserServiceImpl.java
  13. 119
    36
      src/main/java/com/huiju/estateagents/common/CommConstant.java
  14. 2
    2
      src/main/java/com/huiju/estateagents/common/SMSUtils.java
  15. 42
    0
      src/main/java/com/huiju/estateagents/common/wxpay/IWXPayDomain.java
  16. 689
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPay.java
  17. 103
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayConfig.java
  18. 59
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayConstants.java
  19. 265
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayReport.java
  20. 256
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayRequest.java
  21. 295
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayUtil.java
  22. 30
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayXmlUtil.java
  23. 107
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WxConfig.java
  24. 55
    1
      src/main/java/com/huiju/estateagents/controller/CommonController.java
  25. 70
    60
      src/main/java/com/huiju/estateagents/controller/MiniAppController.java
  26. 2
    1
      src/main/java/com/huiju/estateagents/controller/StatisticalController.java
  27. 231
    0
      src/main/java/com/huiju/estateagents/controller/SysAdvancedConfigController.java
  28. 143
    0
      src/main/java/com/huiju/estateagents/controller/SysAdvancedConfigRelationController.java
  29. 143
    0
      src/main/java/com/huiju/estateagents/controller/TaAdvancedControllerController.java
  30. 209
    16
      src/main/java/com/huiju/estateagents/controller/TaHousingResourcesController.java
  31. 100
    0
      src/main/java/com/huiju/estateagents/controller/TaMiniappThemeController.java
  32. 143
    0
      src/main/java/com/huiju/estateagents/controller/TaOrderController.java
  33. 4
    59
      src/main/java/com/huiju/estateagents/controller/TaPersonVisitRecordController.java
  34. 288
    0
      src/main/java/com/huiju/estateagents/controller/TaPreselectionController.java
  35. 61
    16
      src/main/java/com/huiju/estateagents/controller/TaPreselectionRecordController.java
  36. 256
    0
      src/main/java/com/huiju/estateagents/controller/TaRaiseController.java
  37. 170
    0
      src/main/java/com/huiju/estateagents/controller/TaRaiseHouseController.java
  38. 673
    0
      src/main/java/com/huiju/estateagents/controller/TaRaiseRecordController.java
  39. 137
    15
      src/main/java/com/huiju/estateagents/controller/TaSalesBatchController.java
  40. 143
    0
      src/main/java/com/huiju/estateagents/controller/TaWxPayConfigController.java
  41. 50
    43
      src/main/java/com/huiju/estateagents/controller/TdCityController.java
  42. 210
    0
      src/main/java/com/huiju/estateagents/controller/WxPayController.java
  43. 7
    2
      src/main/java/com/huiju/estateagents/drainage/controller/TaDrainageController.java
  44. 1
    1
      src/main/java/com/huiju/estateagents/drainage/entity/TaDrainage.java
  45. 54
    0
      src/main/java/com/huiju/estateagents/entity/SysAdvancedConfig.java
  46. 46
    0
      src/main/java/com/huiju/estateagents/entity/SysAdvancedConfigRelation.java
  47. 49
    0
      src/main/java/com/huiju/estateagents/entity/TaAdvancedController.java
  48. 39
    0
      src/main/java/com/huiju/estateagents/entity/TaHousingResources.java
  49. 1
    1
      src/main/java/com/huiju/estateagents/entity/TaMiniappOrgIcon.java
  50. 100
    0
      src/main/java/com/huiju/estateagents/entity/TaMiniappTheme.java
  51. 99
    0
      src/main/java/com/huiju/estateagents/entity/TaOrder.java
  52. 5
    0
      src/main/java/com/huiju/estateagents/entity/TaPerson.java
  53. 86
    0
      src/main/java/com/huiju/estateagents/entity/TaPersonPositon.java
  54. 119
    0
      src/main/java/com/huiju/estateagents/entity/TaPreselection.java
  55. 6
    1
      src/main/java/com/huiju/estateagents/entity/TaPreselectionRecord.java
  56. 169
    0
      src/main/java/com/huiju/estateagents/entity/TaRaise.java
  57. 52
    0
      src/main/java/com/huiju/estateagents/entity/TaRaiseHouse.java
  58. 249
    0
      src/main/java/com/huiju/estateagents/entity/TaRaiseRecord.java
  59. 66
    3
      src/main/java/com/huiju/estateagents/entity/TaSalesBatch.java
  60. 72
    0
      src/main/java/com/huiju/estateagents/entity/TaWxPayConfig.java
  61. 3
    1
      src/main/java/com/huiju/estateagents/interceptor/AccessInterceptor.java
  62. 1
    1
      src/main/java/com/huiju/estateagents/job/JudglActivityTimeJob.java
  63. 26
    0
      src/main/java/com/huiju/estateagents/mapper/SysAdvancedConfigMapper.java
  64. 18
    0
      src/main/java/com/huiju/estateagents/mapper/SysAdvancedConfigRelationMapper.java
  65. 18
    0
      src/main/java/com/huiju/estateagents/mapper/TaAdvancedControllerMapper.java
  66. 88
    11
      src/main/java/com/huiju/estateagents/mapper/TaHousingResourcesMapper.java
  67. 5
    0
      src/main/java/com/huiju/estateagents/mapper/TaMiniappIconMapper.java
  68. 9
    0
      src/main/java/com/huiju/estateagents/mapper/TaMiniappThemeMapper.java
  69. 18
    0
      src/main/java/com/huiju/estateagents/mapper/TaOrderMapper.java
  70. 4
    1
      src/main/java/com/huiju/estateagents/mapper/TaPersonIntentionRecordMapper.java
  71. 43
    19
      src/main/java/com/huiju/estateagents/mapper/TaPersonMapper.java
  72. 49
    0
      src/main/java/com/huiju/estateagents/mapper/TaPreselectionMapper.java
  73. 18
    15
      src/main/java/com/huiju/estateagents/mapper/TaPreselectionRecordMapper.java
  74. 18
    0
      src/main/java/com/huiju/estateagents/mapper/TaRaiseHouseMapper.java
  75. 33
    0
      src/main/java/com/huiju/estateagents/mapper/TaRaiseMapper.java
  76. 83
    0
      src/main/java/com/huiju/estateagents/mapper/TaRaiseRecordMapper.java
  77. 2
    2
      src/main/java/com/huiju/estateagents/mapper/TaRecommendCustomerMapper.java
  78. 24
    2
      src/main/java/com/huiju/estateagents/mapper/TaSalesBatchMapper.java
  79. 3
    0
      src/main/java/com/huiju/estateagents/mapper/TaShareMapper.java
  80. 18
    0
      src/main/java/com/huiju/estateagents/mapper/TaWxPayConfigMapper.java
  81. 62
    4
      src/main/java/com/huiju/estateagents/po/TaHousingResourcesPO.java
  82. 13
    0
      src/main/java/com/huiju/estateagents/po/TaPreselectionRecordPO.java
  83. 2
    0
      src/main/java/com/huiju/estateagents/service/IMiniAppService.java
  84. 1
    1
      src/main/java/com/huiju/estateagents/service/IStatisticalService.java
  85. 16
    0
      src/main/java/com/huiju/estateagents/service/ISysAdvancedConfigRelationService.java
  86. 25
    0
      src/main/java/com/huiju/estateagents/service/ISysAdvancedConfigService.java
  87. 16
    0
      src/main/java/com/huiju/estateagents/service/ITaAdvancedControllerService.java
  88. 7
    0
      src/main/java/com/huiju/estateagents/service/ITaBuildingImgService.java
  89. 70
    3
      src/main/java/com/huiju/estateagents/service/ITaHousingResourcesService.java
  90. 17
    0
      src/main/java/com/huiju/estateagents/service/ITaMiniappThemeService.java
  91. 16
    0
      src/main/java/com/huiju/estateagents/service/ITaOrderService.java
  92. 24
    12
      src/main/java/com/huiju/estateagents/service/ITaPersonService.java
  93. 3
    0
      src/main/java/com/huiju/estateagents/service/ITaPersonVisitRecordService.java
  94. 18
    3
      src/main/java/com/huiju/estateagents/service/ITaPreselectionRecordService.java
  95. 60
    0
      src/main/java/com/huiju/estateagents/service/ITaPreselectionService.java
  96. 16
    0
      src/main/java/com/huiju/estateagents/service/ITaRaiseHouseService.java
  97. 90
    0
      src/main/java/com/huiju/estateagents/service/ITaRaiseRecordService.java
  98. 59
    0
      src/main/java/com/huiju/estateagents/service/ITaRaiseService.java
  99. 8
    0
      src/main/java/com/huiju/estateagents/service/ITaSalesBatchService.java
  100. 0
    0
      src/main/java/com/huiju/estateagents/service/ITaShareService.java

+ 1
- 1
pom.xml 查看文件

@@ -10,7 +10,7 @@
10 10
 	</parent>
11 11
 	<groupId>com.huiju</groupId>
12 12
 	<artifactId>estateagents</artifactId>
13
-	<version>v3.5.11</version>
13
+	<version>v3.5.13</version>
14 14
 	<name>estateages</name>
15 15
 	<description>置业经纪人</description>
16 16
 

+ 65
- 0
src/main/java/com/huiju/estateagents/bo/request/HousingRaiseRequestBO.java 查看文件

@@ -0,0 +1,65 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 查询房源认筹记录请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/28 01:01
10
+ */
11
+@Data
12
+public class HousingRaiseRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    /**
17
+     * 销售批次ID
18
+     */
19
+    private Integer salesBatchId;
20
+
21
+    /**
22
+     * 房源ID
23
+     */
24
+    private Integer houseId;
25
+
26
+    /**
27
+     * 期名
28
+     */
29
+    private String termName;
30
+
31
+    /**
32
+     * 楼栋名
33
+     */
34
+    private String blockName;
35
+
36
+    /**
37
+     * 单元名
38
+     */
39
+    private String unitName;
40
+
41
+    /**
42
+     * 楼层名
43
+     */
44
+    private String floorName;
45
+
46
+    /**
47
+     * 房间名
48
+     */
49
+    private String roomName;
50
+
51
+    /**
52
+     * 户型Id
53
+     */
54
+    private String apartmentId;
55
+
56
+    /**
57
+     * 房源发布状态
58
+     */
59
+    private Integer status;
60
+
61
+    /**
62
+     * 房源锁定状态
63
+     */
64
+    private Integer lockingStatus;
65
+}

+ 72
- 0
src/main/java/com/huiju/estateagents/bo/request/PresecretRecordRequestBO.java 查看文件

@@ -0,0 +1,72 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 预选记录查询请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/28 00:14
10
+ */
11
+@Data
12
+public class PresecretRecordRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    private Integer salesBatchId;
17
+
18
+    /**
19
+     * 房源ID
20
+     */
21
+    private Integer houseId;
22
+
23
+    /**
24
+     * 期名
25
+     */
26
+    private String termName;
27
+
28
+    /**
29
+     * 楼栋名
30
+     */
31
+    private String blockName;
32
+
33
+    /**
34
+     * 单元名
35
+     */
36
+    private String unitName;
37
+
38
+    /**
39
+     * 楼层名
40
+     */
41
+    private String floorName;
42
+
43
+    /**
44
+     * 房间名
45
+     */
46
+    private String roomName;
47
+
48
+    /**
49
+     * 用户手机号
50
+     */
51
+    private String phone;
52
+
53
+    /**
54
+     * 户型Id
55
+     */
56
+    private String apartmentId;
57
+
58
+    /**
59
+     * 预选状态
60
+     */
61
+    private Integer status;
62
+
63
+    /**
64
+     * 修改开始时间
65
+     */
66
+    private String startTime;
67
+
68
+    /**
69
+     * 修改结束时间
70
+     */
71
+    private String endTime;
72
+}

+ 75
- 0
src/main/java/com/huiju/estateagents/bo/request/RaiseOrderRequestBO.java 查看文件

@@ -0,0 +1,75 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 查询认筹订单请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/27 22:10
10
+ */
11
+@Data
12
+public class RaiseOrderRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    /**
17
+     * 认筹ID
18
+     */
19
+    private Integer raiseId;
20
+
21
+    /**
22
+     * 订单表ID
23
+     */
24
+    private Integer orderId;
25
+
26
+    /**
27
+     * 订单表ID
28
+     */
29
+    private Integer refundedOrderId;
30
+
31
+    /**
32
+     * 认筹单表ID
33
+     */
34
+    private Integer raiseRecordId;
35
+
36
+    /**
37
+     * 认筹手机号
38
+     */
39
+    private String tel;
40
+
41
+    /**
42
+     * 用户手机号
43
+     */
44
+    private String personTel;
45
+
46
+    /**
47
+     * 微信流水号
48
+     */
49
+    private String transactionId;
50
+
51
+    /**
52
+     * 微信退款号
53
+     */
54
+    private String refundNo;
55
+
56
+    /**
57
+     * 支付状态
58
+     */
59
+    private String payStatus;
60
+
61
+    /**
62
+     * 开始时间
63
+     */
64
+    private String payStartTime;
65
+
66
+    /**
67
+     * 结束时间
68
+     */
69
+    private String payEndTime;
70
+
71
+    /**
72
+     * 微信订单号
73
+     */
74
+    private String tradeNo;
75
+}

+ 95
- 0
src/main/java/com/huiju/estateagents/bo/request/RaiseRecordRequestBO.java 查看文件

@@ -0,0 +1,95 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 认筹单记录查询请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/27 18:39
10
+ */
11
+@Data
12
+public class RaiseRecordRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    /**
17
+     * 房源ID
18
+     */
19
+    private String houseId;
20
+
21
+    /**
22
+     * 认筹表ID
23
+     */
24
+    private Integer raiseId;
25
+
26
+    /**
27
+     * 认筹单ID
28
+     */
29
+    private Integer raiseRecordId;
30
+
31
+    /**
32
+     * 期名
33
+     */
34
+    private String termName;
35
+
36
+    /**
37
+     * 楼栋名
38
+     */
39
+    private String blockName;
40
+
41
+    /**
42
+     * 单元名
43
+     */
44
+    private String unitName;
45
+
46
+    /**
47
+     * 楼层名
48
+     */
49
+    private String floorName;
50
+
51
+    /**
52
+     * 房间名
53
+     */
54
+    private String roomName;
55
+
56
+    /**
57
+     * 是否作废
58
+     */
59
+    private Integer status;
60
+
61
+    /**
62
+     * 房源锁定状态
63
+     */
64
+    private Integer lockingStatus;
65
+
66
+    /**
67
+     * 认筹手机号
68
+     */
69
+    private String tel;
70
+
71
+    /**
72
+     * 用户手机号
73
+     */
74
+    private String personTel;
75
+
76
+    /**
77
+     * 缴费状态
78
+     */
79
+    private String payStatus;
80
+
81
+    /**
82
+     * 缴费方式
83
+     */
84
+    private String payType;
85
+
86
+    /**
87
+     * 开始时间
88
+     */
89
+    private String startTime;
90
+
91
+    /**
92
+     * 结束时间
93
+     */
94
+    private String endTime;
95
+}

+ 3
- 5
src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserAuthMenuController.java 查看文件

@@ -2,13 +2,11 @@ package com.huiju.estateagents.center.taUser.controller;
2 2
 
3 3
 import com.alibaba.fastjson.JSONArray;
4 4
 import com.alibaba.fastjson.JSONObject;
5
-import com.google.gson.JsonArray;
6 5
 import com.huiju.estateagents.base.BaseController;
7 6
 import com.huiju.estateagents.base.ResponseBean;
8 7
 import com.huiju.estateagents.center.taUser.service.ITaUserAuthMenuService;
9 8
 import com.huiju.estateagents.entity.SysButtonInMenu;
10 9
 import com.huiju.estateagents.entity.SysMenu;
11
-import com.huiju.estateagents.entity.TaRole;
12 10
 import org.springframework.beans.factory.annotation.Autowired;
13 11
 import org.springframework.web.bind.annotation.*;
14 12
 
@@ -39,7 +37,7 @@ public class TaUserAuthMenuController extends BaseController {
39 37
                                          @RequestParam("pageSize")Integer pageSize,
40 38
                                          HttpServletRequest request){
41 39
         Integer userId = getUserId(request);
42
-        return iTaUserAuthMenuService.getMenuByUserId(pageNum,pageSize,userId.toString());
40
+        return iTaUserAuthMenuService.getMenuByUserId(pageNum,pageSize,userId.toString(), getOrgId(request));
43 41
     }
44 42
 
45 43
     /**
@@ -50,8 +48,8 @@ public class TaUserAuthMenuController extends BaseController {
50 48
      */
51 49
     @RequestMapping(value="/admin/menuList",method= RequestMethod.GET)
52 50
     public ResponseBean getMenuByRole(@RequestParam("pageNum")Integer pageNum,
53
-                                      @RequestParam("pageSize")Integer pageSize){
54
-        return iTaUserAuthMenuService.getAllMenu(pageNum, pageSize);
51
+                                      @RequestParam("pageSize")Integer pageSize, HttpServletRequest request){
52
+        return iTaUserAuthMenuService.getAllMenu(pageNum, pageSize, getOrgId(request), null);
55 53
     }
56 54
 
57 55
     /**

+ 2
- 2
src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserController.java 查看文件

@@ -291,7 +291,7 @@ public class TaUserController extends BaseController {
291 291
         try {
292 292
             TaUser taUser = iTaUserService.getById(map.get("userId").toString());
293 293
             List<TaRole> roles = iTaRoleService.getRolesByUser(taUser.getUserId());
294
-            ResponseBean authMenu = iTaUserAuthMenuService.getMenuByUserId(null, null, taUser.getUserId().toString());
294
+            ResponseBean authMenu = iTaUserAuthMenuService.getMenuByUserId(null, null, taUser.getUserId().toString(),taUser.getOrgId());
295 295
             ResponseBean authButton = iTaUserAuthButtonService.getButtonByUserId(null, null, taUser.getUserId().toString());
296 296
             taUser.setMenus((List<SysMenu>) authMenu.getData());
297 297
             taUser.setButtons((List<SysButtonInMenu>) authButton.getData());
@@ -299,7 +299,7 @@ public class TaUserController extends BaseController {
299 299
             taUser.setLoginPassword("");
300 300
 
301 301
             //获取所有菜单
302
-            List<SysMenu> allMenus = (List<SysMenu>) iTaUserAuthMenuService.getAllMenu(null, null).getData();
302
+            List<SysMenu> allMenus = (List<SysMenu>) iTaUserAuthMenuService.getAllMenu(null, null,taUser.getOrgId(), roles).getData();
303 303
             List<SysButtonInMenu> allButtons = (List<SysButtonInMenu>) iTaUserAuthButtonService.getAllButton(null, null).getData();
304 304
 
305 305
             userMap.put("taUser", taUser);

+ 8
- 0
src/main/java/com/huiju/estateagents/center/taUser/entity/TaUser.java 查看文件

@@ -1,5 +1,6 @@
1 1
 package com.huiju.estateagents.center.taUser.entity;
2 2
 
3
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
3 4
 import com.baomidou.mybatisplus.annotation.IdType;
4 5
 import com.baomidou.mybatisplus.annotation.TableField;
5 6
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -116,6 +117,7 @@ public class TaUser implements Serializable {
116 117
     /**
117 118
      * 权重
118 119
      */
120
+    @TableField(strategy= FieldStrategy.IGNORED)
119 121
     private String weight;
120 122
 
121 123
     /**
@@ -218,4 +220,10 @@ public class TaUser implements Serializable {
218 220
      */
219 221
     @TableField(exist = false)
220 222
     private String confirmPassword;
223
+
224
+    /**
225
+     * 置业顾问的personid
226
+     */
227
+    @TableField(exist = false)
228
+    private String consultantPersonId;
221 229
 }

+ 3
- 2
src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserAuthMenuService.java 查看文件

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
4 4
 import com.huiju.estateagents.base.ResponseBean;
5 5
 import com.huiju.estateagents.entity.SysButtonInMenu;
6 6
 import com.huiju.estateagents.entity.SysMenu;
7
+import com.huiju.estateagents.entity.TaRole;
7 8
 
8 9
 import java.util.List;
9 10
 
@@ -15,9 +16,9 @@ import java.util.List;
15 16
  */
16 17
 public interface ITaUserAuthMenuService extends IService<SysMenu> {
17 18
 
18
-    ResponseBean getMenuByUserId(Integer pageNum, Integer pageSize, String userId);
19
+    ResponseBean getMenuByUserId(Integer pageNum, Integer pageSize, String userId, Integer orgId);
19 20
 
20
-    ResponseBean getAllMenu(Integer pageNum, Integer pageSize);
21
+    ResponseBean getAllMenu(Integer pageNum, Integer pageSize, Integer orgId, List<TaRole> roles);
21 22
 
22 23
     ResponseBean updateUserAuthMenu(Integer userId, List<SysMenu> sysMenuList,String name,Integer orgid,List<SysButtonInMenu> sysButtonInMenuList);
23 24
 }

+ 17
- 5
src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserService.java 查看文件

@@ -19,8 +19,8 @@ import java.util.Map;
19 19
  * @since 2019-09-11
20 20
  */
21 21
 public interface ITaUserService extends IService<TaUser> {
22
-	
23
-	IPage<Map<String,Object>> getPageList(IPage<TaUser> pg, Integer channelId);
22
+
23
+    IPage<Map<String, Object>> getPageList(IPage<TaUser> pg, Integer channelId);
24 24
 
25 25
     TaUser newUserAndOrg(TaUser taUser, Integer channelId) throws Exception;
26 26
 
@@ -31,23 +31,25 @@ public interface ITaUserService extends IService<TaUser> {
31 31
     void turnUserOnOrNot(Integer id, boolean isOn, String plat) throws Exception;
32 32
 
33 33
     void resetPassword(Integer id, String newPass) throws Exception;
34
-    
34
+
35 35
     List<TaTags> getTagsList(TaUser e);
36
-    
36
+
37 37
     TaUser addAdminUser(TaUser taUser) throws Exception;
38
-    
38
+
39 39
     TaUser updateAdminUser(TaUser taUser) throws Exception;
40 40
 
41 41
     TaUser getAdminByAppID(String appid);
42 42
 
43 43
     /**
44 44
      * 查询所有城市
45
+     *
45 46
      * @return
46 47
      */
47 48
     ResponseBean cityTree();
48 49
 
49 50
     /**
50 51
      * 员工离职
52
+     *
51 53
      * @param userId
52 54
      * @param customerIdList
53 55
      * @param consultantUserId 置业顾问的userId
@@ -57,10 +59,20 @@ public interface ITaUserService extends IService<TaUser> {
57 59
 
58 60
     /**
59 61
      * 分页查询用户列表
62
+     *
60 63
      * @param pg
61 64
      * @param taUser
62 65
      * @param taPersonBuildingListByUserId
63 66
      * @return
64 67
      */
65 68
     IPage<TaUser> seleUserList(IPage pg, TaUser taUser, List<TaPersonBuilding> taPersonBuildingListByUserId);
69
+
70
+    /**
71
+     * 获取用户信息
72
+     *
73
+     * @param userId
74
+     * @param orgId
75
+     * @return
76
+     */
77
+    TaUser getUserInfoById(Integer userId, Integer orgId);
66 78
 }

+ 57
- 13
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserAuthMenuServiceImpl.java 查看文件

@@ -1,25 +1,24 @@
1 1
 package com.huiju.estateagents.center.taUser.service.impl;
2 2
 
3 3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
-import com.baomidou.mybatisplus.core.metadata.IPage;
5
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 4
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 5
 import com.huiju.estateagents.base.ResponseBean;
8
-import com.huiju.estateagents.center.taUser.entity.TaUser;
9 6
 import com.huiju.estateagents.center.taUser.mapper.TaUserAuthMenuMapper;
10 7
 import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
11 8
 import com.huiju.estateagents.center.taUser.service.ITaUserAuthMenuService;
9
+import com.huiju.estateagents.common.CommConstant;
12 10
 import com.huiju.estateagents.entity.*;
13
-import com.huiju.estateagents.mapper.TaRoleButtonMapper;
14
-import com.huiju.estateagents.mapper.TaRoleMapper;
15
-import com.huiju.estateagents.mapper.TaRoleMenuMapper;
11
+import com.huiju.estateagents.mapper.*;
12
+import org.apache.commons.collections.CollectionUtils;
16 13
 import org.springframework.beans.factory.annotation.Autowired;
17 14
 import org.springframework.stereotype.Service;
18 15
 
19 16
 import java.time.LocalDateTime;
20 17
 import java.util.ArrayList;
21
-import java.util.Arrays;
18
+import java.util.Collection;
19
+import java.util.Collections;
22 20
 import java.util.List;
21
+import java.util.stream.Collectors;
23 22
 
24 23
 /**
25 24
  * @author weicc
@@ -44,24 +43,64 @@ public class TaUserAuthMenuServiceImpl extends ServiceImpl<TaUserAuthMenuMapper,
44 43
     @Autowired
45 44
     private TaRoleButtonMapper taRoleButtonMapper;
46 45
 
46
+    @Autowired
47
+    private TaAdvancedControllerMapper taAdvancedControllerMapper;
48
+
49
+    @Autowired
50
+    private SysAdvancedConfigRelationMapper sysAdvancedConfigRelationMapper;
51
+
47 52
     /**
48 53
      * 根据用户id获取授权菜单
49 54
      * @param pageNum
50 55
      * @param pageSize
51 56
      * @param userId
57
+     * @param orgId
52 58
      * @return
53 59
      */
54 60
     @Override
55
-    public ResponseBean getMenuByUserId(Integer pageNum, Integer pageSize, String userId) {
56
-
57
-        List<SysMenu> records = taUserAuthMenuMapper.sysMenuListByUserId(userId);
61
+    public ResponseBean getMenuByUserId(Integer pageNum, Integer pageSize, String userId, Integer orgId) {
62
+        List<SysMenu> records = new ArrayList<>();
63
+        List<SysMenu> menuList = taUserAuthMenuMapper.sysMenuListByUserId(userId);
64
+        records.addAll(menuList);
65
+        //添加高级配置的过滤条件
66
+        List<TaAdvancedController> taAdvancedControllerList = taAdvancedControllerMapper.selectList(new QueryWrapper<TaAdvancedController>().eq("org_id", orgId));
67
+
68
+        //需要过滤的菜单
69
+        QueryWrapper<SysAdvancedConfigRelation> sysAdvancedConfigRelationQueryWrapper = new QueryWrapper<>();
70
+        sysAdvancedConfigRelationQueryWrapper.eq("target_type",CommConstant.ADVANCED_TYPE_MENU);
71
+        sysAdvancedConfigRelationQueryWrapper.notIn(taAdvancedControllerList.size() > 0,"advanced_config_id",taAdvancedControllerList.stream().map(TaAdvancedController::getAdvancedConfigId).collect(Collectors.toList()));
72
+        List<SysAdvancedConfigRelation> sysAdvancedConfigRelations = sysAdvancedConfigRelationMapper.selectList(sysAdvancedConfigRelationQueryWrapper);
73
+        menuList.forEach(e -> {
74
+            sysAdvancedConfigRelations.forEach(s -> {
75
+                if (e.getMenuId() == Integer.valueOf(s.getTargetId())){
76
+                    records.remove(e);
77
+                }
78
+            });
79
+        });
58 80
         return ResponseBean.success(records);
59 81
     }
60 82
 
61 83
     @Override
62
-    public ResponseBean getAllMenu(Integer pageNum, Integer pageSize) {
63
-
64
-        List<SysMenu> records = taUserAuthMenuMapper.sysMenuListByRoleId();
84
+    public ResponseBean getAllMenu(Integer pageNum, Integer pageSize, Integer orgId, List<TaRole> userRoles) {
85
+        List<SysMenu> records = new ArrayList<>();
86
+        List<SysMenu> menuList = taUserAuthMenuMapper.sysMenuListByRoleId();
87
+        records.addAll(menuList);
88
+        //添加高级配置的过滤条件
89
+        List<TaAdvancedController> taAdvancedControllerList = taAdvancedControllerMapper.selectList(new QueryWrapper<TaAdvancedController>().eq("org_id", orgId));
90
+
91
+        //需要过滤的菜单
92
+        QueryWrapper<SysAdvancedConfigRelation> sysAdvancedConfigRelationQueryWrapper = new QueryWrapper<>();
93
+        sysAdvancedConfigRelationQueryWrapper.eq("target_type",CommConstant.ADVANCED_TYPE_MENU);
94
+        sysAdvancedConfigRelationQueryWrapper.notIn(taAdvancedControllerList.size() > 0,"advanced_config_id",taAdvancedControllerList.stream().map(TaAdvancedController::getAdvancedConfigId).collect(Collectors.toList()));
95
+        List<SysAdvancedConfigRelation> sysAdvancedConfigRelations = sysAdvancedConfigRelationMapper.selectList(sysAdvancedConfigRelationQueryWrapper);
96
+
97
+        List<TaRoleMenu> configRelationRoleMenuList = new ArrayList<>();
98
+        if (CollectionUtils.isNotEmpty(userRoles) && CollectionUtils.isNotEmpty(sysAdvancedConfigRelations)){
99
+            QueryWrapper<TaRoleMenu> taRoleMenuQueryWrapper = new QueryWrapper<>();
100
+            taRoleMenuQueryWrapper.in("role_id", userRoles.stream().map(TaRole::getRoleId).collect(Collectors.toList()));
101
+            taRoleMenuQueryWrapper.in("menu_id", sysAdvancedConfigRelations.stream().map(SysAdvancedConfigRelation::getTargetId).collect(Collectors.toList()));
102
+            configRelationRoleMenuList = taRoleMenuMapper.selectList(taRoleMenuQueryWrapper);
103
+        }
65 104
 
66 105
         QueryWrapper<TaRoleMenu> queryWrapper = new QueryWrapper();
67 106
         List<TaRoleMenu> taRoleMenus = taRoleMenuMapper.selectList(queryWrapper);
@@ -73,6 +112,11 @@ public class TaUserAuthMenuServiceImpl extends ServiceImpl<TaUserAuthMenuMapper,
73 112
                     roles.add(taRoleMenu.getRoleId());
74 113
                 }
75 114
             }
115
+            for (TaRoleMenu taRoleMenu : configRelationRoleMenuList){
116
+                if (sysMenu.getMenuId().equals(taRoleMenu.getMenuId())){
117
+                    roles.remove(taRoleMenu.getRoleId());
118
+                }
119
+            }
76 120
             sysMenu.setRoles(roles);
77 121
         }
78 122
 

+ 607
- 593
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserServiceImpl.java
文件差異過大導致無法顯示
查看文件


+ 119
- 36
src/main/java/com/huiju/estateagents/common/CommConstant.java 查看文件

@@ -83,22 +83,22 @@ public class CommConstant {
83 83
      * 兑换商品
84 84
      */
85 85
     public final static String POINTS_CHANGE_GOODS = "goods";
86
-    
86
+
87 87
     /**
88 88
      * 签到
89 89
      */
90 90
     public final static String POINTS_CHANGE_CHECKIN = "checkin";
91
-    
91
+
92 92
     /**
93 93
      * 分享
94 94
      */
95 95
     public final static String POINTS_CHANGE_SHARE_POSTER = "share-poster";
96
-    
96
+
97 97
     /**
98 98
      * 授权手机号
99 99
      */
100 100
     public final static String POINTS_CHANGE_SIGNUP_AGENT = "signup-agent";
101
-    
101
+
102 102
     /**
103 103
      * 拼团
104 104
      */
@@ -142,14 +142,13 @@ public class CommConstant {
142 142
      * 未领取
143 143
      */
144 144
     public static final Integer STATUS_UNACCALIMED = 0;
145
-    
145
+
146 146
     /**
147 147
      * 成功
148 148
      */
149 149
     public static final String SUCCESS = "success";
150 150
 
151 151
 
152
-
153 152
     /**
154 153
      * 活动的当前状态1:进行中
155 154
      */
@@ -222,7 +221,7 @@ public class CommConstant {
222 221
     /**
223 222
      * 客户认购
224 223
      */
225
-    public static final Integer CUSTOMER_PREORDER = 3 ;
224
+    public static final Integer CUSTOMER_PREORDER = 3;
226 225
 
227 226
     /**
228 227
      * 客户签约
@@ -247,16 +246,16 @@ public class CommConstant {
247 246
 
248 247
     //=================  客户入口类型 start =======================
249 248
     /*
250
-    * 自主进入
251
-    * */
249
+     * 自主进入
250
+     * */
252 251
     public static final String ENTRY_VOLUNTEER = "volunteer";
253 252
     /*
254 253
     添加
255 254
     */
256 255
     public static final String ENTRY_INPUT = "input";
257 256
     /*
258
-    * 报备
259
-    * */
257
+     * 报备
258
+     * */
260 259
     public static final String ENTRY_VERIFY = "verify";
261 260
     //=================  客户入口类型 end =======================
262 261
 
@@ -423,39 +422,39 @@ public class CommConstant {
423 422
     public static final String POSTER_CONTENT_TYPE_NEWS = "news";
424 423
     //人员
425 424
     public static final String POSTER_CONTENT_TYPE_PERSON = "person";
426
-	
427
-	
428
-	public static final String GD_KEY = "c9fc664a9030aed2ec2183508c2ca476";
429
- 
430
-	//已参与微信端用
425
+
426
+
427
+    public static final String GD_KEY = "c9fc664a9030aed2ec2183508c2ca476";
428
+
429
+    //已参与微信端用
431 430
     public static final Integer ACTIVITY_STATUS_PARTNER = 3;
432
-    
431
+
433 432
     //发起者
434
-	public static final String HELP_STATUS_INITIATE = "Initiate";
435
-	
436
-	//助力活动
437
-	public static final Object HELP_ACTIVITY = "helpActivity";
438
-	
439
-	//分享活动
440
-	public static final Object GROUP_ACTIVITY = "groupActivity";
441
-	public static final String TARGET_TYPE_H5 = "H5";
433
+    public static final String HELP_STATUS_INITIATE = "Initiate";
434
+
435
+    //助力活动
436
+    public static final Object HELP_ACTIVITY = "helpActivity";
437
+
438
+    //分享活动
439
+    public static final Object GROUP_ACTIVITY = "groupActivity";
440
+    public static final String TARGET_TYPE_H5 = "H5";
442 441
     public static final String ACTIVITY_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"pages/checkin/index\"}";
443 442
     public static final String LIVE_ACTIVITY_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"onlineSelling/pages/live/index\"}";
444 443
     public static final String DRAINAGE_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"pages/project/h5Page\"}";
445 444
     public static final String HOUSE_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"onlineSelling/pages/houseList/index\"}";
446
-    
445
+
447 446
     /**
448 447
      * 消息通知
449 448
      * 必须存在表   td_miniapp_template_type 中
450 449
      */
451 450
     public static final String MESSAGE_CONTENT_OF_NOTICE = "notice";
452
-    
451
+
453 452
     /**
454 453
      * 助力通知
455 454
      * 必须存在表   td_miniapp_template_type 中
456 455
      */
457 456
     public static final String MESSAGE_CONTENT_OF_HELP = "help-result";
458
-    
457
+
459 458
     /**
460 459
      * 拼团通知
461 460
      * 必须存在表   td_miniapp_template_type 中
@@ -467,22 +466,22 @@ public class CommConstant {
467 466
      * 必须存在表   td_miniapp_template_type 中
468 467
      */
469 468
     public static final String MESSAGE_CONTENT_OF_HOUSE = "house";
470
-    
469
+
471 470
     /**
472 471
      * 活动以结束
473 472
      */
474 473
     public static final Integer ACTIVITY_STATUS_FINISH = 2;
475
-    
474
+
476 475
     /**
477 476
      * 客户统计类型:跟进客户
478 477
      */
479
-	public static final String CUSTOMER_TYPE_FOLLOW = "follow";
480
-    
478
+    public static final String CUSTOMER_TYPE_FOLLOW = "follow";
479
+
481 480
     /**
482 481
      * 客户统计类型:新增客户
483 482
      */
484 483
     public static final String CUSTOMER_TYPE_NEW = "new";
485
-    
484
+
486 485
     /**
487 486
      * 客户统计类型:到访客户
488 487
      */
@@ -509,12 +508,12 @@ public class CommConstant {
509 508
      * 户型图
510 509
      */
511 510
     public static final String BUILDING_IMG_APARMENT = "aparment";
512
-    
511
+
513 512
     /**
514 513
      * 高德地图url
515 514
      */
516
-	public static final String AMAP_HTTP = "https://restapi.amap.com/v3/geocode/regeo";
517
-    
515
+    public static final String AMAP_HTTP = "https://restapi.amap.com/v3/geocode/regeo";
516
+
518 517
     /**
519 518
      * 高德地图key
520 519
      */
@@ -637,4 +636,88 @@ public class CommConstant {
637 636
      */
638 637
     public static final String HOUSE_DETAIL_PATH = "onlineSelling/pages/detail/index?id=%s";
639 638
 
639
+    public static final String RAISE_DETAIL_PATH = "/onlineSelling/pages/raiseProfile/index?id=%s";
640
+
641
+    /**
642
+     * 已锁定
643
+     */
644
+    public static final String HOUSE_LOCKING_STATUS_LOCKED = "locked";
645
+
646
+    /**
647
+     * 未锁定
648
+     */
649
+    public static final String HOUSE_LOCKING_STATUS_UNLOCKED = "unlocked";
650
+
651
+    /**
652
+     * 房源订单
653
+     */
654
+    public static final String ORDER_TARGET_TYPE_HOUSE = "house";
655
+
656
+    /**
657
+     * 自动锁房
658
+     */
659
+    public static final String HOUSE_LOCKING_TYPE_AUTO = "auto";
660
+
661
+    /**
662
+     * 手动锁房
663
+     */
664
+    public static final String HOUSE_LOCKING_TYPE_MANUAL = "manual";
665
+
666
+    /**
667
+     * 正在缴费
668
+     */
669
+    public static final String PAY_STATUS_PAYING = "paying";
670
+
671
+    /**
672
+     * 未缴费
673
+     */
674
+    public static final String PAY_STATUS_UNPAID = "unpaid";
675
+
676
+    /**
677
+     * 已缴费
678
+     */
679
+    public static final String PAY_STATUS_PAID = "paid";
680
+
681
+    /**
682
+     * 已退费
683
+     */
684
+    public static final String PAY_STATUS_REFUNDED = "refunded";
685
+
686
+    /**
687
+     * 退款异常
688
+     */
689
+    public static final String PAY_STATUS_CHANGE = "change";
690
+
691
+
692
+    /**
693
+     * 已经取消支付
694
+     *
695
+     */
696
+    public static final String PAY_STATUS_CANCEL = "cancel";
697
+
698
+    /**
699
+     * 支付超时
700
+     *
701
+     */
702
+    public static final String PAY_STATUS_TIMEOUT = "timeout";
703
+
704
+    /**
705
+     * 最大认筹金额
706
+     */
707
+    public static final Integer MAX_RAISE_PRICE = 5000000;
708
+
709
+    /**
710
+     * 菜单
711
+     */
712
+    public static final Object ADVANCED_TYPE_MENU = "menu";
713
+
714
+    /**
715
+     * 线下缴费
716
+     */
717
+    public static final String PAY_TYPE_OFFLINE = "offLine";
718
+
719
+    /**
720
+     * 线下缴费
721
+     */
722
+    public static final String PAY_TYPE_ONLINE = "onLine";
640 723
 }

+ 2
- 2
src/main/java/com/huiju/estateagents/common/SMSUtils.java 查看文件

@@ -19,12 +19,12 @@ public class SMSUtils {
19 19
     // 短信服务配置
20 20
     SMSProperties smsProperties;
21 21
 
22
-    Map<String, Phone> allPhones;
22
+    Hashtable<String, Phone> allPhones;
23 23
 
24 24
     @Autowired
25 25
     public SMSUtils(SMSProperties properties) {
26 26
         smsProperties = properties;
27
-        allPhones = new HashMap<>();
27
+        allPhones = new Hashtable<>();
28 28
     }
29 29
 
30 30
     /**

+ 42
- 0
src/main/java/com/huiju/estateagents/common/wxpay/IWXPayDomain.java 查看文件

@@ -0,0 +1,42 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+/**
4
+ * 域名管理,实现主备域名自动切换
5
+ */
6
+public abstract interface IWXPayDomain {
7
+    /**
8
+     * 上报域名网络状况
9
+     * @param domain 域名。 比如:api.mch.weixin.qq.com
10
+     * @param elapsedTimeMillis 耗时
11
+     * @param ex 网络请求中出现的异常。
12
+     *           null表示没有异常
13
+     *           ConnectTimeoutException,表示建立网络连接异常
14
+     *           UnknownHostException, 表示dns解析异常
15
+     */
16
+    abstract void report(final String domain, long elapsedTimeMillis, final Exception ex);
17
+
18
+    /**
19
+     * 获取域名
20
+     * @param config 配置
21
+     * @return 域名
22
+     */
23
+    abstract DomainInfo getDomain(final WXPayConfig config);
24
+
25
+    static class DomainInfo{
26
+        public String domain;       //域名
27
+        public boolean primaryDomain;     //该域名是否为主域名。例如:api.mch.weixin.qq.com为主域名
28
+        public DomainInfo(String domain, boolean primaryDomain) {
29
+            this.domain = domain;
30
+            this.primaryDomain = primaryDomain;
31
+        }
32
+
33
+        @Override
34
+        public String toString() {
35
+            return "DomainInfo{" +
36
+                    "domain='" + domain + '\'' +
37
+                    ", primaryDomain=" + primaryDomain +
38
+                    '}';
39
+        }
40
+    }
41
+
42
+}

+ 689
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPay.java 查看文件

@@ -0,0 +1,689 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+
4
+import java.util.HashMap;
5
+import java.util.Map;
6
+import com.huiju.estateagents.common.wxpay.WXPayConstants.SignType;
7
+
8
+public class WXPay {
9
+
10
+    private WXPayConfig config;
11
+    private SignType signType;
12
+    private boolean autoReport;
13
+    private boolean useSandbox;
14
+    private String notifyUrl;
15
+    private WXPayRequest wxPayRequest;
16
+
17
+    public WXPay(final WXPayConfig config) throws Exception {
18
+        this(config, null, true, false);
19
+    }
20
+
21
+    public WXPay(final WXPayConfig config, final boolean autoReport) throws Exception {
22
+        this(config, null, autoReport, false);
23
+    }
24
+
25
+
26
+    public WXPay(final WXPayConfig config, final boolean autoReport, final boolean useSandbox) throws Exception{
27
+        this(config, null, autoReport, useSandbox);
28
+    }
29
+
30
+    public WXPay(final WXPayConfig config, final String notifyUrl) throws Exception {
31
+        this(config, notifyUrl, true, false);
32
+    }
33
+
34
+    public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport) throws Exception {
35
+        this(config, notifyUrl, autoReport, false);
36
+    }
37
+
38
+    public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
39
+        this.config = config;
40
+        this.notifyUrl = notifyUrl;
41
+        this.autoReport = autoReport;
42
+        this.useSandbox = useSandbox;
43
+        //if (useSandbox) {
44
+            this.signType = SignType.MD5;
45
+        //}
46
+        //else {
47
+        //    this.signType = SignType.HMACSHA256;
48
+        //}
49
+        this.wxPayRequest = new WXPayRequest(config);
50
+    }
51
+
52
+    private void checkWXPayConfig() throws Exception {
53
+        if (this.config == null) {
54
+            throw new Exception("config is null");
55
+        }
56
+        if (this.config.getAppID() == null || this.config.getAppID().trim().length() == 0) {
57
+            throw new Exception("appid in config is empty");
58
+        }
59
+        if (this.config.getMchID() == null || this.config.getMchID().trim().length() == 0) {
60
+            throw new Exception("appid in config is empty");
61
+        }
62
+        if (this.config.getCertStream() == null) {
63
+            throw new Exception("cert stream in config is empty");
64
+        }
65
+        if (this.config.getWXPayDomain() == null){
66
+            throw new Exception("config.getWXPayDomain() is null");
67
+        }
68
+
69
+        if (this.config.getHttpConnectTimeoutMs() < 10) {
70
+            throw new Exception("http connect timeout is too small");
71
+        }
72
+        if (this.config.getHttpReadTimeoutMs() < 10) {
73
+            throw new Exception("http read timeout is too small");
74
+        }
75
+
76
+    }
77
+
78
+    /**
79
+     * 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign <br>
80
+     * 该函数适用于商户适用于统一下单等接口,不适用于红包、代金券接口
81
+     *
82
+     * @param reqData
83
+     * @return
84
+     * @throws Exception
85
+     */
86
+    public Map<String, String> fillRequestData(Map<String, String> reqData) throws Exception {
87
+        reqData.put("appid", config.getAppID());
88
+        reqData.put("mch_id", config.getMchID());
89
+        reqData.put("nonce_str", WXPayUtil.generateNonceStr());
90
+        if (SignType.MD5.equals(this.signType)) {
91
+            reqData.put("sign_type", WXPayConstants.MD5);
92
+        }
93
+        else if (SignType.HMACSHA256.equals(this.signType)) {
94
+            reqData.put("sign_type", WXPayConstants.HMACSHA256);
95
+        }
96
+        reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType));
97
+        return reqData;
98
+    }
99
+
100
+    /**
101
+     * 判断xml数据的sign是否有效,必须包含sign字段,否则返回false。
102
+     *
103
+     * @param reqData 向wxpay post的请求数据
104
+     * @return 签名是否有效
105
+     * @throws Exception
106
+     */
107
+    public boolean isResponseSignatureValid(Map<String, String> reqData) throws Exception {
108
+        // 返回数据的签名方式和请求中给定的签名方式是一致的
109
+        return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), this.signType);
110
+    }
111
+
112
+    /**
113
+     * 判断支付结果通知中的sign是否有效
114
+     *
115
+     * @param reqData 向wxpay post的请求数据
116
+     * @return 签名是否有效
117
+     * @throws Exception
118
+     */
119
+    public boolean isPayResultNotifySignatureValid(Map<String, String> reqData) throws Exception {
120
+        String signTypeInData = reqData.get(WXPayConstants.FIELD_SIGN_TYPE);
121
+        SignType signType;
122
+        if (signTypeInData == null) {
123
+            signType = SignType.MD5;
124
+        }
125
+        else {
126
+            signTypeInData = signTypeInData.trim();
127
+            if (signTypeInData.length() == 0) {
128
+                signType = SignType.MD5;
129
+            }
130
+            else if (WXPayConstants.MD5.equals(signTypeInData)) {
131
+                signType = SignType.MD5;
132
+            }
133
+            else if (WXPayConstants.HMACSHA256.equals(signTypeInData)) {
134
+                signType = SignType.HMACSHA256;
135
+            }
136
+            else {
137
+                throw new Exception(String.format("Unsupported sign_type: %s", signTypeInData));
138
+            }
139
+        }
140
+        return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), signType);
141
+    }
142
+
143
+
144
+    /**
145
+     * 不需要证书的请求
146
+     * @param urlSuffix String
147
+     * @param reqData 向wxpay post的请求数据
148
+     * @param connectTimeoutMs 超时时间,单位是毫秒
149
+     * @param readTimeoutMs 超时时间,单位是毫秒
150
+     * @return API返回数据
151
+     * @throws Exception
152
+     */
153
+    public String requestWithoutCert(String urlSuffix, Map<String, String> reqData,
154
+                                     int connectTimeoutMs, int readTimeoutMs) throws Exception {
155
+        String msgUUID = reqData.get("nonce_str");
156
+        String reqBody = WXPayUtil.mapToXml(reqData);
157
+
158
+        String resp = this.wxPayRequest.requestWithoutCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, autoReport);
159
+        return resp;
160
+    }
161
+
162
+
163
+    /**
164
+     * 需要证书的请求
165
+     * @param urlSuffix String
166
+     * @param reqData 向wxpay post的请求数据  Map
167
+     * @param connectTimeoutMs 超时时间,单位是毫秒
168
+     * @param readTimeoutMs 超时时间,单位是毫秒
169
+     * @return API返回数据
170
+     * @throws Exception
171
+     */
172
+    public String requestWithCert(String urlSuffix, Map<String, String> reqData,
173
+                                  int connectTimeoutMs, int readTimeoutMs) throws Exception {
174
+        String msgUUID= reqData.get("nonce_str");
175
+        String reqBody = WXPayUtil.mapToXml(reqData);
176
+
177
+        String resp = this.wxPayRequest.requestWithCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, this.autoReport);
178
+        return resp;
179
+    }
180
+
181
+    /**
182
+     * 处理 HTTPS API返回数据,转换成Map对象。return_code为SUCCESS时,验证签名。
183
+     * @param xmlStr API返回的XML格式数据
184
+     * @return Map类型数据
185
+     * @throws Exception
186
+     */
187
+    public Map<String, String> processResponseXml(String xmlStr) throws Exception {
188
+        String RETURN_CODE = "return_code";
189
+        String return_code;
190
+        Map<String, String> respData = WXPayUtil.xmlToMap(xmlStr);
191
+        if (respData.containsKey(RETURN_CODE)) {
192
+            return_code = respData.get(RETURN_CODE);
193
+        }
194
+        else {
195
+            throw new Exception(String.format("No `return_code` in XML: %s", xmlStr));
196
+        }
197
+
198
+        if (return_code.equals(WXPayConstants.FAIL)) {
199
+            return respData;
200
+        }
201
+        else if (return_code.equals(WXPayConstants.SUCCESS)) {
202
+           if (this.isResponseSignatureValid(respData)) {
203
+               return respData;
204
+           }
205
+           else {
206
+               throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr));
207
+           }
208
+        }
209
+        else {
210
+            throw new Exception(String.format("return_code value %s is invalid in XML: %s", return_code, xmlStr));
211
+        }
212
+    }
213
+
214
+    /**
215
+     * 作用:提交刷卡支付<br>
216
+     * 场景:刷卡支付
217
+     * @param reqData 向wxpay post的请求数据
218
+     * @return API返回数据
219
+     * @throws Exception
220
+     */
221
+    public Map<String, String> microPay(Map<String, String> reqData) throws Exception {
222
+        return this.microPay(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
223
+    }
224
+
225
+
226
+    /**
227
+     * 作用:提交刷卡支付<br>
228
+     * 场景:刷卡支付
229
+     * @param reqData 向wxpay post的请求数据
230
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
231
+     * @param readTimeoutMs 读超时时间,单位是毫秒
232
+     * @return API返回数据
233
+     * @throws Exception
234
+     */
235
+    public Map<String, String> microPay(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
236
+        String url;
237
+        if (this.useSandbox) {
238
+            url = WXPayConstants.SANDBOX_MICROPAY_URL_SUFFIX;
239
+        }
240
+        else {
241
+            url = WXPayConstants.MICROPAY_URL_SUFFIX;
242
+        }
243
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
244
+        return this.processResponseXml(respXml);
245
+    }
246
+
247
+    /**
248
+     * 提交刷卡支付,针对软POS,尽可能做成功
249
+     * 内置重试机制,最多60s
250
+     * @param reqData
251
+     * @return
252
+     * @throws Exception
253
+     */
254
+    public Map<String, String> microPayWithPos(Map<String, String> reqData) throws Exception {
255
+        return this.microPayWithPos(reqData, this.config.getHttpConnectTimeoutMs());
256
+    }
257
+
258
+    /**
259
+     * 提交刷卡支付,针对软POS,尽可能做成功
260
+     * 内置重试机制,最多60s
261
+     * @param reqData
262
+     * @param connectTimeoutMs
263
+     * @return
264
+     * @throws Exception
265
+     */
266
+    public Map<String, String> microPayWithPos(Map<String, String> reqData, int connectTimeoutMs) throws Exception {
267
+        int remainingTimeMs = 60*1000;
268
+        long startTimestampMs = 0;
269
+        Map<String, String> lastResult = null;
270
+        Exception lastException = null;
271
+
272
+        while (true) {
273
+            startTimestampMs = WXPayUtil.getCurrentTimestampMs();
274
+            int readTimeoutMs = remainingTimeMs - connectTimeoutMs;
275
+            if (readTimeoutMs > 1000) {
276
+                try {
277
+                    lastResult = this.microPay(reqData, connectTimeoutMs, readTimeoutMs);
278
+                    String returnCode = lastResult.get("return_code");
279
+                    if (returnCode.equals("SUCCESS")) {
280
+                        String resultCode = lastResult.get("result_code");
281
+                        String errCode = lastResult.get("err_code");
282
+                        if (resultCode.equals("SUCCESS")) {
283
+                            break;
284
+                        }
285
+                        else {
286
+                            // 看错误码,若支付结果未知,则重试提交刷卡支付
287
+                            if (errCode.equals("SYSTEMERROR") || errCode.equals("BANKERROR") || errCode.equals("USERPAYING")) {
288
+                                remainingTimeMs = remainingTimeMs - (int)(WXPayUtil.getCurrentTimestampMs() - startTimestampMs);
289
+                                if (remainingTimeMs <= 100) {
290
+                                    break;
291
+                                }
292
+                                else {
293
+                                    WXPayUtil.getLogger().info("microPayWithPos: try micropay again");
294
+                                    if (remainingTimeMs > 5*1000) {
295
+                                        Thread.sleep(5*1000);
296
+                                    }
297
+                                    else {
298
+                                        Thread.sleep(1*1000);
299
+                                    }
300
+                                    continue;
301
+                                }
302
+                            }
303
+                            else {
304
+                                break;
305
+                            }
306
+                        }
307
+                    }
308
+                    else {
309
+                        break;
310
+                    }
311
+                }
312
+                catch (Exception ex) {
313
+                    lastResult = null;
314
+                    lastException = ex;
315
+                }
316
+            }
317
+            else {
318
+                break;
319
+            }
320
+        }
321
+
322
+        if (lastResult == null) {
323
+            throw lastException;
324
+        }
325
+        else {
326
+            return lastResult;
327
+        }
328
+    }
329
+
330
+
331
+
332
+    /**
333
+     * 作用:统一下单<br>
334
+     * 场景:公共号支付、扫码支付、APP支付
335
+     * @param reqData 向wxpay post的请求数据
336
+     * @return API返回数据
337
+     * @throws Exception
338
+     */
339
+    public Map<String, String> unifiedOrder(Map<String, String> reqData) throws Exception {
340
+        return this.unifiedOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
341
+    }
342
+
343
+
344
+    /**
345
+     * 作用:统一下单<br>
346
+     * 场景:公共号支付、扫码支付、APP支付
347
+     * @param reqData 向wxpay post的请求数据
348
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
349
+     * @param readTimeoutMs 读超时时间,单位是毫秒
350
+     * @return API返回数据
351
+     * @throws Exception
352
+     */
353
+    public Map<String, String> unifiedOrder(Map<String, String> reqData,  int connectTimeoutMs, int readTimeoutMs) throws Exception {
354
+        String url;
355
+        if (this.useSandbox) {
356
+            url = WXPayConstants.SANDBOX_UNIFIEDORDER_URL_SUFFIX;
357
+        }
358
+        else {
359
+            url = WXPayConstants.UNIFIEDORDER_URL_SUFFIX;
360
+        }
361
+        if(this.notifyUrl != null) {
362
+            reqData.put("notify_url", this.notifyUrl);
363
+        }
364
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
365
+        return this.processResponseXml(respXml);
366
+    }
367
+
368
+
369
+    /**
370
+     * 作用:查询订单<br>
371
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
372
+     * @param reqData 向wxpay post的请求数据
373
+     * @return API返回数据
374
+     * @throws Exception
375
+     */
376
+    public Map<String, String> orderQuery(Map<String, String> reqData) throws Exception {
377
+        return this.orderQuery(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
378
+    }
379
+
380
+
381
+    /**
382
+     * 作用:查询订单<br>
383
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
384
+     * @param reqData 向wxpay post的请求数据 int
385
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
386
+     * @param readTimeoutMs 读超时时间,单位是毫秒
387
+     * @return API返回数据
388
+     * @throws Exception
389
+     */
390
+    public Map<String, String> orderQuery(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
391
+        String url;
392
+        if (this.useSandbox) {
393
+            url = WXPayConstants.SANDBOX_ORDERQUERY_URL_SUFFIX;
394
+        }
395
+        else {
396
+            url = WXPayConstants.ORDERQUERY_URL_SUFFIX;
397
+        }
398
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
399
+        return this.processResponseXml(respXml);
400
+    }
401
+
402
+
403
+    /**
404
+     * 作用:撤销订单<br>
405
+     * 场景:刷卡支付
406
+     * @param reqData 向wxpay post的请求数据
407
+     * @return API返回数据
408
+     * @throws Exception
409
+     */
410
+    public Map<String, String> reverse(Map<String, String> reqData) throws Exception {
411
+        return this.reverse(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
412
+    }
413
+
414
+
415
+    /**
416
+     * 作用:撤销订单<br>
417
+     * 场景:刷卡支付<br>
418
+     * 其他:需要证书
419
+     * @param reqData 向wxpay post的请求数据
420
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
421
+     * @param readTimeoutMs 读超时时间,单位是毫秒
422
+     * @return API返回数据
423
+     * @throws Exception
424
+     */
425
+    public Map<String, String> reverse(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
426
+        String url;
427
+        if (this.useSandbox) {
428
+            url = WXPayConstants.SANDBOX_REVERSE_URL_SUFFIX;
429
+        }
430
+        else {
431
+            url = WXPayConstants.REVERSE_URL_SUFFIX;
432
+        }
433
+        String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
434
+        return this.processResponseXml(respXml);
435
+    }
436
+
437
+
438
+    /**
439
+     * 作用:关闭订单<br>
440
+     * 场景:公共号支付、扫码支付、APP支付
441
+     * @param reqData 向wxpay post的请求数据
442
+     * @return API返回数据
443
+     * @throws Exception
444
+     */
445
+    public Map<String, String> closeOrder(Map<String, String> reqData) throws Exception {
446
+        return this.closeOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
447
+    }
448
+
449
+
450
+    /**
451
+     * 作用:关闭订单<br>
452
+     * 场景:公共号支付、扫码支付、APP支付
453
+     * @param reqData 向wxpay post的请求数据
454
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
455
+     * @param readTimeoutMs 读超时时间,单位是毫秒
456
+     * @return API返回数据
457
+     * @throws Exception
458
+     */
459
+    public Map<String, String> closeOrder(Map<String, String> reqData,  int connectTimeoutMs, int readTimeoutMs) throws Exception {
460
+        String url;
461
+        if (this.useSandbox) {
462
+            url = WXPayConstants.SANDBOX_CLOSEORDER_URL_SUFFIX;
463
+        }
464
+        else {
465
+            url = WXPayConstants.CLOSEORDER_URL_SUFFIX;
466
+        }
467
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
468
+        return this.processResponseXml(respXml);
469
+    }
470
+
471
+
472
+    /**
473
+     * 作用:申请退款<br>
474
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
475
+     * @param reqData 向wxpay post的请求数据
476
+     * @return API返回数据
477
+     * @throws Exception
478
+     */
479
+    public Map<String, String> refund(Map<String, String> reqData) throws Exception {
480
+        return this.refund(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
481
+    }
482
+
483
+
484
+    /**
485
+     * 作用:申请退款<br>
486
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付<br>
487
+     * 其他:需要证书
488
+     * @param reqData 向wxpay post的请求数据
489
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
490
+     * @param readTimeoutMs 读超时时间,单位是毫秒
491
+     * @return API返回数据
492
+     * @throws Exception
493
+     */
494
+    public Map<String, String> refund(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
495
+        String url;
496
+        if (this.useSandbox) {
497
+            url = WXPayConstants.SANDBOX_REFUND_URL_SUFFIX;
498
+        }
499
+        else {
500
+            url = WXPayConstants.REFUND_URL_SUFFIX;
501
+        }
502
+        String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
503
+        return this.processResponseXml(respXml);
504
+    }
505
+
506
+
507
+    /**
508
+     * 作用:退款查询<br>
509
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
510
+     * @param reqData 向wxpay post的请求数据
511
+     * @return API返回数据
512
+     * @throws Exception
513
+     */
514
+    public Map<String, String> refundQuery(Map<String, String> reqData) throws Exception {
515
+        return this.refundQuery(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
516
+    }
517
+
518
+
519
+    /**
520
+     * 作用:退款查询<br>
521
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
522
+     * @param reqData 向wxpay post的请求数据
523
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
524
+     * @param readTimeoutMs 读超时时间,单位是毫秒
525
+     * @return API返回数据
526
+     * @throws Exception
527
+     */
528
+    public Map<String, String> refundQuery(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
529
+        String url;
530
+        if (this.useSandbox) {
531
+            url = WXPayConstants.SANDBOX_REFUNDQUERY_URL_SUFFIX;
532
+        }
533
+        else {
534
+            url = WXPayConstants.REFUNDQUERY_URL_SUFFIX;
535
+        }
536
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
537
+        return this.processResponseXml(respXml);
538
+    }
539
+
540
+
541
+    /**
542
+     * 作用:对账单下载(成功时返回对账单数据,失败时返回XML格式数据)<br>
543
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
544
+     * @param reqData 向wxpay post的请求数据
545
+     * @return API返回数据
546
+     * @throws Exception
547
+     */
548
+    public Map<String, String> downloadBill(Map<String, String> reqData) throws Exception {
549
+        return this.downloadBill(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
550
+    }
551
+
552
+
553
+    /**
554
+     * 作用:对账单下载<br>
555
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付<br>
556
+     * 其他:无论是否成功都返回Map。若成功,返回的Map中含有return_code、return_msg、data,
557
+     *      其中return_code为`SUCCESS`,data为对账单数据。
558
+     * @param reqData 向wxpay post的请求数据
559
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
560
+     * @param readTimeoutMs 读超时时间,单位是毫秒
561
+     * @return 经过封装的API返回数据
562
+     * @throws Exception
563
+     */
564
+    public Map<String, String> downloadBill(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
565
+        String url;
566
+        if (this.useSandbox) {
567
+            url = WXPayConstants.SANDBOX_DOWNLOADBILL_URL_SUFFIX;
568
+        }
569
+        else {
570
+            url = WXPayConstants.DOWNLOADBILL_URL_SUFFIX;
571
+        }
572
+        String respStr = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs).trim();
573
+        Map<String, String> ret;
574
+        // 出现错误,返回XML数据
575
+        if (respStr.indexOf("<") == 0) {
576
+            ret = WXPayUtil.xmlToMap(respStr);
577
+        }
578
+        else {
579
+            // 正常返回csv数据
580
+            ret = new HashMap<String, String>();
581
+            ret.put("return_code", WXPayConstants.SUCCESS);
582
+            ret.put("return_msg", "ok");
583
+            ret.put("data", respStr);
584
+        }
585
+        return ret;
586
+    }
587
+
588
+
589
+    /**
590
+     * 作用:交易保障<br>
591
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
592
+     * @param reqData 向wxpay post的请求数据
593
+     * @return API返回数据
594
+     * @throws Exception
595
+     */
596
+    public Map<String, String> report(Map<String, String> reqData) throws Exception {
597
+        return this.report(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
598
+    }
599
+
600
+
601
+    /**
602
+     * 作用:交易保障<br>
603
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
604
+     * @param reqData 向wxpay post的请求数据
605
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
606
+     * @param readTimeoutMs 读超时时间,单位是毫秒
607
+     * @return API返回数据
608
+     * @throws Exception
609
+     */
610
+    public Map<String, String> report(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
611
+        String url;
612
+        if (this.useSandbox) {
613
+            url = WXPayConstants.SANDBOX_REPORT_URL_SUFFIX;
614
+        }
615
+        else {
616
+            url = WXPayConstants.REPORT_URL_SUFFIX;
617
+        }
618
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
619
+        return WXPayUtil.xmlToMap(respXml);
620
+    }
621
+
622
+
623
+    /**
624
+     * 作用:转换短链接<br>
625
+     * 场景:刷卡支付、扫码支付
626
+     * @param reqData 向wxpay post的请求数据
627
+     * @return API返回数据
628
+     * @throws Exception
629
+     */
630
+    public Map<String, String> shortUrl(Map<String, String> reqData) throws Exception {
631
+        return this.shortUrl(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
632
+    }
633
+
634
+
635
+    /**
636
+     * 作用:转换短链接<br>
637
+     * 场景:刷卡支付、扫码支付
638
+     * @param reqData 向wxpay post的请求数据
639
+     * @return API返回数据
640
+     * @throws Exception
641
+     */
642
+    public Map<String, String> shortUrl(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
643
+        String url;
644
+        if (this.useSandbox) {
645
+            url = WXPayConstants.SANDBOX_SHORTURL_URL_SUFFIX;
646
+        }
647
+        else {
648
+            url = WXPayConstants.SHORTURL_URL_SUFFIX;
649
+        }
650
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
651
+        return this.processResponseXml(respXml);
652
+    }
653
+
654
+
655
+    /**
656
+     * 作用:授权码查询OPENID接口<br>
657
+     * 场景:刷卡支付
658
+     * @param reqData 向wxpay post的请求数据
659
+     * @return API返回数据
660
+     * @throws Exception
661
+     */
662
+    public Map<String, String> authCodeToOpenid(Map<String, String> reqData) throws Exception {
663
+        return this.authCodeToOpenid(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
664
+    }
665
+
666
+
667
+    /**
668
+     * 作用:授权码查询OPENID接口<br>
669
+     * 场景:刷卡支付
670
+     * @param reqData 向wxpay post的请求数据
671
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
672
+     * @param readTimeoutMs 读超时时间,单位是毫秒
673
+     * @return API返回数据
674
+     * @throws Exception
675
+     */
676
+    public Map<String, String> authCodeToOpenid(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
677
+        String url;
678
+        if (this.useSandbox) {
679
+            url = WXPayConstants.SANDBOX_AUTHCODETOOPENID_URL_SUFFIX;
680
+        }
681
+        else {
682
+            url = WXPayConstants.AUTHCODETOOPENID_URL_SUFFIX;
683
+        }
684
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
685
+        return this.processResponseXml(respXml);
686
+    }
687
+
688
+
689
+} // end class

+ 103
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayConfig.java 查看文件

@@ -0,0 +1,103 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import java.io.InputStream;
4
+
5
+public abstract class WXPayConfig {
6
+
7
+
8
+
9
+    /**
10
+     * 获取 App ID
11
+     *
12
+     * @return App ID
13
+     */
14
+    abstract String getAppID();
15
+
16
+
17
+    /**
18
+     * 获取 Mch ID
19
+     *
20
+     * @return Mch ID
21
+     */
22
+    abstract String getMchID();
23
+
24
+
25
+    /**
26
+     * 获取 API 密钥
27
+     *
28
+     * @return API密钥
29
+     */
30
+    abstract String getKey();
31
+
32
+
33
+    /**
34
+     * 获取商户证书内容
35
+     *
36
+     * @return 商户证书内容
37
+     */
38
+    abstract InputStream getCertStream();
39
+
40
+    /**
41
+     * HTTP(S) 连接超时时间,单位毫秒
42
+     *
43
+     * @return
44
+     */
45
+    public int getHttpConnectTimeoutMs() {
46
+        return 6*1000;
47
+    }
48
+
49
+    /**
50
+     * HTTP(S) 读数据超时时间,单位毫秒
51
+     *
52
+     * @return
53
+     */
54
+    public int getHttpReadTimeoutMs() {
55
+        return 8*1000;
56
+    }
57
+
58
+    /**
59
+     * 获取WXPayDomain, 用于多域名容灾自动切换
60
+     * @return
61
+     */
62
+    abstract IWXPayDomain getWXPayDomain();
63
+
64
+    /**
65
+     * 是否自动上报。
66
+     * 若要关闭自动上报,子类中实现该函数返回 false 即可。
67
+     *
68
+     * @return
69
+     */
70
+    public boolean shouldAutoReport() {
71
+        return true;
72
+    }
73
+
74
+    /**
75
+     * 进行健康上报的线程的数量
76
+     *
77
+     * @return
78
+     */
79
+    public int getReportWorkerNum() {
80
+        return 6;
81
+    }
82
+
83
+
84
+    /**
85
+     * 健康上报缓存消息的最大数量。会有线程去独立上报
86
+     * 粗略计算:加入一条消息200B,10000消息占用空间 2000 KB,约为2MB,可以接受
87
+     *
88
+     * @return
89
+     */
90
+    public int getReportQueueMaxSize() {
91
+        return 10000;
92
+    }
93
+
94
+    /**
95
+     * 批量上报,一次最多上报多个数据
96
+     *
97
+     * @return
98
+     */
99
+    public int getReportBatchSize() {
100
+        return 10;
101
+    }
102
+
103
+}

+ 59
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayConstants.java 查看文件

@@ -0,0 +1,59 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import org.apache.http.client.HttpClient;
4
+
5
+/**
6
+ * 常量
7
+ */
8
+public class WXPayConstants {
9
+
10
+    public enum SignType {
11
+        MD5, HMACSHA256
12
+    }
13
+
14
+    public static final String DOMAIN_API = "api.mch.weixin.qq.com";
15
+    public static final String DOMAIN_API2 = "api2.mch.weixin.qq.com";
16
+    public static final String DOMAIN_APIHK = "apihk.mch.weixin.qq.com";
17
+    public static final String DOMAIN_APIUS = "apius.mch.weixin.qq.com";
18
+
19
+
20
+    public static final String FAIL     = "FAIL";
21
+    public static final String SUCCESS  = "SUCCESS";
22
+    public static final String HMACSHA256 = "HMAC-SHA256";
23
+    public static final String MD5 = "MD5";
24
+
25
+    public static final String FIELD_SIGN = "sign";
26
+    public static final String FIELD_SIGN_TYPE = "sign_type";
27
+
28
+    public static final String WXPAYSDK_VERSION = "WXPaySDK/3.0.9";
29
+    public static final String USER_AGENT = WXPAYSDK_VERSION +
30
+            " (" + System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + System.getProperty("os.version") +
31
+            ") Java/" + System.getProperty("java.version") + " HttpClient/" + HttpClient.class.getPackage().getImplementationVersion();
32
+
33
+    public static final String MICROPAY_URL_SUFFIX     = "/pay/micropay";
34
+    public static final String UNIFIEDORDER_URL_SUFFIX = "/pay/unifiedorder";
35
+    public static final String ORDERQUERY_URL_SUFFIX   = "/pay/orderquery";
36
+    public static final String REVERSE_URL_SUFFIX      = "/secapi/pay/reverse";
37
+    public static final String CLOSEORDER_URL_SUFFIX   = "/pay/closeorder";
38
+    public static final String REFUND_URL_SUFFIX       = "/secapi/pay/refund";
39
+    public static final String REFUNDQUERY_URL_SUFFIX  = "/pay/refundquery";
40
+    public static final String DOWNLOADBILL_URL_SUFFIX = "/pay/downloadbill";
41
+    public static final String REPORT_URL_SUFFIX       = "/payitil/report";
42
+    public static final String SHORTURL_URL_SUFFIX     = "/tools/shorturl";
43
+    public static final String AUTHCODETOOPENID_URL_SUFFIX = "/tools/authcodetoopenid";
44
+
45
+    // sandbox
46
+    public static final String SANDBOX_MICROPAY_URL_SUFFIX     = "/sandboxnew/pay/micropay";
47
+    public static final String SANDBOX_UNIFIEDORDER_URL_SUFFIX = "/sandboxnew/pay/unifiedorder";
48
+    public static final String SANDBOX_ORDERQUERY_URL_SUFFIX   = "/sandboxnew/pay/orderquery";
49
+    public static final String SANDBOX_REVERSE_URL_SUFFIX      = "/sandboxnew/secapi/pay/reverse";
50
+    public static final String SANDBOX_CLOSEORDER_URL_SUFFIX   = "/sandboxnew/pay/closeorder";
51
+    public static final String SANDBOX_REFUND_URL_SUFFIX       = "/sandboxnew/secapi/pay/refund";
52
+    public static final String SANDBOX_REFUNDQUERY_URL_SUFFIX  = "/sandboxnew/pay/refundquery";
53
+    public static final String SANDBOX_DOWNLOADBILL_URL_SUFFIX = "/sandboxnew/pay/downloadbill";
54
+    public static final String SANDBOX_REPORT_URL_SUFFIX       = "/sandboxnew/payitil/report";
55
+    public static final String SANDBOX_SHORTURL_URL_SUFFIX     = "/sandboxnew/tools/shorturl";
56
+    public static final String SANDBOX_AUTHCODETOOPENID_URL_SUFFIX = "/sandboxnew/tools/authcodetoopenid";
57
+
58
+}
59
+

+ 265
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayReport.java 查看文件

@@ -0,0 +1,265 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import org.apache.http.HttpEntity;
4
+import org.apache.http.HttpResponse;
5
+import org.apache.http.client.HttpClient;
6
+import org.apache.http.client.config.RequestConfig;
7
+import org.apache.http.client.methods.HttpPost;
8
+import org.apache.http.config.RegistryBuilder;
9
+import org.apache.http.conn.socket.ConnectionSocketFactory;
10
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
11
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
12
+import org.apache.http.entity.StringEntity;
13
+import org.apache.http.impl.client.HttpClientBuilder;
14
+import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
15
+import org.apache.http.util.EntityUtils;
16
+
17
+import java.util.concurrent.ExecutorService;
18
+import java.util.concurrent.Executors;
19
+import java.util.concurrent.LinkedBlockingQueue;
20
+import java.util.concurrent.ThreadFactory;
21
+
22
+/**
23
+ * 交易保障
24
+ */
25
+public class WXPayReport {
26
+
27
+    public static class ReportInfo {
28
+
29
+        /**
30
+         * 布尔变量使用int。0为false, 1为true。
31
+         */
32
+
33
+        // 基本信息
34
+        private String version = "v1";
35
+        private String sdk = WXPayConstants.WXPAYSDK_VERSION;
36
+        private String uuid;  // 交易的标识
37
+        private long timestamp;   // 上报时的时间戳,单位秒
38
+        private long elapsedTimeMillis; // 耗时,单位 毫秒
39
+
40
+        // 针对主域名
41
+        private String firstDomain;  // 第1次请求的域名
42
+        private boolean primaryDomain; //是否主域名
43
+        private int firstConnectTimeoutMillis;  // 第1次请求设置的连接超时时间,单位 毫秒
44
+        private int firstReadTimeoutMillis;  // 第1次请求设置的读写超时时间,单位 毫秒
45
+        private int firstHasDnsError;  // 第1次请求是否出现dns问题
46
+        private int firstHasConnectTimeout; // 第1次请求是否出现连接超时
47
+        private int firstHasReadTimeout; // 第1次请求是否出现连接超时
48
+
49
+        public ReportInfo(String uuid, long timestamp, long elapsedTimeMillis, String firstDomain, boolean primaryDomain, int firstConnectTimeoutMillis, int firstReadTimeoutMillis, boolean firstHasDnsError, boolean firstHasConnectTimeout, boolean firstHasReadTimeout) {
50
+            this.uuid = uuid;
51
+            this.timestamp = timestamp;
52
+            this.elapsedTimeMillis = elapsedTimeMillis;
53
+            this.firstDomain = firstDomain;
54
+            this.primaryDomain = primaryDomain;
55
+            this.firstConnectTimeoutMillis = firstConnectTimeoutMillis;
56
+            this.firstReadTimeoutMillis = firstReadTimeoutMillis;
57
+            this.firstHasDnsError = firstHasDnsError?1:0;
58
+            this.firstHasConnectTimeout = firstHasConnectTimeout?1:0;
59
+            this.firstHasReadTimeout = firstHasReadTimeout?1:0;
60
+         }
61
+
62
+        @Override
63
+        public String toString() {
64
+            return "ReportInfo{" +
65
+                    "version='" + version + '\'' +
66
+                    ", sdk='" + sdk + '\'' +
67
+                    ", uuid='" + uuid + '\'' +
68
+                    ", timestamp=" + timestamp +
69
+                    ", elapsedTimeMillis=" + elapsedTimeMillis +
70
+                    ", firstDomain='" + firstDomain + '\'' +
71
+                    ", primaryDomain=" + primaryDomain +
72
+                    ", firstConnectTimeoutMillis=" + firstConnectTimeoutMillis +
73
+                    ", firstReadTimeoutMillis=" + firstReadTimeoutMillis +
74
+                    ", firstHasDnsError=" + firstHasDnsError +
75
+                    ", firstHasConnectTimeout=" + firstHasConnectTimeout +
76
+                    ", firstHasReadTimeout=" + firstHasReadTimeout +
77
+                    '}';
78
+        }
79
+
80
+        /**
81
+         * 转换成 csv 格式
82
+         *
83
+         * @return
84
+         */
85
+        public String toLineString(String key) {
86
+            String separator = ",";
87
+            Object[] objects = new Object[] {
88
+                version, sdk, uuid, timestamp, elapsedTimeMillis,
89
+                    firstDomain, primaryDomain, firstConnectTimeoutMillis, firstReadTimeoutMillis,
90
+                    firstHasDnsError, firstHasConnectTimeout, firstHasReadTimeout
91
+            };
92
+            StringBuffer sb = new StringBuffer();
93
+            for(Object obj: objects) {
94
+                sb.append(obj).append(separator);
95
+            }
96
+            try {
97
+                String sign = WXPayUtil.HMACSHA256(sb.toString(), key);
98
+                sb.append(sign);
99
+                return sb.toString();
100
+            }
101
+            catch (Exception ex) {
102
+                return null;
103
+            }
104
+
105
+        }
106
+
107
+    }
108
+
109
+    private static final String REPORT_URL = "http://report.mch.weixin.qq.com/wxpay/report/default";
110
+    // private static final String REPORT_URL = "http://127.0.0.1:5000/test";
111
+
112
+
113
+    private static final int DEFAULT_CONNECT_TIMEOUT_MS = 6*1000;
114
+    private static final int DEFAULT_READ_TIMEOUT_MS = 8*1000;
115
+
116
+    private LinkedBlockingQueue<String> reportMsgQueue = null;
117
+    private WXPayConfig config;
118
+    private ExecutorService executorService;
119
+
120
+    private volatile static WXPayReport INSTANCE;
121
+
122
+    private WXPayReport(final WXPayConfig config) {
123
+        this.config = config;
124
+        reportMsgQueue = new LinkedBlockingQueue<String>(config.getReportQueueMaxSize());
125
+
126
+        // 添加处理线程
127
+        executorService = Executors.newFixedThreadPool(config.getReportWorkerNum(), new ThreadFactory() {
128
+            public Thread newThread(Runnable r) {
129
+                Thread t = Executors.defaultThreadFactory().newThread(r);
130
+                t.setDaemon(true);
131
+                return t;
132
+            }
133
+        });
134
+
135
+        if (config.shouldAutoReport()) {
136
+            WXPayUtil.getLogger().info("report worker num: {}", config.getReportWorkerNum());
137
+            for (int i = 0; i < config.getReportWorkerNum(); ++i) {
138
+                executorService.execute(new Runnable() {
139
+                    public void run() {
140
+                        while (true) {
141
+                            // 先用 take 获取数据
142
+                            try {
143
+                                StringBuffer sb = new StringBuffer();
144
+                                String firstMsg = reportMsgQueue.take();
145
+                                WXPayUtil.getLogger().info("get first report msg: {}", firstMsg);
146
+                                String msg = null;
147
+                                sb.append(firstMsg); //会阻塞至有消息
148
+                                int remainNum = config.getReportBatchSize() - 1;
149
+                                for (int j=0; j<remainNum; ++j) {
150
+                                    WXPayUtil.getLogger().info("try get remain report msg");
151
+                                    // msg = reportMsgQueue.poll();  // 不阻塞了
152
+                                    msg = reportMsgQueue.take();
153
+                                    WXPayUtil.getLogger().info("get remain report msg: {}", msg);
154
+                                    if (msg == null) {
155
+                                        break;
156
+                                    }
157
+                                    else {
158
+                                        sb.append("\n");
159
+                                        sb.append(msg);
160
+                                    }
161
+                                }
162
+                                // 上报
163
+                                WXPayReport.httpRequest(sb.toString(), DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
164
+                            }
165
+                            catch (Exception ex) {
166
+                                WXPayUtil.getLogger().warn("report fail. reason: {}", ex.getMessage());
167
+                            }
168
+                        }
169
+                    }
170
+                });
171
+            }
172
+        }
173
+
174
+    }
175
+
176
+    /**
177
+     * 单例,双重校验,请在 JDK 1.5及更高版本中使用
178
+     *
179
+     * @param config
180
+     * @return
181
+     */
182
+    public static WXPayReport getInstance(WXPayConfig config) {
183
+        if (INSTANCE == null) {
184
+            synchronized (WXPayReport.class) {
185
+                if (INSTANCE == null) {
186
+                    INSTANCE = new WXPayReport(config);
187
+                }
188
+            }
189
+        }
190
+        return INSTANCE;
191
+    }
192
+
193
+    public void report(String uuid, long elapsedTimeMillis,
194
+                       String firstDomain, boolean primaryDomain, int firstConnectTimeoutMillis, int firstReadTimeoutMillis,
195
+                       boolean firstHasDnsError, boolean firstHasConnectTimeout, boolean firstHasReadTimeout) {
196
+        long currentTimestamp = WXPayUtil.getCurrentTimestamp();
197
+        ReportInfo reportInfo = new ReportInfo(uuid, currentTimestamp, elapsedTimeMillis,
198
+                firstDomain, primaryDomain, firstConnectTimeoutMillis, firstReadTimeoutMillis,
199
+                firstHasDnsError, firstHasConnectTimeout, firstHasReadTimeout);
200
+        String data = reportInfo.toLineString(config.getKey());
201
+        WXPayUtil.getLogger().info("report {}", data);
202
+        if (data != null) {
203
+            reportMsgQueue.offer(data);
204
+        }
205
+    }
206
+
207
+
208
+    @Deprecated
209
+    private void reportSync(final String data) throws Exception {
210
+        httpRequest(data, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
211
+    }
212
+
213
+    @Deprecated
214
+    private void reportAsync(final String data) throws Exception {
215
+        new Thread(new Runnable() {
216
+            public void run() {
217
+                try {
218
+                    httpRequest(data, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
219
+                }
220
+                catch (Exception ex) {
221
+                    WXPayUtil.getLogger().warn("report fail. reason: {}", ex.getMessage());
222
+                }
223
+            }
224
+        }).start();
225
+    }
226
+
227
+    /**
228
+     * http 请求
229
+     * @param data
230
+     * @param connectTimeoutMs
231
+     * @param readTimeoutMs
232
+     * @return
233
+     * @throws Exception
234
+     */
235
+    private static String httpRequest(String data, int connectTimeoutMs, int readTimeoutMs) throws Exception{
236
+        BasicHttpClientConnectionManager connManager;
237
+        connManager = new BasicHttpClientConnectionManager(
238
+                RegistryBuilder.<ConnectionSocketFactory>create()
239
+                        .register("http", PlainConnectionSocketFactory.getSocketFactory())
240
+                        .register("https", SSLConnectionSocketFactory.getSocketFactory())
241
+                        .build(),
242
+                null,
243
+                null,
244
+                null
245
+        );
246
+        HttpClient httpClient = HttpClientBuilder.create()
247
+                .setConnectionManager(connManager)
248
+                .build();
249
+
250
+        HttpPost httpPost = new HttpPost(REPORT_URL);
251
+
252
+        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeoutMs).setConnectTimeout(connectTimeoutMs).build();
253
+        httpPost.setConfig(requestConfig);
254
+
255
+        StringEntity postEntity = new StringEntity(data, "UTF-8");
256
+        httpPost.addHeader("Content-Type", "text/xml");
257
+        httpPost.addHeader("User-Agent", WXPayConstants.USER_AGENT);
258
+        httpPost.setEntity(postEntity);
259
+
260
+        HttpResponse httpResponse = httpClient.execute(httpPost);
261
+        HttpEntity httpEntity = httpResponse.getEntity();
262
+        return EntityUtils.toString(httpEntity, "UTF-8");
263
+    }
264
+
265
+}

+ 256
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayRequest.java 查看文件

@@ -0,0 +1,256 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import org.apache.http.HttpEntity;
4
+import org.apache.http.HttpResponse;
5
+import org.apache.http.client.HttpClient;
6
+import org.apache.http.client.config.RequestConfig;
7
+import org.apache.http.client.methods.HttpPost;
8
+import org.apache.http.config.RegistryBuilder;
9
+import org.apache.http.conn.ConnectTimeoutException;
10
+import org.apache.http.conn.socket.ConnectionSocketFactory;
11
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
12
+import org.apache.http.conn.ssl.DefaultHostnameVerifier;
13
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
14
+import org.apache.http.entity.StringEntity;
15
+import org.apache.http.impl.client.HttpClientBuilder;
16
+import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
17
+import org.apache.http.util.EntityUtils;
18
+
19
+import javax.net.ssl.KeyManagerFactory;
20
+import javax.net.ssl.SSLContext;
21
+import java.io.InputStream;
22
+import java.net.SocketTimeoutException;
23
+import java.net.UnknownHostException;
24
+import java.security.KeyStore;
25
+import java.security.SecureRandom;
26
+
27
+public class WXPayRequest {
28
+    private WXPayConfig config;
29
+    public WXPayRequest(WXPayConfig config) throws Exception{
30
+
31
+        this.config = config;
32
+    }
33
+
34
+    /**
35
+     * 请求,只请求一次,不做重试
36
+     * @param domain
37
+     * @param urlSuffix
38
+     * @param uuid
39
+     * @param data
40
+     * @param connectTimeoutMs
41
+     * @param readTimeoutMs
42
+     * @param useCert 是否使用证书,针对退款、撤销等操作
43
+     * @return
44
+     * @throws Exception
45
+     */
46
+    private String requestOnce(final String domain, String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean useCert) throws Exception {
47
+        BasicHttpClientConnectionManager connManager;
48
+        if (useCert) {
49
+            // 证书
50
+            char[] password = config.getMchID().toCharArray();
51
+            InputStream certStream = config.getCertStream();
52
+            KeyStore ks = KeyStore.getInstance("PKCS12");
53
+            ks.load(certStream, password);
54
+
55
+            // 实例化密钥库 & 初始化密钥工厂
56
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
57
+            kmf.init(ks, password);
58
+
59
+            // 创建 SSLContext
60
+            SSLContext sslContext = SSLContext.getInstance("TLS");
61
+            sslContext.init(kmf.getKeyManagers(), null, new SecureRandom());
62
+
63
+            SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
64
+                    sslContext,
65
+                    new String[]{"TLSv1"},
66
+                    null,
67
+                    new DefaultHostnameVerifier());
68
+
69
+            connManager = new BasicHttpClientConnectionManager(
70
+                    RegistryBuilder.<ConnectionSocketFactory>create()
71
+                            .register("http", PlainConnectionSocketFactory.getSocketFactory())
72
+                            .register("https", sslConnectionSocketFactory)
73
+                            .build(),
74
+                    null,
75
+                    null,
76
+                    null
77
+            );
78
+        }
79
+        else {
80
+            connManager = new BasicHttpClientConnectionManager(
81
+                    RegistryBuilder.<ConnectionSocketFactory>create()
82
+                            .register("http", PlainConnectionSocketFactory.getSocketFactory())
83
+                            .register("https", SSLConnectionSocketFactory.getSocketFactory())
84
+                            .build(),
85
+                    null,
86
+                    null,
87
+                    null
88
+            );
89
+        }
90
+
91
+        HttpClient httpClient = HttpClientBuilder.create()
92
+                .setConnectionManager(connManager)
93
+                .build();
94
+
95
+        String url = "https://" + domain + urlSuffix;
96
+        HttpPost httpPost = new HttpPost(url);
97
+
98
+        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeoutMs).setConnectTimeout(connectTimeoutMs).build();
99
+        httpPost.setConfig(requestConfig);
100
+
101
+        StringEntity postEntity = new StringEntity(data, "UTF-8");
102
+        httpPost.addHeader("Content-Type", "text/xml");
103
+        httpPost.addHeader("User-Agent", WXPayConstants.USER_AGENT + " " + config.getMchID());
104
+        httpPost.setEntity(postEntity);
105
+
106
+        HttpResponse httpResponse = httpClient.execute(httpPost);
107
+        HttpEntity httpEntity = httpResponse.getEntity();
108
+        return EntityUtils.toString(httpEntity, "UTF-8");
109
+
110
+    }
111
+
112
+
113
+    private String request(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean useCert, boolean autoReport) throws Exception {
114
+        Exception exception = null;
115
+        long elapsedTimeMillis = 0;
116
+        long startTimestampMs = WXPayUtil.getCurrentTimestampMs();
117
+        boolean firstHasDnsErr = false;
118
+        boolean firstHasConnectTimeout = false;
119
+        boolean firstHasReadTimeout = false;
120
+        IWXPayDomain.DomainInfo domainInfo = config.getWXPayDomain().getDomain(config);
121
+        if(domainInfo == null){
122
+            throw new Exception("WXPayConfig.getWXPayDomain().getDomain() is empty or null");
123
+        }
124
+        try {
125
+            String result = requestOnce(domainInfo.domain, urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, useCert);
126
+            elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs;
127
+            config.getWXPayDomain().report(domainInfo.domain, elapsedTimeMillis, null);
128
+            WXPayReport.getInstance(config).report(
129
+                    uuid,
130
+                    elapsedTimeMillis,
131
+                    domainInfo.domain,
132
+                    domainInfo.primaryDomain,
133
+                    connectTimeoutMs,
134
+                    readTimeoutMs,
135
+                    firstHasDnsErr,
136
+                    firstHasConnectTimeout,
137
+                    firstHasReadTimeout);
138
+            return result;
139
+        }
140
+        catch (UnknownHostException ex) {  // dns 解析错误,或域名不存在
141
+            exception = ex;
142
+            firstHasDnsErr = true;
143
+            elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs;
144
+            WXPayUtil.getLogger().warn("UnknownHostException for domainInfo {}", domainInfo);
145
+            WXPayReport.getInstance(config).report(
146
+                    uuid,
147
+                    elapsedTimeMillis,
148
+                    domainInfo.domain,
149
+                    domainInfo.primaryDomain,
150
+                    connectTimeoutMs,
151
+                    readTimeoutMs,
152
+                    firstHasDnsErr,
153
+                    firstHasConnectTimeout,
154
+                    firstHasReadTimeout
155
+            );
156
+        }
157
+        catch (ConnectTimeoutException ex) {
158
+            exception = ex;
159
+            firstHasConnectTimeout = true;
160
+            elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs;
161
+            WXPayUtil.getLogger().warn("connect timeout happened for domainInfo {}", domainInfo);
162
+            WXPayReport.getInstance(config).report(
163
+                    uuid,
164
+                    elapsedTimeMillis,
165
+                    domainInfo.domain,
166
+                    domainInfo.primaryDomain,
167
+                    connectTimeoutMs,
168
+                    readTimeoutMs,
169
+                    firstHasDnsErr,
170
+                    firstHasConnectTimeout,
171
+                    firstHasReadTimeout
172
+            );
173
+        }
174
+        catch (SocketTimeoutException ex) {
175
+            exception = ex;
176
+            firstHasReadTimeout = true;
177
+            elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs;
178
+            WXPayUtil.getLogger().warn("timeout happened for domainInfo {}", domainInfo);
179
+            WXPayReport.getInstance(config).report(
180
+                    uuid,
181
+                    elapsedTimeMillis,
182
+                    domainInfo.domain,
183
+                    domainInfo.primaryDomain,
184
+                    connectTimeoutMs,
185
+                    readTimeoutMs,
186
+                    firstHasDnsErr,
187
+                    firstHasConnectTimeout,
188
+                    firstHasReadTimeout);
189
+        }
190
+        catch (Exception ex) {
191
+            exception = ex;
192
+            elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs;
193
+            WXPayReport.getInstance(config).report(
194
+                    uuid,
195
+                    elapsedTimeMillis,
196
+                    domainInfo.domain,
197
+                    domainInfo.primaryDomain,
198
+                    connectTimeoutMs,
199
+                    readTimeoutMs,
200
+                    firstHasDnsErr,
201
+                    firstHasConnectTimeout,
202
+                    firstHasReadTimeout);
203
+        }
204
+        config.getWXPayDomain().report(domainInfo.domain, elapsedTimeMillis, exception);
205
+        throw exception;
206
+    }
207
+
208
+
209
+    /**
210
+     * 可重试的,非双向认证的请求
211
+     * @param urlSuffix
212
+     * @param uuid
213
+     * @param data
214
+     * @return
215
+     */
216
+    public String requestWithoutCert(String urlSuffix, String uuid, String data, boolean autoReport) throws Exception {
217
+        return this.request(urlSuffix, uuid, data, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs(), false, autoReport);
218
+    }
219
+
220
+    /**
221
+     * 可重试的,非双向认证的请求
222
+     * @param urlSuffix
223
+     * @param uuid
224
+     * @param data
225
+     * @param connectTimeoutMs
226
+     * @param readTimeoutMs
227
+     * @return
228
+     */
229
+    public String requestWithoutCert(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs,  boolean autoReport) throws Exception {
230
+        return this.request(urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, false, autoReport);
231
+    }
232
+
233
+    /**
234
+     * 可重试的,双向认证的请求
235
+     * @param urlSuffix
236
+     * @param uuid
237
+     * @param data
238
+     * @return
239
+     */
240
+    public String requestWithCert(String urlSuffix, String uuid, String data, boolean autoReport) throws Exception {
241
+        return this.request(urlSuffix, uuid, data, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs(), true, autoReport);
242
+    }
243
+
244
+    /**
245
+     * 可重试的,双向认证的请求
246
+     * @param urlSuffix
247
+     * @param uuid
248
+     * @param data
249
+     * @param connectTimeoutMs
250
+     * @param readTimeoutMs
251
+     * @return
252
+     */
253
+    public String requestWithCert(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean autoReport) throws Exception {
254
+        return this.request(urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, true, autoReport);
255
+    }
256
+}

+ 295
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayUtil.java 查看文件

@@ -0,0 +1,295 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import org.slf4j.Logger;
4
+import org.slf4j.LoggerFactory;
5
+import org.w3c.dom.Node;
6
+import org.w3c.dom.NodeList;
7
+
8
+import javax.crypto.Mac;
9
+import javax.crypto.spec.SecretKeySpec;
10
+import javax.xml.parsers.DocumentBuilder;
11
+import javax.xml.transform.OutputKeys;
12
+import javax.xml.transform.Transformer;
13
+import javax.xml.transform.TransformerFactory;
14
+import javax.xml.transform.dom.DOMSource;
15
+import javax.xml.transform.stream.StreamResult;
16
+import java.io.ByteArrayInputStream;
17
+import java.io.InputStream;
18
+import java.io.StringWriter;
19
+import java.security.MessageDigest;
20
+import java.security.SecureRandom;
21
+import java.util.*;
22
+import com.huiju.estateagents.common.wxpay.WXPayConstants.SignType;
23
+
24
+
25
+public class WXPayUtil {
26
+
27
+    private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
28
+
29
+    private static final Random RANDOM = new SecureRandom();
30
+
31
+    /**
32
+     * XML格式字符串转换为Map
33
+     *
34
+     * @param strXML XML字符串
35
+     * @return XML数据转换后的Map
36
+     * @throws Exception
37
+     */
38
+    public static Map<String, String> xmlToMap(String strXML) throws Exception {
39
+        try {
40
+            Map<String, String> data = new HashMap<String, String>();
41
+            DocumentBuilder documentBuilder = WXPayXmlUtil.newDocumentBuilder();
42
+            InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8"));
43
+            org.w3c.dom.Document doc = documentBuilder.parse(stream);
44
+            doc.getDocumentElement().normalize();
45
+            NodeList nodeList = doc.getDocumentElement().getChildNodes();
46
+            for (int idx = 0; idx < nodeList.getLength(); ++idx) {
47
+                Node node = nodeList.item(idx);
48
+                if (node.getNodeType() == Node.ELEMENT_NODE) {
49
+                    org.w3c.dom.Element element = (org.w3c.dom.Element) node;
50
+                    data.put(element.getNodeName(), element.getTextContent());
51
+                }
52
+            }
53
+            try {
54
+                stream.close();
55
+            } catch (Exception ex) {
56
+                // do nothing
57
+            }
58
+            return data;
59
+        } catch (Exception ex) {
60
+            WXPayUtil.getLogger().warn("Invalid XML, can not convert to map. Error message: {}. XML content: {}", ex.getMessage(), strXML);
61
+            throw ex;
62
+        }
63
+
64
+    }
65
+
66
+    /**
67
+     * 将Map转换为XML格式的字符串
68
+     *
69
+     * @param data Map类型数据
70
+     * @return XML格式的字符串
71
+     * @throws Exception
72
+     */
73
+    public static String mapToXml(Map<String, String> data) throws Exception {
74
+        org.w3c.dom.Document document = WXPayXmlUtil.newDocument();
75
+        org.w3c.dom.Element root = document.createElement("xml");
76
+        document.appendChild(root);
77
+        for (String key: data.keySet()) {
78
+            String value = data.get(key);
79
+            if (value == null) {
80
+                value = "";
81
+            }
82
+            value = value.trim();
83
+            org.w3c.dom.Element filed = document.createElement(key);
84
+            filed.appendChild(document.createTextNode(value));
85
+            root.appendChild(filed);
86
+        }
87
+        TransformerFactory tf = TransformerFactory.newInstance();
88
+        Transformer transformer = tf.newTransformer();
89
+        DOMSource source = new DOMSource(document);
90
+        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
91
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
92
+        StringWriter writer = new StringWriter();
93
+        StreamResult result = new StreamResult(writer);
94
+        transformer.transform(source, result);
95
+        String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", "");
96
+        try {
97
+            writer.close();
98
+        }
99
+        catch (Exception ex) {
100
+        }
101
+        return output;
102
+    }
103
+
104
+
105
+    /**
106
+     * 生成带有 sign 的 XML 格式字符串
107
+     *
108
+     * @param data Map类型数据
109
+     * @param key API密钥
110
+     * @return 含有sign字段的XML
111
+     */
112
+    public static String generateSignedXml(final Map<String, String> data, String key) throws Exception {
113
+        return generateSignedXml(data, key, SignType.MD5);
114
+    }
115
+
116
+    /**
117
+     * 生成带有 sign 的 XML 格式字符串
118
+     *
119
+     * @param data Map类型数据
120
+     * @param key API密钥
121
+     * @param signType 签名类型
122
+     * @return 含有sign字段的XML
123
+     */
124
+    public static String generateSignedXml(final Map<String, String> data, String key, SignType signType) throws Exception {
125
+        String sign = generateSignature(data, key, signType);
126
+        data.put(WXPayConstants.FIELD_SIGN, sign);
127
+        return mapToXml(data);
128
+    }
129
+
130
+
131
+    /**
132
+     * 判断签名是否正确
133
+     *
134
+     * @param xmlStr XML格式数据
135
+     * @param key API密钥
136
+     * @return 签名是否正确
137
+     * @throws Exception
138
+     */
139
+    public static boolean isSignatureValid(String xmlStr, String key) throws Exception {
140
+        Map<String, String> data = xmlToMap(xmlStr);
141
+        if (!data.containsKey(WXPayConstants.FIELD_SIGN) ) {
142
+            return false;
143
+        }
144
+        String sign = data.get(WXPayConstants.FIELD_SIGN);
145
+        return generateSignature(data, key).equals(sign);
146
+    }
147
+
148
+    /**
149
+     * 判断签名是否正确,必须包含sign字段,否则返回false。使用MD5签名。
150
+     *
151
+     * @param data Map类型数据
152
+     * @param key API密钥
153
+     * @return 签名是否正确
154
+     * @throws Exception
155
+     */
156
+    public static boolean isSignatureValid(Map<String, String> data, String key) throws Exception {
157
+        return isSignatureValid(data, key, SignType.MD5);
158
+    }
159
+
160
+    /**
161
+     * 判断签名是否正确,必须包含sign字段,否则返回false。
162
+     *
163
+     * @param data Map类型数据
164
+     * @param key API密钥
165
+     * @param signType 签名方式
166
+     * @return 签名是否正确
167
+     * @throws Exception
168
+     */
169
+    public static boolean isSignatureValid(Map<String, String> data, String key, SignType signType) throws Exception {
170
+        if (!data.containsKey(WXPayConstants.FIELD_SIGN) ) {
171
+            return false;
172
+        }
173
+        String sign = data.get(WXPayConstants.FIELD_SIGN);
174
+        return generateSignature(data, key, signType).equals(sign);
175
+    }
176
+
177
+    /**
178
+     * 生成签名
179
+     *
180
+     * @param data 待签名数据
181
+     * @param key API密钥
182
+     * @return 签名
183
+     */
184
+    public static String generateSignature(final Map<String, String> data, String key) throws Exception {
185
+        return generateSignature(data, key, SignType.MD5);
186
+    }
187
+
188
+    /**
189
+     * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
190
+     *
191
+     * @param data 待签名数据
192
+     * @param key API密钥
193
+     * @param signType 签名方式
194
+     * @return 签名
195
+     */
196
+    public static String generateSignature(final Map<String, String> data, String key, SignType signType) throws Exception {
197
+        Set<String> keySet = data.keySet();
198
+        String[] keyArray = keySet.toArray(new String[keySet.size()]);
199
+        Arrays.sort(keyArray);
200
+        StringBuilder sb = new StringBuilder();
201
+        for (String k : keyArray) {
202
+            if (k.equals(WXPayConstants.FIELD_SIGN)) {
203
+                continue;
204
+            }
205
+            if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名
206
+                sb.append(k).append("=").append(data.get(k).trim()).append("&");
207
+        }
208
+        sb.append("key=").append(key);
209
+        if (SignType.MD5.equals(signType)) {
210
+            return MD5(sb.toString()).toUpperCase();
211
+        }
212
+        else if (SignType.HMACSHA256.equals(signType)) {
213
+            return HMACSHA256(sb.toString(), key);
214
+        }
215
+        else {
216
+            throw new Exception(String.format("Invalid sign_type: %s", signType));
217
+        }
218
+    }
219
+
220
+
221
+    /**
222
+     * 获取随机字符串 Nonce Str
223
+     *
224
+     * @return String 随机字符串
225
+     */
226
+    public static String generateNonceStr() {
227
+        char[] nonceChars = new char[32];
228
+        for (int index = 0; index < nonceChars.length; ++index) {
229
+            nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
230
+        }
231
+        return new String(nonceChars);
232
+    }
233
+
234
+
235
+    /**
236
+     * 生成 MD5
237
+     *
238
+     * @param data 待处理数据
239
+     * @return MD5结果
240
+     */
241
+    public static String MD5(String data) throws Exception {
242
+        MessageDigest md = MessageDigest.getInstance("MD5");
243
+        byte[] array = md.digest(data.getBytes("UTF-8"));
244
+        StringBuilder sb = new StringBuilder();
245
+        for (byte item : array) {
246
+            sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
247
+        }
248
+        return sb.toString().toUpperCase();
249
+    }
250
+
251
+    /**
252
+     * 生成 HMACSHA256
253
+     * @param data 待处理数据
254
+     * @param key 密钥
255
+     * @return 加密结果
256
+     * @throws Exception
257
+     */
258
+    public static String HMACSHA256(String data, String key) throws Exception {
259
+        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
260
+        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
261
+        sha256_HMAC.init(secret_key);
262
+        byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
263
+        StringBuilder sb = new StringBuilder();
264
+        for (byte item : array) {
265
+            sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
266
+        }
267
+        return sb.toString().toUpperCase();
268
+    }
269
+
270
+    /**
271
+     * 日志
272
+     * @return
273
+     */
274
+    public static Logger getLogger() {
275
+        Logger logger = LoggerFactory.getLogger("wxpay java sdk");
276
+        return logger;
277
+    }
278
+
279
+    /**
280
+     * 获取当前时间戳,单位秒
281
+     * @return
282
+     */
283
+    public static long getCurrentTimestamp() {
284
+        return System.currentTimeMillis()/1000;
285
+    }
286
+
287
+    /**
288
+     * 获取当前时间戳,单位毫秒
289
+     * @return
290
+     */
291
+    public static long getCurrentTimestampMs() {
292
+        return System.currentTimeMillis();
293
+    }
294
+
295
+}

+ 30
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayXmlUtil.java 查看文件

@@ -0,0 +1,30 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import org.w3c.dom.Document;
4
+
5
+import javax.xml.XMLConstants;
6
+import javax.xml.parsers.DocumentBuilder;
7
+import javax.xml.parsers.DocumentBuilderFactory;
8
+import javax.xml.parsers.ParserConfigurationException;
9
+
10
+/**
11
+ * 2018/7/3
12
+ */
13
+public final class WXPayXmlUtil {
14
+    public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {
15
+        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
16
+        documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
17
+        documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
18
+        documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
19
+        documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
20
+        documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
21
+        documentBuilderFactory.setXIncludeAware(false);
22
+        documentBuilderFactory.setExpandEntityReferences(false);
23
+
24
+        return documentBuilderFactory.newDocumentBuilder();
25
+    }
26
+
27
+    public static Document newDocument() throws ParserConfigurationException {
28
+        return newDocumentBuilder().newDocument();
29
+    }
30
+}

+ 107
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WxConfig.java 查看文件

@@ -0,0 +1,107 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import java.io.*;
4
+import java.net.HttpURLConnection;
5
+import java.net.URL;
6
+
7
+/**
8
+ * 监控 控制器
9
+ * @author fxf
10
+ */
11
+public class WxConfig extends WXPayConfig {
12
+	private String appid;
13
+
14
+	private String machId;
15
+
16
+	private String key;
17
+
18
+	private byte[] certData;
19
+
20
+	/**
21
+	 * 获取 App ID
22
+	 *
23
+	 * @return App ID
24
+	 */
25
+	@Override
26
+	public String getAppID() {
27
+		//银城慧家
28
+		return appid;
29
+	}
30
+	
31
+	/**
32
+	 * 获取 Mch ID
33
+	 *
34
+	 * @return Mch ID
35
+	 */
36
+	@Override
37
+	public String getMchID() {
38
+		return machId;
39
+	}
40
+	
41
+	/**
42
+	 * 获取 API 密钥
43
+	 *
44
+	 * @return API密钥
45
+	 */
46
+	@Override
47
+	public String getKey() {
48
+		return key;
49
+	}
50
+	
51
+	/**
52
+	 * 获取商户证书内容
53
+	 *
54
+	 * @return 商户证书内容
55
+	 */
56
+	@Override
57
+	public InputStream getCertStream() {
58
+		ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
59
+		return certBis;
60
+
61
+	}
62
+
63
+	public int getHttpConnectTimeoutMs() {
64
+		return 8000;
65
+	}
66
+
67
+	public int getHttpReadTimeoutMs() {
68
+		return 10000;
69
+	}
70
+	
71
+	/**
72
+	 * 获取WXPayDomain, 用于多域名容灾自动切换
73
+	 *
74
+	 * @return
75
+	 */
76
+	@Override
77
+	IWXPayDomain getWXPayDomain() {
78
+		IWXPayDomain iwxPayDomain = new IWXPayDomain() {
79
+			@Override
80
+			public void report(String domain, long elapsedTimeMillis, Exception ex) {
81
+			
82
+			}
83
+			@Override
84
+			public DomainInfo getDomain(WXPayConfig config) {
85
+				return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true);
86
+			}
87
+		};
88
+		return iwxPayDomain;
89
+	}
90
+
91
+	public void setAppid(String appid) {
92
+		this.appid = appid;
93
+	}
94
+
95
+	public void setMachId(String machId) {
96
+		this.machId = machId;
97
+	}
98
+
99
+	public void setKey(String key) {
100
+		this.key = key;
101
+	}
102
+
103
+	public void setCertData(byte[] certData) {
104
+		this.certData = certData;
105
+	}
106
+}
107
+

+ 55
- 1
src/main/java/com/huiju/estateagents/controller/CommonController.java 查看文件

@@ -1,17 +1,21 @@
1 1
 package com.huiju.estateagents.controller;
2 2
 
3 3
 
4
+import com.alibaba.fastjson.JSONObject;
5
+import com.huiju.estateagents.base.BaseController;
4 6
 import com.huiju.estateagents.base.ResponseBean;
5 7
 import com.huiju.estateagents.common.AliOSSUtils;
6 8
 import com.huiju.estateagents.common.CommConstant;
7 9
 import com.huiju.estateagents.common.SMSUtils;
8 10
 import com.huiju.estateagents.common.StringUtils;
11
+import com.huiju.estateagents.service.IMiniAppService;
9 12
 import com.huiju.estateagents.service.ITdMiniappTemplateTypeService;
10 13
 import org.apache.ibatis.annotations.Mapper;
11 14
 import org.springframework.beans.factory.annotation.Autowired;
12 15
 import org.springframework.web.bind.annotation.*;
13 16
 import org.springframework.web.multipart.MultipartFile;
14 17
 
18
+import javax.servlet.http.HttpServletRequest;
15 19
 import java.io.IOException;
16 20
 import java.util.ArrayList;
17 21
 import java.util.HashMap;
@@ -20,13 +24,16 @@ import java.util.Map;
20 24
 
21 25
 @RestController
22 26
 @RequestMapping("/api")
23
-public class CommonController {
27
+public class CommonController extends BaseController {
24 28
     @Autowired
25 29
     SMSUtils smsUtils;
26 30
 
27 31
     @Autowired
28 32
     ITdMiniappTemplateTypeService iTdMiniappTemplateTypeService;
29 33
 
34
+    @Autowired
35
+    IMiniAppService iMiniAppService;
36
+
30 37
     /**
31 38
      * 图片
32 39
      * @param multipartFile
@@ -42,6 +49,43 @@ public class CommonController {
42 49
         }
43 50
     }
44 51
 
52
+    @PostMapping("/admin/qrcode")
53
+    public ResponseBean createQrCode(@RequestBody String jsonStr, HttpServletRequest request) {
54
+        Integer orgId = getOrgId(request);
55
+
56
+        if (StringUtils.isEmpty(jsonStr)) {
57
+            return ResponseBean.error("参数不能为空", ResponseBean.ERROR_ILLEGAL_PARAMS);
58
+        }
59
+
60
+        JSONObject params = JSONObject.parseObject(jsonStr);
61
+        if (params == null) {
62
+            return ResponseBean.error("参数是非法的 JSON 对象", ResponseBean.ERROR_ILLEGAL_PARAMS);
63
+        }
64
+
65
+        String paramStr = params.getString("params");
66
+        if (StringUtils.isEmpty(paramStr)) {
67
+            ResponseBean.error("参数 params 不能为空", ResponseBean.ERROR_ILLEGAL_PARAMS);
68
+        }
69
+
70
+        JSONObject qrObj = JSONObject.parseObject(paramStr);
71
+        if (qrObj == null) {
72
+            return ResponseBean.error("小程序码参数是非法", ResponseBean.ERROR_ILLEGAL_PARAMS);
73
+        }
74
+
75
+        String scene = qrObj.getString("scene");
76
+        String page = qrObj.getString("page");
77
+
78
+        if (StringUtils.isEmpty(scene) || StringUtils.isEmpty(page)) {
79
+            return ResponseBean.error("小程序码参数: scene 或者 page 不能为空", ResponseBean.ERROR_ILLEGAL_PARAMS);
80
+        }
81
+
82
+        if (scene.indexOf("id=") == -1) {
83
+            return ResponseBean.error("小程序码参数: 必须存在 id 参数", ResponseBean.ERROR_ILLEGAL_PARAMS);
84
+        }
85
+
86
+        return iMiniAppService.getOrgQrCode(paramStr, orgId);
87
+    }
88
+
45 89
     /**
46 90
      * 为适应 ANTD 特制的图片上传
47 91
      * plat 中心端传 center 管理端传 admin
@@ -78,6 +122,16 @@ public class CommonController {
78 122
         }
79 123
     }
80 124
 
125
+    @PostMapping("{plat}/check/captcha")
126
+    public ResponseBean sendCaptcha(@RequestParam String tel,@RequestParam String captcha) {
127
+        boolean success = smsUtils.checkCaptcha(tel,captcha);
128
+        if (success) {
129
+            return ResponseBean.success("验证码校验成功");
130
+        } else {
131
+            return ResponseBean.error("验证码校验失败", ResponseBean.ERROR_UNAVAILABLE);
132
+        }
133
+    }
134
+
81 135
     @GetMapping("/center/dict/templateType")
82 136
     public ResponseBean getAllTplTypes() {
83 137
         return ResponseBean.success(iTdMiniappTemplateTypeService.getAllTypes());

+ 70
- 60
src/main/java/com/huiju/estateagents/controller/MiniAppController.java 查看文件

@@ -27,6 +27,8 @@ import net.bytebuddy.asm.Advice;
27 27
 import org.apache.commons.collections.CollectionUtils;
28 28
 import org.apache.commons.lang3.StringUtils;
29 29
 import org.apache.http.HttpStatus;
30
+import org.slf4j.Logger;
31
+import org.slf4j.LoggerFactory;
30 32
 import org.springframework.beans.factory.annotation.Autowired;
31 33
 import org.springframework.context.ApplicationContext;
32 34
 import org.springframework.web.bind.annotation.*;
@@ -38,10 +40,15 @@ import java.util.Collections;
38 40
 import java.util.HashMap;
39 41
 import java.util.List;
40 42
 import java.util.Map;
43
+import java.util.concurrent.ExecutorService;
44
+import java.util.concurrent.Executors;
41 45
 
42 46
 @RestController
43 47
 @RequestMapping("/api/wx")
44 48
 public class MiniAppController extends BaseController {
49
+
50
+    private Logger logger = LoggerFactory.getLogger(MiniAppController.class);
51
+
45 52
     @Autowired
46 53
     private ITaPersonService taPersonService;
47 54
 
@@ -70,7 +77,7 @@ public class MiniAppController extends BaseController {
70 77
     private ITaBuildingDynamicService buildingDynamicService;
71 78
 
72 79
     @Autowired
73
-    private  ITaNewsService newsService;
80
+    private ITaNewsService newsService;
74 81
 
75 82
     @Autowired
76 83
     private ITaUserService userService;
@@ -101,15 +108,16 @@ public class MiniAppController extends BaseController {
101 108
      */
102 109
     @GetMapping(value = "/", produces = "text/plain;charset=utf-8")
103 110
     public String access(@RequestParam(name = "signature", required = false) String signature,
104
-                          @RequestParam(name = "timestamp", required = false) String timestamp,
105
-                          @RequestParam(name = "nonce", required = false) String nonce,
106
-                          @RequestParam(name = "echostr", required = false) String echostr) {
111
+                         @RequestParam(name = "timestamp", required = false) String timestamp,
112
+                         @RequestParam(name = "nonce", required = false) String nonce,
113
+                         @RequestParam(name = "echostr", required = false) String echostr) {
107 114
         return echostr;
108 115
     }
109 116
 
110 117
 
111 118
     /**
112 119
      * 小程序数据预拉取 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/pre-fetch.html
120
+     *
113 121
      * @param appid
114 122
      * @param timestamp
115 123
      * @param token
@@ -153,7 +161,7 @@ public class MiniAppController extends BaseController {
153 161
         queryExt.eq("status", CommConstant.STATUS_NORMAL);
154 162
         List<TaCustomImg> taCustomImg = iTaCustomImgService.list(queryExt);
155 163
 
156
-        return ResponseBean.success(new HashMap<String, Object>(){{
164
+        return ResponseBean.success(new HashMap<String, Object>() {{
157 165
             put("miniapp", taMiniapp);
158 166
             put("org", taOrg);
159 167
             put("cityList", taOrgCityList);
@@ -175,7 +183,7 @@ public class MiniAppController extends BaseController {
175 183
             HttpServletRequest request) {
176 184
         String appid = request.getHeader("appid");
177 185
 
178
-         if (StringUtils.isBlank(code)) {
186
+        if (StringUtils.isBlank(code)) {
179 187
             return ResponseBean.error("参数 code 不能为空", ResponseBean.ERROR_ILLEGAL_PARAMS);
180 188
         }
181 189
         if (StringUtils.isBlank(appid)) {
@@ -191,18 +199,18 @@ public class MiniAppController extends BaseController {
191 199
         try {
192 200
             TaMiniapp miniapp = taMiniappService.getById(appid);
193 201
             WxMaJscode2SessionResult session = miniAppService.getSessionInfo(code, appid);
194
-            Integer orgId =miniapp.getOrgId();
202
+            Integer orgId = miniapp.getOrgId();
195 203
             Map<String, Object> miniResp = new HashMap<>();
196 204
             miniResp.put("openid", session.getOpenid());
197 205
             miniResp.put("sessionKey", session.getSessionKey());
198 206
             miniResp.put("unionid", session.getUnionid());
199
-            miniResp.put("name",miniapp.getName());
207
+            miniResp.put("name", miniapp.getName());
200 208
             miniResp.put("tpls", miniAppService.getTpls(appid));
201 209
 
202 210
             //如果是分享进来且没有进入过小程序,给分享人发放积分
203 211
             QueryWrapper<TaPerson> personQueryWrapper = new QueryWrapper<>();
204
-            personQueryWrapper.eq("mini_openid",session.getOpenid());
205
-            personQueryWrapper.eq("org_id",orgId);
212
+            personQueryWrapper.eq("mini_openid", session.getOpenid());
213
+            personQueryWrapper.eq("org_id", orgId);
206 214
             int count = taPersonService.count(personQueryWrapper);
207 215
 
208 216
             TaPerson taPerson = taPersonService.newPersonByOpenid(session.getOpenid(), orgId);
@@ -210,36 +218,36 @@ public class MiniAppController extends BaseController {
210 218
                 return ResponseBean.error("发生未知错误", ResponseBean.ERROR_UNAVAILABLE);
211 219
             }
212 220
 
213
-            if(null!=from&&from.contains("share") && !com.huiju.estateagents.common.StringUtils.isEmpty(recommender) && count>0){
221
+            if (null != from && from.contains("share") && !com.huiju.estateagents.common.StringUtils.isEmpty(recommender) && count > 0) {
214 222
                 // 校验是否点击过此人的分享
215
-                boolean checkPoint = checkSharePersonFrom(from,taPerson.getPersonId(),targetId,orgId);
216
-                if (checkPoint){
223
+                boolean checkPoint = checkSharePersonFrom(from, taPerson.getPersonId(), targetId, orgId);
224
+                if (checkPoint) {
217 225
                     // 添加积分
218 226
                     applicationContext.publishEvent(new EventBus(recommender, EventBus.EventType.SharePosterAll, orgId));
219 227
                 }
220 228
             }
221 229
 
222 230
 
223
-            Map<Object,Object> map = new HashMap<>();
224
-            map.put("openId",session.getOpenid());
225
-            map.put("orgId",orgId);
226
-            map.put("personId",taPerson.getPersonId());
231
+            Map<Object, Object> map = new HashMap<>();
232
+            map.put("openId", session.getOpenid());
233
+            map.put("orgId", orgId);
234
+            map.put("personId", taPerson.getPersonId());
227 235
             miniResp.put("token", JWTUtils.newTokenByMap(map));
228
-            if(StringUtils.isEmpty(taPerson.getFromCode())){
236
+            if (StringUtils.isEmpty(taPerson.getFromCode())) {
229 237
                 taPerson.setFromCode(from);
230 238
             }
231
-            if(StringUtils.isEmpty(taPerson.getRecommendPerson())){
239
+            if (StringUtils.isEmpty(taPerson.getRecommendPerson())) {
232 240
                 taPerson.setRecommendPerson(recommender);
233 241
                 TaPerson type = taPersonService.getById(recommender);
234
-                if(null != type){
235
-                    if(!StringUtils.isEmpty(type.getPersonType())){
242
+                if (null != type) {
243
+                    if (!StringUtils.isEmpty(type.getPersonType())) {
236 244
                         taPerson.setRecommendPersonType(type.getPersonType());
237 245
                     }
238 246
                 }
239 247
             }
240 248
             taPerson.setMiniappId(appid);
241 249
             taPersonService.updateById(taPerson);
242
-            if(StringUtils.isNotBlank(from) &&StringUtils.isNotBlank(recommender) &&StringUtils.isNotBlank(targetId)){
250
+            if (StringUtils.isNotBlank(from) && StringUtils.isNotBlank(recommender) && StringUtils.isNotBlank(targetId)) {
243 251
                 TaSharePersonFrom taSharePersonFrom = new TaSharePersonFrom();
244 252
                 TaPerson recommenderPerson = taPersonService.getById(recommender);
245 253
                 taSharePersonFrom.setCreateDate(LocalDateTime.now());
@@ -248,43 +256,43 @@ public class MiniAppController extends BaseController {
248 256
                 taSharePersonFrom.setSharePersonType(recommenderPerson.getPersonType());
249 257
                 taSharePersonFrom.setTargetId(targetId);
250 258
                 taSharePersonFrom.setTargetType(from);
251
-                if(CommConstant.PERSON_REALTY_CONSULTANT.equals(recommenderPerson.getPersonType())){
259
+                if (CommConstant.PERSON_REALTY_CONSULTANT.equals(recommenderPerson.getPersonType())) {
252 260
                     taSharePersonFrom.setSharePerson(recommenderPerson.getUserId().toString());
253
-                }else {
261
+                } else {
254 262
                     taSharePersonFrom.setSharePerson(recommenderPerson.getPersonId());
255 263
                 }
256 264
                 QueryWrapper<TaSharePersonFrom> sharePersonFromQueryWrapper = new QueryWrapper<>();
257
-                sharePersonFromQueryWrapper.eq("person_id",taPerson.getPersonId());
258
-                if(from.equals("dynamic_share")){ // activity_share
265
+                sharePersonFromQueryWrapper.eq("person_id", taPerson.getPersonId());
266
+                if (from.equals("dynamic_share")) { // activity_share
259 267
                     //产品不认了
260 268
                     taSharePersonFrom.setStatus(CommConstant.STATUS_NORMAL);
261 269
                     TaBuildingDynamic buildingDynamic = buildingDynamicService.getById(targetId);
262 270
                     taSharePersonFrom.setBuildingId(buildingDynamic.getBuildingId());
263
-                    sharePersonFromQueryWrapper.eq("building_id",buildingDynamic.getBuildingId());
264
-                }else {
271
+                    sharePersonFromQueryWrapper.eq("building_id", buildingDynamic.getBuildingId());
272
+                } else {
265 273
                     taSharePersonFrom.setStatus(CommConstant.STATUS_NORMAL);
266 274
                 }
267
-                if (from.contains("card")){
275
+                if (from.contains("card")) {
268 276
                     // 因为targetId 是 personId ,需要查询出 userId
269 277
                     TaPerson person = taPersonService.getById(targetId);
270 278
 
271 279
                     QueryWrapper<TaPersonBuilding> personBuildingQueryWrapper = new QueryWrapper<>();
272
-                    personBuildingQueryWrapper.eq("user_id",person.getUserId());
280
+                    personBuildingQueryWrapper.eq("user_id", person.getUserId());
273 281
                     TaPersonBuilding personBuilding = personBuildingService.getOne(personBuildingQueryWrapper);
274 282
                     taSharePersonFrom.setBuildingId(personBuilding.getBuildingId());
275
-                    sharePersonFromQueryWrapper.eq("building_id",personBuilding.getBuildingId());
276
-                }else if (from.contains("news")){
283
+                    sharePersonFromQueryWrapper.eq("building_id", personBuilding.getBuildingId());
284
+                } else if (from.contains("news")) {
277 285
                     TaNews news = newsService.getById(targetId);
278 286
                     taSharePersonFrom.setBuildingId(news.getBuildingId());
279
-                    sharePersonFromQueryWrapper.eq("building_id",news.getBuildingId());
280
-                }else if (from.contains("building")){
287
+                    sharePersonFromQueryWrapper.eq("building_id", news.getBuildingId());
288
+                } else if (from.contains("building")) {
281 289
                     taSharePersonFrom.setBuildingId(targetId);
282
-                    sharePersonFromQueryWrapper.eq("building_id",targetId);
290
+                    sharePersonFromQueryWrapper.eq("building_id", targetId);
283 291
                 }
284 292
                 Integer isFirstTime = taSharePersonFromService.count(sharePersonFromQueryWrapper);
285
-                if(isFirstTime>0){
293
+                if (isFirstTime > 0) {
286 294
                     taSharePersonFrom.setIsFirstTime(false);
287
-                }else {
295
+                } else {
288 296
                     taSharePersonFrom.setIsFirstTime(true);
289 297
                 }
290 298
                 taSharePersonFromService.save(taSharePersonFrom);
@@ -296,10 +304,10 @@ public class MiniAppController extends BaseController {
296 304
             Map<String, Object> extraInfo = taPersonService.getExtraInfo(taPerson.getPersonId());
297 305
             // 所有人员都返回 org yansen 2019-11-13 19:56:18
298 306
 //            if (CommConstant.PERSON_REALTY_CONSULTANT.equals(taPerson.getPersonType())){
299
-                QueryWrapper<TaOrg>orgQueryWrapper = new QueryWrapper<>();
300
-                orgQueryWrapper.eq("org_id", orgId);
301
-                TaOrg org = taOrgService.getOne(orgQueryWrapper);
302
-                taPerson.setOrg(org);
307
+            QueryWrapper<TaOrg> orgQueryWrapper = new QueryWrapper<>();
308
+            orgQueryWrapper.eq("org_id", orgId);
309
+            TaOrg org = taOrgService.getOne(orgQueryWrapper);
310
+            taPerson.setOrg(org);
303 311
 //            }
304 312
             Map<String, Object> result = new HashMap<>();
305 313
             result.put("miniApp", miniResp);
@@ -311,8 +319,8 @@ public class MiniAppController extends BaseController {
311 319
             QueryWrapper<TaCustomImg> queryWrapper = new QueryWrapper<>();
312 320
             queryWrapper.eq("org_id", orgId);
313 321
             queryWrapper.eq("img_type", "auth");
314
-            List<TaCustomImg>  taCustomImgs = iTaCustomImgService.list(queryWrapper);
315
-            result.put("avatarAuth", CollectionUtils.isEmpty(taCustomImgs) ? false : "1".equals(taCustomImgs.get(0).getImgUrl()) ? true: false);
322
+            List<TaCustomImg> taCustomImgs = iTaCustomImgService.list(queryWrapper);
323
+            result.put("avatarAuth", CollectionUtils.isEmpty(taCustomImgs) ? false : "1".equals(taCustomImgs.get(0).getImgUrl()) ? true : false);
316 324
 
317 325
             String token = (String) miniResp.get("token");
318 326
             sysTokenService.saveToken(token);
@@ -321,11 +329,11 @@ public class MiniAppController extends BaseController {
321 329
             QueryWrapper<TdPointsRules> tdPointsRulesQueryWrapper = new QueryWrapper<>();
322 330
             tdPointsRulesQueryWrapper.eq("org_id", orgId);
323 331
             List<TdPointsRules> rulesPointList = iTdPointsRulesService.list(tdPointsRulesQueryWrapper);
324
-            result.put("rulesPointList",rulesPointList);
332
+            result.put("rulesPointList", rulesPointList);
325 333
 
326 334
             // 定位城市
327 335
             String location = null == lon ? null : lon + "," + lat;
328
-            TdCity tdCity = iTdCityService.getLocationCity(location, orgId);
336
+            TdCity tdCity = iTdCityService.getLocationCity(location, orgId, taPerson.getPersonId());
329 337
             result.put("city", tdCity);
330 338
 
331 339
             return ResponseBean.success(result);
@@ -354,13 +362,13 @@ public class MiniAppController extends BaseController {
354 362
     }
355 363
 
356 364
     private boolean checkSharePersonFrom(String from, String personId, String targetId, Integer orgId) {
357
-        QueryWrapper<TaSharePersonFrom> queryWrapper =  new QueryWrapper<>();
358
-        queryWrapper.eq("target_type",from);
359
-        queryWrapper.eq("person_id",personId);
360
-        queryWrapper.eq("target_id",targetId);
361
-        queryWrapper.eq("org_id",orgId);
365
+        QueryWrapper<TaSharePersonFrom> queryWrapper = new QueryWrapper<>();
366
+        queryWrapper.eq("target_type", from);
367
+        queryWrapper.eq("person_id", personId);
368
+        queryWrapper.eq("target_id", targetId);
369
+        queryWrapper.eq("org_id", orgId);
362 370
         List<TaSharePersonFrom> list = taSharePersonFromService.list(queryWrapper);
363
-        if (list.size() > 0){
371
+        if (list.size() > 0) {
364 372
             return false;
365 373
         }
366 374
         return true;
@@ -432,7 +440,7 @@ public class MiniAppController extends BaseController {
432 440
         Map<String, Object> result = new HashMap<>();
433 441
         result.put("person", person);
434 442
         result.put("extraInfo", extraInfo);
435
-        result.put("miniApp",miniapp);
443
+        result.put("miniApp", miniapp);
436 444
 
437 445
         return ResponseBean.success(result);
438 446
     }
@@ -458,18 +466,18 @@ public class MiniAppController extends BaseController {
458 466
         // 更新用户绑定手机
459 467
         String openid = getOpenId(request);
460 468
         Integer orgId = getOrgId(request);
461
-        taPersonService.updatePersonPhone(openid, phoneNoInfo.getPhoneNumber(),orgId);
469
+        taPersonService.updatePersonPhone(openid, phoneNoInfo.getPhoneNumber(), orgId);
462 470
         List<TaPerson> taPersons = taPersonService.getPersonsByOpenId(openid);
463 471
         if (null == taPersons || taPersons.size() != 1) {
464 472
             return ResponseBean.error("验证人员信息失败", ResponseBean.ERROR_UNAVAILABLE);
465 473
         }
466 474
         TaPerson person = taPersons.get(0);
467
-        QueryWrapper<TaRecommendCustomer> cus= new QueryWrapper<>();
468
-        cus.eq("phone",phoneNoInfo.getPhoneNumber());
475
+        QueryWrapper<TaRecommendCustomer> cus = new QueryWrapper<>();
476
+        cus.eq("phone", phoneNoInfo.getPhoneNumber());
469 477
         cus.orderByDesc("create_date");
470 478
         List<TaRecommendCustomer> customer = taRecommendCustomerService.list(cus);
471
-        if (customer.size()>0){
472
-            for(int i =0;i<customer.size();i++){
479
+        if (customer.size() > 0) {
480
+            for (int i = 0; i < customer.size(); i++) {
473 481
                 customer.get(i).setPersonId(person.getPersonId());
474 482
                 customer.get(i).setPicture(person.getAvatarurl());
475 483
                 customer.get(i).setCountry(person.getCountry());
@@ -478,7 +486,7 @@ public class MiniAppController extends BaseController {
478 486
             }
479 487
 //            TaRecommendCustomer customers = customer.get(0);
480 488
 
481
-            if(!taRecommendCustomerService.updateBatchById(customer)){
489
+            if (!taRecommendCustomerService.updateBatchById(customer)) {
482 490
                 return ResponseBean.error("验证人员信息失败", ResponseBean.ERROR_UNAVAILABLE);
483 491
             }
484 492
 //            if(null != customers.getRecommendPerson()&&!StringUtils.isEmpty(customers.getRecommendPerson())&& StringUtils.isEmpty(person.getRecommendPerson())){
@@ -516,6 +524,7 @@ public class MiniAppController extends BaseController {
516 524
 
517 525
     /**
518 526
      * 生成二维码
527
+     *
519 528
      * @return
520 529
      */
521 530
     @PostMapping("/qrcode")
@@ -526,6 +535,7 @@ public class MiniAppController extends BaseController {
526 535
 
527 536
     /**
528 537
      * 获取二维码参数
538
+     *
529 539
      * @param serialNo
530 540
      * @return
531 541
      */
@@ -545,10 +555,10 @@ public class MiniAppController extends BaseController {
545 555
         }
546 556
     }
547 557
 
548
-    public Integer getOrgId(HttpServletRequest request){
558
+    public Integer getOrgId(HttpServletRequest request) {
549 559
 
550 560
         Map map = JWTUtils.getUserIdAndOrgId(request);
551
-        if (null != map && null != map.get("orgId")){
561
+        if (null != map && null != map.get("orgId")) {
552 562
             return Integer.valueOf(map.get("orgId").toString());
553 563
         }
554 564
 

+ 2
- 1
src/main/java/com/huiju/estateagents/controller/StatisticalController.java 查看文件

@@ -160,7 +160,8 @@ public class StatisticalController extends BaseController {
160 160
                                             @RequestParam(value = "pageSize", defaultValue = "2") Integer pageSize,
161 161
                                             @RequestParam(value = "buildingId", required = false) String buildingId,
162 162
                                             HttpServletRequest request) {
163
-        return iStatisticalService.selectIntentionUser(pageNum, pageSize, getOrgId(request), buildingId);
163
+        Integer userId = getUserId(request);
164
+        return iStatisticalService.selectIntentionUser(pageNum, pageSize, getOrgId(request), buildingId, userId);
164 165
     }
165 166
 
166 167
     /**

+ 231
- 0
src/main/java/com/huiju/estateagents/controller/SysAdvancedConfigController.java 查看文件

@@ -0,0 +1,231 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
+import com.huiju.estateagents.base.BaseController;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.entity.SysAdvancedConfig;
10
+import com.huiju.estateagents.entity.TaAdvancedController;
11
+import com.huiju.estateagents.entity.TaMiniapp;
12
+import com.huiju.estateagents.entity.TaWxPayConfig;
13
+import com.huiju.estateagents.service.ISysAdvancedConfigService;
14
+import com.huiju.estateagents.service.ITaAdvancedControllerService;
15
+import com.huiju.estateagents.service.ITaMiniappService;
16
+import com.huiju.estateagents.service.ITaWxPayConfigService;
17
+import org.slf4j.Logger;
18
+import org.slf4j.LoggerFactory;
19
+import org.springframework.beans.factory.annotation.Autowired;
20
+import org.springframework.web.bind.annotation.*;
21
+
22
+import java.time.LocalDateTime;
23
+import java.util.HashMap;
24
+import java.util.List;
25
+import java.util.Map;
26
+
27
+/**
28
+ * <p>
29
+    * 高级配置基础表  前端控制器
30
+    * </p>
31
+ *
32
+ * @author jobob
33
+ * @since 2020-02-26
34
+ */
35
+@RestController
36
+@RequestMapping("/api")
37
+public class SysAdvancedConfigController extends BaseController {
38
+
39
+    private final Logger logger = LoggerFactory.getLogger(SysAdvancedConfigController.class);
40
+
41
+    @Autowired
42
+    public ISysAdvancedConfigService iSysAdvancedConfigService;
43
+
44
+    @Autowired
45
+    public ITaWxPayConfigService taWxPayConfigService;
46
+
47
+    @Autowired
48
+    public ITaAdvancedControllerService taAdvancedControllerService;
49
+
50
+    @Autowired
51
+    public ITaMiniappService taMiniappService;
52
+    /**
53
+     * 分页查询列表
54
+     * @param pageNum
55
+     * @param pageSize
56
+     * @return
57
+     */
58
+    @RequestMapping(value="/sysAdvancedConfig",method= RequestMethod.GET)
59
+    public ResponseBean sysAdvancedConfigList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
60
+                                              @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
61
+        ResponseBean responseBean = new ResponseBean();
62
+        try {
63
+            //使用分页插件
64
+		    IPage<SysAdvancedConfig> pg = new Page<>(pageNum, pageSize);
65
+            QueryWrapper<SysAdvancedConfig> queryWrapper = new QueryWrapper<>();
66
+            queryWrapper.orderByDesc("create_date");
67
+
68
+            IPage<SysAdvancedConfig> result = iSysAdvancedConfigService.page(pg, queryWrapper);
69
+            responseBean.addSuccess(result);
70
+        }catch (Exception e){
71
+            e.printStackTrace();
72
+            logger.error("sysAdvancedConfigList -=- {}",e.toString());
73
+            responseBean.addError(e.getMessage());
74
+        }
75
+        return responseBean;
76
+    }
77
+
78
+    /**
79
+     * 保存对象
80
+     * @param sysAdvancedConfig 实体对象
81
+     * @return
82
+     */
83
+    @RequestMapping(value="/sysAdvancedConfig",method= RequestMethod.POST)
84
+    public ResponseBean sysAdvancedConfigAdd(@RequestBody SysAdvancedConfig sysAdvancedConfig){
85
+        ResponseBean responseBean = new ResponseBean();
86
+        try {
87
+            if (iSysAdvancedConfigService.save(sysAdvancedConfig)){
88
+                responseBean.addSuccess(sysAdvancedConfig);
89
+            }else {
90
+                responseBean.addError("fail");
91
+            }
92
+        }catch (Exception e){
93
+            e.printStackTrace();
94
+            logger.error("sysAdvancedConfigAdd -=- {}",e.toString());
95
+            responseBean.addError(e.getMessage());
96
+        }
97
+        return responseBean;
98
+    }
99
+
100
+    /**
101
+     * 根据id删除对象
102
+     * @param id  实体ID
103
+     */
104
+    @ResponseBody
105
+    @RequestMapping(value="/sysAdvancedConfig/{id}", method= RequestMethod.DELETE)
106
+    public ResponseBean sysAdvancedConfigDelete(@PathVariable Integer id){
107
+        ResponseBean responseBean = new ResponseBean();
108
+        try {
109
+            if(iSysAdvancedConfigService.removeById(id)){
110
+                responseBean.addSuccess("success");
111
+            }else {
112
+                responseBean.addError("fail");
113
+            }
114
+        }catch (Exception e){
115
+            e.printStackTrace();
116
+            logger.error("sysAdvancedConfigDelete -=- {}",e.toString());
117
+            responseBean.addError(e.getMessage());
118
+        }
119
+        return responseBean;
120
+    }
121
+
122
+    /**
123
+     * 修改对象
124
+     * @param id  实体ID
125
+     * @param sysAdvancedConfig 实体对象
126
+     * @return
127
+     */
128
+    @RequestMapping(value="/sysAdvancedConfig/{id}",method= RequestMethod.PUT)
129
+    public ResponseBean sysAdvancedConfigUpdate(@PathVariable Integer id,
130
+                                        @RequestBody SysAdvancedConfig sysAdvancedConfig){
131
+        ResponseBean responseBean = new ResponseBean();
132
+        try {
133
+            if (iSysAdvancedConfigService.updateById(sysAdvancedConfig)){
134
+                responseBean.addSuccess(sysAdvancedConfig);
135
+            }else {
136
+                responseBean.addError("fail");
137
+            }
138
+        }catch (Exception e){
139
+            e.printStackTrace();
140
+            logger.error("sysAdvancedConfigUpdate -=- {}",e.toString());
141
+            responseBean.addError(e.getMessage());
142
+        }
143
+        return responseBean;
144
+    }
145
+
146
+    /**
147
+     * 根据id查询对象
148
+     * @param id  实体ID
149
+     */
150
+    @RequestMapping(value="/sysAdvancedConfig/{id}",method= RequestMethod.GET)
151
+    public ResponseBean sysAdvancedConfigGet(@PathVariable Integer id){
152
+        ResponseBean responseBean = new ResponseBean();
153
+        try {
154
+            responseBean.addSuccess(iSysAdvancedConfigService.getById(id));
155
+        }catch (Exception e){
156
+            e.printStackTrace();
157
+            logger.error("sysAdvancedConfigDelete -=- {}",e.toString());
158
+            responseBean.addError(e.getMessage());
159
+        }
160
+        return responseBean;
161
+    }
162
+
163
+    /**
164
+     * 根据id查询对象
165
+     * @param orgId  小程序的orgId
166
+     */
167
+    @RequestMapping(value="/center/sysAdvancedConfig/list",method= RequestMethod.GET)
168
+    public ResponseBean sysAdvancedConfigList(@RequestParam Integer orgId){
169
+        ResponseBean responseBean = new ResponseBean();
170
+        try {
171
+            Map<String,Object> map = new HashMap<>();
172
+            List<SysAdvancedConfig> sysAdvancedConfigList = iSysAdvancedConfigService.getSysAdvancedConfigList(orgId);
173
+            TaWxPayConfig taWxPayConfig = taWxPayConfigService.getOne(new QueryWrapper<TaWxPayConfig>().eq("org_id", orgId));
174
+            map.put("list",sysAdvancedConfigList);
175
+            map.put("taWxPayConfig",taWxPayConfig);
176
+            responseBean.addSuccess(map);
177
+        }catch (Exception e){
178
+            e.printStackTrace();
179
+            logger.error("sysAdvancedConfigDelete -=- {}",e.toString());
180
+            responseBean.addError(e.getMessage());
181
+        }
182
+        return responseBean;
183
+    }
184
+
185
+
186
+    /**
187
+     * 修改高级配置
188
+     * @param data
189
+     * @return
190
+     */
191
+    @PostMapping(value = "/center/sysAdvancedConfig/save")
192
+    public ResponseBean saveAdvancedConfig(@RequestBody Map<String, Object> data) {
193
+        Integer orgId = (Integer) data.get("orgId");
194
+        List<Integer> advancedConfigIds = (List<Integer>) data.get("menus");
195
+        Map<String,Object> wxPayData = (Map<String, Object>) data.get("wxPayData");
196
+
197
+        try {
198
+            if (advancedConfigIds.size() > 0){
199
+                //插入高级控制表先删除后添加
200
+                taAdvancedControllerService.remove(new QueryWrapper<TaAdvancedController>().eq("org_id",orgId));
201
+                advancedConfigIds.forEach(e -> {
202
+                    TaAdvancedController taAdvancedController = new TaAdvancedController();
203
+                    taAdvancedController.setAdvancedConfigId(e);
204
+                    taAdvancedController.setCreateDate(LocalDateTime.now());
205
+                    taAdvancedController.setOrgId(orgId);
206
+                    taAdvancedControllerService.save(taAdvancedController);
207
+                });
208
+            }
209
+            if (wxPayData.size() > 0){
210
+                TaMiniapp taMiniapp = taMiniappService.getOne(new QueryWrapper<TaMiniapp>().eq("org_id", orgId));
211
+                if (!taMiniapp.getMiniappId().equals(wxPayData.get("appid"))){
212
+                    return ResponseBean.error("appid不一致", ResponseBean.ERROR_UNAVAILABLE);
213
+                }
214
+                //维护支付信息先删除后添加
215
+                taWxPayConfigService.remove(new QueryWrapper<TaWxPayConfig>().eq("org_id",orgId));
216
+                TaWxPayConfig taWxPayConfig = new TaWxPayConfig();
217
+                taWxPayConfig.setApiPath((String) wxPayData.get("apiPath"));
218
+                taWxPayConfig.setAppid((String) wxPayData.get("appid"));
219
+                taWxPayConfig.setMchId((String) wxPayData.get("mchId"));
220
+                taWxPayConfig.setMchKey((String) wxPayData.get("mchKey"));
221
+                taWxPayConfig.setOrgId(orgId);
222
+                taWxPayConfig.setCreateDate(LocalDateTime.now());
223
+                taWxPayConfigService.save(taWxPayConfig);
224
+            }
225
+        } catch (Exception e) {
226
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
227
+        }
228
+
229
+        return ResponseBean.success("ok");
230
+    }
231
+}

+ 143
- 0
src/main/java/com/huiju/estateagents/controller/SysAdvancedConfigRelationController.java 查看文件

@@ -0,0 +1,143 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.entity.SysAdvancedConfigRelation;
9
+import com.huiju.estateagents.service.ISysAdvancedConfigRelationService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.*;
14
+
15
+/**
16
+ * <p>
17
+    * 高级配置对应关系表  前端控制器
18
+    * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2020-02-26
22
+ */
23
+@RestController
24
+@RequestMapping("/")
25
+public class SysAdvancedConfigRelationController extends BaseController {
26
+
27
+    private final Logger logger = LoggerFactory.getLogger(SysAdvancedConfigRelationController.class);
28
+
29
+    @Autowired
30
+    public ISysAdvancedConfigRelationService iSysAdvancedConfigRelationService;
31
+
32
+
33
+    /**
34
+     * 分页查询列表
35
+     * @param pageNum
36
+     * @param pageSize
37
+     * @return
38
+     */
39
+    @RequestMapping(value="/sysAdvancedConfigRelation",method= RequestMethod.GET)
40
+    public ResponseBean sysAdvancedConfigRelationList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
41
+                                                      @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
42
+        ResponseBean responseBean = new ResponseBean();
43
+        try {
44
+            //使用分页插件
45
+		    IPage<SysAdvancedConfigRelation> pg = new Page<>(pageNum, pageSize);
46
+            QueryWrapper<SysAdvancedConfigRelation> queryWrapper = new QueryWrapper<>();
47
+            queryWrapper.orderByDesc("create_date");
48
+
49
+            IPage<SysAdvancedConfigRelation> result = iSysAdvancedConfigRelationService.page(pg, queryWrapper);
50
+            responseBean.addSuccess(result);
51
+        }catch (Exception e){
52
+            e.printStackTrace();
53
+            logger.error("sysAdvancedConfigRelationList -=- {}",e.toString());
54
+            responseBean.addError(e.getMessage());
55
+        }
56
+        return responseBean;
57
+    }
58
+
59
+    /**
60
+     * 保存对象
61
+     * @param sysAdvancedConfigRelation 实体对象
62
+     * @return
63
+     */
64
+    @RequestMapping(value="/sysAdvancedConfigRelation",method= RequestMethod.POST)
65
+    public ResponseBean sysAdvancedConfigRelationAdd(@RequestBody SysAdvancedConfigRelation sysAdvancedConfigRelation){
66
+        ResponseBean responseBean = new ResponseBean();
67
+        try {
68
+            if (iSysAdvancedConfigRelationService.save(sysAdvancedConfigRelation)){
69
+                responseBean.addSuccess(sysAdvancedConfigRelation);
70
+            }else {
71
+                responseBean.addError("fail");
72
+            }
73
+        }catch (Exception e){
74
+            e.printStackTrace();
75
+            logger.error("sysAdvancedConfigRelationAdd -=- {}",e.toString());
76
+            responseBean.addError(e.getMessage());
77
+        }
78
+        return responseBean;
79
+    }
80
+
81
+    /**
82
+     * 根据id删除对象
83
+     * @param id  实体ID
84
+     */
85
+    @ResponseBody
86
+    @RequestMapping(value="/sysAdvancedConfigRelation/{id}", method= RequestMethod.DELETE)
87
+    public ResponseBean sysAdvancedConfigRelationDelete(@PathVariable Integer id){
88
+        ResponseBean responseBean = new ResponseBean();
89
+        try {
90
+            if(iSysAdvancedConfigRelationService.removeById(id)){
91
+                responseBean.addSuccess("success");
92
+            }else {
93
+                responseBean.addError("fail");
94
+            }
95
+        }catch (Exception e){
96
+            e.printStackTrace();
97
+            logger.error("sysAdvancedConfigRelationDelete -=- {}",e.toString());
98
+            responseBean.addError(e.getMessage());
99
+        }
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 修改对象
105
+     * @param id  实体ID
106
+     * @param sysAdvancedConfigRelation 实体对象
107
+     * @return
108
+     */
109
+    @RequestMapping(value="/sysAdvancedConfigRelation/{id}",method= RequestMethod.PUT)
110
+    public ResponseBean sysAdvancedConfigRelationUpdate(@PathVariable Integer id,
111
+                                        @RequestBody SysAdvancedConfigRelation sysAdvancedConfigRelation){
112
+        ResponseBean responseBean = new ResponseBean();
113
+        try {
114
+            if (iSysAdvancedConfigRelationService.updateById(sysAdvancedConfigRelation)){
115
+                responseBean.addSuccess(sysAdvancedConfigRelation);
116
+            }else {
117
+                responseBean.addError("fail");
118
+            }
119
+        }catch (Exception e){
120
+            e.printStackTrace();
121
+            logger.error("sysAdvancedConfigRelationUpdate -=- {}",e.toString());
122
+            responseBean.addError(e.getMessage());
123
+        }
124
+        return responseBean;
125
+    }
126
+
127
+    /**
128
+     * 根据id查询对象
129
+     * @param id  实体ID
130
+     */
131
+    @RequestMapping(value="/sysAdvancedConfigRelation/{id}",method= RequestMethod.GET)
132
+    public ResponseBean sysAdvancedConfigRelationGet(@PathVariable Integer id){
133
+        ResponseBean responseBean = new ResponseBean();
134
+        try {
135
+            responseBean.addSuccess(iSysAdvancedConfigRelationService.getById(id));
136
+        }catch (Exception e){
137
+            e.printStackTrace();
138
+            logger.error("sysAdvancedConfigRelationDelete -=- {}",e.toString());
139
+            responseBean.addError(e.getMessage());
140
+        }
141
+        return responseBean;
142
+    }
143
+}

+ 143
- 0
src/main/java/com/huiju/estateagents/controller/TaAdvancedControllerController.java 查看文件

@@ -0,0 +1,143 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.entity.TaAdvancedController;
9
+import com.huiju.estateagents.service.ITaAdvancedControllerService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.*;
14
+
15
+/**
16
+ * <p>
17
+    * 高级配置控制表  前端控制器
18
+    * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2020-02-26
22
+ */
23
+@RestController
24
+@RequestMapping("/api")
25
+public class TaAdvancedControllerController extends BaseController {
26
+
27
+    private final Logger logger = LoggerFactory.getLogger(TaAdvancedControllerController.class);
28
+
29
+    @Autowired
30
+    public ITaAdvancedControllerService iTaAdvancedControllerService;
31
+
32
+
33
+    /**
34
+     * 分页查询列表
35
+     * @param pageNum
36
+     * @param pageSize
37
+     * @return
38
+     */
39
+    @RequestMapping(value="/taAdvancedController",method= RequestMethod.GET)
40
+    public ResponseBean taAdvancedControllerList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
41
+                                                 @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
42
+        ResponseBean responseBean = new ResponseBean();
43
+        try {
44
+            //使用分页插件
45
+		    IPage<TaAdvancedController> pg = new Page<>(pageNum, pageSize);
46
+            QueryWrapper<TaAdvancedController> queryWrapper = new QueryWrapper<>();
47
+            queryWrapper.orderByDesc("create_date");
48
+
49
+            IPage<TaAdvancedController> result = iTaAdvancedControllerService.page(pg, queryWrapper);
50
+            responseBean.addSuccess(result);
51
+        }catch (Exception e){
52
+            e.printStackTrace();
53
+            logger.error("taAdvancedControllerList -=- {}",e.toString());
54
+            responseBean.addError(e.getMessage());
55
+        }
56
+        return responseBean;
57
+    }
58
+
59
+    /**
60
+     * 保存对象
61
+     * @param taAdvancedController 实体对象
62
+     * @return
63
+     */
64
+    @RequestMapping(value="/taAdvancedController",method= RequestMethod.POST)
65
+    public ResponseBean taAdvancedControllerAdd(@RequestBody TaAdvancedController taAdvancedController){
66
+        ResponseBean responseBean = new ResponseBean();
67
+        try {
68
+            if (iTaAdvancedControllerService.save(taAdvancedController)){
69
+                responseBean.addSuccess(taAdvancedController);
70
+            }else {
71
+                responseBean.addError("fail");
72
+            }
73
+        }catch (Exception e){
74
+            e.printStackTrace();
75
+            logger.error("taAdvancedControllerAdd -=- {}",e.toString());
76
+            responseBean.addError(e.getMessage());
77
+        }
78
+        return responseBean;
79
+    }
80
+
81
+    /**
82
+     * 根据id删除对象
83
+     * @param id  实体ID
84
+     */
85
+    @ResponseBody
86
+    @RequestMapping(value="/taAdvancedController/{id}", method= RequestMethod.DELETE)
87
+    public ResponseBean taAdvancedControllerDelete(@PathVariable Integer id){
88
+        ResponseBean responseBean = new ResponseBean();
89
+        try {
90
+            if(iTaAdvancedControllerService.removeById(id)){
91
+                responseBean.addSuccess("success");
92
+            }else {
93
+                responseBean.addError("fail");
94
+            }
95
+        }catch (Exception e){
96
+            e.printStackTrace();
97
+            logger.error("taAdvancedControllerDelete -=- {}",e.toString());
98
+            responseBean.addError(e.getMessage());
99
+        }
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 修改对象
105
+     * @param id  实体ID
106
+     * @param taAdvancedController 实体对象
107
+     * @return
108
+     */
109
+    @RequestMapping(value="/taAdvancedController/{id}",method= RequestMethod.PUT)
110
+    public ResponseBean taAdvancedControllerUpdate(@PathVariable Integer id,
111
+                                        @RequestBody TaAdvancedController taAdvancedController){
112
+        ResponseBean responseBean = new ResponseBean();
113
+        try {
114
+            if (iTaAdvancedControllerService.updateById(taAdvancedController)){
115
+                responseBean.addSuccess(taAdvancedController);
116
+            }else {
117
+                responseBean.addError("fail");
118
+            }
119
+        }catch (Exception e){
120
+            e.printStackTrace();
121
+            logger.error("taAdvancedControllerUpdate -=- {}",e.toString());
122
+            responseBean.addError(e.getMessage());
123
+        }
124
+        return responseBean;
125
+    }
126
+
127
+    /**
128
+     * 根据id查询对象
129
+     * @param id  实体ID
130
+     */
131
+    @RequestMapping(value="/taAdvancedController/{id}",method= RequestMethod.GET)
132
+    public ResponseBean taAdvancedControllerGet(@PathVariable Integer id){
133
+        ResponseBean responseBean = new ResponseBean();
134
+        try {
135
+            responseBean.addSuccess(iTaAdvancedControllerService.getById(id));
136
+        }catch (Exception e){
137
+            e.printStackTrace();
138
+            logger.error("taAdvancedControllerDelete -=- {}",e.toString());
139
+            responseBean.addError(e.getMessage());
140
+        }
141
+        return responseBean;
142
+    }
143
+}

+ 209
- 16
src/main/java/com/huiju/estateagents/controller/TaHousingResourcesController.java 查看文件

@@ -1,17 +1,14 @@
1 1
 package com.huiju.estateagents.controller;
2 2
 
3
+import com.alibaba.fastjson.JSONObject;
3 4
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 5
 import com.huiju.estateagents.base.BaseController;
5 6
 import com.huiju.estateagents.base.ResponseBean;
6 7
 import com.huiju.estateagents.common.CommConstant;
7
-import com.huiju.estateagents.entity.TaBuildingRoom;
8
-import com.huiju.estateagents.entity.TaHousingResources;
9
-import com.huiju.estateagents.entity.TaPreselectionRecord;
8
+import com.huiju.estateagents.entity.*;
10 9
 import com.huiju.estateagents.po.TaHousingResourcesPO;
11
-import com.huiju.estateagents.service.ITaBuildingRoomService;
12
-import com.huiju.estateagents.service.ITaHousingResourcesService;
13
-import com.huiju.estateagents.service.ITaPreselectionRecordService;
14
-import io.swagger.annotations.ApiOperation;
10
+import com.huiju.estateagents.service.*;
11
+import org.apache.commons.lang3.StringUtils;
15 12
 import org.slf4j.Logger;
16 13
 import org.slf4j.LoggerFactory;
17 14
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,7 +16,9 @@ import org.springframework.web.bind.annotation.*;
19 16
 import org.springframework.web.multipart.MultipartFile;
20 17
 
21 18
 import javax.servlet.http.HttpServletRequest;
19
+import java.util.ArrayList;
22 20
 import java.util.List;
21
+import java.util.stream.Collectors;
23 22
 
24 23
 /**
25 24
  * <p>
@@ -44,6 +43,21 @@ public class TaHousingResourcesController extends BaseController {
44 43
     @Autowired
45 44
     private ITaPreselectionRecordService taPreselectionRecordService;
46 45
 
46
+    @Autowired
47
+    private ITaRaiseRecordService taRaiseRecordService;
48
+
49
+    @Autowired
50
+    private ITaRaiseHouseService taRaiseHouseService;
51
+
52
+    @Autowired
53
+    public ITaBuildingApartmentService taBuildingApartmentService;
54
+
55
+    @Autowired
56
+    public ITaBuildingImgService taBuildingImgService;
57
+
58
+    @Autowired
59
+    public ITaSalesBatchService taSalesBatchService;
60
+
47 61
     /**
48 62
      * 分页查询列表
49 63
      *
@@ -65,12 +79,14 @@ public class TaHousingResourcesController extends BaseController {
65 79
                                                @RequestParam(value = "apartmentId", required = false) String apartmentId,
66 80
                                                @RequestParam(value = "status", required = false) Integer status,
67 81
                                                @RequestParam(value = "houseId", required = false) String houseId,
82
+                                               @RequestParam(value = "lockingStatus", required = false) String lockingStatus,
68 83
                                                @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
69 84
                                                @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
70 85
                                                HttpServletRequest request) {
71 86
         ResponseBean responseBean = new ResponseBean();
72 87
         try {
73
-            responseBean = iTaHousingResourcesService.selectPageList(salesBatchId, buildingId, pageNumber, pageSize, getOrgId(request), termName, blockName, unitName, floorName, roomName, apartmentId, status, houseId);
88
+            responseBean = iTaHousingResourcesService.selectPageList(salesBatchId, buildingId, pageNumber, pageSize, getOrgId(request), termName, blockName,
89
+                    unitName, floorName, roomName, apartmentId, status, houseId, lockingStatus);
74 90
         } catch (Exception e) {
75 91
             e.printStackTrace();
76 92
             logger.error("taHousingResourcesList -=- {}", e.toString());
@@ -210,22 +226,81 @@ public class TaHousingResourcesController extends BaseController {
210 226
      * @param startPrice   房源起始价格
211 227
      * @param endPrice     房源结束价格
212 228
      * @param apartmentId  户型ID
229
+     * @param source       来源,raiseChoose 为认筹添加房源来源
213 230
      * @param request
214 231
      * @return
215 232
      * @author gushaoyong
216 233
      */
217 234
     @RequestMapping(value = "/wx/listHousingResources", method = RequestMethod.GET)
218 235
     public ResponseBean listHousingResources(@RequestParam(value = "salesBatchId") String salesBatchId,
219
-                                             String startPrice, String endPrice, String apartmentId,
236
+                                             String startPrice, String endPrice, String apartmentId,@RequestParam(value = "source", required = false) String source,
220 237
                                              HttpServletRequest request) {
221 238
         ResponseBean responseBean = new ResponseBean();
222 239
         Integer orgId = getOrgId(request);
240
+        String personId = getPersonId(request);
223 241
 
224
-        logger.info("TaHouseingResourcesController.listHousingResources 接收参数:orgId:{},salesBatchId:{},startPrice:{},endPrice:{},apartmentId:{}",
225
-                orgId, salesBatchId, startPrice, endPrice, apartmentId);
242
+        logger.info("TaHouseingResourcesController.listHousingResources 接收参数:orgId:{},salesBatchId:{},startPrice:{},endPrice:{},apartmentId:{},source:{}",
243
+                orgId, salesBatchId, startPrice, endPrice, apartmentId, source);
226 244
 
227 245
         try {
228
-            responseBean.addSuccess(iTaHousingResourcesService.listHousingResources(orgId, salesBatchId, startPrice, endPrice, apartmentId, 1));
246
+            //获取所有楼房的预选热度和认筹热度
247
+            List<TaHousingResourcesPO> taHousingResourcesPOList = iTaHousingResourcesService.listHousingResources(orgId, salesBatchId, startPrice, endPrice, apartmentId, personId, source);
248
+            //此处处理我的预选,我的认筹,和我的锁定
249
+            //我的预选记录
250
+            QueryWrapper<TaPreselectionRecord> taPreselectionRecordQueryWrapper = new QueryWrapper<>();
251
+            taPreselectionRecordQueryWrapper.eq("org_id", orgId);
252
+            taPreselectionRecordQueryWrapper.eq("sales_batch_id", salesBatchId);
253
+            taPreselectionRecordQueryWrapper.eq("person_id", getPersonId(request));
254
+            taPreselectionRecordQueryWrapper.eq("status", CommConstant.STATUS_NORMAL);
255
+            List<TaPreselectionRecord> taPreselectionRecordList = taPreselectionRecordService.list(taPreselectionRecordQueryWrapper);
256
+            //我的认筹记录
257
+            QueryWrapper<TaRaiseRecord> taRaiseRecordQueryWrapper = new QueryWrapper<>();
258
+            taRaiseRecordQueryWrapper.eq("org_id", orgId);
259
+            taRaiseRecordQueryWrapper.eq("sales_batch_id", salesBatchId);
260
+            taRaiseRecordQueryWrapper.eq("person_id", getPersonId(request));
261
+            taRaiseRecordQueryWrapper.eq("status", CommConstant.STATUS_NORMAL);
262
+            List<TaRaiseRecord> taRaiseRecordList = taRaiseRecordService.list(taRaiseRecordQueryWrapper);
263
+
264
+            //认筹记录对应的有效房源,我的锁定的房源也在里面
265
+            QueryWrapper<TaRaiseHouse> taRaiseHouseQueryWrapper = new QueryWrapper<>();
266
+            taRaiseHouseQueryWrapper.in(taRaiseRecordList.size() > 0, "raise_record_id", taRaiseRecordList.stream().map(TaRaiseRecord::getRaiseRecordId).collect(Collectors.toList()));
267
+            List<TaRaiseHouse> taRaiseHouseList = taRaiseHouseService.list(taRaiseHouseQueryWrapper);
268
+            TaSalesBatch taSalesBatch = taSalesBatchService.getById(salesBatchId);
269
+            taHousingResourcesPOList.forEach(e -> {
270
+                taPreselectionRecordList.forEach(p -> {
271
+                    //我的预选
272
+                    if (e.getHouseId().equals(p.getHouseId())) {
273
+                        e.setMinePreselection("mine");
274
+                    }
275
+                });
276
+                //我的认筹和锁定
277
+                taRaiseHouseList.forEach(r -> {
278
+                    //我的认筹
279
+                    if (e.getHouseId().equals(r.getHouseId())) {
280
+                        e.setMineRaise("mine");
281
+                        if (CommConstant.HOUSE_LOCKING_STATUS_LOCKED.equals(e.getHouseLockingStatus())) {
282
+                            e.setMineLocked("mine");
283
+                        }
284
+                    }
285
+                });
286
+
287
+                //塞入户型信息
288
+                if (!StringUtils.isEmpty(e.getApartmentId())) {
289
+                    TaBuildingApartment buildingApartment = taBuildingApartmentService.getById(e.getApartmentId());
290
+                    e.setApartmentName(buildingApartment.getApartmentName());
291
+                    e.setInsideArea(buildingApartment.getInsideArea());
292
+                    e.setBuildingArea(buildingApartment.getBuildingArea());
293
+                    //塞入户型图信息
294
+                    List<String> apartMentIds = new ArrayList<>();
295
+                    apartMentIds.add(e.getApartmentId());
296
+                    List<TaBuildingImg> apartMentList = taBuildingImgService.getAparemnetList(apartMentIds);
297
+                    e.setApartmentImgList(apartMentList);
298
+                }
299
+
300
+                e.setDisplayHousePrice(taSalesBatch.getDisplayHousePrice());
301
+            });
302
+
303
+            responseBean.addSuccess(taHousingResourcesPOList);
229 304
         } catch (Exception e) {
230 305
             logger.error("listHousingResources -=- {}", e);
231 306
             responseBean.addError(e.getMessage());
@@ -245,9 +320,8 @@ public class TaHousingResourcesController extends BaseController {
245 320
                                                     HttpServletRequest request) {
246 321
         ResponseBean responseBean = new ResponseBean();
247 322
         Integer orgId = getOrgId(request);
248
-
249 323
         try {
250
-            responseBean.addSuccess(iTaHousingResourcesService.listHousingResources(orgId, salesBatchId, "", "", "", 0));
324
+            responseBean.addSuccess(iTaHousingResourcesService.listHousingResourcesForCms(orgId, salesBatchId, "", "", "", 0));
251 325
         } catch (Exception e) {
252 326
             logger.error("listHousingResourcesFormCms -=- {}", e);
253 327
             responseBean.addError(e.getMessage());
@@ -282,12 +356,12 @@ public class TaHousingResourcesController extends BaseController {
282 356
      * @author gushaoyong
283 357
      */
284 358
     @RequestMapping(value = "/wx/getHousingDetailById", method = RequestMethod.GET)
285
-    public ResponseBean getHousingDetailById(@RequestParam(value = "houseId") String houseId,
359
+    public ResponseBean getHousingDetailById(@RequestParam(value = "houseId") Integer houseId,
286 360
                                              @RequestParam(value = "personId") String personId) {
287 361
         ResponseBean responseBean = new ResponseBean();
288 362
         try {
289 363
             TaHousingResourcesPO taHousingResourcesPO = iTaHousingResourcesService.getHousingDetailById(personId, houseId);
290
-            if (taHousingResourcesPO.getStatus() != null && taHousingResourcesPO.getStatus() == CommConstant.STATUS_NORMAL){
364
+            if (taHousingResourcesPO.getStatus() != null && taHousingResourcesPO.getStatus() == CommConstant.STATUS_NORMAL) {
291 365
                 responseBean.addSuccess(taHousingResourcesPO);
292 366
                 return responseBean;
293 367
             }
@@ -351,4 +425,123 @@ public class TaHousingResourcesController extends BaseController {
351 425
         }
352 426
         return responseBean;
353 427
     }
428
+
429
+    /**
430
+     * 批量更新房源认筹基础热度
431
+     *
432
+     * @param housingResources
433
+     * @param request
434
+     * @return
435
+     */
436
+    @RequestMapping(value = "/admin/house/batchUpdateRaiseHeat", method = RequestMethod.PUT)
437
+    public ResponseBean batchUpdateRaiseHeat(@RequestBody TaHousingResources housingResources, HttpServletRequest request) {
438
+        ResponseBean responseBean = new ResponseBean();
439
+        try {
440
+            // 校验认筹热度
441
+            if (housingResources.getRaiseHeat() == null || housingResources.getRaiseHeat() < 0) {
442
+                responseBean.addError("基础热度需大于等于0");
443
+                return responseBean;
444
+            }
445
+
446
+            responseBean = iTaHousingResourcesService.batchUpdateRaiseHeat(housingResources.getHouseIdList(), housingResources.getRaiseHeat(),
447
+                    housingResources.getSalesBatchId(), getOrgId(request), getUserId(request));
448
+        } catch (Exception e) {
449
+            logger.error("batchUpdateRaiseHeat -=- {}", e.toString());
450
+            responseBean.addError(e.getMessage());
451
+        }
452
+        return responseBean;
453
+    }
454
+
455
+    /**
456
+     * 批量更新房源预选基础热度
457
+     *
458
+     * @param housingResources
459
+     * @param request
460
+     * @return
461
+     */
462
+    @RequestMapping(value = "/admin/house/batchUpdateHeat", method = RequestMethod.PUT)
463
+    public ResponseBean batchUpdateHeat(@RequestBody TaHousingResources housingResources, HttpServletRequest request) {
464
+        ResponseBean responseBean = new ResponseBean();
465
+        try {
466
+            // 校验认筹热度
467
+            if (housingResources.getHeat() == null || housingResources.getHeat() < 0) {
468
+                responseBean.addError("基础热度需大于等于0");
469
+                return responseBean;
470
+            }
471
+
472
+            responseBean = iTaHousingResourcesService.batchUpdateHeat(housingResources.getHouseIdList(), housingResources.getHeat(),
473
+                    housingResources.getSalesBatchId(), getOrgId(request), getUserId(request));
474
+        } catch (Exception e) {
475
+            logger.error("batchUpdateRaiseHeat -=- {}", e.toString());
476
+            responseBean.addError(e.getMessage());
477
+        }
478
+        return responseBean;
479
+    }
480
+
481
+    /**
482
+     * 根据认筹记录查询房源列表
483
+     *
484
+     * @param pageNumber
485
+     * @param pageSize
486
+     * @param raiseRecordId
487
+     * @param request
488
+     * @return
489
+     */
490
+    @RequestMapping(value = "/admin/house/listHouseByRaiseRecordId", method = RequestMethod.GET)
491
+    public ResponseBean listHouseByRaiseRecordId(@RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
492
+                                                 @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
493
+                                                 @RequestParam(value = "raiseRecordId") Integer raiseRecordId,
494
+                                                 HttpServletRequest request) {
495
+        ResponseBean responseBean = new ResponseBean();
496
+        try {
497
+            responseBean = iTaHousingResourcesService.listHouseByRaiseRecordId(raiseRecordId, getOrgId(request), pageNumber, pageSize);
498
+            logger.info("listHouseByRaiseRecordId 返回结果:", JSONObject.toJSONString(responseBean));
499
+        } catch (Exception e) {
500
+            logger.error("listHouseByRaiseRecordId 异常:", e);
501
+            responseBean.addError(e.getMessage());
502
+        }
503
+        return responseBean;
504
+    }
505
+
506
+
507
+    /**
508
+     * 更新房源锁定状态
509
+     *
510
+     * @param houseId
511
+     * @param type         修改类型:lock为锁定房源,unlock为解锁房源
512
+     * @param raiseHouseId 认筹房源关系表ID, 接口‘/admin/house/listHouseByRaiseRecordId’ 有返回
513
+     * @param request
514
+     * @return
515
+     */
516
+    @RequestMapping(value = "/admin/house/updateLockingStatus", method = RequestMethod.PUT)
517
+    public ResponseBean updateLockingStatus(Integer houseId, String type, Integer raiseHouseId, String personId, Integer raiseRecordId,
518
+                                            HttpServletRequest request) {
519
+        ResponseBean responseBean = new ResponseBean();
520
+        try {
521
+            responseBean = iTaHousingResourcesService.updateLockingStatus(houseId, type, getOrgId(request), raiseHouseId, personId, raiseRecordId);
522
+            logger.info("updateLockingStatus 返回结果:", JSONObject.toJSONString(responseBean));
523
+        } catch (Exception e) {
524
+            logger.error("updateLockingStatus 异常:", e);
525
+            responseBean.addError(e.getMessage());
526
+        }
527
+        return responseBean;
528
+    }
529
+
530
+    /**
531
+     * 校验房源认筹状态
532
+     *
533
+     * @return
534
+     */
535
+    @RequestMapping(value = "/wx/check/raise", method = RequestMethod.GET)
536
+    public ResponseBean checkRaise(@RequestParam(value = "houseIds") String houseIds,HttpServletRequest request) {
537
+        ResponseBean responseBean = new ResponseBean();
538
+        try {
539
+            boolean state = iTaHousingResourcesService.checkRaiseState(houseIds,getPersonId(request),getOrgId(request));
540
+            responseBean.addSuccess(state);
541
+        } catch (Exception e) {
542
+            logger.error("校验房源状态 -=- {}", e.getMessage());
543
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_MISSING_PARAMS);
544
+        }
545
+        return responseBean;
546
+    }
354 547
 }

+ 100
- 0
src/main/java/com/huiju/estateagents/controller/TaMiniappThemeController.java 查看文件

@@ -0,0 +1,100 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.common.CommConstant;
9
+import com.huiju.estateagents.entity.TaMiniappOrgIcon;
10
+import com.huiju.estateagents.entity.TaMiniappTheme;
11
+import com.huiju.estateagents.service.ITaMiniappThemeService;
12
+import io.swagger.models.auth.In;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+
16
+import javax.servlet.http.HttpServletRequest;
17
+import java.time.LocalDateTime;
18
+
19
+@RestController
20
+@RequestMapping("/api")
21
+public class TaMiniappThemeController extends BaseController {
22
+
23
+    @Autowired
24
+    ITaMiniappThemeService iTaMiniappThemeService;
25
+
26
+    @GetMapping("/admin/miniapp-theme")
27
+    public ResponseBean getThemeListForAdmin(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
28
+                                             @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
29
+                                             HttpServletRequest request) {
30
+        Integer orgId = getOrgId(request);
31
+
32
+        Boolean includeNotUsed = true;
33
+        IPage<TaMiniappTheme> themeList = iTaMiniappThemeService.getThemeList(orgId, includeNotUsed, pageNum, pageSize);
34
+
35
+        return ResponseBean.success(themeList);
36
+    }
37
+
38
+    @GetMapping("/admin/miniapp-theme/{id}")
39
+    public ResponseBean getThemeById(@PathVariable Integer id) {
40
+        if (id == null || id == 0) {
41
+            ResponseBean.error("未找到主题设置", ResponseBean.ERROR_ILLEGAL_PARAMS);
42
+        }
43
+
44
+        TaMiniappTheme taMiniappTheme = iTaMiniappThemeService.getProfileById(id);
45
+        if (taMiniappTheme == null) {
46
+            ResponseBean.error("未找到主题设置", ResponseBean.ERROR_ILLEGAL_PARAMS);
47
+        }
48
+
49
+        return ResponseBean.success(taMiniappTheme);
50
+    }
51
+
52
+    @PostMapping("/admin/miniapp-theme")
53
+    public ResponseBean saveTheme(@RequestBody TaMiniappTheme taMiniappTheme, HttpServletRequest request) {
54
+        return this.editTheme(taMiniappTheme, request);
55
+    }
56
+
57
+    @PutMapping("/admin/miniapp-theme")
58
+    public ResponseBean updateTheme(@RequestBody TaMiniappTheme taMiniappTheme, HttpServletRequest request) {
59
+        return this.editTheme(taMiniappTheme, request);
60
+    }
61
+
62
+    private ResponseBean editTheme(TaMiniappTheme taMiniappTheme, HttpServletRequest request) {
63
+        if (taMiniappTheme == null) {
64
+            return ResponseBean.error("非法参数", ResponseBean.ERROR_ILLEGAL_PARAMS);
65
+        }
66
+
67
+        Integer orgId = getOrgId(request);
68
+        Integer userId = getUserId(request);
69
+        taMiniappTheme.setOrgId(orgId);
70
+        taMiniappTheme.setModifyUser(userId);
71
+        taMiniappTheme.setModifyDate(LocalDateTime.now());
72
+
73
+        return iTaMiniappThemeService.editTheme(taMiniappTheme);
74
+    }
75
+
76
+    @DeleteMapping("/admin/miniapp-theme/{themeId}")
77
+    public ResponseBean deleteTheme(@PathVariable Integer themeId, HttpServletRequest request) {
78
+        if (themeId == null || themeId <= 0) {
79
+            return ResponseBean.error("未找到删除内容", ResponseBean.ERROR_ILLEGAL_PARAMS);
80
+        }
81
+
82
+        Integer orgId = getOrgId(request);
83
+        QueryWrapper<TaMiniappTheme> queryWrapper = new QueryWrapper<>();
84
+        queryWrapper.eq("theme_id", themeId);
85
+        TaMiniappTheme taMiniappTheme = iTaMiniappThemeService.getById(themeId);
86
+        if (taMiniappTheme == null || taMiniappTheme.getStatus().equals(CommConstant.STATUS_DELETE)) {
87
+            return ResponseBean.success("");
88
+        }
89
+
90
+        if (!orgId.equals(taMiniappTheme.getOrgId())) {
91
+            return ResponseBean.error("无权删除该主题", ResponseBean.ERROR_ILLEGAL_PARAMS);
92
+        }
93
+
94
+        Integer userId = getUserId(request);
95
+        taMiniappTheme.setModifyUser(userId);
96
+
97
+        return iTaMiniappThemeService.deleteTheme(taMiniappTheme);
98
+    }
99
+
100
+}

+ 143
- 0
src/main/java/com/huiju/estateagents/controller/TaOrderController.java 查看文件

@@ -0,0 +1,143 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.entity.TaOrder;
9
+import com.huiju.estateagents.service.ITaOrderService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.*;
14
+
15
+/**
16
+ * <p>
17
+    * 订单表  前端控制器
18
+    * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2020-02-26
22
+ */
23
+@RestController
24
+@RequestMapping("/")
25
+public class TaOrderController extends BaseController {
26
+
27
+    private final Logger logger = LoggerFactory.getLogger(TaOrderController.class);
28
+
29
+    @Autowired
30
+    public ITaOrderService iTaOrderService;
31
+
32
+
33
+    /**
34
+     * 分页查询列表
35
+     * @param pageNum
36
+     * @param pageSize
37
+     * @return
38
+     */
39
+    @RequestMapping(value="/taOrder",method= RequestMethod.GET)
40
+    public ResponseBean taOrderList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
41
+                                    @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
42
+        ResponseBean responseBean = new ResponseBean();
43
+        try {
44
+            //使用分页插件
45
+		    IPage<TaOrder> pg = new Page<>(pageNum, pageSize);
46
+            QueryWrapper<TaOrder> queryWrapper = new QueryWrapper<>();
47
+            queryWrapper.orderByDesc("create_date");
48
+
49
+            IPage<TaOrder> result = iTaOrderService.page(pg, queryWrapper);
50
+            responseBean.addSuccess(result);
51
+        }catch (Exception e){
52
+            e.printStackTrace();
53
+            logger.error("taOrderList -=- {}",e.toString());
54
+            responseBean.addError(e.getMessage());
55
+        }
56
+        return responseBean;
57
+    }
58
+
59
+    /**
60
+     * 保存对象
61
+     * @param taOrder 实体对象
62
+     * @return
63
+     */
64
+    @RequestMapping(value="/taOrder",method= RequestMethod.POST)
65
+    public ResponseBean taOrderAdd(@RequestBody TaOrder taOrder){
66
+        ResponseBean responseBean = new ResponseBean();
67
+        try {
68
+            if (iTaOrderService.save(taOrder)){
69
+                responseBean.addSuccess(taOrder);
70
+            }else {
71
+                responseBean.addError("fail");
72
+            }
73
+        }catch (Exception e){
74
+            e.printStackTrace();
75
+            logger.error("taOrderAdd -=- {}",e.toString());
76
+            responseBean.addError(e.getMessage());
77
+        }
78
+        return responseBean;
79
+    }
80
+
81
+    /**
82
+     * 根据id删除对象
83
+     * @param id  实体ID
84
+     */
85
+    @ResponseBody
86
+    @RequestMapping(value="/taOrder/{id}", method= RequestMethod.DELETE)
87
+    public ResponseBean taOrderDelete(@PathVariable Integer id){
88
+        ResponseBean responseBean = new ResponseBean();
89
+        try {
90
+            if(iTaOrderService.removeById(id)){
91
+                responseBean.addSuccess("success");
92
+            }else {
93
+                responseBean.addError("fail");
94
+            }
95
+        }catch (Exception e){
96
+            e.printStackTrace();
97
+            logger.error("taOrderDelete -=- {}",e.toString());
98
+            responseBean.addError(e.getMessage());
99
+        }
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 修改对象
105
+     * @param id  实体ID
106
+     * @param taOrder 实体对象
107
+     * @return
108
+     */
109
+    @RequestMapping(value="/taOrder/{id}",method= RequestMethod.PUT)
110
+    public ResponseBean taOrderUpdate(@PathVariable Integer id,
111
+                                        @RequestBody TaOrder taOrder){
112
+        ResponseBean responseBean = new ResponseBean();
113
+        try {
114
+            if (iTaOrderService.updateById(taOrder)){
115
+                responseBean.addSuccess(taOrder);
116
+            }else {
117
+                responseBean.addError("fail");
118
+            }
119
+        }catch (Exception e){
120
+            e.printStackTrace();
121
+            logger.error("taOrderUpdate -=- {}",e.toString());
122
+            responseBean.addError(e.getMessage());
123
+        }
124
+        return responseBean;
125
+    }
126
+
127
+    /**
128
+     * 根据id查询对象
129
+     * @param id  实体ID
130
+     */
131
+    @RequestMapping(value="/taOrder/{id}",method= RequestMethod.GET)
132
+    public ResponseBean taOrderGet(@PathVariable Integer id){
133
+        ResponseBean responseBean = new ResponseBean();
134
+        try {
135
+            responseBean.addSuccess(iTaOrderService.getById(id));
136
+        }catch (Exception e){
137
+            e.printStackTrace();
138
+            logger.error("taOrderDelete -=- {}",e.toString());
139
+            responseBean.addError(e.getMessage());
140
+        }
141
+        return responseBean;
142
+    }
143
+}

+ 4
- 59
src/main/java/com/huiju/estateagents/controller/TaPersonVisitRecordController.java 查看文件

@@ -92,74 +92,19 @@ public class TaPersonVisitRecordController extends BaseController {
92 92
      */
93 93
     @RequestMapping(value = "/wx/taPersonVisitRecord", method = RequestMethod.POST)
94 94
     public ResponseBean taPersonVisitRecordAdd(@RequestBody TaPersonVisitRecord taPersonVisitRecord, HttpServletRequest request) {
95
+        Integer orgId = getOrgId(request);
95 96
         String openid = getOpenId(request);
96 97
         List<TaPerson> taPersons = taPersonService.getPersonsByOpenId(openid);
97 98
         if (null == taPersons || taPersons.size() != 1) {
98 99
             return ResponseBean.error("验证人员信息失败", ResponseBean.ERROR_UNAVAILABLE);
99 100
         }
100 101
         TaPerson person = taPersons.get(0);
101
-        taPersonVisitRecord.setActivity(taPersonVisitRecord.getPropertyName());
102
-        taPersonVisitRecord.setOrgId(String.valueOf(getOrgId(request)));
103
-        Integer eventProperties = taEventPropertiesService.isEventExist(taPersonVisitRecord.getTargetId(), taPersonVisitRecord.getEventType(), taPersonVisitRecord.getActivity(), getOrgId(request));
104
-        if (eventProperties <= 0) {
105
-            TaEventProperties taEventProperty = new TaEventProperties();
106
-            taEventProperty.setBuildingId(taPersonVisitRecord.getTargetId());
107
-            taEventProperty.setCreateDate(LocalDateTime.now());
108
-            taEventProperty.setPropertyCode(taPersonVisitRecord.getPropertyName());
109
-            taEventProperty.setPropertyName(taPersonVisitRecord.getPropertyName());
110
-            taEventProperty.setStatus(CommConstant.STATUS_NORMAL);
111
-            taEventProperty.setBuildingId(taPersonVisitRecord.getBuildingId());
112
-            taEventProperty.setEventType(taPersonVisitRecord.getEventType());
113
-            taEventProperty.setOrgId(getOrgId(request));
114
-            if (!taEventPropertiesService.save(taEventProperty)) {
115
-                return ResponseBean.error("新增失败", ResponseBean.ERROR_UNAVAILABLE);
116
-            }
117
-
118
-        }
119 102
 
103
+        taPersonVisitRecord.setActivity(taPersonVisitRecord.getPropertyName());
104
+        taPersonVisitRecord.setOrgId(String.valueOf(orgId));
120 105
         taPersonVisitRecord.setPersonId(person.getPersonId());
121
-        taPersonVisitRecord.setVisitTime(LocalDateTime.now());
122
-        if (!StringUtils.isEmpty(taPersonVisitRecord.getBuildingId())) {
123
-            QueryWrapper<TaBuildingIntention> intentionQueryWrapper = new QueryWrapper<>();
124
-            intentionQueryWrapper.eq("building_id", taPersonVisitRecord.getBuildingId());
125
-            intentionQueryWrapper.eq("org_id", getOrgId(request));
126
-            intentionQueryWrapper.eq("event_code", taPersonVisitRecord.getEvent());
127
-            List<TaBuildingIntention> list = buildingIntentionService.list(intentionQueryWrapper);
128
-            if (list.size() > 0) {
129
-                TaBuildingIntention buildingIntention = list.get(0);
130
-                TaPersonIntentionRecord intentionRecord = new TaPersonIntentionRecord();
131
-                TaBuilding building = buildingService.getById(buildingIntention.getBuildingId());
132
-                intentionRecord.setBuildingId(buildingIntention.getBuildingId());
133
-                intentionRecord.setBuildingName(building.getBuildingName());
134
-                intentionRecord.setCreateDate(LocalDateTime.now());
135
-                intentionRecord.setEventCode(buildingIntention.getEventCode());
136
-                intentionRecord.setEventId(buildingIntention.getEventId());
137
-                intentionRecord.setEventName(buildingIntention.getEventName());
138
-                intentionRecord.setIntention(buildingIntention.getIntention());
139
-                intentionRecord.setOrgId(getOrgId(request));
140
-                intentionRecord.setPersonId(person.getPersonId());
141
-                intentionRecord.setPersonName(person.getNickname());
142
-                intentionRecord.setStatus(CommConstant.STATUS_NORMAL);
143
-                if (!personIntentionRecordService.save(intentionRecord)) {
144
-                    return ResponseBean.error("新增失败", ResponseBean.ERROR_UNAVAILABLE);
145
-                }
146
-            }
147
-        }
148
-        try {
149
-            if (iTaPersonVisitRecordService.save(taPersonVisitRecord)) {
150
-                //清洗埋點數據到新增用戶表--只有进入小程序的时候 start才记录
151
-                if (taPersonVisitRecord.getEvent().equals(CommConstant.BIZ_EVENT_START)) {
152
-                    iTaPersonFromRecordService.addNewPersonRecordRecord(taPersonVisitRecord);
153
-                }
154 106
 
155
-                return ResponseBean.success(taPersonVisitRecord);
156
-            } else {
157
-                return ResponseBean.error("保存失败", ResponseBean.ERROR_UNAVAILABLE);
158
-            }
159
-        } catch (Exception e) {
160
-            logger.error("taPersonVisitRecordAdd -=- {}", e.toString());
161
-            return ResponseBean.error("系统异常" + e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
162
-        }
107
+        return iTaPersonVisitRecordService.newRecord(taPersonVisitRecord, person);
163 108
     }
164 109
 
165 110
     /**

+ 288
- 0
src/main/java/com/huiju/estateagents/controller/TaPreselectionController.java 查看文件

@@ -0,0 +1,288 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
+import com.huiju.estateagents.base.BaseController;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.common.CommConstant;
10
+import com.huiju.estateagents.entity.TaPersonBuilding;
11
+import com.huiju.estateagents.entity.TaPreselection;
12
+import com.huiju.estateagents.entity.TaSalesBatch;
13
+import com.huiju.estateagents.service.ITaPreselectionService;
14
+import com.huiju.estateagents.service.impl.TaSalesBatchServiceImpl;
15
+import org.apache.commons.lang3.StringUtils;
16
+import org.slf4j.Logger;
17
+import org.slf4j.LoggerFactory;
18
+import org.springframework.beans.factory.annotation.Autowired;
19
+import org.springframework.web.bind.annotation.*;
20
+
21
+import javax.servlet.http.HttpServletRequest;
22
+import java.time.LocalDateTime;
23
+import java.util.List;
24
+
25
+/**
26
+ * <p>
27
+ * 预选表  前端控制器
28
+ * </p>
29
+ *
30
+ * @author jobob
31
+ * @since 2020-02-26
32
+ */
33
+@RestController
34
+@RequestMapping("/api")
35
+public class TaPreselectionController extends BaseController {
36
+
37
+    private final Logger logger = LoggerFactory.getLogger(TaPreselectionController.class);
38
+
39
+    @Autowired
40
+    public ITaPreselectionService iTaPreselectionService;
41
+
42
+    @Autowired
43
+    private TaSalesBatchServiceImpl taSalesBatchService;
44
+
45
+    /**
46
+     * 条件查询预选列表
47
+     *
48
+     * @param pageNum
49
+     * @param pageSize
50
+     * @param buildingId
51
+     * @param salesBatchName
52
+     * @param status
53
+     * @param request
54
+     * @return
55
+     */
56
+    @RequestMapping(value = "/admin/listPresecretByCondition", method = RequestMethod.GET)
57
+    public ResponseBean listPresecretByCondition(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
58
+                                                 @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
59
+                                                 String buildingId, String salesBatchName, Integer status,
60
+                                                 HttpServletRequest request) {
61
+        ResponseBean responseBean = new ResponseBean();
62
+
63
+        try {
64
+            Integer orgId = getOrgId(request);
65
+            List<TaPersonBuilding> personBuildingList = getTaPersonBuildingListByUserId(request);
66
+
67
+            responseBean = iTaPreselectionService.listPresecretByCondition(pageSize, pageNum, salesBatchName, buildingId, orgId, status, personBuildingList);
68
+            logger.info("listSalesBatchForPreselect 返回结果:{}", JSONObject.toJSONString(responseBean));
69
+        } catch (Exception e) {
70
+            logger.error("listSalesBatchForPreselect -=- {}", e);
71
+            responseBean.addError(e.getMessage());
72
+        }
73
+        return responseBean;
74
+    }
75
+
76
+    /**
77
+     * 分页查询列表
78
+     *
79
+     * @param pageNum
80
+     * @param pageSize
81
+     * @return
82
+     */
83
+    @RequestMapping(value = "/taPreselection", method = RequestMethod.GET)
84
+    public ResponseBean taPreselectionList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
85
+                                           @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
86
+        ResponseBean responseBean = new ResponseBean();
87
+        try {
88
+            //使用分页插件
89
+            IPage<TaPreselection> pg = new Page<>(pageNum, pageSize);
90
+            QueryWrapper<TaPreselection> queryWrapper = new QueryWrapper<>();
91
+            queryWrapper.orderByDesc("create_date");
92
+
93
+            IPage<TaPreselection> result = iTaPreselectionService.page(pg, queryWrapper);
94
+            responseBean.addSuccess(result);
95
+        } catch (Exception e) {
96
+            e.printStackTrace();
97
+            logger.error("taPreselectionList -=- {}", e.toString());
98
+            responseBean.addError(e.getMessage());
99
+        }
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 保存对象
105
+     *
106
+     * @param taPreselection 实体对象
107
+     * @return
108
+     */
109
+    @RequestMapping(value = "/admin/taPreselection", method = RequestMethod.POST)
110
+    public ResponseBean taPreselectionAdd(@RequestBody TaPreselection taPreselection, HttpServletRequest request) {
111
+        ResponseBean responseBean = new ResponseBean();
112
+        try {
113
+            if (taPreselection.getSalesBatchId() == null) {
114
+                responseBean.addError("销售批次为空");
115
+                return responseBean;
116
+            }
117
+
118
+            Integer orgId = getOrgId(request);
119
+            // 校验是否预选过
120
+            QueryWrapper<TaPreselection> queryWrapper = new QueryWrapper<>();
121
+            queryWrapper.eq("org_id", orgId);
122
+            queryWrapper.eq("sales_batch_id", taPreselection.getSalesBatchId());
123
+            queryWrapper.eq("status", 1);
124
+            TaPreselection record = iTaPreselectionService.getOne(queryWrapper);
125
+            if (record != null) {
126
+                responseBean.addError("销售批次已新增过预选");
127
+                return responseBean;
128
+            }
129
+
130
+            // 更新批次表信息
131
+            TaSalesBatch taSalesBatch = new TaSalesBatch();
132
+            taSalesBatch.setSalesBatchId(taPreselection.getSalesBatchId());
133
+            taSalesBatch.setPreselectionStartTime(taPreselection.getPreselectionStartTime());
134
+            taSalesBatch.setPreselectionEndTime(taPreselection.getPreselectionEndTime());
135
+            Boolean updateResult = taSalesBatchService.updateById(taSalesBatch);
136
+            if (!updateResult) {
137
+                responseBean.addError("fail");
138
+                return responseBean;
139
+            }
140
+
141
+            // 新增数据
142
+            taPreselection.setOrgId(getOrgId(request));
143
+            taPreselection.setStatus(CommConstant.IS_PUBLISH);
144
+            taPreselection.setCreateDate(LocalDateTime.now());
145
+            if (iTaPreselectionService.save(taPreselection)) {
146
+                responseBean.addSuccess(taPreselection);
147
+            } else {
148
+                responseBean.addError("fail");
149
+            }
150
+        } catch (Exception e) {
151
+            e.printStackTrace();
152
+            logger.error("taPreselectionAdd -=- {}", e.toString());
153
+            responseBean.addError(e.getMessage());
154
+        }
155
+        return responseBean;
156
+    }
157
+
158
+    /**
159
+     * 批量删除
160
+     *
161
+     * @param taPreselectionList
162
+     * @param request
163
+     * @return
164
+     */
165
+    @ResponseBody
166
+    @RequestMapping(value = "/admin/preselection/batchDelete", method = RequestMethod.PUT)
167
+    public ResponseBean batchDelete(@RequestBody List<TaPreselection> taPreselectionList, HttpServletRequest request) {
168
+        ResponseBean responseBean = new ResponseBean();
169
+        try {
170
+            Integer orgId = getOrgId(request);
171
+            responseBean = iTaPreselectionService.batchDelete(taPreselectionList, orgId);
172
+            logger.info("TaPreselectionController.batchDelete 返回:{}", JSONObject.toJSONString(responseBean));
173
+
174
+        } catch (Exception e) {
175
+            e.printStackTrace();
176
+            logger.error("taPreselectionDelete -=- {}", e.toString());
177
+            responseBean.addError(e.getMessage());
178
+        }
179
+        return responseBean;
180
+    }
181
+
182
+    /**
183
+     * 删除
184
+     *
185
+     * @param id 实体ID
186
+     */
187
+    @ResponseBody
188
+    @RequestMapping(value = "/admin/taPreselection/{id}", method = RequestMethod.DELETE)
189
+    public ResponseBean taPreselectionDelete(@PathVariable Integer id) {
190
+        ResponseBean responseBean = new ResponseBean();
191
+        try {
192
+            if (iTaPreselectionService.removeById(id)) {
193
+                responseBean.addSuccess("success");
194
+            } else {
195
+                responseBean.addError("fail");
196
+            }
197
+        } catch (Exception e) {
198
+            e.printStackTrace();
199
+            logger.error("taPreselectionDelete -=- {}", e.toString());
200
+            responseBean.addError(e.getMessage());
201
+        }
202
+        return responseBean;
203
+    }
204
+
205
+    /**
206
+     * 修改对象
207
+     *
208
+     * @param id             实体ID
209
+     * @param taPreselection 实体对象
210
+     * @return
211
+     */
212
+    @RequestMapping(value = "/admin/taPreselection/{id}", method = RequestMethod.PUT)
213
+    public ResponseBean taPreselectionUpdate(@PathVariable Integer id,
214
+                                             @RequestBody TaPreselection taPreselection) {
215
+        ResponseBean responseBean = new ResponseBean();
216
+        try {
217
+
218
+            if (taPreselection.getSalesBatchId() == null) {
219
+                responseBean.addError("销售批次为空");
220
+                return responseBean;
221
+            }
222
+
223
+            if (taPreselection.getPreselectionStartTime() != null && taPreselection.getPreselectionEndTime() != null) {
224
+                // 更新批次表信息
225
+                TaSalesBatch taSalesBatch = new TaSalesBatch();
226
+                taSalesBatch.setSalesBatchId(taPreselection.getSalesBatchId());
227
+                taSalesBatch.setPreselectionStartTime(taPreselection.getPreselectionStartTime());
228
+                taSalesBatch.setPreselectionEndTime(taPreselection.getPreselectionEndTime());
229
+                Boolean updateResult = taSalesBatchService.updateById(taSalesBatch);
230
+                if (!updateResult) {
231
+                    responseBean.addError("fail");
232
+                    return responseBean;
233
+                }
234
+            }
235
+
236
+            taPreselection.setPreselectionId(id);
237
+            if (iTaPreselectionService.updateById(taPreselection)) {
238
+                responseBean.addSuccess(taPreselection);
239
+            } else {
240
+                responseBean.addError("fail");
241
+            }
242
+        } catch (Exception e) {
243
+            e.printStackTrace();
244
+            logger.error("taPreselectionUpdate -=- {}", e.toString());
245
+            responseBean.addError(e.getMessage());
246
+        }
247
+        return responseBean;
248
+    }
249
+
250
+    /**
251
+     * 根据id查询对象
252
+     *
253
+     * @param id 实体ID
254
+     */
255
+    @RequestMapping(value = "/admin/taPreselection/{id}", method = RequestMethod.GET)
256
+    public ResponseBean taPreselectionGet(@PathVariable Integer id, HttpServletRequest request) {
257
+        ResponseBean responseBean = new ResponseBean();
258
+        try {
259
+            responseBean = iTaPreselectionService.getPresecretById(id, getOrgId(request));
260
+        } catch (Exception e) {
261
+            e.printStackTrace();
262
+            logger.error("taPreselectionDelete -=- {}", e.toString());
263
+            responseBean.addError(e.getMessage());
264
+        }
265
+        return responseBean;
266
+    }
267
+
268
+    /**
269
+     * 校验批次下是否有预选
270
+     *
271
+     * @param salesBatchId
272
+     * @param request
273
+     * @return
274
+     */
275
+    @RequestMapping(value = "/admin/checkHavingRecord/{salesBatchId}", method = RequestMethod.GET)
276
+    public ResponseBean checkHavingRecordForSalesBatch(@PathVariable("salesBatchId") Integer salesBatchId, HttpServletRequest request) {
277
+        ResponseBean responseBean = new ResponseBean();
278
+        try {
279
+            responseBean = iTaPreselectionService.checkHavingRecordForSalesBatch(salesBatchId, getOrgId(request));
280
+            logger.info("checkHavingRecordForSalesBatch 返回结果:{}", JSONObject.toJSONString(responseBean));
281
+        } catch (Exception e) {
282
+            e.printStackTrace();
283
+            logger.error("checkHavingRecordForSalesBatch -=- {}", e);
284
+            responseBean.addError(e.getMessage());
285
+        }
286
+        return responseBean;
287
+    }
288
+}

+ 61
- 16
src/main/java/com/huiju/estateagents/controller/TaPreselectionRecordController.java 查看文件

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
6 6
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7 7
 import com.huiju.estateagents.base.BaseController;
8 8
 import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.bo.request.PresecretRecordRequestBO;
9 10
 import com.huiju.estateagents.entity.TaPreselectionRecord;
10 11
 import com.huiju.estateagents.service.ITaPreselectionRecordService;
11 12
 import org.apache.commons.lang3.StringUtils;
@@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
16 17
 import org.springframework.web.bind.annotation.*;
17 18
 
18 19
 import javax.servlet.http.HttpServletRequest;
20
+import java.util.List;
19 21
 
20 22
 /**
21 23
  * <p>
@@ -80,7 +82,7 @@ public class TaPreselectionRecordController extends BaseController {
80 82
         try {
81 83
 
82 84
             // 校验参数
83
-            if (StringUtils.isBlank(taPreselectionRecord.getHouseId()) || StringUtils.isBlank(taPreselectionRecord.getPersonId()) ||
85
+            if (null == taPreselectionRecord.getHouseId() || StringUtils.isBlank(taPreselectionRecord.getPersonId()) ||
84 86
                 taPreselectionRecord.getOrgId() == null) {
85 87
                 logger.info("taPreselectionRecordAdd 参数错误");
86 88
                 responseBean.addError("参数错误");
@@ -170,7 +172,7 @@ public class TaPreselectionRecordController extends BaseController {
170 172
      * @return
171 173
      */
172 174
     @RequestMapping(value = "/wx/taPreselectionRecordCancel", method = RequestMethod.DELETE)
173
-    public ResponseBean taPreselectionRecordCancel(@RequestParam("houseId") String houseId,
175
+    public ResponseBean taPreselectionRecordCancel(@RequestParam("houseId") Integer houseId,
174 176
                                                    @RequestParam("personId") String personId) {
175 177
         ResponseBean responseBean = new ResponseBean();
176 178
         try {
@@ -185,21 +187,34 @@ public class TaPreselectionRecordController extends BaseController {
185 187
     /**
186 188
      * 获取当前用户预选记录
187 189
      *
188
-     * @param pageNum  页码
189
-     * @param pageSize 分页大小
190
-     * @param personId 用户ID
190
+     * @param buildingId
191
+     * @param salesBatchId
192
+     * @param apartmentId
193
+     * @param houseLockingStatus
194
+     * @param customerLocked
195
+     * @param pageNumber
196
+     * @param pageSize
197
+     * @param personId
198
+     * @param source             来源,raiseChoose 为认筹添加房源来源
199
+     * @param request
191 200
      * @return
192
-     * @author gushaoyong
193 201
      */
194 202
     @RequestMapping(value = "/wx/listPreselectionRecord", method = RequestMethod.GET)
195
-    public ResponseBean listPreselectionRecord(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
203
+    public ResponseBean listPreselectionRecord(@RequestParam(value = "buildingId", required = false) String buildingId,
204
+                                               @RequestParam(value = "salesBatchId", required = false) Integer salesBatchId,
205
+                                               @RequestParam(value = "apartmentId", required = false) String apartmentId,
206
+                                               @RequestParam(value = "houseLockingStatus", required = false) String houseLockingStatus,
207
+                                               @RequestParam(value = "customerLocked", required = false) String customerLocked,
208
+                                               @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
196 209
                                                @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
197 210
                                                @RequestParam("personId") String personId,
211
+                                               @RequestParam(value = "source", required = false) String source,
198 212
                                                HttpServletRequest request) {
199 213
         ResponseBean responseBean = new ResponseBean();
200 214
         Integer orgId = getOrgId(request);
201 215
         try {
202
-            responseBean.addSuccess(iTaPreselectionRecordService.listPreselectionRecord(pageNum, pageSize, orgId, personId));
216
+            responseBean.addSuccess(iTaPreselectionRecordService.listPreselectionRecord(pageNumber, pageSize, orgId, personId, buildingId,
217
+                    salesBatchId, apartmentId, houseLockingStatus, customerLocked, source));
203 218
         } catch (Exception e) {
204 219
             logger.error("listPreselectionRecord -=- {}", e);
205 220
             responseBean.addError(e.getMessage());
@@ -207,18 +222,27 @@ public class TaPreselectionRecordController extends BaseController {
207 222
         return responseBean;
208 223
     }
209 224
 
210
-    @RequestMapping(value = "/admin/taPreselectRecord", method = RequestMethod.GET)
211
-    public ResponseBean selectPreSelectRecordList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
225
+    /**
226
+     * 查询预选记录列表
227
+     *
228
+     * @param recordRequestBO
229
+     * @param salesBatchId
230
+     * @param pageNum
231
+     * @param pageSize
232
+     * @param request
233
+     * @return
234
+     */
235
+    @RequestMapping(value = "/admin/taPreselectRecord/{salesBatchId}", method = RequestMethod.GET)
236
+    public ResponseBean selectPreSelectRecordList(PresecretRecordRequestBO recordRequestBO,
237
+                                                  @PathVariable("salesBatchId") Integer salesBatchId,
238
+                                                  @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
212 239
                                                   @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
213
-                                                  @RequestParam(value = "salesBatchId") String salesBatchId,
214
-                                                  @RequestParam(value = "house", required = false) Integer house,
215
-                                                  @RequestParam(value = "phone", required = false) String phone,
216
-                                                  @RequestParam(value = "apartmentId", required = false) String apartmentId,
217
-                                                  @RequestParam(value = "status", required = false) Integer status,
218 240
                                                   HttpServletRequest request) {
219 241
         ResponseBean responseBean = new ResponseBean();
220 242
         try {
221
-            responseBean = iTaPreselectionRecordService.selectPreSelectRecordList(pageNum, pageSize, salesBatchId, house, getOrgId(request), phone, apartmentId, status);
243
+            recordRequestBO.setSalesBatchId(salesBatchId);
244
+            recordRequestBO.setOrgId(getOrgId(request));
245
+            responseBean = iTaPreselectionRecordService.selectPreSelectRecordList(recordRequestBO, pageNum, pageSize);
222 246
         } catch (Exception e) {
223 247
             e.printStackTrace();
224 248
             logger.error("taHousingResourcesList -=- {}", e.toString());
@@ -226,4 +250,25 @@ public class TaPreselectionRecordController extends BaseController {
226 250
         }
227 251
         return responseBean;
228 252
     }
253
+
254
+    /**
255
+     * 批量删除预选记录
256
+     *
257
+     * @param preselectionRecordList
258
+     * @param request
259
+     * @return
260
+     */
261
+    @RequestMapping(value = "/admin/preselectRecord/batchDelete", method = RequestMethod.PUT)
262
+    public ResponseBean batchDeletePreselectRecord(@RequestBody List<TaPreselectionRecord> preselectionRecordList,
263
+                                                   HttpServletRequest request) {
264
+        ResponseBean responseBean = new ResponseBean();
265
+        try {
266
+            responseBean = iTaPreselectionRecordService.batchDeletePreselectRecord(preselectionRecordList, getOrgId(request), getUserId(request));
267
+        } catch (Exception e) {
268
+            e.printStackTrace();
269
+            logger.error("batchDeletePreselectRecord -=- {}", e.toString());
270
+            responseBean.addError(e.getMessage());
271
+        }
272
+        return responseBean;
273
+    }
229 274
 }

+ 256
- 0
src/main/java/com/huiju/estateagents/controller/TaRaiseController.java 查看文件

@@ -0,0 +1,256 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
+import com.huiju.estateagents.base.BaseController;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.common.CommConstant;
10
+import com.huiju.estateagents.entity.TaPersonBuilding;
11
+import com.huiju.estateagents.entity.TaRaise;
12
+import com.huiju.estateagents.service.ITaRaiseService;
13
+import com.huiju.estateagents.service.ITdCityService;
14
+import io.swagger.models.auth.In;
15
+import org.slf4j.Logger;
16
+import org.slf4j.LoggerFactory;
17
+import org.springframework.beans.factory.annotation.Autowired;
18
+import org.springframework.web.bind.annotation.*;
19
+
20
+import javax.servlet.http.HttpServletRequest;
21
+import java.time.LocalDateTime;
22
+import java.util.List;
23
+
24
+/**
25
+ * <p>
26
+ * 认筹表  前端控制器
27
+ * </p>
28
+ *
29
+ * @author jobob
30
+ * @since 2020-02-26
31
+ */
32
+@RestController
33
+@RequestMapping("/api")
34
+public class TaRaiseController extends BaseController {
35
+
36
+    private final Logger logger = LoggerFactory.getLogger(TaRaiseController.class);
37
+
38
+    @Autowired
39
+    public ITaRaiseService iTaRaiseService;
40
+
41
+    @Autowired
42
+    public ITdCityService iTdCityService;
43
+
44
+    /**
45
+     * 获取认筹列表
46
+     *
47
+     * @param pageNum
48
+     * @param pageSize
49
+     * @param buildingId
50
+     * @param salesBatchName
51
+     * @param status
52
+     * @param request
53
+     * @return
54
+     */
55
+    @RequestMapping(value = "/admin/listRaiseByCondition", method = RequestMethod.GET)
56
+    public ResponseBean listRaiseByCondition(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
57
+                                             @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
58
+                                             String buildingId, String salesBatchName, Integer status,
59
+                                             HttpServletRequest request) {
60
+        ResponseBean responseBean = new ResponseBean();
61
+
62
+        try {
63
+            Integer orgId = getOrgId(request);
64
+            List<TaPersonBuilding> personBuildingList = getTaPersonBuildingListByUserId(request);
65
+
66
+            responseBean = iTaRaiseService.listRaiseByCondition(pageSize, pageNum, salesBatchName, buildingId, orgId, status, personBuildingList);
67
+            logger.info("listRaiseByCondition 返回结果:{}", JSONObject.toJSONString(responseBean));
68
+        } catch (Exception e) {
69
+            logger.error("listRaiseByCondition -=- {}", e);
70
+            responseBean.addError(e.getMessage());
71
+        }
72
+        return responseBean;
73
+    }
74
+
75
+
76
+    /**
77
+     * 分页查询列表
78
+     *
79
+     * @param pageNum
80
+     * @param pageSize
81
+     * @return
82
+     */
83
+    @RequestMapping(value = "/admin/taRaise", method = RequestMethod.GET)
84
+    public ResponseBean taRaiseList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
85
+                                    @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
86
+        ResponseBean responseBean = new ResponseBean();
87
+        try {
88
+            //使用分页插件
89
+            IPage<TaRaise> pg = new Page<>(pageNum, pageSize);
90
+            QueryWrapper<TaRaise> queryWrapper = new QueryWrapper<>();
91
+            queryWrapper.orderByDesc("create_date");
92
+
93
+            IPage<TaRaise> result = iTaRaiseService.page(pg, queryWrapper);
94
+            responseBean.addSuccess(result);
95
+        } catch (Exception e) {
96
+            e.printStackTrace();
97
+            logger.error("taRaiseList -=- {}", e.toString());
98
+            responseBean.addError(e.getMessage());
99
+        }
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 保存对象
105
+     *
106
+     * @param taRaise 实体对象
107
+     * @return
108
+     */
109
+    @RequestMapping(value = "/admin/taRaise", method = RequestMethod.POST)
110
+    public ResponseBean taRaiseAdd(@RequestBody TaRaise taRaise, HttpServletRequest request) {
111
+        ResponseBean responseBean = new ResponseBean();
112
+        try {
113
+            // 参数校验
114
+            Integer raisePrice = taRaise.getRaisePrice();
115
+            if (raisePrice != null && (raisePrice > CommConstant.MAX_RAISE_PRICE || raisePrice < 0)) {
116
+                responseBean.addError("认筹金额范围为0到50000元");
117
+                return responseBean;
118
+            }
119
+
120
+            Integer orgId = getOrgId(request);
121
+
122
+            // 校验批次是否已经认筹过
123
+            QueryWrapper<TaRaise> taRaiseQueryWrapper = new QueryWrapper<>();
124
+            taRaiseQueryWrapper.eq("org_Id", orgId);
125
+            taRaiseQueryWrapper.eq("sales_batch_id", taRaise.getSalesBatchId());
126
+            taRaiseQueryWrapper.eq("status", 1);
127
+            TaRaise tr = iTaRaiseService.getOne(taRaiseQueryWrapper);
128
+            if (tr != null) {
129
+                responseBean.addError("该销售批次已添加过认筹");
130
+                return responseBean;
131
+            }
132
+
133
+            taRaise.setOrgId(orgId);
134
+            taRaise.setRaisePrice(taRaise.getRaisePrice() != null ? taRaise.getRaisePrice() : null );
135
+            taRaise.setStatus(CommConstant.IS_PUBLISH);
136
+            taRaise.setCreateDate(LocalDateTime.now());
137
+            if (iTaRaiseService.save(taRaise)) {
138
+                responseBean.addSuccess(taRaise);
139
+            } else {
140
+                responseBean.addError("fail");
141
+            }
142
+        } catch (Exception e) {
143
+            e.printStackTrace();
144
+            logger.error("taRaiseAdd -=- {}", e.toString());
145
+            responseBean.addError(e.getMessage());
146
+        }
147
+        return responseBean;
148
+    }
149
+
150
+    /**
151
+     * 批量删除
152
+     *
153
+     * @param taRaiseList
154
+     * @param request
155
+     * @return
156
+     */
157
+    @ResponseBody
158
+    @RequestMapping(value = "/admin/raise/batchDelete", method = RequestMethod.DELETE)
159
+    public ResponseBean batchDelete(@RequestBody List<TaRaise> taRaiseList, HttpServletRequest request) {
160
+        ResponseBean responseBean = new ResponseBean();
161
+        try {
162
+            Integer orgId = getOrgId(request);
163
+            responseBean = iTaRaiseService.batchDelete(taRaiseList, orgId);
164
+
165
+        } catch (Exception e) {
166
+            e.printStackTrace();
167
+            logger.error("taRaiseDelete -=- {}", e.toString());
168
+            responseBean.addError(e.getMessage());
169
+        }
170
+        return responseBean;
171
+    }
172
+
173
+    /**
174
+     * 根据id删除对象
175
+     *
176
+     * @param id 实体ID
177
+     */
178
+    @ResponseBody
179
+    @RequestMapping(value = "/taRaise/{id}", method = RequestMethod.DELETE)
180
+    public ResponseBean taRaiseDelete(@PathVariable Integer id) {
181
+        ResponseBean responseBean = new ResponseBean();
182
+        try {
183
+            if (iTaRaiseService.removeById(id)) {
184
+                responseBean.addSuccess("success");
185
+            } else {
186
+                responseBean.addError("fail");
187
+            }
188
+        } catch (Exception e) {
189
+            e.printStackTrace();
190
+            logger.error("taRaiseDelete -=- {}", e.toString());
191
+            responseBean.addError(e.getMessage());
192
+        }
193
+        return responseBean;
194
+    }
195
+
196
+    /**
197
+     * 修改对象
198
+     *
199
+     * @param id      实体ID
200
+     * @param taRaise 实体对象
201
+     * @return
202
+     */
203
+    @RequestMapping(value = "/admin/taRaise/{id}", method = RequestMethod.PUT)
204
+    public ResponseBean taRaiseUpdate(@PathVariable Integer id,
205
+                                      @RequestBody TaRaise taRaise) {
206
+        ResponseBean responseBean = new ResponseBean();
207
+        try {
208
+            Integer raisePrice = taRaise.getRaisePrice();
209
+            if (raisePrice != null && (raisePrice > CommConstant.MAX_RAISE_PRICE || raisePrice < 0)) {
210
+                responseBean.addError("认筹金额范围为0到50000元");
211
+                return responseBean;
212
+            }
213
+
214
+            taRaise.setRaiseId(id);
215
+            taRaise.setRaisePrice(taRaise.getRaisePrice() != null ? taRaise.getRaisePrice() : null);
216
+            if (iTaRaiseService.updateById(taRaise)) {
217
+                responseBean.addSuccess(taRaise);
218
+            } else {
219
+                responseBean.addError("fail");
220
+            }
221
+        } catch (Exception e) {
222
+            e.printStackTrace();
223
+            logger.error("taRaiseUpdate -=- {}", e.toString());
224
+            responseBean.addError(e.getMessage());
225
+        }
226
+        return responseBean;
227
+    }
228
+
229
+    /**
230
+     * 根据id查询对象
231
+     *
232
+     * @param id 实体ID
233
+     */
234
+    @RequestMapping(value = "/admin/taRaise/{id}", method = RequestMethod.GET)
235
+    public ResponseBean taRaiseGet(@PathVariable Integer id, HttpServletRequest request) {
236
+        ResponseBean responseBean = new ResponseBean();
237
+        try {
238
+            responseBean = iTaRaiseService.getRaiseById(id, getOrgId(request));
239
+        } catch (Exception e) {
240
+            e.printStackTrace();
241
+            logger.error("taRaiseDelete -=- {}", e.toString());
242
+            responseBean.addError(e.getMessage());
243
+        }
244
+        return responseBean;
245
+    }
246
+
247
+    @GetMapping("/wx/taRaise")
248
+    public ResponseBean getRaiseProfile(@RequestParam(required = false) Integer salesBatchId,
249
+                                        @RequestParam(required = false) Integer raiseId,
250
+                                        @RequestParam(required = false) Integer raiseRecordId,
251
+                                        HttpServletRequest request) {
252
+        TaRaise taRaise = iTaRaiseService.getRaiseProfile(raiseId, raiseRecordId, salesBatchId);
253
+        return ResponseBean.success(taRaise);
254
+    }
255
+
256
+}

+ 170
- 0
src/main/java/com/huiju/estateagents/controller/TaRaiseHouseController.java 查看文件

@@ -0,0 +1,170 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.entity.TaRaiseHouse;
9
+import com.huiju.estateagents.service.ITaRaiseHouseService;
10
+import com.huiju.estateagents.service.ITaRaiseRecordService;
11
+import org.slf4j.Logger;
12
+import org.slf4j.LoggerFactory;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+
16
+import javax.servlet.http.HttpServletRequest;
17
+import java.time.LocalDateTime;
18
+
19
+/**
20
+ * <p>
21
+ * 认筹单与房源关系表  前端控制器
22
+ * </p>
23
+ *
24
+ * @author jobob
25
+ * @since 2020-02-26
26
+ */
27
+@RestController
28
+@RequestMapping("/api")
29
+public class TaRaiseHouseController extends BaseController {
30
+
31
+    private final Logger logger = LoggerFactory.getLogger(TaRaiseHouseController.class);
32
+
33
+    @Autowired
34
+    public ITaRaiseHouseService iTaRaiseHouseService;
35
+
36
+    @Autowired
37
+    private ITaRaiseRecordService iTaRaiseRecordService;
38
+
39
+
40
+    /**
41
+     * 分页查询列表
42
+     *
43
+     * @param pageNum
44
+     * @param pageSize
45
+     * @return
46
+     */
47
+    @RequestMapping(value = "/taRaiseHouse", method = RequestMethod.GET)
48
+    public ResponseBean taRaiseHouseList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
49
+                                         @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
50
+        ResponseBean responseBean = new ResponseBean();
51
+        try {
52
+            //使用分页插件
53
+            IPage<TaRaiseHouse> pg = new Page<>(pageNum, pageSize);
54
+            QueryWrapper<TaRaiseHouse> queryWrapper = new QueryWrapper<>();
55
+            queryWrapper.orderByDesc("create_date");
56
+
57
+            IPage<TaRaiseHouse> result = iTaRaiseHouseService.page(pg, queryWrapper);
58
+            responseBean.addSuccess(result);
59
+        } catch (Exception e) {
60
+            e.printStackTrace();
61
+            logger.error("taRaiseHouseList -=- {}", e.toString());
62
+            responseBean.addError(e.getMessage());
63
+        }
64
+        return responseBean;
65
+    }
66
+
67
+    /**
68
+     * 保存对象
69
+     *
70
+     * @param taRaiseHouse 实体对象
71
+     * @return
72
+     */
73
+    @RequestMapping(value = "/admin/taRaiseHouse", method = RequestMethod.POST)
74
+    public ResponseBean taRaiseHouseAdd(TaRaiseHouse taRaiseHouse, HttpServletRequest request) {
75
+        ResponseBean responseBean = new ResponseBean();
76
+        try {
77
+
78
+            // 校验参数
79
+            if (taRaiseHouse.getRaiseRecordId() == null) {
80
+                responseBean.addError("参数错误");
81
+                return responseBean;
82
+            }
83
+
84
+            Integer orgId = getOrgId(request);
85
+            Integer userId = getUserId(request);
86
+
87
+            // 认筹表房源数+1
88
+            iTaRaiseRecordService.addHouseNum(taRaiseHouse.getRaiseRecordId(), orgId, userId);
89
+
90
+            taRaiseHouse.setOrgId(orgId);
91
+            taRaiseHouse.setCreateDate(LocalDateTime.now());
92
+            if (iTaRaiseHouseService.save(taRaiseHouse)) {
93
+                responseBean.addSuccess(taRaiseHouse);
94
+            } else {
95
+                responseBean.addError("fail");
96
+            }
97
+        } catch (Exception e) {
98
+            e.printStackTrace();
99
+            logger.error("taRaiseHouseAdd -=- {}", e.toString());
100
+            responseBean.addError(e.getMessage());
101
+        }
102
+        return responseBean;
103
+    }
104
+
105
+    /**
106
+     * 根据id删除对象
107
+     *
108
+     * @param id 实体ID
109
+     */
110
+    @ResponseBody
111
+    @RequestMapping(value = "/taRaiseHouse/{id}", method = RequestMethod.DELETE)
112
+    public ResponseBean taRaiseHouseDelete(@PathVariable Integer id) {
113
+        ResponseBean responseBean = new ResponseBean();
114
+        try {
115
+            if (iTaRaiseHouseService.removeById(id)) {
116
+                responseBean.addSuccess("success");
117
+            } else {
118
+                responseBean.addError("fail");
119
+            }
120
+        } catch (Exception e) {
121
+            e.printStackTrace();
122
+            logger.error("taRaiseHouseDelete -=- {}", e.toString());
123
+            responseBean.addError(e.getMessage());
124
+        }
125
+        return responseBean;
126
+    }
127
+
128
+    /**
129
+     * 修改对象
130
+     *
131
+     * @param id           实体ID
132
+     * @param taRaiseHouse 实体对象
133
+     * @return
134
+     */
135
+    @RequestMapping(value = "/taRaiseHouse/{id}", method = RequestMethod.PUT)
136
+    public ResponseBean taRaiseHouseUpdate(@PathVariable Integer id,
137
+                                           @RequestBody TaRaiseHouse taRaiseHouse) {
138
+        ResponseBean responseBean = new ResponseBean();
139
+        try {
140
+            if (iTaRaiseHouseService.updateById(taRaiseHouse)) {
141
+                responseBean.addSuccess(taRaiseHouse);
142
+            } else {
143
+                responseBean.addError("fail");
144
+            }
145
+        } catch (Exception e) {
146
+            e.printStackTrace();
147
+            logger.error("taRaiseHouseUpdate -=- {}", e.toString());
148
+            responseBean.addError(e.getMessage());
149
+        }
150
+        return responseBean;
151
+    }
152
+
153
+    /**
154
+     * 根据id查询对象
155
+     *
156
+     * @param id 实体ID
157
+     */
158
+    @RequestMapping(value = "/taRaiseHouse/{id}", method = RequestMethod.GET)
159
+    public ResponseBean taRaiseHouseGet(@PathVariable Integer id) {
160
+        ResponseBean responseBean = new ResponseBean();
161
+        try {
162
+            responseBean.addSuccess(iTaRaiseHouseService.getById(id));
163
+        } catch (Exception e) {
164
+            e.printStackTrace();
165
+            logger.error("taRaiseHouseDelete -=- {}", e.toString());
166
+            responseBean.addError(e.getMessage());
167
+        }
168
+        return responseBean;
169
+    }
170
+}

+ 673
- 0
src/main/java/com/huiju/estateagents/controller/TaRaiseRecordController.java 查看文件

@@ -0,0 +1,673 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
+import com.huiju.estateagents.base.BaseController;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.bo.request.HousingRaiseRequestBO;
10
+import com.huiju.estateagents.bo.request.RaiseOrderRequestBO;
11
+import com.huiju.estateagents.bo.request.RaiseRecordRequestBO;
12
+import com.huiju.estateagents.center.taUser.entity.TaUser;
13
+import com.huiju.estateagents.center.taUser.service.ITaUserService;
14
+import com.huiju.estateagents.common.CommConstant;
15
+import com.huiju.estateagents.drainage.entity.TaDrainageRecord;
16
+import com.huiju.estateagents.entity.*;
17
+import com.huiju.estateagents.po.BuildingImgPO;
18
+import com.huiju.estateagents.service.*;
19
+import jodd.util.StringUtil;
20
+import org.apache.commons.collections.CollectionUtils;
21
+import org.apache.commons.lang3.StringUtils;
22
+import org.slf4j.Logger;
23
+import org.slf4j.LoggerFactory;
24
+import org.springframework.beans.factory.annotation.Autowired;
25
+import org.springframework.web.bind.annotation.*;
26
+
27
+import javax.servlet.http.HttpServletRequest;
28
+import java.time.LocalDateTime;
29
+import java.util.ArrayList;
30
+import java.util.HashMap;
31
+import java.util.List;
32
+import java.util.Map;
33
+import java.util.stream.Collectors;
34
+
35
+/**
36
+ * <p>
37
+ * 认筹单(认筹记录表)  前端控制器
38
+ * </p>
39
+ *
40
+ * @author jobob
41
+ * @since 2020-02-26
42
+ */
43
+@RestController
44
+@RequestMapping("/api")
45
+public class TaRaiseRecordController extends BaseController {
46
+
47
+    private final Logger logger = LoggerFactory.getLogger(TaRaiseRecordController.class);
48
+
49
+    @Autowired
50
+    public ITaRaiseRecordService iTaRaiseRecordService;
51
+
52
+    @Autowired
53
+    public ITaRaiseHouseService taRaiseHouseService;
54
+
55
+    @Autowired
56
+    public ITaHousingResourcesService taHousingResourcesService;
57
+
58
+    @Autowired
59
+    public ITaOrderService taOrderService;
60
+
61
+    @Autowired
62
+    public ITaBuildingImgService taBuildingImgService;
63
+
64
+    @Autowired
65
+    public ITaRaiseService taRaiseService;
66
+
67
+    @Autowired
68
+    public ITaBuildingApartmentService taBuildingApartmentService;
69
+
70
+    @Autowired
71
+    public ITaUserService taUserService;
72
+
73
+    @Autowired
74
+    public ITaPersonService taPersonService;
75
+
76
+    /**
77
+     * 条件查询房源认筹记录
78
+     *
79
+     * @param requestBO
80
+     * @param pageNumber
81
+     * @param pageSize
82
+     * @param request
83
+     * @return
84
+     */
85
+    @RequestMapping(value = "/admin/listHousingRaiseByCondition", method = RequestMethod.GET)
86
+    public ResponseBean listHousingRaiseByCondition(HousingRaiseRequestBO requestBO,
87
+                                                    @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
88
+                                                    @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
89
+                                                    HttpServletRequest request) {
90
+        logger.info("TaRaiseRecordController.listHousingRaiseByCondition 接收参数:bo:{},pageNumber:{},pageSize:{}", JSONObject.toJSONString(requestBO), pageNumber, pageSize);
91
+
92
+        ResponseBean responseBean = new ResponseBean();
93
+        try {
94
+            requestBO.setOrgId(getOrgId(request));
95
+            responseBean = iTaRaiseRecordService.listHousingRaiseByCondition(requestBO, pageNumber, pageSize);
96
+            logger.info("TaRaiseRecordController.listHousingRaiseByCondition 返回:{}", JSONObject.toJSONString(responseBean));
97
+        } catch (Exception e) {
98
+            logger.error("TaRaiseRecordController.listHousingRaiseByCondition -=- {}", e);
99
+            responseBean.addError(e.getMessage());
100
+        }
101
+        return responseBean;
102
+    }
103
+
104
+    /**
105
+     * 条件查询认筹单
106
+     *
107
+     * @param recordRequestBO
108
+     * @param pageNumber
109
+     * @param pageSize
110
+     * @param request
111
+     * @return
112
+     */
113
+    @RequestMapping(value = "/admin/listRaiseRecordByCondition", method = RequestMethod.GET)
114
+    public ResponseBean listRaiseRecordByCondition(RaiseRecordRequestBO recordRequestBO,
115
+                                                   @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
116
+                                                   @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
117
+                                                   HttpServletRequest request) {
118
+        logger.info("TaRaiseRecordController.listRaiseRecordByCondition 接收参数:bo:{},pageNumber:{},pageSize:{}", JSONObject.toJSONString(recordRequestBO), pageNumber, pageSize);
119
+
120
+        ResponseBean responseBean = new ResponseBean();
121
+        try {
122
+            recordRequestBO.setOrgId(getOrgId(request));
123
+            responseBean = iTaRaiseRecordService.listRaiseRecordByCondition(recordRequestBO, pageNumber, pageSize);
124
+            logger.info("TaRaiseRecordController.listRaiseRecordByCondition 返回:{}", JSONObject.toJSONString(responseBean));
125
+        } catch (Exception e) {
126
+            logger.error("TaRaiseRecordController.taRaiseRecordList -=- {}", e);
127
+            responseBean.addError(e.getMessage());
128
+        }
129
+        return responseBean;
130
+    }
131
+
132
+    /**
133
+     * 条件查询缴费单/退费单
134
+     * 备注:
135
+     * 缴费单:payStatus传 paid
136
+     * 退费单:payStatus传 refunded
137
+     *
138
+     * @param orderRequestBO
139
+     * @param pageNumber
140
+     * @param pageSize
141
+     * @param request
142
+     * @return
143
+     */
144
+    @RequestMapping(value = "/admin/listRaiseOrderByCondition", method = RequestMethod.GET)
145
+    public ResponseBean listRaiseOrderByCondition(RaiseOrderRequestBO orderRequestBO,
146
+                                                  @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
147
+                                                  @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
148
+                                                  HttpServletRequest request) {
149
+        logger.info("TaRaiseRecordController.listOrderByCondition 接收参数:bo:{},pageNumber:{},pageSize:{}", JSONObject.toJSONString(orderRequestBO), pageNumber, pageSize);
150
+
151
+        ResponseBean responseBean = new ResponseBean();
152
+        try {
153
+            orderRequestBO.setOrgId(getOrgId(request));
154
+            responseBean = iTaRaiseRecordService.listRaiseOrderByCondition(orderRequestBO, pageNumber, pageSize);
155
+            logger.info("TaRaiseRecordController.listOrderByCondition 返回:{}", JSONObject.toJSONString(responseBean));
156
+        } catch (Exception e) {
157
+            logger.error("TaRaiseRecordController.listOrderByCondition -=- {}", e);
158
+            responseBean.addError(e.getMessage());
159
+        }
160
+        return responseBean;
161
+    }
162
+
163
+    /**
164
+     * 批量作废
165
+     *
166
+     * @param raiseRecord
167
+     * @return
168
+     */
169
+    @RequestMapping(value = "/admin/batchInvalidRaiseRecord", method = RequestMethod.PUT)
170
+    public ResponseBean batchInvalidRaiseRecord(@RequestBody TaRaiseRecord raiseRecord, HttpServletRequest request) {
171
+
172
+        logger.info("TaRaiseRecordController.batchInvalidRaiseRecord 接收参数:TaRaiseRecord:{}", JSONObject.toJSONString(raiseRecord));
173
+
174
+        ResponseBean responseBean = new ResponseBean();
175
+        try {
176
+            // 校验参数
177
+            if (CollectionUtils.isEmpty(raiseRecord.getTaRaiseRecords()) || StringUtils.isBlank(raiseRecord.getInvalidReason())) {
178
+                responseBean.addError("参数错误");
179
+                return responseBean;
180
+            }
181
+
182
+            // 获取用户信息
183
+            TaUser taUser = taUserService.getUserInfoById(getUserId(request), getOrgId(request));
184
+
185
+            raiseRecord.getTaRaiseRecords().stream().forEach(record -> {
186
+                if (taUser != null) {
187
+                    record.setUpdateUserName(taUser.getUserName());
188
+                }
189
+                record.setInvalidReason(raiseRecord.getInvalidReason());
190
+                record.setUpdateDate(LocalDateTime.now());
191
+                record.setStatus(0);
192
+
193
+                // 更新房源认筹热度
194
+                iTaRaiseRecordService.updateForSubtractRaiseHeat(record.getRaiseRecordId());
195
+
196
+                //发送订阅消息
197
+                iTaRaiseRecordService.sendRaiseMsg(record.getRaiseRecordId(),record.getRaiseId(),"认筹通知","认筹单已作废","点击详情查看认筹单","具体原因查看详情",false);
198
+            });
199
+
200
+            if (iTaRaiseRecordService.updateBatchById(raiseRecord.getTaRaiseRecords())) {
201
+                responseBean.addSuccess("success");
202
+            } else {
203
+                responseBean.addError("fail");
204
+            }
205
+        } catch (Exception e) {
206
+            logger.error("TaRaiseRecordController.taRaiseRecordList -=- {}", e);
207
+            responseBean.addError(e.getMessage());
208
+        }
209
+        return responseBean;
210
+    }
211
+
212
+    /**
213
+     * 批量删除
214
+     *
215
+     * @param raiseRecord
216
+     * @return
217
+     */
218
+    @RequestMapping(value = "/admin/batchDeleteRaiseRecord", method = RequestMethod.PUT)
219
+    public ResponseBean batchDeleteRaiseRecord(@RequestBody TaRaiseRecord raiseRecord, HttpServletRequest request) {
220
+        logger.info("TaRaiseRecordController.batchDeleteRaiseRecord 接收参数:{}", JSONObject.toJSONString(raiseRecord));
221
+
222
+        ResponseBean responseBean = new ResponseBean();
223
+        try {
224
+            // 参数校验
225
+            if (CollectionUtils.isEmpty(raiseRecord.getTaRaiseRecords())) {
226
+                responseBean.addError("参数错误");
227
+                return responseBean;
228
+            }
229
+
230
+            // 获取用户信息
231
+            TaUser taUser = taUserService.getUserInfoById(getUserId(request), getOrgId(request));
232
+
233
+            raiseRecord.getTaRaiseRecords().stream().forEach(record -> {
234
+                if (taUser != null) {
235
+                    record.setUpdateUserName(taUser.getUserName());
236
+                }
237
+                record.setStatus(CommConstant.STATUS_DELETE);
238
+                record.setUpdateDate(LocalDateTime.now());
239
+
240
+                // 更新房源认筹热度
241
+                iTaRaiseRecordService.updateForSubtractRaiseHeat(record.getRaiseRecordId());
242
+
243
+                //发送订阅消息
244
+                iTaRaiseRecordService.sendRaiseMsg(record.getRaiseRecordId(),record.getRaiseId(),"认筹通知","认筹单已作废","点击详情查看认筹单","具体原因查看详情",false);
245
+            });
246
+
247
+            if (iTaRaiseRecordService.updateBatchById(raiseRecord.getTaRaiseRecords())) {
248
+                responseBean.addSuccess("success");
249
+            } else {
250
+                responseBean.addError("fail");
251
+            }
252
+        } catch (Exception e) {
253
+            logger.error("TaRaiseRecordController.taRaiseRecordList -=- {}", e);
254
+            responseBean.addError(e.getMessage());
255
+        }
256
+        return responseBean;
257
+    }
258
+
259
+    /**
260
+     * 批量线下缴费
261
+     *
262
+     * @param raiseRecord
263
+     * @return
264
+     */
265
+    @RequestMapping(value = "/admin/batchPayOfflineRaiseRecord", method = RequestMethod.PUT)
266
+    public ResponseBean batchPayOfflineRaiseRecord(@RequestBody TaRaiseRecord raiseRecord, HttpServletRequest request) {
267
+        logger.info("TaRaiseRecordController.batchPayOfflineRaiseRecord 接收参数:{}", JSONObject.toJSONString(raiseRecord));
268
+
269
+        ResponseBean responseBean = new ResponseBean();
270
+        try {
271
+            // 参数校验
272
+            if (CollectionUtils.isEmpty(raiseRecord.getTaRaiseRecords())) {
273
+                responseBean.addError("参数错误");
274
+                return responseBean;
275
+            }
276
+
277
+            Integer orgId = getOrgId(request);
278
+            TaRaiseRecord tr;
279
+            QueryWrapper<TaRaiseRecord> queryWrapper;
280
+            for (TaRaiseRecord record : raiseRecord.getTaRaiseRecords()) {
281
+                queryWrapper = new QueryWrapper<>();
282
+                queryWrapper.eq("org_id", orgId);
283
+                queryWrapper.eq("raise_record_id", record.getRaiseRecordId());
284
+                tr = iTaRaiseRecordService.getOne(queryWrapper);
285
+                if (tr == null) {
286
+                    responseBean.addError(String.format("未找到认筹单编号为%s的记录", record.getRaiseRecordId()));
287
+                    return responseBean;
288
+                }
289
+                if (-1 == tr.getStatus()) {
290
+                    responseBean.addError(String.format("认筹单编号为%s的记录已作废,请重新选择", record.getRaiseRecordId()));
291
+                    return responseBean;
292
+                }
293
+                if (!CommConstant.PAY_STATUS_UNPAID.equals(tr.getPayStatus())) {
294
+                    responseBean.addError(String.format("认筹单编号为%s的记录为未缴费状态 ,请重新选择", record.getRaiseRecordId()));
295
+                    return responseBean;
296
+                }
297
+            }
298
+
299
+            // 获取用户信息
300
+            TaUser taUser = taUserService.getUserInfoById(getUserId(request), orgId);
301
+
302
+            // 设置缴费状态为已缴费
303
+            raiseRecord.getTaRaiseRecords().stream().forEach(record -> {
304
+                if (taUser != null) {
305
+                    record.setUpdateUserName(taUser.getUserName());
306
+                }
307
+                record.setPayStatus(CommConstant.PAY_STATUS_PAID);
308
+                record.setUpdateDate(LocalDateTime.now());
309
+                //发送订阅消息
310
+                iTaRaiseRecordService.sendRaiseMsg(record.getRaiseRecordId(),record.getRaiseId(),"认筹通知","认筹已缴费","点击详情查看认筹单","您的认筹已成功缴费",false);
311
+            });
312
+
313
+            if (iTaRaiseRecordService.updateBatchById(raiseRecord.getTaRaiseRecords())) {
314
+                responseBean.addSuccess("success");
315
+            } else {
316
+                responseBean.addError("fail");
317
+            }
318
+        } catch (Exception e) {
319
+            logger.error("TaRaiseRecordController.batchPayOfflineRaiseRecord -=- {}", e);
320
+            responseBean.addError(e.getMessage());
321
+        }
322
+        return responseBean;
323
+    }
324
+
325
+    /**
326
+     * 批量线下退费
327
+     *
328
+     * @param raiseRecord
329
+     * @param refundReason 退款原因
330
+     * @return
331
+     */
332
+    @RequestMapping(value = "/admin/batchRefundOfflineRaiseRecord", method = RequestMethod.PUT)
333
+    public ResponseBean batchRefundOfflineRaiseRecord(@RequestBody TaRaiseRecord raiseRecord, String refundReason,
334
+                                                      HttpServletRequest request) {
335
+        logger.info("TaRaiseRecordController.batchRefundOfflineRaiseRecord 接收参数:{},refundReason:{}", JSONObject.toJSONString(raiseRecord), refundReason);
336
+
337
+        ResponseBean responseBean = new ResponseBean();
338
+        try {
339
+            // 参数校验
340
+            if (CollectionUtils.isEmpty(raiseRecord.getTaRaiseRecords())) {
341
+                responseBean.addError("参数错误");
342
+                return responseBean;
343
+            }
344
+
345
+            Integer orgId = getOrgId(request);
346
+            TaRaiseRecord tr;
347
+            QueryWrapper<TaRaiseRecord> queryWrapper;
348
+            for (TaRaiseRecord record : raiseRecord.getTaRaiseRecords()) {
349
+                queryWrapper = new QueryWrapper<>();
350
+                queryWrapper.eq("org_id", orgId);
351
+                queryWrapper.eq("raise_record_id", record.getRaiseRecordId());
352
+                tr = iTaRaiseRecordService.getOne(queryWrapper);
353
+                if (tr == null) {
354
+                    responseBean.addError(String.format("未找到认筹单编号为%s的记录", record.getRaiseRecordId()));
355
+                    return responseBean;
356
+                }
357
+                if (-1 == tr.getStatus()) {
358
+                    responseBean.addError(String.format("认筹单编号为%s的记录已作废,请重新选择", record.getRaiseRecordId()));
359
+                    return responseBean;
360
+                }
361
+                if (CommConstant.PAY_STATUS_UNPAID.equals(tr.getPayStatus())) {
362
+                    responseBean.addError(String.format("认筹单编号为%s的未缴费,请重新选择", record.getRaiseRecordId()));
363
+                    return responseBean;
364
+                }
365
+                if (CommConstant.PAY_STATUS_REFUNDED.equals(tr.getPayStatus())) {
366
+                    responseBean.addError(String.format("认筹单编号为%s的记录已退费,请重新选择", record.getRaiseRecordId()));
367
+                    return responseBean;
368
+                }
369
+            }
370
+
371
+            // 获取用户信息
372
+            TaUser taUser = taUserService.getUserInfoById(getUserId(request), orgId);
373
+
374
+            raiseRecord.getTaRaiseRecords().stream().forEach(record -> {
375
+                if (taUser != null) {
376
+                    record.setUpdateUserName(taUser.getUserName());
377
+                }
378
+                record.setPayStatus(CommConstant.PAY_STATUS_REFUNDED);
379
+                record.setRefundReason(raiseRecord.getRefundReason());
380
+                record.setUpdateDate(LocalDateTime.now());
381
+                //发送订阅消息
382
+                iTaRaiseRecordService.sendRaiseMsg(record.getRaiseRecordId(),record.getRaiseId(),"认筹通知","认筹已退费","点击详情查看认筹单","您的认筹已成功退费",false);
383
+            });
384
+
385
+            if (iTaRaiseRecordService.updateBatchById(raiseRecord.getTaRaiseRecords())) {
386
+                responseBean.addSuccess("success");
387
+            } else {
388
+                responseBean.addError("fail");
389
+            }
390
+        } catch (Exception e) {
391
+            logger.error("TaRaiseRecordController.batchRefundOfflineRaiseRecord -=- {}", e);
392
+            responseBean.addError(e.getMessage());
393
+        }
394
+        return responseBean;
395
+    }
396
+
397
+    /**
398
+     * 保存对象
399
+     *
400
+     * @param taRaiseRecord 实体对象
401
+     * @return
402
+     */
403
+    @RequestMapping(value = "/taRaiseRecord", method = RequestMethod.POST)
404
+    public ResponseBean taRaiseRecordAdd(@RequestBody TaRaiseRecord taRaiseRecord) {
405
+        ResponseBean responseBean = new ResponseBean();
406
+        try {
407
+            if (iTaRaiseRecordService.save(taRaiseRecord)) {
408
+                responseBean.addSuccess(taRaiseRecord);
409
+            } else {
410
+                responseBean.addError("fail");
411
+            }
412
+        } catch (Exception e) {
413
+            e.printStackTrace();
414
+            logger.error("taRaiseRecordAdd -=- {}", e.toString());
415
+            responseBean.addError(e.getMessage());
416
+        }
417
+        return responseBean;
418
+    }
419
+
420
+    /**
421
+     * 根据id删除对象
422
+     *
423
+     * @param id 实体ID
424
+     */
425
+    @ResponseBody
426
+    @RequestMapping(value = "/taRaiseRecord/{id}", method = RequestMethod.DELETE)
427
+    public ResponseBean taRaiseRecordDelete(@PathVariable Integer id) {
428
+        ResponseBean responseBean = new ResponseBean();
429
+        try {
430
+            if (iTaRaiseRecordService.removeById(id)) {
431
+                responseBean.addSuccess("success");
432
+            } else {
433
+                responseBean.addError("fail");
434
+            }
435
+        } catch (Exception e) {
436
+            e.printStackTrace();
437
+            logger.error("taRaiseRecordDelete -=- {}", e.toString());
438
+            responseBean.addError(e.getMessage());
439
+        }
440
+        return responseBean;
441
+    }
442
+
443
+    /**
444
+     * 修改对象
445
+     *
446
+     * @param id            实体ID
447
+     * @param taRaiseRecord 实体对象
448
+     * @return
449
+     */
450
+    @RequestMapping(value = "/taRaiseRecord/{id}", method = RequestMethod.PUT)
451
+    public ResponseBean taRaiseRecordUpdate(@PathVariable Integer id,
452
+                                            @RequestBody TaRaiseRecord taRaiseRecord) {
453
+        ResponseBean responseBean = new ResponseBean();
454
+        try {
455
+            if (iTaRaiseRecordService.updateById(taRaiseRecord)) {
456
+                responseBean.addSuccess(taRaiseRecord);
457
+            } else {
458
+                responseBean.addError("fail");
459
+            }
460
+        } catch (Exception e) {
461
+            e.printStackTrace();
462
+            logger.error("taRaiseRecordUpdate -=- {}", e.toString());
463
+            responseBean.addError(e.getMessage());
464
+        }
465
+        return responseBean;
466
+    }
467
+
468
+    /**
469
+     * 根据id查询对象
470
+     *
471
+     * @param id 实体ID
472
+     */
473
+    @RequestMapping(value = "/taRaiseRecord/{id}", method = RequestMethod.GET)
474
+    public ResponseBean taRaiseRecordGet(@PathVariable Integer id) {
475
+        ResponseBean responseBean = new ResponseBean();
476
+        try {
477
+            responseBean.addSuccess(iTaRaiseRecordService.getById(id));
478
+        } catch (Exception e) {
479
+            e.printStackTrace();
480
+            logger.error("taRaiseRecordDelete -=- {}", e.toString());
481
+            responseBean.addError(e.getMessage());
482
+        }
483
+        return responseBean;
484
+    }
485
+
486
+    /**
487
+     * 条件查询认筹单
488
+     *
489
+     * @param request
490
+     * @return
491
+     */
492
+    @RequestMapping(value = "/admin/getUserInfo", method = RequestMethod.GET)
493
+    public ResponseBean getUserInfo(@RequestParam("raiseRecordId") Integer raiseRecordId,
494
+                                    @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
495
+                                    @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
496
+                                    HttpServletRequest request) {
497
+        ResponseBean responseBean = new ResponseBean();
498
+        try {
499
+            responseBean.addSuccess(iTaRaiseRecordService.getUserInfo(raiseRecordId, getOrgId(request)));
500
+        } catch (Exception e) {
501
+            responseBean.addError(e.getMessage());
502
+        }
503
+        return responseBean;
504
+    }
505
+
506
+    /**
507
+     * 微信端下认筹单
508
+     *
509
+     * @param taRaiseRecord 实体对象
510
+     * @return
511
+     */
512
+    @RequestMapping(value = "/wx/taRaiseRecord", method = RequestMethod.POST)
513
+    public ResponseBean wxRaiseRecordAdd(@RequestBody TaRaiseRecord taRaiseRecord, HttpServletRequest request) {
514
+        ResponseBean responseBean = new ResponseBean();
515
+        try {
516
+            responseBean.addSuccess(iTaRaiseRecordService.saveRaiseInfo(taRaiseRecord, getOrgId(request), getPersonId(request)));
517
+        } catch (Exception e) {
518
+            logger.error("微信端下认筹单 -=- {}", e.toString());
519
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_MISSING_PARAMS);
520
+        }
521
+        return responseBean;
522
+    }
523
+
524
+
525
+    /**
526
+     * 微信端获取认筹单详细信息
527
+     *
528
+     * @param raiseRecordId 认筹旦id
529
+     * @return
530
+     */
531
+    @RequestMapping(value = "/wx/taRaiseRecord/{raiseRecordId}", method = RequestMethod.GET)
532
+    public ResponseBean wxGetRaiseRecordById(@PathVariable Integer raiseRecordId, HttpServletRequest request) {
533
+        ResponseBean responseBean = new ResponseBean();
534
+        try {
535
+            //获取认筹单信息
536
+            TaRaiseRecord taRaiseRecord = iTaRaiseRecordService.getById(raiseRecordId);
537
+
538
+            //认筹表数据
539
+            TaRaise taRaise = taRaiseService.getById(taRaiseRecord.getRaiseId());
540
+            taRaise.setRaisePrice(taRaise.getRaisePrice());
541
+            //置业顾问信息
542
+            TaUser consultantInfo = taUserService.getById(taRaiseRecord.getUserId());
543
+            if (null != consultantInfo) {
544
+                //职业顾问信息
545
+                TaPerson consultantPerson = taPersonService.getOne(new QueryWrapper<TaPerson>().eq("user_id", taRaiseRecord.getUserId()));
546
+                if (null != consultantPerson) {
547
+                    consultantInfo.setConsultantPersonId(consultantPerson.getPersonId());
548
+                }
549
+            }
550
+
551
+            taRaiseRecord.setConsultantInfo(consultantInfo);
552
+            //房源与认筹单关系图
553
+            List<TaRaiseHouse> taRaiseHouseList = taRaiseHouseService.list(new QueryWrapper<TaRaiseHouse>().eq("raise_record_id", taRaiseRecord.getRaiseRecordId()));
554
+
555
+            //房源信息
556
+            List<TaHousingResources> houseList = (List<TaHousingResources>) taHousingResourcesService.listByIds(taRaiseHouseList.stream().map(TaRaiseHouse::getHouseId).collect(Collectors.toList()));
557
+
558
+            //我的认筹和锁定
559
+            houseList.forEach(e -> {
560
+                taRaiseHouseList.forEach(r -> {
561
+                    //我的认筹
562
+                    if (e.getHouseId().equals(r.getHouseId()) && CommConstant.HOUSE_LOCKING_STATUS_LOCKED.equals(e.getHouseLockingStatus())) {
563
+                        e.setMineLocked("mine");
564
+                    }
565
+                });
566
+
567
+                //塞入户型信息
568
+                if (!StringUtils.isEmpty(e.getApartmentId())) {
569
+                    TaBuildingApartment buildingApartment = taBuildingApartmentService.getById(e.getApartmentId());
570
+                    e.setApartmentName(buildingApartment.getApartmentName());
571
+                    e.setInsideArea(buildingApartment.getInsideArea());
572
+                    e.setBuildingArea(buildingApartment.getBuildingArea());
573
+                    //塞入户型图信息
574
+                    List<String> apartMentIds = new ArrayList<>();
575
+                    apartMentIds.add(e.getApartmentId());
576
+                    List<TaBuildingImg> apartMentList = taBuildingImgService.getAparemnetList(apartMentIds);
577
+                    e.setApartmentImgList(apartMentList);
578
+                }
579
+            });
580
+
581
+            Map<String, Object> map = new HashMap<>();
582
+            map.put("refundOrder", null);
583
+            //订单信息
584
+            TaOrder taOrder = taOrderService.getById(taRaiseRecord.getOrderId());
585
+            if (null != taOrder) {
586
+                //退费信息
587
+                TaOrder refundOrder = taOrderService.getOne(new QueryWrapper<TaOrder>().eq("parent_order_id", taOrder.getOrderId()));
588
+                map.put("refundOrder", refundOrder);
589
+            }
590
+            map.put("taRaiseRecord", taRaiseRecord);
591
+            map.put("taRaiseHouseList", taRaiseHouseList);
592
+            map.put("houseList", houseList);
593
+            map.put("taOrder", taOrder);
594
+
595
+            map.put("taRaise", taRaise);
596
+            responseBean.addSuccess(map);
597
+        } catch (Exception e) {
598
+            e.printStackTrace();
599
+            logger.error("微信端获取认筹单详细信息 -=- {}", e.toString());
600
+            responseBean.addError(e.getMessage());
601
+        }
602
+        return responseBean;
603
+    }
604
+
605
+    /**
606
+     * 微信端获取认筹单列表信息
607
+     *
608
+     * @return
609
+     */
610
+    @RequestMapping(value = "/wx/taRaiseRecord/list", method = RequestMethod.GET)
611
+    public ResponseBean wxGetRaiseRecordList(@RequestParam(value = "buildingId", required = false) String buildingId,
612
+                                             @RequestParam(value = "salesBtchId", required = false) Integer salesBtchId,
613
+                                             @RequestParam(value = "houseLockingStatus", required = false) String houseLockingStatus,
614
+                                             @RequestParam(value = "pageNumber", defaultValue = "1") Integer pageNumber,
615
+                                             @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
616
+        ResponseBean responseBean = new ResponseBean();
617
+        try {
618
+            IPage<TaRaiseRecord> pg = new Page<>(pageNumber, pageSize);
619
+            //获取认筹单列表信息
620
+            QueryWrapper<TaRaiseRecord> taRaiseRecordQueryWrapper = new QueryWrapper<>();
621
+            taRaiseRecordQueryWrapper.eq("org_id", getOrgId(request));
622
+            taRaiseRecordQueryWrapper.eq("person_id", getPersonId(request));
623
+            taRaiseRecordQueryWrapper.eq(StringUtils.isNotEmpty(buildingId), "building_id", buildingId);
624
+            taRaiseRecordQueryWrapper.eq(null != salesBtchId, "sales_batch_id", salesBtchId);
625
+            taRaiseRecordQueryWrapper.eq(StringUtils.isNotEmpty(houseLockingStatus), "house_locking_status", houseLockingStatus);
626
+            IPage<TaRaiseRecord> page = iTaRaiseRecordService.page(pg, taRaiseRecordQueryWrapper);
627
+            List<TaRaiseRecord> list = page.getRecords();
628
+            list.forEach(e -> {
629
+                //房源与认筹单关系图
630
+                List<TaRaiseHouse> taRaiseHouseList = taRaiseHouseService.list(new QueryWrapper<TaRaiseHouse>().eq("raise_record_id", e.getRaiseRecordId()));
631
+                //房源信息
632
+                List<TaHousingResources> houseList = (List<TaHousingResources>) taHousingResourcesService.listByIds(taRaiseHouseList.stream().map(TaRaiseHouse::getHouseId).collect(Collectors.toList()));
633
+                //户型图列表
634
+                List<TaBuildingImg> apartMentList = taBuildingImgService.getAparemnetList(houseList.stream().map(TaHousingResources::getApartmentId).collect(Collectors.toList()));
635
+                e.setTaHousingResourcesList(houseList);
636
+                e.setTaHousingResourcesSize(houseList.size());
637
+                e.setBuildingImgList(apartMentList);
638
+            });
639
+
640
+            responseBean.addSuccess(page);
641
+        } catch (Exception e) {
642
+            e.printStackTrace();
643
+            logger.error("微信端获取认筹单列表信息 -=- {}", e.toString());
644
+            responseBean.addError(e.getMessage());
645
+        }
646
+        return responseBean;
647
+    }
648
+
649
+    /**
650
+     * 微信端客户选择线下缴费就需要把此人的认筹单的缴费状态改为线下缴费
651
+     *
652
+     */
653
+    @RequestMapping(value = "/wx/taRaiseRecord/{raiseRecordId}", method = RequestMethod.PUT)
654
+    public ResponseBean taRaiseRecordUpdate(@PathVariable Integer raiseRecordId,
655
+                                            HttpServletRequest request) {
656
+        ResponseBean responseBean = new ResponseBean();
657
+        try {
658
+            TaRaiseRecord taRaiseRecord = new TaRaiseRecord();
659
+            taRaiseRecord.setRaiseRecordId(raiseRecordId);
660
+            taRaiseRecord.setPayType(CommConstant.PAY_TYPE_OFFLINE);
661
+            if (iTaRaiseRecordService.updateById(taRaiseRecord)) {
662
+                responseBean.addSuccess(taRaiseRecord);
663
+            } else {
664
+                responseBean.addError("fail");
665
+            }
666
+        } catch (Exception e) {
667
+            e.printStackTrace();
668
+            logger.error("taRaiseRecordUpdate -=- {}", e.toString());
669
+            responseBean.addError(e.getMessage());
670
+        }
671
+        return responseBean;
672
+    }
673
+}

+ 137
- 15
src/main/java/com/huiju/estateagents/controller/TaSalesBatchController.java 查看文件

@@ -6,14 +6,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 6
 import com.huiju.estateagents.base.BaseController;
7 7
 import com.huiju.estateagents.base.ResponseBean;
8 8
 import com.huiju.estateagents.common.CommConstant;
9
+import com.huiju.estateagents.common.StringUtils;
9 10
 import com.huiju.estateagents.entity.*;
10 11
 import com.huiju.estateagents.service.*;
11
-import io.swagger.models.auth.In;
12
+import com.huiju.estateagents.service.impl.TaPreselectionServiceImpl;
13
+import com.huiju.estateagents.service.impl.TaRaiseServiceImpl;
12 14
 import org.slf4j.Logger;
13 15
 import org.slf4j.LoggerFactory;
14 16
 import org.springframework.beans.factory.annotation.Autowired;
15 17
 import org.springframework.web.bind.annotation.*;
16
-import sun.misc.Request;
17 18
 
18 19
 import javax.servlet.http.HttpServletRequest;
19 20
 import java.time.LocalDateTime;
@@ -49,6 +50,12 @@ public class TaSalesBatchController extends BaseController {
49 50
     @Autowired
50 51
     public IExtendContentService iExtendContentService;
51 52
 
53
+    @Autowired
54
+    public TaRaiseServiceImpl taRaiseService;
55
+
56
+    @Autowired
57
+    private TaPreselectionServiceImpl taPreselectionService;
58
+
52 59
     /**
53 60
      * 分页查询列表
54 61
      *
@@ -67,7 +74,7 @@ public class TaSalesBatchController extends BaseController {
67 74
             //使用分页插件
68 75
             IPage<TaSalesBatch> pg = new Page<>(pageNum, pageSize);
69 76
 
70
-            IPage<TaSalesBatch> result = iTaSalesBatchService.selectByCondition(pg, salesBatchName, buildingId, status, getOrgId(request),getTaPersonBuildingListByUserId(request));
77
+            IPage<TaSalesBatch> result = iTaSalesBatchService.selectByCondition(pg, salesBatchName, buildingId, status, getOrgId(request), getTaPersonBuildingListByUserId(request));
71 78
             responseBean.addSuccess(result);
72 79
         } catch (Exception e) {
73 80
             e.printStackTrace();
@@ -95,7 +102,7 @@ public class TaSalesBatchController extends BaseController {
95 102
             iTaSalesBatchService.save(taSalesBatch);
96 103
 
97 104
             QueryWrapper<TaMiniapp> taMiniappQuery = new QueryWrapper<>();
98
-            taMiniappQuery.eq("org_id", getOrgId(request));
105
+            taMiniappQuery.eq("org_id", orgId);
99 106
             TaMiniapp taMiniapp = taMiniappService.getOne(taMiniappQuery);
100 107
             // 生成二维码
101 108
             ResponseBean taMiniappQrcode = miniAppService.getQrCode(CommConstant.HOUSE_QRCODE.replace("#0", taSalesBatch.getSalesBatchId().toString()).replace("#1", "house"), taMiniapp.getMiniappId());
@@ -125,26 +132,55 @@ public class TaSalesBatchController extends BaseController {
125 132
     /**
126 133
      * 删除批次
127 134
      *
128
-     * @param taSalesBatch 实体对象
135
+     * @param salesBatchs
136
+     * @param request
129 137
      * @return
130 138
      */
131 139
     @RequestMapping(value = "/admin/taSalesBatch", method = RequestMethod.PUT)
132 140
     public ResponseBean taSalesBatchDel(@RequestBody List<TaSalesBatch> salesBatchs, HttpServletRequest request) {
133 141
         ResponseBean responseBean = new ResponseBean();
134 142
         try {
143
+
144
+            Integer orgId = getOrgId(request);
145
+
146
+            for (TaSalesBatch ts : salesBatchs) {
147
+
148
+                // 校验批次下是否有预选记录
149
+                QueryWrapper<TaPreselection> preselectionQueryWrapper = new QueryWrapper<>();
150
+                preselectionQueryWrapper.eq("org_id", orgId);
151
+                preselectionQueryWrapper.eq("sales_batch_id", ts.getSalesBatchId());
152
+                preselectionQueryWrapper.eq("status", 1);
153
+                TaPreselection preselection = taPreselectionService.getOne(preselectionQueryWrapper);
154
+                if (preselection != null) {
155
+                    responseBean.addError(String.format("销售批次%s关联有预选,请先删除关联的预选模块", ts.getSalesBatchName()));
156
+                    return responseBean;
157
+                }
158
+
159
+                // 校验批次下是否有认筹
160
+                QueryWrapper<TaRaise> raiseQueryWrapper = new QueryWrapper<>();
161
+                raiseQueryWrapper.eq("org_id", orgId);
162
+                raiseQueryWrapper.eq("sales_batch_id", ts.getSalesBatchId());
163
+                raiseQueryWrapper.eq("status", 1);
164
+                TaRaise raise = taRaiseService.getOne(raiseQueryWrapper);
165
+                if (raise != null) {
166
+                    responseBean.addError(String.format("销售批次%s关联有认筹,请先删除关联的预选模块", ts.getSalesBatchName()));
167
+                    return responseBean;
168
+                }
169
+            }
170
+
135 171
             List<Integer> liveActivityIds = new ArrayList<>();
136
-            for(TaSalesBatch taSalesBatch : salesBatchs){
172
+            for (TaSalesBatch taSalesBatch : salesBatchs) {
137 173
                 liveActivityIds.add(taSalesBatch.getSalesBatchId());
138 174
             }
139 175
             QueryWrapper<ExtendContent> queryWrapper = new QueryWrapper<>();
140
-            queryWrapper.eq("org_id",getOrgId(request));
141
-            queryWrapper.eq("content_type",CommConstant.SALES_BATCH);
142
-            queryWrapper.in("target_id",liveActivityIds);
176
+            queryWrapper.eq("org_id", getOrgId(request));
177
+            queryWrapper.eq("content_type", CommConstant.SALES_BATCH);
178
+            queryWrapper.in("target_id", liveActivityIds);
143 179
             List<ExtendContent> list = iExtendContentService.list(queryWrapper);
144 180
             list.forEach(e -> {
145 181
                 e.setStatus(CommConstant.NOT_PUBLISH);
146 182
             });
147
-            if (list.size() > 0){
183
+            if (list.size() > 0) {
148 184
                 iExtendContentService.updateBatchById(list);
149 185
             }
150 186
 
@@ -194,17 +230,41 @@ public class TaSalesBatchController extends BaseController {
194 230
         try {
195 231
             taSalesBatch.setSalesBatchId(id);
196 232
 
233
+            if (taSalesBatch.getStatus() != null && taSalesBatch.getStatus() != 1) {
234
+                // 校验批次下是否有预选记录
235
+                QueryWrapper<TaPreselection> preselectionQueryWrapper = new QueryWrapper<>();
236
+                preselectionQueryWrapper.eq("org_id", getOrgId(request));
237
+                preselectionQueryWrapper.eq("sales_batch_id", taSalesBatch.getSalesBatchId());
238
+                preselectionQueryWrapper.eq("status", 1);
239
+                TaPreselection preselection = taPreselectionService.getOne(preselectionQueryWrapper);
240
+                if (preselection != null) {
241
+                    responseBean.addError(String.format("销售批次%s关联有预选,请先删除关联的预选模块", taSalesBatch.getSalesBatchName()));
242
+                    return responseBean;
243
+                }
244
+
245
+                // 校验批次下是否有认筹
246
+                QueryWrapper<TaRaise> raiseQueryWrapper = new QueryWrapper<>();
247
+                raiseQueryWrapper.eq("org_id", getOrgId(request));
248
+                raiseQueryWrapper.eq("sales_batch_id", taSalesBatch.getSalesBatchId());
249
+                raiseQueryWrapper.eq("status", 1);
250
+                TaRaise raise = taRaiseService.getOne(raiseQueryWrapper);
251
+                if (raise != null) {
252
+                    responseBean.addError(String.format("销售批次%s关联有认筹,请先删除关联的认筹模块", taSalesBatch.getSalesBatchName()));
253
+                    return responseBean;
254
+                }
255
+            }
256
+
197 257
             QueryWrapper<ExtendContent> queryWrapper = new QueryWrapper<>();
198
-            queryWrapper.eq("org_id",getOrgId(request));
199
-            queryWrapper.eq("content_type",CommConstant.SALES_BATCH);
200
-            queryWrapper.eq("target_id",taSalesBatch.getSalesBatchId());
258
+            queryWrapper.eq("org_id", getOrgId(request));
259
+            queryWrapper.eq("content_type", CommConstant.SALES_BATCH);
260
+            queryWrapper.eq("target_id", taSalesBatch.getSalesBatchId());
201 261
             List<ExtendContent> list = iExtendContentService.list(queryWrapper);
202
-            if (CommConstant.NOT_PUBLISH.equals(taSalesBatch.getStatus())){
262
+            if (CommConstant.NOT_PUBLISH.equals(taSalesBatch.getStatus())) {
203 263
                 list.forEach(e -> {
204 264
                     e.setStatus(CommConstant.NOT_PUBLISH);
205 265
                 });
206 266
             }
207
-            if (list.size() > 0){
267
+            if (list.size() > 0) {
208 268
                 iExtendContentService.updateBatchById(list);
209 269
             }
210 270
 
@@ -274,4 +334,66 @@ public class TaSalesBatchController extends BaseController {
274 334
         }
275 335
         return responseBean;
276 336
     }
337
+
338
+    @RequestMapping(value = "/admin/salesBatchList", method = RequestMethod.GET)
339
+    public ResponseBean salesBatchList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
340
+                                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
341
+                                       @RequestParam(value = "salesBatchName", required = false) String salesBatchName,
342
+                                       @RequestParam(value = "buildingId", required = false) String buildingId,
343
+                                       @RequestParam(value = "status", required = false) Integer status, HttpServletRequest request) {
344
+        ResponseBean responseBean = new ResponseBean();
345
+        try {
346
+            //使用分页插件
347
+            IPage<TaSalesBatch> pg = new Page<>(pageNum, pageSize);
348
+
349
+            IPage<TaSalesBatch> result = iTaSalesBatchService.selectByCondition(pg, salesBatchName, buildingId, status, getOrgId(request), getTaPersonBuildingListByUserId(request));
350
+            List<TaSalesBatch> taSalesBatches = result.getRecords();
351
+            responseBean.addSuccess(taSalesBatches);
352
+        } catch (Exception e) {
353
+            e.printStackTrace();
354
+            logger.error("taSalesBatchList -=- {}", e.toString());
355
+            responseBean.addError(e.getMessage());
356
+        }
357
+        return responseBean;
358
+    }
359
+
360
+    /**
361
+     * 查询销售批次列表--小程序
362
+     */
363
+    @RequestMapping(value = "/wx/taSalesBatch/choice", method = RequestMethod.GET)
364
+    public ResponseBean taSalesBatchGetForMiniApp(@RequestParam(value = "buildingId", required = false) String buildingId, HttpServletRequest request) {
365
+        ResponseBean responseBean = new ResponseBean();
366
+        try {
367
+            QueryWrapper<TaSalesBatch> taSalesBatchQueryWrapper = new QueryWrapper<>();
368
+            taSalesBatchQueryWrapper.eq("org_id", getOrgId(request));
369
+            taSalesBatchQueryWrapper.eq(!StringUtils.isEmpty(buildingId), "building_id", buildingId);
370
+            taSalesBatchQueryWrapper.eq("status", CommConstant.STATUS_NORMAL);
371
+            List<TaSalesBatch> list = iTaSalesBatchService.list(taSalesBatchQueryWrapper);
372
+            responseBean.addSuccess(list);
373
+        } catch (Exception e) {
374
+            e.printStackTrace();
375
+            logger.error("taSalesBatchGetForMiniApp -=- {}", e.toString());
376
+            responseBean.addError(e.getMessage());
377
+        }
378
+        return responseBean;
379
+    }
380
+
381
+    /**
382
+     * 根据销售批次查询项目信息
383
+     *
384
+     * @param request
385
+     * @return
386
+     */
387
+    @RequestMapping(value = "/admin/taSalesBatch/getBuildingById/{id}", method = RequestMethod.GET)
388
+    public ResponseBean getBuildingById(@PathVariable("id") String id, HttpServletRequest request) {
389
+        ResponseBean responseBean = new ResponseBean();
390
+        try {
391
+            responseBean = iTaSalesBatchService.getBuildingById(id, getOrgId(request));
392
+        } catch (Exception e) {
393
+            logger.error("taSalesBatchGetForMiniApp -=- {}", e);
394
+            responseBean.addError(e.getMessage());
395
+        }
396
+        return responseBean;
397
+    }
398
+
277 399
 }

+ 143
- 0
src/main/java/com/huiju/estateagents/controller/TaWxPayConfigController.java 查看文件

@@ -0,0 +1,143 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.entity.TaWxPayConfig;
9
+import com.huiju.estateagents.service.ITaWxPayConfigService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.*;
14
+
15
+/**
16
+ * <p>
17
+    * 微信支付设置  前端控制器
18
+    * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2020-02-26
22
+ */
23
+@RestController
24
+@RequestMapping("/")
25
+public class TaWxPayConfigController extends BaseController {
26
+
27
+    private final Logger logger = LoggerFactory.getLogger(TaWxPayConfigController.class);
28
+
29
+    @Autowired
30
+    public ITaWxPayConfigService iTaWxPayConfigService;
31
+
32
+
33
+    /**
34
+     * 分页查询列表
35
+     * @param pageNum
36
+     * @param pageSize
37
+     * @return
38
+     */
39
+    @RequestMapping(value="/taWxPayConfig",method= RequestMethod.GET)
40
+    public ResponseBean taWxPayConfigList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
41
+                                          @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
42
+        ResponseBean responseBean = new ResponseBean();
43
+        try {
44
+            //使用分页插件
45
+		    IPage<TaWxPayConfig> pg = new Page<>(pageNum, pageSize);
46
+            QueryWrapper<TaWxPayConfig> queryWrapper = new QueryWrapper<>();
47
+            queryWrapper.orderByDesc("create_date");
48
+
49
+            IPage<TaWxPayConfig> result = iTaWxPayConfigService.page(pg, queryWrapper);
50
+            responseBean.addSuccess(result);
51
+        }catch (Exception e){
52
+            e.printStackTrace();
53
+            logger.error("taWxPayConfigList -=- {}",e.toString());
54
+            responseBean.addError(e.getMessage());
55
+        }
56
+        return responseBean;
57
+    }
58
+
59
+    /**
60
+     * 保存对象
61
+     * @param taWxPayConfig 实体对象
62
+     * @return
63
+     */
64
+    @RequestMapping(value="/taWxPayConfig",method= RequestMethod.POST)
65
+    public ResponseBean taWxPayConfigAdd(@RequestBody TaWxPayConfig taWxPayConfig){
66
+        ResponseBean responseBean = new ResponseBean();
67
+        try {
68
+            if (iTaWxPayConfigService.save(taWxPayConfig)){
69
+                responseBean.addSuccess(taWxPayConfig);
70
+            }else {
71
+                responseBean.addError("fail");
72
+            }
73
+        }catch (Exception e){
74
+            e.printStackTrace();
75
+            logger.error("taWxPayConfigAdd -=- {}",e.toString());
76
+            responseBean.addError(e.getMessage());
77
+        }
78
+        return responseBean;
79
+    }
80
+
81
+    /**
82
+     * 根据id删除对象
83
+     * @param id  实体ID
84
+     */
85
+    @ResponseBody
86
+    @RequestMapping(value="/taWxPayConfig/{id}", method= RequestMethod.DELETE)
87
+    public ResponseBean taWxPayConfigDelete(@PathVariable Integer id){
88
+        ResponseBean responseBean = new ResponseBean();
89
+        try {
90
+            if(iTaWxPayConfigService.removeById(id)){
91
+                responseBean.addSuccess("success");
92
+            }else {
93
+                responseBean.addError("fail");
94
+            }
95
+        }catch (Exception e){
96
+            e.printStackTrace();
97
+            logger.error("taWxPayConfigDelete -=- {}",e.toString());
98
+            responseBean.addError(e.getMessage());
99
+        }
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 修改对象
105
+     * @param id  实体ID
106
+     * @param taWxPayConfig 实体对象
107
+     * @return
108
+     */
109
+    @RequestMapping(value="/taWxPayConfig/{id}",method= RequestMethod.PUT)
110
+    public ResponseBean taWxPayConfigUpdate(@PathVariable Integer id,
111
+                                        @RequestBody TaWxPayConfig taWxPayConfig){
112
+        ResponseBean responseBean = new ResponseBean();
113
+        try {
114
+            if (iTaWxPayConfigService.updateById(taWxPayConfig)){
115
+                responseBean.addSuccess(taWxPayConfig);
116
+            }else {
117
+                responseBean.addError("fail");
118
+            }
119
+        }catch (Exception e){
120
+            e.printStackTrace();
121
+            logger.error("taWxPayConfigUpdate -=- {}",e.toString());
122
+            responseBean.addError(e.getMessage());
123
+        }
124
+        return responseBean;
125
+    }
126
+
127
+    /**
128
+     * 根据id查询对象
129
+     * @param id  实体ID
130
+     */
131
+    @RequestMapping(value="/taWxPayConfig/{id}",method= RequestMethod.GET)
132
+    public ResponseBean taWxPayConfigGet(@PathVariable Integer id){
133
+        ResponseBean responseBean = new ResponseBean();
134
+        try {
135
+            responseBean.addSuccess(iTaWxPayConfigService.getById(id));
136
+        }catch (Exception e){
137
+            e.printStackTrace();
138
+            logger.error("taWxPayConfigDelete -=- {}",e.toString());
139
+            responseBean.addError(e.getMessage());
140
+        }
141
+        return responseBean;
142
+    }
143
+}

+ 50
- 43
src/main/java/com/huiju/estateagents/controller/TdCityController.java 查看文件

@@ -28,8 +28,8 @@ import java.util.List;
28 28
 
29 29
 /**
30 30
  * <p>
31
-    *  前端控制器
32
-    * </p>
31
+ * 前端控制器
32
+ * </p>
33 33
  *
34 34
  * @author jobob
35 35
  * @since 2019-08-07
@@ -51,16 +51,17 @@ public class TdCityController extends BaseController {
51 51
 
52 52
     /**
53 53
      * 中心端城市
54
+     *
54 55
      * @return
55 56
      */
56
-    @RequestMapping(value="/center/tdCity",method= RequestMethod.GET)
57
-    public ResponseBean tdCityList(@RequestParam(value = "leveltype", required = false) String leveltype){
57
+    @RequestMapping(value = "/center/tdCity", method = RequestMethod.GET)
58
+    public ResponseBean tdCityList(@RequestParam(value = "leveltype", required = false) String leveltype) {
58 59
         ResponseBean responseBean = new ResponseBean();
59 60
         try {
60
-            List<TdCity> result = iTdCityService.selectCity(leveltype,"");
61
+            List<TdCity> result = iTdCityService.selectCity(leveltype, "");
61 62
             responseBean.addSuccess(result);
62
-        }catch (Exception e){
63
-            logger.error("tdCityList -=- {}",e.toString());
63
+        } catch (Exception e) {
64
+            logger.error("tdCityList -=- {}", e.toString());
64 65
             responseBean.addError(e.getMessage());
65 66
         }
66 67
         return responseBean;
@@ -69,8 +70,8 @@ public class TdCityController extends BaseController {
69 70
     /**
70 71
      * 业务端城市
71 72
      */
72
-    @RequestMapping(value="/admin/tdCityList/tdCity",method= RequestMethod.GET)
73
-    public ResponseBean adminTdCityList(HttpServletRequest request){
73
+    @RequestMapping(value = "/admin/tdCityList/tdCity", method = RequestMethod.GET)
74
+    public ResponseBean adminTdCityList(HttpServletRequest request) {
74 75
         ResponseBean responseBean = new ResponseBean<>();
75 76
         List<TaOrgCity> taOrgCityList = taOrgCityMapper.selectAdminTdCityList(getOrgId(request));
76 77
         responseBean.addSuccess(taOrgCityList);
@@ -80,10 +81,11 @@ public class TdCityController extends BaseController {
80 81
 
81 82
     /**
82 83
      * 查询列表
84
+     *
83 85
      * @return
84 86
      */
85
-    @RequestMapping(value="/wx/tdCity",method= RequestMethod.GET)
86
-    public ResponseBean tdCityListWx(@RequestParam(value = "leveltype", required = false) String leveltype,HttpServletRequest request){
87
+    @RequestMapping(value = "/wx/tdCity", method = RequestMethod.GET)
88
+    public ResponseBean tdCityListWx(@RequestParam(value = "leveltype", required = false) String leveltype, HttpServletRequest request) {
87 89
         ResponseBean responseBean = new ResponseBean();
88 90
         String appId = request.getHeader("appId");
89 91
         try {
@@ -94,8 +96,8 @@ public class TdCityController extends BaseController {
94 96
             /**leveltype,暂时保留*/
95 97
             List<TdCity> result = iTdCityService.selectWxCity(leveltype, taMiniapp.getOrgId());
96 98
             responseBean.addSuccess(result);
97
-        }catch (Exception e){
98
-            logger.error("tdCityList -=- {}",e.toString());
99
+        } catch (Exception e) {
100
+            logger.error("tdCityList -=- {}", e.toString());
99 101
             responseBean.addError(e.getMessage());
100 102
         }
101 103
         return responseBean;
@@ -103,20 +105,21 @@ public class TdCityController extends BaseController {
103 105
 
104 106
     /**
105 107
      * 保存对象
108
+     *
106 109
      * @param tdCity 实体对象
107 110
      * @return
108 111
      */
109
-    @RequestMapping(value="/tdCity",method= RequestMethod.POST)
110
-    public ResponseBean tdCityAdd(@RequestBody TdCity tdCity){
112
+    @RequestMapping(value = "/tdCity", method = RequestMethod.POST)
113
+    public ResponseBean tdCityAdd(@RequestBody TdCity tdCity) {
111 114
         ResponseBean responseBean = new ResponseBean();
112 115
         try {
113
-            if (iTdCityService.save(tdCity)){
116
+            if (iTdCityService.save(tdCity)) {
114 117
                 responseBean.addSuccess(tdCity);
115
-            }else {
118
+            } else {
116 119
                 responseBean.addError("fail");
117 120
             }
118
-        }catch (Exception e){
119
-            logger.error("tdCityAdd -=- {}",e.toString());
121
+        } catch (Exception e) {
122
+            logger.error("tdCityAdd -=- {}", e.toString());
120 123
             responseBean.addError(e.getMessage());
121 124
         }
122 125
         return responseBean;
@@ -124,20 +127,21 @@ public class TdCityController extends BaseController {
124 127
 
125 128
     /**
126 129
      * 根据id删除对象
127
-     * @param id  实体ID
130
+     *
131
+     * @param id 实体ID
128 132
      */
129 133
     @ResponseBody
130
-    @RequestMapping(value="/tdCity/{id}", method= RequestMethod.DELETE)
131
-    public ResponseBean tdCityDelete(@PathVariable Integer id){
134
+    @RequestMapping(value = "/tdCity/{id}", method = RequestMethod.DELETE)
135
+    public ResponseBean tdCityDelete(@PathVariable Integer id) {
132 136
         ResponseBean responseBean = new ResponseBean();
133 137
         try {
134
-            if(iTdCityService.removeById(id)){
138
+            if (iTdCityService.removeById(id)) {
135 139
                 responseBean.addSuccess("success");
136
-            }else {
140
+            } else {
137 141
                 responseBean.addError("fail");
138 142
             }
139
-        }catch (Exception e){
140
-            logger.error("tdCityDelete -=- {}",e.toString());
143
+        } catch (Exception e) {
144
+            logger.error("tdCityDelete -=- {}", e.toString());
141 145
             responseBean.addError(e.getMessage());
142 146
         }
143 147
         return responseBean;
@@ -145,21 +149,22 @@ public class TdCityController extends BaseController {
145 149
 
146 150
     /**
147 151
      * 修改对象
152
+     *
148 153
      * @param tdCity 实体对象
149 154
      * @return
150 155
      */
151
-    @RequestMapping(value="/edit/tdCity/",method= RequestMethod.PUT)
156
+    @RequestMapping(value = "/edit/tdCity/", method = RequestMethod.PUT)
152 157
     public ResponseBean tdCityUpdate(@PathVariable List<TdCity> cities,
153
-                                        @RequestBody TdCity tdCity){
158
+                                     @RequestBody TdCity tdCity) {
154 159
         ResponseBean responseBean = new ResponseBean();
155 160
         try {
156
-            if (iTdCityService.updateBatchById(cities)){
161
+            if (iTdCityService.updateBatchById(cities)) {
157 162
                 responseBean.addSuccess(tdCity);
158
-            }else {
163
+            } else {
159 164
                 responseBean.addError("fail");
160 165
             }
161
-        }catch (Exception e){
162
-            logger.error("tdCityUpdate -=- {}",e.toString());
166
+        } catch (Exception e) {
167
+            logger.error("tdCityUpdate -=- {}", e.toString());
163 168
             responseBean.addError(e.getMessage());
164 169
         }
165 170
         return responseBean;
@@ -167,34 +172,36 @@ public class TdCityController extends BaseController {
167 172
 
168 173
     /**
169 174
      * 根据id查询对象
170
-     * @param id  实体ID
175
+     *
176
+     * @param id 实体ID
171 177
      */
172
-    @RequestMapping(value="/tdCity/{id}",method= RequestMethod.GET)
173
-    public ResponseBean tdCityGet(@PathVariable Integer id){
178
+    @RequestMapping(value = "/tdCity/{id}", method = RequestMethod.GET)
179
+    public ResponseBean tdCityGet(@PathVariable Integer id) {
174 180
         ResponseBean responseBean = new ResponseBean();
175 181
         try {
176 182
             responseBean.addSuccess(iTdCityService.getById(id));
177
-        }catch (Exception e){
178
-            logger.error("tdCityDelete -=- {}",e.toString());
183
+        } catch (Exception e) {
184
+            logger.error("tdCityDelete -=- {}", e.toString());
179 185
             responseBean.addError(e.getMessage());
180 186
         }
181 187
         return responseBean;
182 188
     }
183
-    
189
+
184 190
     /**
185 191
      * 根据经纬度查询城市ID
186 192
      * 经度在前,纬度在后,经纬度间以“,”分割,经纬度小数点后不要超过 6 位
193
+     *
187 194
      * @return
188 195
      */
189
-    @RequestMapping(value="/wx/location/city",method= RequestMethod.GET)
190
-    public ResponseBean wxLocationCityDetail(@RequestParam(value = "location") String location,HttpServletRequest request){
196
+    @RequestMapping(value = "/wx/location/city", method = RequestMethod.GET)
197
+    public ResponseBean wxLocationCityDetail(@RequestParam(value = "location") String location, HttpServletRequest request) {
191 198
         ResponseBean responseBean = new ResponseBean();
192 199
         Integer orgId = getOrgId(request);
193 200
         try {
194
-            TdCity tdCity = iTdCityService.getLocationCity(location, orgId);
201
+            TdCity tdCity = iTdCityService.getLocationCity(location, orgId, null);
195 202
             responseBean.addSuccess(tdCity);
196
-        }catch (Exception e){
197
-            logger.error("tdCityList -=- {}",e.toString());
203
+        } catch (Exception e) {
204
+            logger.error("tdCityList -=- {}", e.toString());
198 205
             responseBean.addError(e.getMessage());
199 206
         }
200 207
         return responseBean;

+ 210
- 0
src/main/java/com/huiju/estateagents/controller/WxPayController.java 查看文件

@@ -0,0 +1,210 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.huiju.estateagents.base.BaseController;
5
+import com.huiju.estateagents.base.ResponseBean;
6
+import com.huiju.estateagents.common.MD5Utils;
7
+import com.huiju.estateagents.common.wxpay.WXPayConstants;
8
+import com.huiju.estateagents.common.wxpay.WXPayUtil;
9
+import com.huiju.estateagents.entity.TaOrder;
10
+import com.huiju.estateagents.entity.TaWxPayConfig;
11
+import com.huiju.estateagents.service.ITaWxPayConfigService;
12
+import com.huiju.estateagents.service.IWxPayService;
13
+import lombok.extern.slf4j.Slf4j;
14
+import org.apache.commons.codec.digest.DigestUtils;
15
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
16
+import org.springframework.beans.factory.annotation.Autowired;
17
+import org.springframework.web.bind.annotation.*;
18
+import sun.misc.BASE64Decoder;
19
+import sun.security.provider.MD5;
20
+
21
+import javax.crypto.Cipher;
22
+import javax.crypto.spec.SecretKeySpec;
23
+import javax.servlet.http.HttpServletRequest;
24
+import java.io.ByteArrayOutputStream;
25
+import java.io.InputStream;
26
+import java.security.Security;
27
+import java.util.Base64;
28
+import java.util.HashMap;
29
+import java.util.List;
30
+import java.util.Map;
31
+
32
+import static sun.security.x509.CertificateAlgorithmId.ALGORITHM;
33
+
34
+@Slf4j
35
+@RestController
36
+@RequestMapping("/api")
37
+public class WxPayController extends BaseController {
38
+
39
+    @Autowired
40
+    private IWxPayService wxPayService;
41
+
42
+    @Autowired
43
+    private ITaWxPayConfigService taWxPayConfigService;
44
+
45
+    /**
46
+     * 微信统一下单接口
47
+     * @param taOrder
48
+     * @param request
49
+     * @return
50
+     */
51
+    @RequestMapping(value = "/wx/unifiedOrder",method = RequestMethod.POST)
52
+    public ResponseBean wxUnifiedOrder(@RequestBody TaOrder taOrder,
53
+                                       HttpServletRequest request){
54
+        ResponseBean responseBean = new ResponseBean();
55
+        try {
56
+            taOrder.setOrgId(getOrgId(request));
57
+            taOrder.setPersonId(getPersonId(request));
58
+            responseBean = wxPayService.payUnifiedOrder(taOrder,request.getRemoteAddr());
59
+        } catch (Exception e) {
60
+            log.error("微信统一下单失败: {}" , e.getMessage());
61
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_MISSING_PARAMS);
62
+        }
63
+        return responseBean;
64
+    }
65
+
66
+    /**
67
+     * 微信支付成功回调接口
68
+     * @param type
69
+     * @param request
70
+     * @return
71
+     */
72
+    @RequestMapping(value = "/notify/{type}",method = RequestMethod.POST)
73
+    public String wxNotify(@PathVariable String type, HttpServletRequest request){
74
+        log.info("支付成功回调开始,支付类型是{}",type);
75
+        String failResult = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[失败]]></return_msg>" + "</xml> ";
76
+        String successResult = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>" + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
77
+        Map<String, String> resultMap = new HashMap<>();
78
+        try {
79
+            InputStream inStream = request.getInputStream();
80
+            ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
81
+            byte[] buffer = new byte[1024];
82
+            int len = 0;
83
+            while ((len = inStream.read(buffer)) != -1) {
84
+                outSteam.write(buffer, 0, len);
85
+            }
86
+
87
+            // 获取微信调用我们notify_url的返回信息
88
+            String result = new String(outSteam.toByteArray(), "utf-8");
89
+            log.info("wxnotify:微信支付----result----=" + result);
90
+
91
+            // 关闭流
92
+            outSteam.close();
93
+            inStream.close();
94
+            // xml转换为map
95
+            resultMap = WXPayUtil.xmlToMap(result);
96
+            //处理业务需求
97
+            if (WXPayConstants.SUCCESS.equalsIgnoreCase(resultMap.get("result_code"))) {
98
+                wxPayService.wxNotify(resultMap, type);
99
+            }else {
100
+                log.error("支付回调出错{}",resultMap.get("return_msg"));
101
+                return failResult;
102
+            }
103
+
104
+        } catch (Exception e) {
105
+            log.error("支付回调出错{}",e.getMessage());
106
+            return failResult;
107
+        }
108
+
109
+        return successResult;
110
+    }
111
+
112
+    /**
113
+     * 微信退款成功回调接口
114
+     * @param type
115
+     * @param request
116
+     * @return
117
+     */
118
+    @RequestMapping(value = "/refund/{type}",method = RequestMethod.POST)
119
+    public String wxRefund(@PathVariable String type, HttpServletRequest request){
120
+        log.info("微信退款成功回调开始,退款类型是{}",type);
121
+        String failResult = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[失败]]></return_msg>" + "</xml> ";
122
+        String successResult = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>" + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
123
+        Map<String, String> resultMap = new HashMap<>();
124
+        try {
125
+            InputStream inStream = request.getInputStream();
126
+            ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
127
+            byte[] buffer = new byte[1024];
128
+            int len = 0;
129
+            while ((len = inStream.read(buffer)) != -1) {
130
+                outSteam.write(buffer, 0, len);
131
+            }
132
+
133
+            // 获取微信调用我们notify_url的返回信息
134
+            String result = new String(outSteam.toByteArray(), "utf-8");
135
+            log.info("wxnotify:微信退款----result----=" + result);
136
+
137
+            // 关闭流
138
+            outSteam.close();
139
+            inStream.close();
140
+            // xml转换为map
141
+            resultMap = WXPayUtil.xmlToMap(result);
142
+            //处理业务需求
143
+            if (WXPayConstants.SUCCESS.equalsIgnoreCase(resultMap.get("return_code"))) {
144
+                String mchId = resultMap.get("mch_id");
145
+                QueryWrapper<TaWxPayConfig> queryWrapper = new QueryWrapper<>();
146
+                queryWrapper.eq("mch_id",mchId);
147
+                String mchKey = taWxPayConfigService.list(queryWrapper).get(0).getMchKey();
148
+                log.info("key等于{}",mchKey);
149
+                SecretKeySpec key = new SecretKeySpec(DigestUtils.md5Hex(mchKey).toLowerCase().getBytes(), "AES");
150
+                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
151
+                cipher.init(Cipher.DECRYPT_MODE, key);
152
+                String req_info = new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(resultMap.get("req_info"))), "UTF-8");
153
+                log.info("req_info等于{}",req_info);
154
+                Map<String, String> orderInfo = WXPayUtil.xmlToMap(req_info);
155
+                wxPayService.houseRefund(orderInfo);
156
+            }else {
157
+                log.error("支付回调出错{}",resultMap.get("return_msg"));
158
+                return failResult;
159
+            }
160
+
161
+        } catch (Exception e) {
162
+            log.error("支付回调出错{}",e.getMessage());
163
+            return failResult;
164
+        }
165
+
166
+        return successResult;
167
+    }
168
+
169
+    /**
170
+     * 微信申请退款接口
171
+     * @param taOrder
172
+     * @param request
173
+     * @return
174
+     */
175
+    @RequestMapping(value = "/admin/refund",method = RequestMethod.POST)
176
+    public ResponseBean wxRefund(@RequestBody TaOrder taOrder,
177
+                                       HttpServletRequest request){
178
+        ResponseBean responseBean = new ResponseBean();
179
+        try {
180
+            wxPayService.payRefund(taOrder,getOrgId(request),getOrgId(request));
181
+        } catch (Exception e) {
182
+            log.error("微信批量退款失败: {}" , e.getMessage());
183
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_MISSING_PARAMS);
184
+        }
185
+        responseBean.addSuccess(taOrder);
186
+        return responseBean;
187
+    }
188
+
189
+    /**
190
+     * 取消微信支付
191
+     * @param taOrder
192
+     * @param request
193
+     * @return
194
+     */
195
+    @RequestMapping(value = "/wx/cancel",method = RequestMethod.POST)
196
+    public ResponseBean wxCancel(@RequestBody TaOrder taOrder,
197
+                                 HttpServletRequest request){
198
+        ResponseBean responseBean = new ResponseBean();
199
+        try {
200
+            taOrder.setOrgId(getOrgId(request));
201
+            taOrder.setPersonId(getPersonId(request));
202
+            wxPayService.payCancel(taOrder);
203
+        } catch (Exception e) {
204
+            log.error("微信取消付款异常: {}" , e.getMessage());
205
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_MISSING_PARAMS);
206
+        }
207
+        responseBean.addSuccess(taOrder);
208
+        return responseBean;
209
+    }
210
+}

+ 7
- 2
src/main/java/com/huiju/estateagents/drainage/controller/TaDrainageController.java 查看文件

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 6
 import com.huiju.estateagents.base.BaseController;
7 7
 import com.huiju.estateagents.base.ResponseBean;
8 8
 import com.huiju.estateagents.common.CommConstant;
9
+import com.huiju.estateagents.common.DateUtils;
9 10
 import com.huiju.estateagents.common.StringUtils;
10 11
 import com.huiju.estateagents.drainage.entity.TaDrainage;
11 12
 import com.huiju.estateagents.drainage.entity.TaDrainageRecord;
@@ -32,7 +33,9 @@ import org.springframework.web.bind.annotation.ResponseBody;
32 33
 import org.springframework.web.bind.annotation.RestController;
33 34
 
34 35
 import javax.servlet.http.HttpServletRequest;
36
+import java.text.DateFormat;
35 37
 import java.time.LocalDateTime;
38
+import java.time.format.DateTimeFormatter;
36 39
 import java.util.List;
37 40
 import java.util.UUID;
38 41
 
@@ -82,6 +85,7 @@ public class TaDrainageController extends BaseController {
82 85
                                        @RequestParam(value ="name",required = false) String name,
83 86
                                        @RequestParam(value ="isMiniapp",required = false) Integer isMiniapp,
84 87
                                        @RequestParam(value ="status",required = false) Integer status,
88
+                                       @RequestParam(value ="buildingId",required = false) String buildingId,
85 89
                                        HttpServletRequest request){
86 90
         ResponseBean responseBean = new ResponseBean();
87 91
         try {
@@ -94,6 +98,7 @@ public class TaDrainageController extends BaseController {
94 98
                 queryWrapper.gt("status",-1);
95 99
             }
96 100
             queryWrapper.eq(null != status,"status",status);
101
+            queryWrapper.eq(!StringUtils.isEmpty(buildingId),"building_id",buildingId);
97 102
             queryWrapper.eq(null != drainageId,"drainage_id",drainageId);
98 103
             queryWrapper.like(!StringUtils.isEmpty(name),"name",name);
99 104
             queryWrapper.orderByDesc("create_date");
@@ -133,7 +138,7 @@ public class TaDrainageController extends BaseController {
133 138
             taDrainage.setOrgId(getOrgId(request));
134 139
             taDrainage.setCreateDate(LocalDateTime.now());
135 140
             taDrainage.setStatus(CommConstant.STATUS_UNACCALIMED);
136
-            if (taDrainage.getEndDate().isAfter(LocalDateTime.now())){
141
+            if (DateUtils.dayToLocalDateime(taDrainage.getEndDate()).isAfter(LocalDateTime.now())){
137 142
                 taDrainage.setStatus(CommConstant.STATUS_NORMAL);
138 143
             }
139 144
             if (iTaDrainageService.save(taDrainage)){
@@ -299,7 +304,7 @@ public class TaDrainageController extends BaseController {
299 304
                     e.setStatus(CommConstant.STATUS_UNACCALIMED);
300 305
                 });
301 306
             }else{
302
-                if (taDrainage.getEndDate().isBefore(LocalDateTime.now())){
307
+                if (DateUtils.dayToLocalDateime(taDrainage.getEndDate()).isBefore(LocalDateTime.now())){
303 308
                     responseBean.addError("已过下架时间,无法上架");
304 309
                     return responseBean;
305 310
                 }

+ 1
- 1
src/main/java/com/huiju/estateagents/drainage/entity/TaDrainage.java 查看文件

@@ -54,7 +54,7 @@ public class TaDrainage implements Serializable {
54 54
     /**
55 55
      * 截止时间
56 56
      */
57
-    private LocalDateTime endDate;
57
+    private String endDate;
58 58
 
59 59
     /**
60 60
      * 参与数

+ 54
- 0
src/main/java/com/huiju/estateagents/entity/SysAdvancedConfig.java 查看文件

@@ -0,0 +1,54 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import lombok.Data;
7
+import lombok.EqualsAndHashCode;
8
+import lombok.experimental.Accessors;
9
+
10
+import java.io.Serializable;
11
+import java.time.LocalDateTime;
12
+
13
+/**
14
+ * <p>
15
+ * 高级配置基础表 
16
+ * </p>
17
+ *
18
+ * @author jobob
19
+ * @since 2020-02-26
20
+ */
21
+@Data
22
+@EqualsAndHashCode(callSuper = false)
23
+@Accessors(chain = true)
24
+public class SysAdvancedConfig implements Serializable {
25
+
26
+    private static final long serialVersionUID = 1L;
27
+
28
+    /**
29
+     * 高级配置id
30
+     */
31
+    @TableId(value = "advanced_config_id", type = IdType.AUTO)
32
+    private Integer advancedConfigId;
33
+
34
+    /**
35
+     * 高级配置名称
36
+     */
37
+    private String advancedConfigName;
38
+
39
+    /**
40
+     * 创建时间
41
+     */
42
+    private LocalDateTime createDate;
43
+
44
+    /**
45
+     * 状态
46
+     */
47
+    private Integer status;
48
+
49
+    /**
50
+     * 是否有权限
51
+     */
52
+    @TableField(exist = false)
53
+    private Boolean hasRights;
54
+}

+ 46
- 0
src/main/java/com/huiju/estateagents/entity/SysAdvancedConfigRelation.java 查看文件

@@ -0,0 +1,46 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import lombok.Data;
6
+import lombok.EqualsAndHashCode;
7
+import lombok.experimental.Accessors;
8
+
9
+import java.io.Serializable;
10
+
11
+/**
12
+ * <p>
13
+ * 高级配置对应关系表 
14
+ * </p>
15
+ *
16
+ * @author jobob
17
+ * @since 2020-02-26
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+public class SysAdvancedConfigRelation implements Serializable {
23
+
24
+    private static final long serialVersionUID = 1L;
25
+
26
+    /**
27
+     * 对应关系id
28
+     */
29
+    @TableId(value = "relation_id", type = IdType.AUTO)
30
+    private Integer relationId;
31
+
32
+    /**
33
+     * 对应类型 menu菜单btn按钮
34
+     */
35
+    private String targetType;
36
+
37
+    /**
38
+     * 对应类型的id menuId或btnId
39
+     */
40
+    private String targetId;
41
+
42
+    /**
43
+     * 高级配置id
44
+     */
45
+    private Integer advancedConfigId;
46
+}

+ 49
- 0
src/main/java/com/huiju/estateagents/entity/TaAdvancedController.java 查看文件

@@ -0,0 +1,49 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import lombok.Data;
6
+import lombok.EqualsAndHashCode;
7
+import lombok.experimental.Accessors;
8
+
9
+import java.io.Serializable;
10
+import java.time.LocalDateTime;
11
+
12
+/**
13
+ * <p>
14
+ * 高级配置控制表 
15
+ * </p>
16
+ *
17
+ * @author jobob
18
+ * @since 2020-02-26
19
+ */
20
+@Data
21
+@EqualsAndHashCode(callSuper = false)
22
+@Accessors(chain = true)
23
+public class TaAdvancedController implements Serializable {
24
+
25
+    private static final long serialVersionUID = 1L;
26
+
27
+    /**
28
+     * 高级配置控制id
29
+     */
30
+    @TableId(value = "advanced_controller_id", type = IdType.AUTO)
31
+    private Integer advancedControllerId;
32
+
33
+    /**
34
+     * 公司id
35
+     */
36
+    private Integer orgId;
37
+
38
+    /**
39
+     * 高级配置id
40
+     */
41
+    private Integer advancedConfigId;
42
+
43
+    /**
44
+     * 创建时间
45
+     */
46
+    private LocalDateTime createDate;
47
+
48
+
49
+}

+ 39
- 0
src/main/java/com/huiju/estateagents/entity/TaHousingResources.java 查看文件

@@ -11,6 +11,7 @@ import lombok.experimental.Accessors;
11 11
 import java.io.Serializable;
12 12
 import java.math.BigDecimal;
13 13
 import java.time.LocalDateTime;
14
+import java.util.ArrayList;
14 15
 import java.util.List;
15 16
 
16 17
 /**
@@ -125,6 +126,12 @@ public class TaHousingResources implements Serializable {
125 126
     @TableField(exist = false)
126 127
     private String apartmentName;
127 128
 
129
+    @TableField(exist = false)
130
+    private Double insideArea;
131
+
132
+    @TableField(exist = false)
133
+    private Double buildingArea;
134
+
128 135
     /**
129 136
      * 状态
130 137
      */
@@ -145,6 +152,26 @@ public class TaHousingResources implements Serializable {
145 152
      */
146 153
     private LocalDateTime updateDate;
147 154
 
155
+    /**
156
+     * 房源锁定状态
157
+     */
158
+    private String houseLockingStatus;
159
+
160
+    /**
161
+     * 认筹基础热度
162
+     */
163
+    private Integer raiseHeat;
164
+
165
+    /**
166
+     * 锁定人personId
167
+     */
168
+    private String houseLockingPerson;
169
+
170
+    /**
171
+     * 认筹实际热度
172
+     */
173
+    private Integer raiseRealHeat;
174
+
148 175
     private Integer updateUser;
149 176
 
150 177
     @TableField(exist = false)
@@ -152,4 +179,16 @@ public class TaHousingResources implements Serializable {
152 179
 
153 180
     @TableField(exist = false)
154 181
     private List<TaHousingResources> houseIdList;
182
+
183
+    /**
184
+     * 我的锁定
185
+     */
186
+    @TableField(exist = false)
187
+    private String mineLocked;
188
+
189
+    /**
190
+     * 户型图列表列表
191
+     */
192
+    @TableField(exist = false)
193
+    private List<TaBuildingImg> apartmentImgList = new ArrayList<>();
155 194
 }

+ 1
- 1
src/main/java/com/huiju/estateagents/entity/TaMiniappOrgIcon.java 查看文件

@@ -70,5 +70,5 @@ public class TaMiniappOrgIcon implements Serializable {
70 70
      */
71 71
     private LocalDateTime updateDate;
72 72
 
73
-
73
+    private Integer themeId;
74 74
 }

+ 100
- 0
src/main/java/com/huiju/estateagents/entity/TaMiniappTheme.java 查看文件

@@ -0,0 +1,100 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import lombok.Data;
7
+import lombok.EqualsAndHashCode;
8
+import lombok.experimental.Accessors;
9
+
10
+import java.io.Serializable;
11
+import java.time.LocalDateTime;
12
+import java.util.List;
13
+
14
+/**
15
+ * <p>
16
+ * 小程序主题设置
17
+ * </p>
18
+ *
19
+ * @author yansen
20
+ * @since 2020-02-27
21
+ */
22
+@Data
23
+@EqualsAndHashCode(callSuper = false)
24
+@Accessors(chain = true)
25
+public class TaMiniappTheme implements Serializable {
26
+
27
+    private static final long serialVersionUID = 1L;
28
+
29
+    /**
30
+     * 主题ID
31
+     */
32
+    @TableId(value = "theme_id", type = IdType.AUTO)
33
+    private Integer themeId;
34
+
35
+    /**
36
+     * 主题名称
37
+     */
38
+    private String themeTitle;
39
+
40
+    /**
41
+     * 启用时间 格式MM-DDTHH24:MI
42
+     */
43
+    private String startTime;
44
+
45
+    /**
46
+     * 停用时间 格式MM-DDTHH24:MI
47
+     */
48
+    private String endTime;
49
+
50
+    /**
51
+     * 导航前景颜色
52
+     */
53
+    private String naviFrontColor;
54
+
55
+    /**
56
+     * 导航背景颜色
57
+     */
58
+    private String naviBackColor;
59
+
60
+    /**
61
+     * TabBar前景颜色
62
+     */
63
+    private String tabbarFrontColor;
64
+
65
+    /**
66
+     * TabBar背景颜色
67
+     */
68
+    private String tabbarBackColor;
69
+
70
+    /**
71
+     * TabBar选择色
72
+     */
73
+    private String tabbarSelectColor;
74
+
75
+    /**
76
+     * 状态
77
+     */
78
+    private Integer status;
79
+
80
+    /**
81
+     * 公司id
82
+     */
83
+    private Integer orgId;
84
+
85
+    /**
86
+     * 修改人
87
+     */
88
+    private Integer modifyUser;
89
+
90
+    /**
91
+     * 修改时间
92
+     */
93
+    private LocalDateTime modifyDate;
94
+
95
+    /**
96
+     * 导航图标列表
97
+     */
98
+    @TableField(exist = false)
99
+    private List<TaMiniappOrgIcon> iconList;
100
+}

+ 99
- 0
src/main/java/com/huiju/estateagents/entity/TaOrder.java 查看文件

@@ -0,0 +1,99 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import lombok.Data;
7
+import lombok.EqualsAndHashCode;
8
+import lombok.experimental.Accessors;
9
+
10
+import java.io.Serializable;
11
+import java.time.LocalDateTime;
12
+
13
+/**
14
+ * <p>
15
+ * 订单表 
16
+ * </p>
17
+ *
18
+ * @author jobob
19
+ * @since 2020-02-26
20
+ */
21
+@Data
22
+@EqualsAndHashCode(callSuper = false)
23
+@Accessors(chain = true)
24
+public class TaOrder implements Serializable {
25
+
26
+    private static final long serialVersionUID = 1L;
27
+
28
+    /**
29
+     * 订单id
30
+     */
31
+    @TableId(value = "order_id", type = IdType.AUTO)
32
+    private Integer orderId;
33
+
34
+    /**
35
+     * 公司id
36
+     */
37
+    private Integer orgId;
38
+
39
+    /**
40
+     * 创建时间
41
+     */
42
+    private LocalDateTime createDate;
43
+
44
+    /**
45
+     * 支付时间
46
+     */
47
+    private LocalDateTime payTime;
48
+
49
+    /**
50
+     * targetId
51
+     */
52
+    private String targetId;
53
+
54
+    /**
55
+     * targetType
56
+     */
57
+    private String targetType;
58
+
59
+    /**
60
+     * 小程序用户id
61
+     */
62
+    private String personId;
63
+
64
+    /**
65
+     * 微信订单号
66
+     */
67
+    private String tradeNo;
68
+
69
+    /**
70
+     * 实付金额 单位分
71
+     */
72
+    private Integer totalFee;
73
+
74
+    /**
75
+     * 缴费状态 unpaid未缴费paid已缴费refunded已退费
76
+     */
77
+    private String payStatus;
78
+
79
+    /**
80
+     * 如果是退费需要知道是那个订单退费
81
+     */
82
+    private Integer parentOrderId;
83
+
84
+    /**
85
+     * 微信订单号
86
+     */
87
+    private String transactionId;
88
+
89
+    /**
90
+     * 退款单号
91
+     */
92
+    private String refundNo;
93
+
94
+    /**
95
+     * 退款原因
96
+     */
97
+    @TableField(exist = false)
98
+    private String refundReason;
99
+}

+ 5
- 0
src/main/java/com/huiju/estateagents/entity/TaPerson.java 查看文件

@@ -184,6 +184,11 @@ public class TaPerson implements Serializable {
184 184
      */
185 185
     private Integer points;
186 186
 
187
+    /**
188
+     * 身份证号
189
+     */
190
+    private String idcard;
191
+
187 192
     /**
188 193
      * 访问记录
189 194
      */

+ 86
- 0
src/main/java/com/huiju/estateagents/entity/TaPersonPositon.java 查看文件

@@ -0,0 +1,86 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import com.baomidou.mybatisplus.core.metadata.IPage;
7
+import lombok.Data;
8
+import lombok.EqualsAndHashCode;
9
+import lombok.experimental.Accessors;
10
+
11
+import java.io.Serializable;
12
+import java.time.LocalDateTime;
13
+import java.util.List;
14
+
15
+/**
16
+ * <p>
17
+ * 人员表
18
+ * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2019-05-10
22
+ */
23
+@Data
24
+@EqualsAndHashCode(callSuper = false)
25
+@Accessors(chain = true)
26
+public class TaPersonPositon implements Serializable {
27
+
28
+    private static final long serialVersionUID = 1L;
29
+
30
+    /**
31
+     * ID
32
+     */
33
+    @TableId(value = "id", type = IdType.UUID)
34
+    private Integer id;
35
+
36
+    /**
37
+     * 人员ID
38
+     */
39
+    private String personId;
40
+
41
+    /**
42
+     * 精度
43
+     */
44
+    private String lon;
45
+
46
+    /**
47
+     * 纬度
48
+     */
49
+    private String lat;
50
+
51
+    /**
52
+     * 城市编码
53
+     */
54
+    private String citycode;
55
+
56
+    /**
57
+     * 国家
58
+     */
59
+    private String country;
60
+
61
+    /**
62
+     * 省份
63
+     */
64
+    private String province;
65
+
66
+    /**
67
+     * 城市
68
+     */
69
+    private String city;
70
+
71
+    /**
72
+     * 区县
73
+     */
74
+    private String district;
75
+
76
+    /**
77
+     * 详细地址
78
+     */
79
+    private String address;
80
+
81
+
82
+    /**
83
+     * 创建时间
84
+     */
85
+    private LocalDateTime createTime;
86
+}

+ 119
- 0
src/main/java/com/huiju/estateagents/entity/TaPreselection.java 查看文件

@@ -0,0 +1,119 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import com.fasterxml.jackson.annotation.JsonFormat;
7
+import lombok.Data;
8
+import lombok.EqualsAndHashCode;
9
+import lombok.experimental.Accessors;
10
+
11
+import java.io.Serializable;
12
+import java.time.LocalDateTime;
13
+
14
+/**
15
+ * <p>
16
+ * 预选表
17
+ * </p>
18
+ *
19
+ * @author jobob
20
+ * @since 2020-02-26
21
+ */
22
+@Data
23
+@EqualsAndHashCode(callSuper = false)
24
+@Accessors(chain = true)
25
+public class TaPreselection implements Serializable {
26
+
27
+    private static final long serialVersionUID = 1L;
28
+
29
+    /**
30
+     * 预选id
31
+     */
32
+    @TableId(value = "preselection_id", type = IdType.AUTO)
33
+    private Integer preselectionId;
34
+
35
+    /**
36
+     * 公司id
37
+     */
38
+    private Integer orgId;
39
+
40
+    /**
41
+     * 销售批次id
42
+     */
43
+    private Integer salesBatchId;
44
+
45
+    /**
46
+     * 预选开始时间
47
+     */
48
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
49
+    private LocalDateTime preselectionStartTime;
50
+
51
+    /**
52
+     * 预选结束时间
53
+     */
54
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
55
+    private LocalDateTime preselectionEndTime;
56
+
57
+    /**
58
+     * 状态
59
+     */
60
+    private Integer status;
61
+
62
+    /**
63
+     * 项目id
64
+     */
65
+    private String buildingId;
66
+
67
+    /**
68
+     * 创建时间
69
+     */
70
+    private LocalDateTime createDate;
71
+
72
+    /**
73
+     * 出售房源数
74
+     */
75
+    @TableField(exist = false)
76
+    private Integer salesNumber;
77
+
78
+    /**
79
+     * 楼盘名
80
+     */
81
+    @TableField(exist = false)
82
+    private String buildingName;
83
+
84
+    /**
85
+     * 销售批次名
86
+     */
87
+    @TableField(exist = false)
88
+    private String salesBatchName;
89
+
90
+    /**
91
+     * 备注
92
+     */
93
+    @TableField(exist = false)
94
+    private String remark;
95
+
96
+    /**
97
+     * 二维码
98
+     */
99
+    @TableField(exist = false)
100
+    private String qrCode;
101
+
102
+    /**
103
+     * 预选实际热度
104
+     */
105
+    @TableField(exist = false)
106
+    private Integer realHeat;
107
+
108
+    /**
109
+     * 预选实际热度
110
+     */
111
+    @TableField(exist = false)
112
+    private Integer preNum;
113
+
114
+    /**
115
+     * 销售批次状态
116
+     */
117
+    @TableField(exist = false)
118
+    private Integer salesBatchStatus;
119
+}

+ 6
- 1
src/main/java/com/huiju/estateagents/entity/TaPreselectionRecord.java 查看文件

@@ -48,7 +48,7 @@ public class TaPreselectionRecord implements Serializable {
48 48
     /**
49 49
      * 房源id
50 50
      */
51
-    private String houseId;
51
+    private Integer houseId;
52 52
 
53 53
     /**
54 54
      * 小程序用户id
@@ -74,4 +74,9 @@ public class TaPreselectionRecord implements Serializable {
74 74
      * 楼盘id
75 75
      */
76 76
     private String buildingId;
77
+
78
+    /**
79
+     * 预选idtaSalesBatch
80
+     */
81
+    private String preselectionId;
77 82
 }

+ 169
- 0
src/main/java/com/huiju/estateagents/entity/TaRaise.java 查看文件

@@ -0,0 +1,169 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import com.fasterxml.jackson.annotation.JsonFormat;
7
+import lombok.Data;
8
+import lombok.EqualsAndHashCode;
9
+import lombok.experimental.Accessors;
10
+import org.springframework.format.annotation.DateTimeFormat;
11
+
12
+import java.io.Serializable;
13
+import java.time.LocalDateTime;
14
+import java.util.List;
15
+
16
+/**
17
+ * <p>
18
+ * 认筹表
19
+ * </p>
20
+ *
21
+ * @author jobob
22
+ * @since 2020-02-26
23
+ */
24
+@Data
25
+@EqualsAndHashCode(callSuper = false)
26
+@Accessors(chain = true)
27
+public class TaRaise implements Serializable {
28
+
29
+    private static final long serialVersionUID = 1L;
30
+
31
+    /**
32
+     * 认筹id
33
+     */
34
+    @TableId(value = "raise_id", type = IdType.AUTO)
35
+    private Integer raiseId;
36
+
37
+    /**
38
+     * 公司id
39
+     */
40
+    private Integer orgId;
41
+
42
+    /**
43
+     * 销售批次id
44
+     */
45
+    private Integer salesBatchId;
46
+
47
+    /**
48
+     * 项目id
49
+     */
50
+    private String buildingId;
51
+
52
+    /**
53
+     * 认筹开始时间
54
+     */
55
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
56
+    private LocalDateTime raiseStartTime;
57
+
58
+    /**
59
+     * 认筹结束时间
60
+     */
61
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
62
+    private LocalDateTime raiseEndTime;
63
+
64
+    /**
65
+     * 锁房方式 auto自动锁房,manual手动锁房
66
+     */
67
+    private String houseLockingType;
68
+
69
+    /**
70
+     * 认筹金额 单位是分!
71
+     */
72
+    private Integer raisePrice;
73
+
74
+    /**
75
+     * 认筹是否预选
76
+     */
77
+    private Boolean needPreselection;
78
+
79
+    /**
80
+     * 是否展示房源价格
81
+     */
82
+    private Boolean displayHousePrice;
83
+
84
+    /**
85
+     * 缴费方式 onLine线上offLine线下
86
+     */
87
+    private String payType;
88
+
89
+    /**
90
+     * 线上缴费说明
91
+     */
92
+    private String payDescriptionOnline;
93
+
94
+    /**
95
+     * 线下缴费说明
96
+     */
97
+    private String payDescriptionOffline;
98
+
99
+    /**
100
+     * 认筹单注意事项
101
+     */
102
+    private String raisePrecautions;
103
+
104
+    /**
105
+     * 线上选房协议
106
+     */
107
+    private String payProtocol;
108
+
109
+    /**
110
+     * 状态
111
+     */
112
+    private Integer status;
113
+
114
+    /**
115
+     * 创建时间
116
+     */
117
+    private LocalDateTime createDate;
118
+
119
+    /**
120
+     * 楼盘名
121
+     */
122
+    @TableField(exist = false)
123
+    private String buildingName;
124
+
125
+    /**
126
+     * 销售批次名
127
+     */
128
+    @TableField(exist = false)
129
+    private String salesBatchName;
130
+
131
+    /**
132
+     * 二维码
133
+     */
134
+    @TableField(exist = false)
135
+    private String qrCode;
136
+
137
+    /**
138
+     * 认筹实际热度
139
+     */
140
+    @TableField(exist = false)
141
+    private Integer raiseRealHeat;
142
+
143
+    /**
144
+     * 销售批次备注
145
+     */
146
+    @TableField(exist = false)
147
+    private String remark;
148
+
149
+    @TableField(exist = false)
150
+    private List<String> checkValue;
151
+
152
+    /**
153
+     * 出售房源数
154
+     */
155
+    @TableField(exist = false)
156
+    private Integer salesNumber;
157
+
158
+    /**
159
+     * 个人认筹单
160
+     */
161
+    @TableField(exist = false)
162
+    private TaRaiseRecord record;
163
+
164
+    /**
165
+     * 销售批次状态
166
+     */
167
+    @TableField(exist = false)
168
+    private Integer salesBatchStatus;
169
+}

+ 52
- 0
src/main/java/com/huiju/estateagents/entity/TaRaiseHouse.java 查看文件

@@ -0,0 +1,52 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import lombok.Data;
6
+import lombok.EqualsAndHashCode;
7
+import lombok.experimental.Accessors;
8
+
9
+import java.io.Serializable;
10
+import java.time.LocalDateTime;
11
+
12
+/**
13
+ * <p>
14
+ * 认筹单与房源关系表 
15
+ * </p>
16
+ *
17
+ * @author jobob
18
+ * @since 2020-02-26
19
+ */
20
+@Data
21
+@EqualsAndHashCode(callSuper = false)
22
+@Accessors(chain = true)
23
+public class TaRaiseHouse implements Serializable {
24
+
25
+    private static final long serialVersionUID = 1L;
26
+
27
+    /**
28
+     * 认筹单下的房源id
29
+     */
30
+    @TableId(value = "raise_house_id", type = IdType.AUTO)
31
+    private Integer raiseHouseId;
32
+
33
+    /**
34
+     * 公司id
35
+     */
36
+    private Integer orgId;
37
+
38
+    /**
39
+     * 认筹单id
40
+     */
41
+    private Integer raiseRecordId;
42
+
43
+    /**
44
+     * 房源id
45
+     */
46
+    private Integer houseId;
47
+
48
+    /**
49
+     * 创建时间
50
+     */
51
+    private LocalDateTime createDate;
52
+}

+ 249
- 0
src/main/java/com/huiju/estateagents/entity/TaRaiseRecord.java 查看文件

@@ -0,0 +1,249 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import com.huiju.estateagents.center.taUser.entity.TaUser;
7
+import lombok.Data;
8
+import lombok.EqualsAndHashCode;
9
+import lombok.experimental.Accessors;
10
+
11
+import java.io.Serializable;
12
+import java.time.LocalDateTime;
13
+import java.util.ArrayList;
14
+import java.util.List;
15
+
16
+/**
17
+ * <p>
18
+ * 认筹单(认筹记录表)
19
+ * </p>
20
+ *
21
+ * @author jobob
22
+ * @since 2020-02-26
23
+ */
24
+@Data
25
+@EqualsAndHashCode(callSuper = false)
26
+@Accessors(chain = true)
27
+public class TaRaiseRecord implements Serializable {
28
+
29
+    private static final long serialVersionUID = 1L;
30
+
31
+    /**
32
+     * 认筹记录表
33
+     */
34
+    @TableId(value = "raise_record_id", type = IdType.AUTO)
35
+    private Integer raiseRecordId;
36
+
37
+    /**
38
+     * 公司id
39
+     */
40
+    private Integer orgId;
41
+
42
+    /**
43
+     * 楼盘id
44
+     */
45
+    private String buildingId;
46
+
47
+    /**
48
+     * 认筹id
49
+     */
50
+    private String raiseId;
51
+
52
+    /**
53
+     * 销售批次id
54
+     */
55
+    private String salesBatchId;
56
+
57
+    /**
58
+     * 认筹人
59
+     */
60
+    private String personId;
61
+
62
+    /**
63
+     * 认筹人姓名
64
+     */
65
+    private String personName;
66
+
67
+    /**
68
+     * 房源数
69
+     */
70
+    private Integer houseNum;
71
+
72
+    /**
73
+     * 认筹的房源锁定状态 locked已锁定unlocked未锁定
74
+     */
75
+    private String houseLockingStatus;
76
+
77
+    /**
78
+     * 账户手机号
79
+     */
80
+    private String tel;
81
+
82
+    /**
83
+     * 置业顾问id
84
+     */
85
+    private Integer userId;
86
+
87
+    /**
88
+     * 置业顾问姓名
89
+     */
90
+    private String userName;
91
+
92
+    /**
93
+     * 是否作废
94
+     */
95
+    private Integer status;
96
+
97
+    /**
98
+     * 作废原因
99
+     */
100
+    private String invalidReason;
101
+
102
+    /**
103
+     * 缴费状态 unpaid未缴费paid已缴费refunded已退费
104
+     */
105
+    private String payStatus;
106
+
107
+    /**
108
+     * 缴费方式 onLine线上offLine线下
109
+     */
110
+    private String payType;
111
+
112
+    /**
113
+     * 退费原因
114
+     */
115
+    private String refundReason;
116
+
117
+    /**
118
+     * 创建时间
119
+     */
120
+    private LocalDateTime createDate;
121
+
122
+    /**
123
+     * 更新时间
124
+     */
125
+    private LocalDateTime updateDate;
126
+
127
+    /**
128
+     * 更新人
129
+     */
130
+    private String updateUserName;
131
+
132
+    /**
133
+     * 身份证号
134
+     */
135
+    private String idcard;
136
+
137
+    /**
138
+     * 姓名
139
+     */
140
+    private String name;
141
+
142
+    /**
143
+     * 订单id
144
+     */
145
+    private Integer orderId;
146
+
147
+    /**
148
+     * 用户手机号
149
+     */
150
+    @TableField(exist = false)
151
+    private String personTel;
152
+
153
+    /**
154
+     * 用户昵称
155
+     */
156
+    @TableField(exist = false)
157
+    private String nickname;
158
+
159
+    /**
160
+     * 用户头像
161
+     */
162
+    @TableField(exist = false)
163
+    private String avatarurl;
164
+
165
+    /**
166
+     * 支付时间
167
+     */
168
+    @TableField(exist = false)
169
+    private LocalDateTime payTime;
170
+
171
+    /**
172
+     * 微信订单号
173
+     */
174
+    @TableField(exist = false)
175
+    private String tradeNo;
176
+
177
+    /**
178
+     * 微信订单号
179
+     */
180
+    @TableField(exist = false)
181
+    private String transactionId;
182
+
183
+    /**
184
+     * 微信退款单号
185
+     */
186
+    @TableField(exist = false)
187
+    private String refundNo;
188
+
189
+    /**
190
+     * 实付金额
191
+     */
192
+    @TableField(exist = false)
193
+    private String totalFee;
194
+
195
+    /**
196
+     * 小程序端提交的房源的id的集合
197
+     */
198
+    @TableField(exist = false)
199
+    private List<Integer> houseList = new ArrayList<>();
200
+
201
+    /**
202
+     * 房源信息列表
203
+     */
204
+    @TableField(exist = false)
205
+    private List<TaHousingResources> taHousingResourcesList = new ArrayList<>();
206
+
207
+    /**
208
+     * 认筹单列表
209
+     */
210
+    @TableField(exist = false)
211
+    private List<TaRaiseRecord> taRaiseRecords;
212
+
213
+    /**
214
+     * 房源信息数
215
+     */
216
+    @TableField(exist = false)
217
+    private Integer taHousingResourcesSize;
218
+
219
+    /**
220
+     * 户型名称
221
+     */
222
+    @TableField(exist = false)
223
+    private String apartmentName;
224
+
225
+    /**
226
+     * 户型图列表列表
227
+     */
228
+    @TableField(exist = false)
229
+    private List<TaBuildingImg> buildingImgList = new ArrayList<>();
230
+
231
+    /**
232
+     * 置业顾问信息
233
+     */
234
+    @TableField(exist = false)
235
+    private TaUser consultantInfo;
236
+
237
+    /**
238
+     * 验证码
239
+     *
240
+     */
241
+    @TableField(exist = false)
242
+    private String captcha;
243
+
244
+    /**
245
+     * 订单id
246
+     */
247
+    @TableField(exist = false)
248
+    private Integer refundedOrderId;
249
+}

+ 66
- 3
src/main/java/com/huiju/estateagents/entity/TaSalesBatch.java 查看文件

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
6 6
 import lombok.Data;
7 7
 import lombok.EqualsAndHashCode;
8 8
 import lombok.experimental.Accessors;
9
+import net.sf.cglib.core.Local;
9 10
 
10 11
 import java.io.Serializable;
11 12
 import java.time.LocalDateTime;
@@ -13,7 +14,7 @@ import java.util.List;
13 14
 
14 15
 /**
15 16
  * <p>
16
- * 销售批次表 
17
+ * 销售批次表
17 18
  * </p>
18 19
  *
19 20
  * @author jobob
@@ -60,12 +61,12 @@ public class TaSalesBatch implements Serializable {
60 61
     /**
61 62
      * 预选开始时间
62 63
      */
63
-    private String preselectionStartTime;
64
+    private LocalDateTime preselectionStartTime;
64 65
 
65 66
     /**
66 67
      * 预选结束时间
67 68
      */
68
-    private String preselectionEndTime;
69
+    private LocalDateTime preselectionEndTime;
69 70
 
70 71
     /**
71 72
      * 发布状态
@@ -104,4 +105,66 @@ public class TaSalesBatch implements Serializable {
104 105
     @TableField(exist = false)
105 106
     private List<TaShareContent> shareContents;
106 107
 
108
+    /**
109
+     * 是否展示房源价格
110
+     */
111
+    private Boolean displayHousePrice;
112
+
113
+    /**
114
+     * V3.5.12 新增
115
+     */
116
+
117
+    /**
118
+     * 认筹id
119
+     */
120
+    @TableField(exist = false)
121
+    private Integer raiseId;
122
+
123
+    /**
124
+     * 认筹状态
125
+     */
126
+    @TableField(exist = false)
127
+    private Integer raiseStaus;
128
+
129
+    /**
130
+     * 锁房方式 auto自动锁房,manual手动锁房
131
+     */
132
+    @TableField(exist = false)
133
+    private String houseLockingType;
134
+
135
+    /**
136
+     * 认筹开始时间
137
+     */
138
+    @TableField(exist = false)
139
+    private LocalDateTime raiseStartTime;
140
+
141
+    /**
142
+     * 认筹结束时间
143
+     */
144
+    @TableField(exist = false)
145
+    private LocalDateTime raiseEndTime;
146
+
147
+    /**
148
+     * 认筹金额 单位是分!
149
+     */
150
+    @TableField(exist = false)
151
+    private Integer raisePrice;
152
+
153
+    /**
154
+     * 缴费方式 onLine线上offLine线下
155
+     */
156
+    @TableField(exist = false)
157
+    private String payType;
158
+
159
+    /**
160
+     * 认筹数量
161
+     */
162
+    @TableField(exist = false)
163
+    private Integer raiseCount;
164
+
165
+    /**
166
+     * 预选数量
167
+     */
168
+    @TableField(exist = false)
169
+    private Integer preselectCount;
107 170
 }

+ 72
- 0
src/main/java/com/huiju/estateagents/entity/TaWxPayConfig.java 查看文件

@@ -0,0 +1,72 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import lombok.Data;
6
+import lombok.EqualsAndHashCode;
7
+import lombok.experimental.Accessors;
8
+
9
+import java.io.Serializable;
10
+import java.time.LocalDateTime;
11
+
12
+/**
13
+ * <p>
14
+ * 微信支付设置 
15
+ * </p>
16
+ *
17
+ * @author jobob
18
+ * @since 2020-02-26
19
+ */
20
+@Data
21
+@EqualsAndHashCode(callSuper = false)
22
+@Accessors(chain = true)
23
+public class TaWxPayConfig implements Serializable {
24
+
25
+    private static final long serialVersionUID = 1L;
26
+
27
+    /**
28
+     * 微信配置id
29
+     */
30
+    @TableId(value = "wx_pay_config_id", type = IdType.AUTO)
31
+    private Integer wxPayConfigId;
32
+
33
+    /**
34
+     * 公司id
35
+     */
36
+    private Integer orgId;
37
+
38
+    /**
39
+     * 楼盘id
40
+     */
41
+    private String buildingId;
42
+
43
+    /**
44
+     * 微信支付商户号
45
+     */
46
+    private String mchId;
47
+
48
+    /**
49
+     * API密钥
50
+     */
51
+    private String appid;
52
+
53
+    /**
54
+     * Appsecret
55
+     */
56
+    private String secret;
57
+
58
+    /**
59
+     * 商户key
60
+     */
61
+    private String mchKey;
62
+
63
+    /**
64
+     * 创建时间
65
+     */
66
+    private LocalDateTime createDate;
67
+
68
+    /**
69
+     * api证书路径
70
+     */
71
+    private String apiPath;
72
+}

+ 3
- 1
src/main/java/com/huiju/estateagents/interceptor/AccessInterceptor.java 查看文件

@@ -69,7 +69,9 @@ public class AccessInterceptor implements HandlerInterceptor {
69 69
             "/webjars/springfox-swagger-ui/css/typography.css",
70 70
             "/clean/menurole",
71 71
             "/clean/buttonrole",
72
-            "/api/admin/taPersonFromRecord"
72
+            "/api/admin/taPersonFromRecord",
73
+            "/api/notify",//微信支付所有回调放过
74
+            "/api/refund/",//微信退款所有回调放过
73 75
     };
74 76
 
75 77
     /*

+ 1
- 1
src/main/java/com/huiju/estateagents/job/JudglActivityTimeJob.java 查看文件

@@ -54,7 +54,7 @@ public class JudglActivityTimeJob extends BaseController {
54 54
     /**
55 55
      * 开启定时任务,每天12:30执行
56 56
      */
57
-    @Scheduled(cron = "* 0/5 * * * ?")
57
+//    @Scheduled(cron = "* 0/5 * * * ?")
58 58
     private void configureTasks() {
59 59
         String time = DateUtils.cutSecond(LocalDateTime.now());
60 60
 

+ 26
- 0
src/main/java/com/huiju/estateagents/mapper/SysAdvancedConfigMapper.java 查看文件

@@ -0,0 +1,26 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.entity.SysAdvancedConfig;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+import java.util.List;
8
+
9
+/**
10
+ * <p>
11
+ * 高级配置基础表  Mapper 接口
12
+ * </p>
13
+ *
14
+ * @author jobob
15
+ * @since 2020-02-26
16
+ */
17
+@Mapper
18
+public interface SysAdvancedConfigMapper extends BaseMapper<SysAdvancedConfig> {
19
+
20
+    /**
21
+     * 获取高级配置
22
+     * @param orgId
23
+     * @return
24
+     */
25
+    List<SysAdvancedConfig> getSysAdvancedConfigList(Integer orgId);
26
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/mapper/SysAdvancedConfigRelationMapper.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.entity.SysAdvancedConfigRelation;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 高级配置对应关系表  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2020-02-26
14
+ */
15
+@Mapper
16
+public interface SysAdvancedConfigRelationMapper extends BaseMapper<SysAdvancedConfigRelation> {
17
+
18
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/mapper/TaAdvancedControllerMapper.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.entity.TaAdvancedController;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 高级配置控制表  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2020-02-26
14
+ */
15
+@Mapper
16
+public interface TaAdvancedControllerMapper extends BaseMapper<TaAdvancedController> {
17
+
18
+}

+ 88
- 11
src/main/java/com/huiju/estateagents/mapper/TaHousingResourcesMapper.java 查看文件

@@ -31,7 +31,6 @@ public interface TaHousingResourcesMapper extends BaseMapper<TaHousingResources>
31 31
      * @param startPrice
32 32
      * @param endPrice
33 33
      * @param apartmentId
34
-     * @param type         为1只展示已发布的房源
35 34
      * @return
36 35
      */
37 36
     List<TaHousingResourcesPO> listHousingResources(@Param("orgId") Integer orgId,
@@ -39,7 +38,25 @@ public interface TaHousingResourcesMapper extends BaseMapper<TaHousingResources>
39 38
                                                     @Param("startPrice") String startPrice,
40 39
                                                     @Param("endPrice") String endPrice,
41 40
                                                     @Param("apartmentId") String apartmentId,
42
-                                                    @Param("type") Integer type);
41
+                                                    @Param("personId") String personId,
42
+                                                    @Param("source") String source);
43
+
44
+    /**
45
+     * 分页获取房源列表
46
+     *
47
+     * @param salesBatchId
48
+     * @param startPrice
49
+     * @param endPrice
50
+     * @param apartmentId
51
+     * @param type         为1只展示已发布的房源
52
+     * @return
53
+     */
54
+    List<TaHousingResourcesPO> listHousingResourcesForCms(@Param("orgId") Integer orgId,
55
+                                                          @Param("salesBatchId") String salesBatchId,
56
+                                                          @Param("startPrice") String startPrice,
57
+                                                          @Param("endPrice") String endPrice,
58
+                                                          @Param("apartmentId") String apartmentId,
59
+                                                          @Param("type") Integer type);
43 60
 
44 61
     /**
45 62
      * 获取某销售批次下所有房源户型
@@ -55,7 +72,7 @@ public interface TaHousingResourcesMapper extends BaseMapper<TaHousingResources>
55 72
      * @param houseId
56 73
      * @return
57 74
      */
58
-    Boolean updateForAddHeat(@Param("houseId") String houseId);
75
+    Boolean updateForAddHeat(@Param("houseId") Integer houseId);
59 76
 
60 77
     /**
61 78
      * 减少热度值
@@ -63,7 +80,14 @@ public interface TaHousingResourcesMapper extends BaseMapper<TaHousingResources>
63 80
      * @param houseId
64 81
      * @return
65 82
      */
66
-    Boolean updateForSubtractHeat(@Param("houseId") String houseId);
83
+    Boolean updateForSubtractHeat(@Param("houseId") Integer houseId);
84
+
85
+    /**
86
+     * 减少认筹热度值
87
+     * @param raiseRecordId
88
+     * @return
89
+     */
90
+    Boolean updateForSubtractRaiseHeat(@Param("raiseRecordId") Integer raiseRecordId);
67 91
 
68 92
     /**
69 93
      * 根据房源ID获取房源详情
@@ -72,7 +96,7 @@ public interface TaHousingResourcesMapper extends BaseMapper<TaHousingResources>
72 96
      * @param type    是否只查询已发布数据,1是 0否
73 97
      * @return
74 98
      */
75
-    TaHousingResourcesPO getHousingDetailById(@Param("houseId") String houseId,
99
+    TaHousingResourcesPO getHousingDetailById(@Param("houseId") Integer houseId,
76 100
                                               @Param("type") String type);
77 101
 
78 102
     /**
@@ -86,16 +110,69 @@ public interface TaHousingResourcesMapper extends BaseMapper<TaHousingResources>
86 110
      * @param blockName
87 111
      * @param unitName
88 112
      * @param floorName
89
-     * @param roomName
113
+     * @param roomNamesa
90 114
      * @param apartmentId
91 115
      * @param status
92 116
      * @param houseId
93 117
      * @return
94 118
      */
95
-    IPage<TaHousingResources> getHouseResourceList(IPage<TaHousingResources> pg,@Param("salesBatchId") Integer salesBatchId,@Param("buildingId") String buildingId,
96
-                                                   @Param("orgId") Integer orgId,@Param("termName") String termName,@Param("blockName") String blockName,
97
-                                                   @Param("unitName") String unitName,@Param("floorName") String floorName,@Param("roomName") String roomName,
98
-                                                   @Param("apartmentId") String apartmentId,@Param("status") Integer status,@Param("houseId") String houseId);
119
+    IPage<TaHousingResources> getHouseResourceList(IPage<TaHousingResources> pg, @Param("salesBatchId") Integer salesBatchId, @Param("buildingId") String buildingId,
120
+                                                   @Param("orgId") Integer orgId, @Param("termName") String termName, @Param("blockName") String blockName,
121
+                                                   @Param("unitName") String unitName, @Param("floorName") String floorName, @Param("roomName") String roomName,
122
+                                                   @Param("apartmentId") String apartmentId, @Param("status") Integer status, @Param("houseId") String houseId,
123
+                                                   @Param("lockingStatus") String lockingStatus);
124
+
125
+    List<TaHousingResources> selectHousingList(@Param("orgId") Integer orgId, @Param("taSalesBatchList") List<TaSalesBatch> taSalesBatchList);
99 126
 
100
-    List<TaHousingResources> selectHousingList(@Param("orgId") Integer orgId,@Param("taSalesBatchList") List<TaSalesBatch> taSalesBatchList);
127
+    /**
128
+     * 批量更新房源认筹基础认读
129
+     *
130
+     * @param housingResourcesList
131
+     * @param raiseHeat
132
+     * @param salesBatchId
133
+     * @param orgId
134
+     * @return
135
+     */
136
+    Integer batchUpdateRaiseHeat(@Param("housingResourcesList") List<TaHousingResources> housingResourcesList,
137
+                                 @Param("raiseHeat") Integer raiseHeat,
138
+                                 @Param("updateUser") Integer updateUser,
139
+                                 @Param("salesBatchId") Integer salesBatchId,
140
+                                 @Param("orgId") Integer orgId);
141
+
142
+    /**
143
+     * 批量更新房源认筹基础热度
144
+     *
145
+     * @param housingResourcesList
146
+     * @param heat
147
+     * @param salesBatchId
148
+     * @param orgId
149
+     * @return
150
+     */
151
+    Integer batchUpdateHeat(@Param("housingResourcesList") List<TaHousingResources> housingResourcesList,
152
+                            @Param("heat") Integer heat,
153
+                            @Param("updateUser") Integer updateUser,
154
+                            @Param("salesBatchId") Integer salesBatchId,
155
+                            @Param("orgId") Integer orgId);
156
+
157
+    /**
158
+     * 根据认筹单ID查询房源列表
159
+     *
160
+     * @param pg
161
+     * @param raiseRecordId
162
+     * @param orgId
163
+     * @return
164
+     */
165
+    IPage<TaHousingResourcesPO> listHouseByRaiseRecordId(IPage<TaHousingResourcesPO> pg,
166
+                                                         @Param("raiseRecordId") Integer raiseRecordId,
167
+                                                         @Param("orgId") Integer orgId);
168
+
169
+    /**
170
+     * 根据认筹房源关联表ID查询房源信息
171
+     *
172
+     * @param orgId
173
+     * @param raiseHouseId
174
+     * @return
175
+     */
176
+    TaHousingResourcesPO getHouseByRaiseHouseId(@Param("orgId") Integer orgId,
177
+                                                @Param("raiseHouseId") Integer raiseHouseId);
101 178
 }

+ 5
- 0
src/main/java/com/huiju/estateagents/mapper/TaMiniappIconMapper.java 查看文件

@@ -2,7 +2,11 @@ package com.huiju.estateagents.mapper;
2 2
 
3 3
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 4
 import com.huiju.estateagents.entity.TaMiniappIcon;
5
+import com.huiju.estateagents.entity.TaMiniappOrgIcon;
5 6
 import org.apache.ibatis.annotations.Mapper;
7
+import org.apache.ibatis.annotations.Param;
8
+
9
+import java.util.List;
6 10
 
7 11
 /**
8 12
  * <p>
@@ -15,4 +19,5 @@ import org.apache.ibatis.annotations.Mapper;
15 19
 @Mapper
16 20
 public interface TaMiniappIconMapper extends BaseMapper<TaMiniappIcon> {
17 21
 
22
+    List<TaMiniappOrgIcon> getListByTheme(@Param("themeId") Integer themeId);
18 23
 }

+ 9
- 0
src/main/java/com/huiju/estateagents/mapper/TaMiniappThemeMapper.java 查看文件

@@ -0,0 +1,9 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.entity.TaMiniappTheme;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+@Mapper
8
+public interface TaMiniappThemeMapper extends BaseMapper<TaMiniappTheme> {
9
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/mapper/TaOrderMapper.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.entity.TaOrder;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 订单表  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2020-02-26
14
+ */
15
+@Mapper
16
+public interface TaOrderMapper extends BaseMapper<TaOrder> {
17
+
18
+}

+ 4
- 1
src/main/java/com/huiju/estateagents/mapper/TaPersonIntentionRecordMapper.java 查看文件

@@ -29,5 +29,8 @@ public interface TaPersonIntentionRecordMapper extends BaseMapper<TaPersonIntent
29 29
      * @param buildingId
30 30
      * @return
31 31
      */
32
-    IPage<Map<String, Object>> selectIntentionUser(IPage<Map<String, Object>> page, @Param("orgId") Integer orgId, @Param("buildingId") String buildingId);
32
+    IPage<Map<String, Object>> selectIntentionUser(IPage<Map<String, Object>> page,
33
+                                                   @Param("orgId") Integer orgId,
34
+                                                   @Param("buildingId") String buildingId,
35
+                                                   @Param("userId") Integer userId);
33 36
 }

+ 43
- 19
src/main/java/com/huiju/estateagents/mapper/TaPersonMapper.java 查看文件

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
4 4
 import com.huiju.estateagents.entity.TaChannel;
5 5
 import com.huiju.estateagents.entity.TaPerson;
6 6
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
7
+import com.huiju.estateagents.entity.TaPersonPositon;
7 8
 import com.huiju.estateagents.po.PersonPO;
8 9
 import io.swagger.models.auth.In;
9 10
 import org.apache.ibatis.annotations.*;
@@ -24,7 +25,7 @@ import java.util.Map;
24 25
  */
25 26
 @Mapper
26 27
 public interface TaPersonMapper extends BaseMapper<TaPerson> {
27
-    List<Map<String,Object>> selectCardList(IPage<Map<String,Object>> page, @Param("personType") String personType, @Param("status") int status,@Param("buildingId")String buildingId,@Param("orgId")Integer orgId);
28
+    List<Map<String, Object>> selectCardList(IPage<Map<String, Object>> page, @Param("personType") String personType, @Param("status") int status, @Param("buildingId") String buildingId, @Param("orgId") Integer orgId);
28 29
 
29 30
     int setFieldIncrement(@Param("personId") String personId, @Param("field") String field, @Param("increment") int increment);
30 31
 
@@ -39,20 +40,21 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
39 40
     TaPerson getById(@Param("personId") String personId);
40 41
 
41 42
 
42
-    List<String>getUserProjects(@Param("personId") Integer personId);
43
+    List<String> getUserProjects(@Param("personId") Integer personId);
43 44
 
44 45
     TaPerson selectByIdPerson(@Param("openid") String openid);
45 46
 
46
-    List<String> getConsultantByName(@Param("name")String name);
47
+    List<String> getConsultantByName(@Param("name") String name);
47 48
 
48
-    String getConsultantByTel(@Param("tel")String tel);
49
+    String getConsultantByTel(@Param("tel") String tel);
49 50
 
50
-    List<Map<String,Object>> selectCardListofMine(IPage<Map<String,Object>> page, @Param("personType") String personType, @Param("status") int status,@Param("personIds")List<String> personIds);
51
+    List<Map<String, Object>> selectCardListofMine(IPage<Map<String, Object>> page, @Param("personType") String personType, @Param("status") int status, @Param("personIds") List<String> personIds);
51 52
 
52 53
     //---------- 用户总数 start ------------
53 54
 
54 55
     /**
55 56
      * 总用户数
57
+     *
56 58
      * @return
57 59
      */
58 60
     @ResultType(Integer.class)
@@ -61,6 +63,7 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
61 63
 
62 64
     /**
63 65
      * 总注册数
66
+     *
64 67
      * @return
65 68
      */
66 69
     @ResultType(Integer.class)
@@ -69,6 +72,7 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
69 72
 
70 73
     /**
71 74
      * 渠道代理后台总用户数
75
+     *
72 76
      * @return
73 77
      */
74 78
     @ResultType(Integer.class)
@@ -77,6 +81,7 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
77 81
 
78 82
     /**
79 83
      * 渠道代理后台总注册数
84
+     *
80 85
      * @return
81 86
      */
82 87
     @ResultType(Integer.class)
@@ -85,15 +90,17 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
85 90
 
86 91
     /**
87 92
      * 根据时间段查询
93
+     *
88 94
      * @param personType
89 95
      * @return
90 96
      */
91
-    Integer selectRecentlyCount(@Param("org") Integer orgId, @Param("personType") String personType, @Param("startDate")LocalDate startDate, @Param("endDate")LocalDate endDate);
97
+    Integer selectRecentlyCount(@Param("org") Integer orgId, @Param("personType") String personType, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
92 98
 
93 99
     //---------- 用户总数 end ------------
94 100
 
95 101
     /**
96 102
      * 用户行为
103
+     *
97 104
      * @param personType
98 105
      * @param startDate
99 106
      * @param endDate
@@ -101,8 +108,8 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
101 108
      */
102 109
     List<PersonPO> selectUserBehavior(@Param("org") Integer orgId,
103 110
                                       @Param("personType") String personType,
104
-                                      @Param("startDate")LocalDate startDate,
105
-                                      @Param("endDate")LocalDate endDate,
111
+                                      @Param("startDate") LocalDate startDate,
112
+                                      @Param("endDate") LocalDate endDate,
106 113
                                       @Param("buildingId") String buildingId,
107 114
                                       @Param("eventType") String eventType,
108 115
                                       @Param("event") String event,
@@ -110,25 +117,27 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
110 117
 
111 118
     /**
112 119
      * 活跃用户数 / 最近新增的用户数
120
+     *
113 121
      * @param personType
114 122
      * @param dateType
115 123
      * @return
116 124
      */
117
-    List<Map<String, Object>> selectActiveUserCount(@Param("org") Integer orgId, @Param("personType") String personType, @Param("dateType") String dateType, @Param("startDate")LocalDate startDate, @Param("endDate")LocalDate endDate);
125
+    List<Map<String, Object>> selectActiveUserCount(@Param("org") Integer orgId, @Param("personType") String personType, @Param("dateType") String dateType, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
118 126
 
119 127
     /**
120 128
      * 新增用户数
129
+     *
121 130
      * @param personType
122 131
      * @param startDate
123 132
      * @param endDate
124 133
      * @return
125 134
      */
126
-    List<Map<String, Object>> selectNewsUserCount(@Param("orgId") Integer orgId, @Param("personType") String personType, @Param("startDate")LocalDate startDate, @Param("endDate")LocalDate endDate);
135
+    List<Map<String, Object>> selectNewsUserCount(@Param("orgId") Integer orgId, @Param("personType") String personType, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
127 136
 
128 137
     /**
129 138
      * 性别比例
130
-     *
131
-     *  据说 1 男  2 女
139
+     * <p>
140
+     * 据说 1 男  2 女
132 141
      *
133 142
      * @return
134 143
      */
@@ -138,6 +147,7 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
138 147
 
139 148
     /**
140 149
      * 城市比例
150
+     *
141 151
      * @param personType
142 152
      * @return
143 153
      */
@@ -164,6 +174,7 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
164 174
 
165 175
     /**
166 176
      * 用户来源 的饼图
177
+     *
167 178
      * @param recommendPersonType
168 179
      * @return
169 180
      */
@@ -171,33 +182,36 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
171 182
 
172 183
     /**
173 184
      * 用户来源 柱状
185
+     *
174 186
      * @return
175 187
      */
176
-    List<Map<String, Object>> selectUserSourceColumnar(@Param("org") Integer orgId, @Param("personType") String personType, @Param("startDate") LocalDate startDate, @Param("endDate")LocalDate endDate);
188
+    List<Map<String, Object>> selectUserSourceColumnar(@Param("org") Integer orgId, @Param("personType") String personType, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
177 189
 
178 190
     /**
179 191
      * 用户来源 数据列表
180 192
      */
181
-    List<Map<String,Object>> selectUserSourceData(@Param("org") Integer orgId, @Param("personType") String personType, @Param("startDate")LocalDate startDate, @Param("endDate")LocalDate endDate);
193
+    List<Map<String, Object>> selectUserSourceData(@Param("org") Integer orgId, @Param("personType") String personType, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
182 194
 
183 195
     // ------------- 用户来源 end ------------
184 196
 
185 197
     @Update("UPDATE ta_person  SET ${field} = IFNULL(${field}, 0) + #{increment}  WHERE person_id = #{newsId}")
186 198
     void setFieldNum(@Param("newsId") String newsId, @Param("field") String field, @Param("increment") int increment);
187 199
 
188
-    IPage<TaPerson> getPersonList(IPage<TaPerson> page, @Param("personType")String personType, @Param("name") String name, @Param("phone") String phone,@Param("status") Integer status,@Param("buildingId") String buildingId,@Param("personTags") String personTags);
200
+    IPage<TaPerson> getPersonList(IPage<TaPerson> page, @Param("personType") String personType, @Param("name") String name, @Param("phone") String phone, @Param("status") Integer status, @Param("buildingId") String buildingId, @Param("personTags") String personTags);
189 201
 
190 202
     /**
191 203
      * 渠道下的经纪人
204
+     *
192 205
      * @param pg
193 206
      * @param name
194 207
      * @param phone
195 208
      * @return
196 209
      */
197
-    IPage<TaPerson> channelBrokerList(IPage<TaChannel> pg, @Param("name") String name, @Param("phone") String phone,@Param("orgid") Integer orgid,@Param("channelId") Integer channelId);
210
+    IPage<TaPerson> channelBrokerList(IPage<TaChannel> pg, @Param("name") String name, @Param("phone") String phone, @Param("orgid") Integer orgid, @Param("channelId") Integer channelId);
198 211
 
199 212
     /**
200 213
      * 渠道邀请经纪人
214
+     *
201 215
      * @param pg
202 216
      * @param id
203 217
      * @return
@@ -206,21 +220,31 @@ public interface TaPersonMapper extends BaseMapper<TaPerson> {
206 220
 
207 221
     /**
208 222
      * 获取用户总积分
223
+     *
209 224
      * @param orgId
210 225
      * @return
211 226
      */
212 227
     Integer sumPointsByOrgId(@Param("orgId") Integer orgId);
213 228
 
214 229
     //更新city拼音为cityId
215
-    void upDatePersonCityToId (@Param("personId")String personId);
230
+    void upDatePersonCityToId(@Param("personId") String personId);
216 231
 
217 232
     /**
218 233
      * 判断置业顾问绑定状态
234
+     *
219 235
      * @return
220 236
      */
221 237
     Integer judgeBindStatusByCondition(@Param("userId") Integer userId, @Param("orgId") Integer orgId, @Param("phone") String phone);
222 238
 
223
-    IPage<TaPerson> selectDriftCustomerPageList(IPage<TaPerson> page,@Param("buildingId") String buildingId,@Param("orgId") Integer orgId,@Param("personEstateDrift") String personEstateDrift,@Param("sceneType") String sceneType);
239
+    IPage<TaPerson> selectDriftCustomerPageList(IPage<TaPerson> page, @Param("buildingId") String buildingId, @Param("orgId") Integer orgId, @Param("personEstateDrift") String personEstateDrift, @Param("sceneType") String sceneType);
224 240
 
225
-    int selectFromNum(@Param("orgId") Integer orgId,@Param("personType") String personType);
241
+    int selectFromNum(@Param("orgId") Integer orgId, @Param("personType") String personType);
242
+
243
+    /**
244
+     * 保存用户位置信息
245
+     *
246
+     * @param record
247
+     * @return
248
+     */
249
+    Integer savePersonPosition(TaPersonPositon record);
226 250
 }

+ 49
- 0
src/main/java/com/huiju/estateagents/mapper/TaPreselectionMapper.java 查看文件

@@ -0,0 +1,49 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.huiju.estateagents.entity.TaPersonBuilding;
6
+import com.huiju.estateagents.entity.TaPreselection;
7
+import org.apache.ibatis.annotations.Mapper;
8
+import org.apache.ibatis.annotations.Param;
9
+import org.springframework.stereotype.Component;
10
+
11
+import java.util.List;
12
+
13
+/**
14
+ * <p>
15
+ * 预选表  Mapper 接口
16
+ * </p>
17
+ *
18
+ * @author jobob
19
+ * @since 2020-02-26
20
+ */
21
+@Mapper
22
+@Component
23
+public interface TaPreselectionMapper extends BaseMapper<TaPreselection> {
24
+
25
+    /**
26
+     * 条件查询预选
27
+     *
28
+     * @param page
29
+     * @param salesBatchName
30
+     * @param buildingId
31
+     * @param orgId
32
+     * @param status
33
+     * @param personBuildingList
34
+     * @return
35
+     */
36
+    IPage<TaPreselection> listPresecretByCondition(IPage<TaPreselection> page,
37
+                                                   @Param("salesBatchName") String salesBatchName,
38
+                                                   @Param("buildingId") String buildingId,
39
+                                                   @Param("orgId") Integer orgId,
40
+                                                   @Param("status") Integer status,
41
+                                                   @Param("personBuildingList") List<TaPersonBuilding> personBuildingList);
42
+
43
+    /**
44
+     * @param id
45
+     * @param orgId
46
+     * @return
47
+     */
48
+    TaPreselection getPresecretById(@Param("id") Integer id, @Param("orgId") Integer orgId);
49
+}

+ 18
- 15
src/main/java/com/huiju/estateagents/mapper/TaPreselectionRecordMapper.java 查看文件

@@ -3,6 +3,7 @@ package com.huiju.estateagents.mapper;
3 3
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5 5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.bo.request.PresecretRecordRequestBO;
6 7
 import com.huiju.estateagents.entity.TaPreselectionRecord;
7 8
 import com.huiju.estateagents.po.TaPreselectionRecordPO;
8 9
 import org.apache.ibatis.annotations.Mapper;
@@ -32,7 +33,9 @@ public interface TaPreselectionRecordMapper extends BaseMapper<TaPreselectionRec
32 33
      */
33 34
     IPage<TaPreselectionRecordPO> listPreselectionRecord(IPage<TaPreselectionRecordPO> iPage,
34 35
                                                          @Param("orgId") Integer orgId,
35
-                                                         @Param("personId") String personId);
36
+                                                         @Param("personId") String personId, @Param("buildingId") String buildingId, @Param("salesBatchId") Integer salesBatchId,
37
+                                                         @Param("apartmentId") String apartmentId, @Param("houseLockingStatus") String houseLockingStatus,
38
+                                                         @Param("customerLocked") String customerLocked, @Param("source") String source);
36 39
 
37 40
     /**
38 41
      * 根据房源ID和用户ID获取预选记录
@@ -42,24 +45,24 @@ public interface TaPreselectionRecordMapper extends BaseMapper<TaPreselectionRec
42 45
      * @return
43 46
      */
44 47
     TaPreselectionRecord getRecordByPersonIdAndHouseId(@Param("personId") String personId,
45
-                                                       @Param("houseId") String houseId);
48
+                                                       @Param("houseId") Integer houseId);
46 49
 
47 50
     /**
48 51
      * 查询预选记录表
52
+     *
49 53
      * @param page
50
-     * @param salesBatchId
51
-     * @param houseId
52
-     * @param orgId
53
-     * @param phone
54
-     * @param apartmentId
55
-     * @param status
54
+     * @param bo
56 55
      * @return
57 56
      */
58
-    List<TaPreselectionRecord> selectPreSelectRecordList(Page page,
59
-                                                         @Param("salesBatchId") String salesBatchId,
60
-                                                         @Param("houseId") Integer houseId,
61
-                                                         @Param("orgId") Integer orgId,
62
-                                                         @Param("phone") String phone,
63
-                                                         @Param("apartmentId") String apartmentId,
64
-                                                         @Param("status") Integer status);
57
+    List<TaPreselectionRecordPO> selectPreSelectRecordList(Page page, @Param("bo") PresecretRecordRequestBO bo);
58
+
59
+    /**
60
+     * 批量删除预选记录
61
+     *
62
+     * @param preselectionRecordList
63
+     * @param orgId
64
+     */
65
+    void batchDeletePreselectRecord(@Param("preselectionRecordList") List<TaPreselectionRecord> preselectionRecordList,
66
+                                    @Param("orgId") Integer orgId,
67
+                                    @Param("userId") Integer userId);
65 68
 }

+ 18
- 0
src/main/java/com/huiju/estateagents/mapper/TaRaiseHouseMapper.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.entity.TaRaiseHouse;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 认筹单与房源关系表  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2020-02-26
14
+ */
15
+@Mapper
16
+public interface TaRaiseHouseMapper extends BaseMapper<TaRaiseHouse> {
17
+
18
+}

+ 33
- 0
src/main/java/com/huiju/estateagents/mapper/TaRaiseMapper.java 查看文件

@@ -0,0 +1,33 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.huiju.estateagents.entity.TaPersonBuilding;
6
+import com.huiju.estateagents.entity.TaRaise;
7
+import org.apache.ibatis.annotations.Mapper;
8
+import org.apache.ibatis.annotations.Param;
9
+import org.springframework.stereotype.Component;
10
+
11
+import java.util.List;
12
+
13
+/**
14
+ * <p>
15
+ * 认筹表  Mapper 接口
16
+ * </p>
17
+ *
18
+ * @author jobob
19
+ * @since 2020-02-26
20
+ */
21
+@Mapper
22
+@Component
23
+public interface TaRaiseMapper extends BaseMapper<TaRaise> {
24
+
25
+    IPage<TaRaise> listRaiseByCondition(IPage<TaRaise> page,
26
+                                        @Param("salesBatchName") String salesBatchName,
27
+                                        @Param("buildingId") String buildingId,
28
+                                        @Param("orgId") Integer orgId,
29
+                                        @Param("status") Integer status,
30
+                                        @Param("personBuildingList") List<TaPersonBuilding> personBuildingList);
31
+
32
+    TaRaise getRaiseById(@Param("id") Integer id, @Param("orgId") Integer orgId);
33
+}

+ 83
- 0
src/main/java/com/huiju/estateagents/mapper/TaRaiseRecordMapper.java 查看文件

@@ -0,0 +1,83 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.huiju.estateagents.base.ResponseBean;
6
+import com.huiju.estateagents.bo.request.HousingRaiseRequestBO;
7
+import com.huiju.estateagents.bo.request.RaiseOrderRequestBO;
8
+import com.huiju.estateagents.bo.request.RaiseRecordRequestBO;
9
+import com.huiju.estateagents.entity.TaRaiseRecord;
10
+import org.apache.ibatis.annotations.Mapper;
11
+import org.apache.ibatis.annotations.Param;
12
+import org.springframework.stereotype.Component;
13
+
14
+import java.util.List;
15
+
16
+/**
17
+ * <p>
18
+ * 认筹单(认筹记录表)  Mapper 接口
19
+ * </p>
20
+ *
21
+ * @author jobob
22
+ * @since 2020-02-26
23
+ */
24
+@Mapper
25
+@Component
26
+public interface TaRaiseRecordMapper extends BaseMapper<TaRaiseRecord> {
27
+
28
+    /**
29
+     * 条件查询认筹单
30
+     *
31
+     * @param page
32
+     * @param bo
33
+     * @return
34
+     */
35
+    IPage<TaRaiseRecord> listHousingRaiseByCondition(IPage<TaRaiseRecord> page,
36
+                                                     @Param("bo") HousingRaiseRequestBO bo);
37
+
38
+    /**
39
+     * 条件查询认筹单
40
+     *
41
+     * @param page
42
+     * @param bo
43
+     * @return
44
+     */
45
+    IPage<TaRaiseRecord> listRaiseRecordByCondition(IPage<TaRaiseRecord> page,
46
+                                                    @Param("bo") RaiseRecordRequestBO bo);
47
+
48
+    /**
49
+     * 条件查询缴费单
50
+     *
51
+     * @param page
52
+     * @param bo
53
+     * @return
54
+     */
55
+    IPage<TaRaiseRecord> listRaiseOrderByCondition(IPage<TaRaiseRecord> page,
56
+                                                   @Param("bo") RaiseOrderRequestBO bo);
57
+
58
+    /**
59
+     * 批量更新
60
+     *
61
+     * @param recordList
62
+     * @param orgId
63
+     * @param payType
64
+     * @return
65
+     */
66
+    Boolean batchUpdateById(@Param("recordList") List<TaRaiseRecord> recordList,
67
+                            @Param("orgId") Integer orgId,
68
+                            @Param("payType") String payType);
69
+
70
+    TaRaiseRecord getUserInfo(@Param("raiseRecordId") Integer raiseRecordId, @Param("orgId") Integer orgId);
71
+
72
+    /**
73
+     * 认筹单房源数+1
74
+     *
75
+     * @param raiseRecordId
76
+     * @param orgId
77
+     * @param updateUserName
78
+     * @return
79
+     */
80
+    Boolean addHouseNum(@Param("raiseRecordId") Integer raiseRecordId,
81
+                        @Param("orgId") Integer orgId,
82
+                        @Param("updateUserName") String updateUserName);
83
+}

+ 2
- 2
src/main/java/com/huiju/estateagents/mapper/TaRecommendCustomerMapper.java 查看文件

@@ -10,7 +10,6 @@ import com.huiju.estateagents.excel.*;
10 10
 import org.apache.ibatis.annotations.Mapper;
11 11
 import org.apache.ibatis.annotations.Param;
12 12
 
13
-import java.time.LocalDateTime;
14 13
 import java.util.List;
15 14
 import java.util.Map;
16 15
 
@@ -46,9 +45,10 @@ public interface TaRecommendCustomerMapper extends BaseMapper<TaRecommendCustome
46 45
      * @param entryType
47 46
      * @param verifyStatus
48 47
      * @param sex
48
+     * @param personBuildingList
49 49
      * @return
50 50
      */
51
-    IPage<TaPerson> getPublicCustomerList(IPage<TaPerson> page, @Param("name") String name, @Param("tel") String tel,@Param("entryType") String entryType,@Param("verifyStatus") String verifyStatus,@Param("sex") Integer sex, @Param("orgId") Integer orgId,@Param("consultTel")String consultTel,@Param("sceneType") String sceneType);
51
+    IPage<TaPerson> getPublicCustomerList(IPage<TaPerson> page, @Param("name") String name, @Param("tel") String tel, @Param("entryType") String entryType, @Param("verifyStatus") String verifyStatus, @Param("sex") Integer sex, @Param("orgId") Integer orgId, @Param("consultTel") String consultTel, @Param("sceneType") String sceneType,@Param("personBuildingList") List<TaPersonBuilding> personBuildingList,@Param("buildingId") String buildingId);
52 52
 
53 53
     /**
54 54
      * 导出数据 获取推荐用户数据

+ 24
- 2
src/main/java/com/huiju/estateagents/mapper/TaSalesBatchMapper.java 查看文件

@@ -2,6 +2,8 @@ package com.huiju.estateagents.mapper;
2 2
 
3 3
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.huiju.estateagents.entity.TaBuilding;
6
+import com.huiju.estateagents.entity.TaHousingResources;
5 7
 import com.huiju.estateagents.entity.TaPersonBuilding;
6 8
 import com.huiju.estateagents.entity.TaSalesBatch;
7 9
 import org.apache.ibatis.annotations.Mapper;
@@ -20,7 +22,7 @@ import java.util.Map;
20 22
  */
21 23
 @Mapper
22 24
 public interface TaSalesBatchMapper extends BaseMapper<TaSalesBatch> {
23
-    IPage<TaSalesBatch> selectByCondition(IPage<TaSalesBatch> page, @Param("salesBatchName") String salesBatchName, @Param("buildingId") String buildingId, @Param("status") Integer status, @Param("orgId") Integer orgId,@Param("personBuildingList")  List<TaPersonBuilding> personBuildingList);
25
+    IPage<TaSalesBatch> selectByCondition(IPage<TaSalesBatch> page, @Param("salesBatchName") String salesBatchName, @Param("buildingId") String buildingId, @Param("status") Integer status, @Param("orgId") Integer orgId, @Param("personBuildingList") List<TaPersonBuilding> personBuildingList);
24 26
 
25 27
     /**
26 28
      * 根据批次号统计预选数据
@@ -39,5 +41,25 @@ public interface TaSalesBatchMapper extends BaseMapper<TaSalesBatch> {
39 41
      * @param salesBatchId
40 42
      * @return
41 43
      */
42
-    Map<String,Object> getTotalHousesAndHeat(@Param("salesBatchId") Integer salesBatchId);
44
+    Map<String, Object> getTotalHousesAndHeat(@Param("salesBatchId") Integer salesBatchId);
45
+
46
+    /**
47
+     * 根据销售批次获取项目信息
48
+     *
49
+     * @param salesBatchId
50
+     * @param orgId
51
+     * @return
52
+     */
53
+    List<TaBuilding> getBuildingById(@Param("salesBatchId") String salesBatchId,
54
+                                     @Param("orgId") Integer orgId);
55
+
56
+    /**
57
+     * 出售房源自增
58
+     *
59
+     * @param salesBatchId
60
+     * @param orgId
61
+     * @return
62
+     */
63
+    Boolean addSalesNumberById(@Param("salesBatchId") Integer salesBatchId,
64
+                               @Param("orgId") Integer orgId);
43 65
 }

+ 3
- 0
src/main/java/com/huiju/estateagents/mapper/TaShareMapper.java 查看文件

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
7 7
 import org.apache.ibatis.annotations.Param;
8 8
 
9 9
 import java.util.List;
10
+import java.util.Map;
10 11
 
11 12
 /**
12 13
  * <p>
@@ -21,4 +22,6 @@ public interface TaShareMapper extends BaseMapper<TaShare> {
21 22
     List<TaShare> selectHouseShareList(Page page, @Param("orgId") Integer orgId, @Param("personType") String personType, @Param("shareType")String shareType, @Param("phone")String phone, @Param("saleBatchId")Integer saleBatchId);
22 23
 
23 24
     List<TaShare> listLiveShare(Page page, @Param("orgId") Integer orgId, @Param("personType") String personType, @Param("shareType")String shareType, @Param("phone")String phone, @Param("liveActivityId")Integer liveActivityId);
25
+
26
+    List<Map<String, Object>> statTopShare(@Param("targetType") String targetType, @Param("targetId") String targetId, @Param("top") Integer top);
24 27
 }

+ 18
- 0
src/main/java/com/huiju/estateagents/mapper/TaWxPayConfigMapper.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.entity.TaWxPayConfig;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 微信支付设置  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2020-02-26
14
+ */
15
+@Mapper
16
+public interface TaWxPayConfigMapper extends BaseMapper<TaWxPayConfig> {
17
+
18
+}

+ 62
- 4
src/main/java/com/huiju/estateagents/po/TaHousingResourcesPO.java 查看文件

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
4 4
 import com.huiju.estateagents.entity.TaBuildingImg;
5 5
 import com.huiju.estateagents.entity.TaBuildingPanorama;
6 6
 import com.huiju.estateagents.entity.TaHousingResources;
7
+import com.huiju.estateagents.entity.TaRaise;
7 8
 import lombok.Data;
8 9
 import lombok.EqualsAndHashCode;
9 10
 import lombok.experimental.Accessors;
@@ -20,10 +21,6 @@ import java.util.List;
20 21
 @Accessors(chain = true)
21 22
 public class TaHousingResourcesPO extends TaHousingResources {
22 23
 
23
-    private Double insideArea;
24
-
25
-    private Double buildingArea;
26
-
27 24
     /**
28 25
      * 是否已经预选该房源,true 是 false 否
29 26
      */
@@ -54,5 +51,66 @@ public class TaHousingResourcesPO extends TaHousingResources {
54 51
     /**
55 52
      * 楼盘名称
56 53
      */
54
+    @TableField(exist = false)
57 55
     private String buildingName;
56
+
57
+    /**
58
+     * 我的预选
59
+     */
60
+    @TableField(exist = false)
61
+    private String minePreselection;
62
+
63
+    /**
64
+     * 我的认筹
65
+     */
66
+    @TableField(exist = false)
67
+    private String mineRaise;
68
+
69
+    /**
70
+     * 锁定人ID
71
+     */
72
+    @TableField(exist = false)
73
+    private String lockingPersonId;
74
+
75
+    /**
76
+     * 锁定人姓名
77
+     */
78
+    @TableField(exist = false)
79
+    private String lockingPersonName;
80
+
81
+    /**
82
+     * 认筹房源关系表Id
83
+     */
84
+    @TableField(exist = false)
85
+    private String raiseHouseId;
86
+
87
+    /**
88
+     * 是否展示预选按钮
89
+     */
90
+    @TableField(exist = false)
91
+    private Boolean preselectionBtn;
92
+
93
+    /**
94
+     * 是否展示认筹按钮
95
+     */
96
+    @TableField(exist = false)
97
+    private Boolean raiseBtn;
98
+
99
+    /**
100
+     * 认筹信息
101
+     */
102
+    @TableField(exist = false)
103
+    private TaRaise taRaise;
104
+
105
+    /**
106
+     * 锁定认筹单编号
107
+     */
108
+    @TableField(exist = false)
109
+    private Integer raiseRecordId;
110
+
111
+    /**
112
+     * 是否展示房源价格
113
+     */
114
+    @TableField(exist = false)
115
+    private Boolean displayHousePrice;
58 116
 }

+ 13
- 0
src/main/java/com/huiju/estateagents/po/TaPreselectionRecordPO.java 查看文件

@@ -2,6 +2,7 @@ package com.huiju.estateagents.po;
2 2
 
3 3
 import com.baomidou.mybatisplus.annotation.TableField;
4 4
 import com.huiju.estateagents.entity.TaBuildingImg;
5
+import com.huiju.estateagents.entity.TaHousingResources;
5 6
 import com.huiju.estateagents.entity.TaPreselectionRecord;
6 7
 import lombok.Data;
7 8
 import lombok.EqualsAndHashCode;
@@ -103,4 +104,16 @@ public class TaPreselectionRecordPO extends TaPreselectionRecord {
103 104
      * 销售批次装填
104 105
      */
105 106
     private String saleBatchStatus;
107
+
108
+    /**
109
+     * 房源信息
110
+     */
111
+    @TableField(exist = false)
112
+    private TaHousingResources housingInfo;
113
+
114
+    /**
115
+     * 是否展示房源价格
116
+     */
117
+    @TableField(exist = false)
118
+    private Boolean displayHousePrice;
106 119
 }

+ 2
- 0
src/main/java/com/huiju/estateagents/service/IMiniAppService.java 查看文件

@@ -43,4 +43,6 @@ public interface IMiniAppService {
43 43
     TaMiniappTemplate getTplByType(String type, String appid);
44 44
 
45 45
     List<TaMiniappTemplate> getTpls(String appid);
46
+
47
+    ResponseBean getOrgQrCode(String paramsStr, Integer orgId);
46 48
 }

+ 1
- 1
src/main/java/com/huiju/estateagents/service/IStatisticalService.java 查看文件

@@ -105,7 +105,7 @@ public interface IStatisticalService {
105 105
      * @param buildingId
106 106
      * @return
107 107
      */
108
-    ResponseBean selectIntentionUser(Integer pageNum, Integer pageSize, Integer orgId, String buildingId);
108
+    ResponseBean selectIntentionUser(Integer pageNum, Integer pageSize, Integer orgId, String buildingId, Integer userId);
109 109
 
110 110
     /**
111 111
      * 用户来源数据 首页

+ 16
- 0
src/main/java/com/huiju/estateagents/service/ISysAdvancedConfigRelationService.java 查看文件

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.entity.SysAdvancedConfigRelation;
5
+
6
+/**
7
+ * <p>
8
+ * 高级配置对应关系表  服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2020-02-26
13
+ */
14
+public interface ISysAdvancedConfigRelationService extends IService<SysAdvancedConfigRelation> {
15
+
16
+}

+ 25
- 0
src/main/java/com/huiju/estateagents/service/ISysAdvancedConfigService.java 查看文件

@@ -0,0 +1,25 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.entity.SysAdvancedConfig;
5
+
6
+import java.util.List;
7
+
8
+/**
9
+ * <p>
10
+ * 高级配置基础表  服务类
11
+ * </p>
12
+ *
13
+ * @author jobob
14
+ * @since 2020-02-26
15
+ */
16
+public interface ISysAdvancedConfigService extends IService<SysAdvancedConfig> {
17
+
18
+    /**
19
+     *
20
+     * 获取高级配置
21
+     * @param orgId
22
+     * @return
23
+     */
24
+    List<SysAdvancedConfig> getSysAdvancedConfigList(Integer orgId);
25
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/service/ITaAdvancedControllerService.java 查看文件

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.entity.TaAdvancedController;
5
+
6
+/**
7
+ * <p>
8
+ * 高级配置控制表  服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2020-02-26
13
+ */
14
+public interface ITaAdvancedControllerService extends IService<TaAdvancedController> {
15
+
16
+}

+ 7
- 0
src/main/java/com/huiju/estateagents/service/ITaBuildingImgService.java 查看文件

@@ -15,4 +15,11 @@ import java.util.List;
15 15
  */
16 16
 public interface ITaBuildingImgService extends IService<TaBuildingImg> {
17 17
     int insertBatch(List<TaBuildingImg> imgs, String buildingId);
18
+
19
+    /**
20
+     * 获取户型图的图片集合
21
+     * @param apartMentIds
22
+     * @return
23
+     */
24
+    List<TaBuildingImg> getAparemnetList(List<String> apartMentIds);
18 25
 }

+ 70
- 3
src/main/java/com/huiju/estateagents/service/ITaHousingResourcesService.java 查看文件

@@ -29,7 +29,19 @@ public interface ITaHousingResourcesService extends IService<TaHousingResources>
29 29
      * @param type  为1只展示已发布的房源
30 30
      * @return
31 31
      */
32
-    List<TaHousingResourcesPO> listHousingResources(Integer orgId, String salesBatchId, String startPrice, String endPrice, String apartmentId, Integer type);
32
+    List<TaHousingResourcesPO> listHousingResources(Integer orgId, String salesBatchId, String startPrice, String endPrice, String apartmentId,String personId,String source );
33
+
34
+
35
+    /* 分页获取房源列表-后台管理端
36
+     *
37
+     * @param salesBatchId 销售批次ID
38
+     * @param startPrice
39
+     * @param endPrice
40
+     * @param apartmentId
41
+     * @param type  为1只展示已发布的房源
42
+     * @return
43
+     */
44
+    List<TaHousingResourcesPO> listHousingResourcesForCms(Integer orgId, String salesBatchId, String startPrice, String endPrice, String apartmentId, Integer type);
33 45
 
34 46
     /**
35 47
      * 获取某销售批次下所有房源户型
@@ -46,7 +58,7 @@ public interface ITaHousingResourcesService extends IService<TaHousingResources>
46 58
      * @param houseId  房源ID
47 59
      * @return
48 60
      */
49
-    TaHousingResourcesPO getHousingDetailById(String personId, String houseId);
61
+    TaHousingResourcesPO getHousingDetailById(String personId, Integer houseId);
50 62
 
51 63
     /**
52 64
      * 校验楼栋信息存不存在
@@ -82,7 +94,8 @@ public interface ITaHousingResourcesService extends IService<TaHousingResources>
82 94
      * @param houseId
83 95
      * @return
84 96
      */
85
-    ResponseBean selectPageList(Integer salesBatchId, String buildingId, Integer pageNumber, Integer pageSize, Integer orgId, String termName, String blockName, String unitName, String floorName, String roomName, String apartmentId, Integer status, String houseId);
97
+    ResponseBean selectPageList(Integer salesBatchId, String buildingId, Integer pageNumber, Integer pageSize, Integer orgId, String termName,
98
+                                String blockName, String unitName, String floorName, String roomName, String apartmentId, Integer status, String houseId, String lockingStatus);
86 99
 
87 100
     /**
88 101
      * 更新房源信息
@@ -113,4 +126,58 @@ public interface ITaHousingResourcesService extends IService<TaHousingResources>
113 126
      * @return
114 127
      */
115 128
     ResponseBean saveExcelValue(MultipartFile file, Integer salesBatchId, String buildingId, Integer orgId);
129
+
130
+    /**
131
+     * 批量更新认筹基础数据
132
+     *
133
+     * @param housingResourcesList
134
+     * @param raiseHeat
135
+     * @param salesBatchId
136
+     * @param orgId
137
+     * @return
138
+     */
139
+    ResponseBean batchUpdateRaiseHeat(List<TaHousingResources> housingResourcesList, Integer raiseHeat, Integer salesBatchId, Integer orgId, Integer updateUser);
140
+
141
+    /**
142
+     * 批量更新预选基础数据
143
+     *
144
+     * @param housingResourcesList
145
+     * @param heat
146
+     * @param salesBatchId
147
+     * @param orgId
148
+     * @param updateUser
149
+     * @return
150
+     */
151
+    ResponseBean batchUpdateHeat(List<TaHousingResources> housingResourcesList, Integer heat, Integer salesBatchId, Integer orgId, Integer updateUser);
152
+
153
+    /**
154
+     * 根据认筹记录查询房源信息
155
+     *
156
+     * @param raiseRecordId
157
+     * @param orgId
158
+     * @param pageNumber
159
+     * @param pageSize
160
+     * @return
161
+     */
162
+    ResponseBean listHouseByRaiseRecordId(Integer raiseRecordId, Integer orgId, Integer pageNumber, Integer pageSize);
163
+
164
+    /**
165
+     * 更新房源锁定状态
166
+     *
167
+     * @param houseId
168
+     * @param type
169
+     * @param orgId
170
+     * @param personId
171
+     * @return
172
+     */
173
+    ResponseBean updateLockingStatus(Integer houseId, String type, Integer orgId, Integer raiseHouseId, String personId, Integer raiseRecordId);
174
+
175
+    /**
176
+     * 校验房源的认筹状态
177
+     * @param houseIds
178
+     * @param personId
179
+     * @param orgId
180
+     * @return
181
+     */
182
+    boolean checkRaiseState(String houseIds, String personId, Integer orgId) throws Exception;
116 183
 }

+ 17
- 0
src/main/java/com/huiju/estateagents/service/ITaMiniappThemeService.java 查看文件

@@ -0,0 +1,17 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.huiju.estateagents.base.ResponseBean;
6
+import com.huiju.estateagents.entity.TaMiniappTheme;
7
+
8
+public interface ITaMiniappThemeService extends IService<TaMiniappTheme> {
9
+
10
+    IPage<TaMiniappTheme> getThemeList(Integer orgId, Boolean includeNotUsed, Integer pageNum, Integer pageSize);
11
+
12
+    ResponseBean editTheme(TaMiniappTheme taMiniappTheme);
13
+
14
+    ResponseBean deleteTheme(TaMiniappTheme taMiniappTheme);
15
+
16
+    TaMiniappTheme getProfileById(Integer id);
17
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/service/ITaOrderService.java 查看文件

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.entity.TaOrder;
5
+
6
+/**
7
+ * <p>
8
+ * 订单表  服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2020-02-26
13
+ */
14
+public interface ITaOrderService extends IService<TaOrder> {
15
+
16
+}

+ 24
- 12
src/main/java/com/huiju/estateagents/service/ITaPersonService.java 查看文件

@@ -8,6 +8,7 @@ import com.huiju.estateagents.entity.TaBuildingDynamic;
8 8
 import com.huiju.estateagents.entity.TaPerson;
9 9
 import com.baomidou.mybatisplus.extension.service.IService;
10 10
 import com.huiju.estateagents.entity.TaPersonBuilding;
11
+import com.huiju.estateagents.entity.TaPersonPositon;
11 12
 
12 13
 import java.util.List;
13 14
 import java.util.Map;
@@ -23,15 +24,15 @@ import java.util.Map;
23 24
 public interface ITaPersonService extends IService<TaPerson> {
24 25
     TaPerson mergePersonWxInfo(WxMaUserInfo userInfo);
25 26
 
26
-    TaPerson updatePersonPhone(String miniOpenid, String phone,Integer orgId);
27
+    TaPerson updatePersonPhone(String miniOpenid, String phone, Integer orgId);
27 28
 
28
-    IPage<Map<String, Object>> getCardList(int pageNumber, int pageSize,String buildingId,Integer orgId);
29
+    IPage<Map<String, Object>> getCardList(int pageNumber, int pageSize, String buildingId, Integer orgId);
29 30
 
30 31
     ResponseBean checkPhoneAndPass(String phone, String pass);
31 32
 
32 33
     ResponseBean resetPassword(String phone, String pass, String plat);
33 34
 
34
-    ResponseBean getCardDetail(String openid, String id,String personId);
35
+    ResponseBean getCardDetail(String openid, String id, String personId);
35 36
 
36 37
     ResponseBean resgiteAgent(String name, String phone, Integer sex, String explain, String openid);
37 38
 
@@ -41,11 +42,11 @@ public interface ITaPersonService extends IService<TaPerson> {
41 42
 
42 43
     TaPerson getPersonByTel(String userPhone);
43 44
 
44
-    IPage<TaPerson> getPersonList(int pageNumber, int pageSize, String personType, String name, String phone,Integer status,String buildingId,String personTags);
45
+    IPage<TaPerson> getPersonList(int pageNumber, int pageSize, String personType, String name, String phone, Integer status, String buildingId, String personTags);
45 46
 
46
-    IPage<TaUser> getBuildingConsultantList(int pageNumber, int pageSize,String buildingId);
47
+    IPage<TaUser> getBuildingConsultantList(int pageNumber, int pageSize, String buildingId);
47 48
 
48
-    TaPerson newPersonByOpenid(String openid,Integer orgId);
49
+    TaPerson newPersonByOpenid(String openid, Integer orgId);
49 50
 
50 51
     ResponseBean bindCard(String phone, String pass, String openid);
51 52
 
@@ -53,33 +54,35 @@ public interface ITaPersonService extends IService<TaPerson> {
53 54
 
54 55
     ResponseBean editConsultant(String id, String paramStr);
55 56
 
56
-    Map<String,Object> getExtraInfo(String personId);
57
+    Map<String, Object> getExtraInfo(String personId);
57 58
 
58 59
     List<TaPerson> getPersonsByOpenId(String openid);
59 60
 
60
-    IPage<TaPerson> getDriftCustomerList (int pageNumber, int pageSize,String building, Integer orgId, String sceneType);
61
+    IPage<TaPerson> getDriftCustomerList(int pageNumber, int pageSize, String building, Integer orgId, String sceneType);
61 62
 
62 63
     String getPersonIdByCustomerId(String customerId);
63 64
 
64
-    IPage<Map<String,Object>> getSavedConsaultants(int pageNumber, int pageSize,String personId);
65
+    IPage<Map<String, Object>> getSavedConsaultants(int pageNumber, int pageSize, String personId);
65 66
 
66 67
 
67 68
     List<TaPersonBuilding> getPersonBuildings(String personId);
68 69
 
69
-    String agentCodeGenerator ();
70
+    String agentCodeGenerator();
70 71
 
71 72
     Integer sumPointsByOrgId(Integer orgId);
72 73
 
73 74
     /**
74 75
      * 渠道管理下的经纪人
76
+     *
75 77
      * @param name
76 78
      * @param phone
77 79
      * @return
78 80
      */
79
-    ResponseBean channelBrokerList(String name, String phone,Integer pageNum,Integer pageSize,Integer orgid,Integer channelId);
81
+    ResponseBean channelBrokerList(String name, String phone, Integer pageNum, Integer pageSize, Integer orgid, Integer channelId);
80 82
 
81 83
     /**
82 84
      * 渠道下邀请经纪人
85
+     *
83 86
      * @param id
84 87
      * @param phone
85 88
      * @param pageNum
@@ -89,14 +92,23 @@ public interface ITaPersonService extends IService<TaPerson> {
89 92
     ResponseBean InviteClientsList(String id, String phone, Integer pageNum, Integer pageSize);
90 93
 
91 94
     //更新city拼音为cityId
92
-    void upDatePersonCityToId (String personId);
95
+    void upDatePersonCityToId(String personId);
93 96
 
94 97
     Integer judgeBindStatusByCondition(Integer userId, Integer orgId, String phone);
95 98
 
96 99
     /**
97 100
      * 第三方获取人员信息接口
101
+     *
98 102
      * @param personId
99 103
      * @return
100 104
      */
101 105
     ResponseBean ThirdUserInfo(String personId);
106
+
107
+    /**
108
+     * 保存用户位置信息
109
+     *
110
+     * @param record
111
+     * @return
112
+     */
113
+    Integer savePersonPosition(TaPersonPositon record);
102 114
 }

+ 3
- 0
src/main/java/com/huiju/estateagents/service/ITaPersonVisitRecordService.java 查看文件

@@ -3,6 +3,7 @@ package com.huiju.estateagents.service;
3 3
 
4 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5 5
 import com.baomidou.mybatisplus.extension.service.IService;
6
+import com.huiju.estateagents.base.ResponseBean;
6 7
 import com.huiju.estateagents.entity.TaConsultantInfo;
7 8
 import com.huiju.estateagents.entity.TaPerson;
8 9
 import com.huiju.estateagents.entity.TaPersonBuilding;
@@ -63,4 +64,6 @@ public interface ITaPersonVisitRecordService extends IService<TaPersonVisitRecor
63 64
 	IPage<TaConsultantInfo> getConsultantShareInfoList(IPage<TaConsultantInfo> pg, String personId);
64 65
 
65 66
 	Integer countShareNumByEventType(Integer orgId, String targetId, Integer userId, String personId, String eventType);
67
+
68
+    ResponseBean newRecord(TaPersonVisitRecord taPersonVisitRecord, TaPerson person);
66 69
 }

+ 18
- 3
src/main/java/com/huiju/estateagents/service/ITaPreselectionRecordService.java 查看文件

@@ -3,9 +3,12 @@ package com.huiju.estateagents.service;
3 3
 import com.baomidou.mybatisplus.core.metadata.IPage;
4 4
 import com.baomidou.mybatisplus.extension.service.IService;
5 5
 import com.huiju.estateagents.base.ResponseBean;
6
+import com.huiju.estateagents.bo.request.PresecretRecordRequestBO;
6 7
 import com.huiju.estateagents.entity.TaPreselectionRecord;
7 8
 import com.huiju.estateagents.po.TaPreselectionRecordPO;
8 9
 
10
+import java.util.List;
11
+
9 12
 /**
10 13
  * <p>
11 14
  * 预选记录表  服务类
@@ -25,7 +28,9 @@ public interface ITaPreselectionRecordService extends IService<TaPreselectionRec
25 28
      * @param personId
26 29
      * @return
27 30
      */
28
-    IPage<TaPreselectionRecordPO> listPreselectionRecord(Integer pageNum, Integer pageSize, Integer orgId, String personId);
31
+    IPage<TaPreselectionRecordPO> listPreselectionRecord(Integer pageNum, Integer pageSize, Integer orgId, String personId, String buildingId,
32
+                                                         Integer salesBatchId, String apartmentId, String houseLockingStatus, String customerLocked,
33
+                                                         String source);
29 34
 
30 35
     /**
31 36
      * 添加预选记录预选
@@ -42,8 +47,18 @@ public interface ITaPreselectionRecordService extends IService<TaPreselectionRec
42 47
      * @param houseId  房源ID
43 48
      * @return
44 49
      */
45
-    ResponseBean taPreselectionRecordCancel(String personId, String houseId);
50
+    ResponseBean taPreselectionRecordCancel(String personId, Integer houseId);
51
+
52
+    ResponseBean selectPreSelectRecordList(PresecretRecordRequestBO recordRequestBO, Integer pageNum, Integer pageSize);
46 53
 
47
-    ResponseBean selectPreSelectRecordList(Integer pageNum, Integer pageSize, String salesBatchId, Integer houseId, Integer orgId, String phone, String apartmentId, Integer status);
54
+    /**
55
+     * 批量删除预选记录
56
+     *
57
+     * @param preselectionRecordList
58
+     * @param orgId
59
+     * @param userId
60
+     * @return
61
+     */
62
+    ResponseBean batchDeletePreselectRecord(List<TaPreselectionRecord> preselectionRecordList, Integer orgId, Integer userId);
48 63
 
49 64
 }

+ 60
- 0
src/main/java/com/huiju/estateagents/service/ITaPreselectionService.java 查看文件

@@ -0,0 +1,60 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.base.ResponseBean;
5
+import com.huiju.estateagents.entity.TaPersonBuilding;
6
+import com.huiju.estateagents.entity.TaPreselection;
7
+
8
+import java.util.List;
9
+
10
+/**
11
+ * <p>
12
+ * 预选表  服务类
13
+ * </p>
14
+ *
15
+ * @author jobob
16
+ * @since 2020-02-26
17
+ */
18
+public interface ITaPreselectionService extends IService<TaPreselection> {
19
+
20
+    /**
21
+     * 获取预选列表
22
+     *
23
+     * @param pageSize
24
+     * @param pageNum
25
+     * @param salesBatchName
26
+     * @param buildingId
27
+     * @param orgId
28
+     * @param status
29
+     * @return
30
+     */
31
+    ResponseBean listPresecretByCondition(Integer pageSize, Integer pageNum, String salesBatchName, String buildingId,
32
+                                          Integer orgId, Integer status, List<TaPersonBuilding> taPersonBuildingListByUserId);
33
+
34
+    /**
35
+     * 批量删除
36
+     *
37
+     * @param taPreselectionList
38
+     * @param orgId
39
+     * @return
40
+     */
41
+    ResponseBean batchDelete(List<TaPreselection> taPreselectionList, Integer orgId);
42
+
43
+
44
+    /**
45
+     * @param id
46
+     * @param orgId
47
+     * @return
48
+     */
49
+    ResponseBean getPresecretById(Integer id, Integer orgId);
50
+
51
+    /**
52
+     * 校验批次下是否添加预选
53
+     *
54
+     * @param salesBatchId
55
+     * @param orgId
56
+     * @return
57
+     */
58
+    ResponseBean checkHavingRecordForSalesBatch(Integer salesBatchId, Integer orgId);
59
+
60
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/service/ITaRaiseHouseService.java 查看文件

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.entity.TaRaiseHouse;
5
+
6
+/**
7
+ * <p>
8
+ * 认筹单与房源关系表  服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2020-02-26
13
+ */
14
+public interface ITaRaiseHouseService extends IService<TaRaiseHouse> {
15
+
16
+}

+ 90
- 0
src/main/java/com/huiju/estateagents/service/ITaRaiseRecordService.java 查看文件

@@ -0,0 +1,90 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.huiju.estateagents.base.ResponseBean;
6
+import com.huiju.estateagents.bo.request.HousingRaiseRequestBO;
7
+import com.huiju.estateagents.bo.request.RaiseOrderRequestBO;
8
+import com.huiju.estateagents.bo.request.RaiseRecordRequestBO;
9
+import com.huiju.estateagents.entity.TaRaiseRecord;
10
+import org.springframework.web.bind.annotation.RequestParam;
11
+
12
+import java.time.LocalDateTime;
13
+import java.util.List;
14
+
15
+/**
16
+ * <p>
17
+ * 认筹单(认筹记录表)  服务类
18
+ * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2020-02-26
22
+ */
23
+public interface ITaRaiseRecordService extends IService<TaRaiseRecord> {
24
+
25
+
26
+    /**
27
+     * 条件查询房源认筹记录
28
+     *
29
+     * @param requestBO
30
+     * @param pageNumber
31
+     * @param pageSize
32
+     * @return
33
+     */
34
+    ResponseBean listHousingRaiseByCondition(HousingRaiseRequestBO requestBO, Integer pageNumber, Integer pageSize);
35
+
36
+    /**
37
+     * 条件查询认筹单
38
+     *
39
+     * @param recordRequestBO
40
+     * @param pageNumber
41
+     * @param pageSize
42
+     * @return
43
+     */
44
+    ResponseBean listRaiseRecordByCondition(RaiseRecordRequestBO recordRequestBO, Integer pageNumber, Integer pageSize);
45
+
46
+    /**
47
+     * 条件查询缴费单
48
+     *
49
+     * @param orderRequestBO
50
+     * @param pageNumber
51
+     * @param pageSize
52
+     * @return
53
+     */
54
+    ResponseBean listRaiseOrderByCondition(RaiseOrderRequestBO orderRequestBO, Integer pageNumber, Integer pageSize);
55
+
56
+    /**
57
+     * 小程序端保存认筹单信息
58
+     *
59
+     * @param taRaiseRecord
60
+     * @param orgId
61
+     * @param personId
62
+     * @return
63
+     */
64
+    TaRaiseRecord saveRaiseInfo(TaRaiseRecord taRaiseRecord, Integer orgId, String personId) throws Exception;
65
+
66
+    /**
67
+     * 获取用户信息
68
+     *
69
+     * @param orgId
70
+     * @param raiseRecordId
71
+     * @return
72
+     */
73
+    TaRaiseRecord getUserInfo(Integer orgId, Integer raiseRecordId);
74
+
75
+    /**
76
+     * 认筹单房源数+1
77
+     *
78
+     * @param raiseRecordId
79
+     * @param orgId
80
+     * @return
81
+     */
82
+    Boolean addHouseNum(Integer raiseRecordId, Integer orgId, Integer userId);
83
+
84
+    /**
85
+     * 发送认筹消息
86
+     */
87
+    void sendRaiseMsg(Integer raiseRecordId, String personId, String title, String result, String reason,String remark, Boolean isSuccess);
88
+
89
+    Boolean updateForSubtractRaiseHeat(Integer raiseRecordId);
90
+}

+ 59
- 0
src/main/java/com/huiju/estateagents/service/ITaRaiseService.java 查看文件

@@ -0,0 +1,59 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.base.ResponseBean;
5
+import com.huiju.estateagents.entity.TaPersonBuilding;
6
+import com.huiju.estateagents.entity.TaRaise;
7
+
8
+import javax.servlet.http.HttpServletRequest;
9
+import java.util.List;
10
+
11
+/**
12
+ * <p>
13
+ * 认筹表  服务类
14
+ * </p>
15
+ *
16
+ * @author jobob
17
+ * @since 2020-02-26
18
+ */
19
+public interface ITaRaiseService extends IService<TaRaise> {
20
+
21
+    /**
22
+     * 获取销售批次列表 - 认筹
23
+     *
24
+     * @param pageSize
25
+     * @param pageNum
26
+     * @param salesBatchName
27
+     * @param buildingId
28
+     * @param orgId
29
+     * @param status
30
+     * @return
31
+     */
32
+    ResponseBean listRaiseByCondition(Integer pageSize, Integer pageNum, String salesBatchName, String buildingId,
33
+                                      Integer orgId, Integer status, List<TaPersonBuilding> taPersonBuildingListByUserId);
34
+
35
+    /**
36
+     * 批量删除
37
+     *
38
+     * @param taRaiseList
39
+     * @param orgId
40
+     * @return
41
+     */
42
+    ResponseBean batchDelete(List<TaRaise> taRaiseList, Integer orgId);
43
+
44
+    /**
45
+     * @param id
46
+     * @param orgId
47
+     * @return
48
+     */
49
+    ResponseBean getRaiseById(Integer id, Integer orgId);
50
+
51
+    /**
52
+     *
53
+     * @param raiseId
54
+     * @param raiseRecordId
55
+     * @param salesBatchId
56
+     * @return
57
+     */
58
+    TaRaise getRaiseProfile(Integer raiseId, Integer raiseRecordId, Integer salesBatchId);
59
+}

+ 8
- 0
src/main/java/com/huiju/estateagents/service/ITaSalesBatchService.java 查看文件

@@ -36,4 +36,12 @@ public interface ITaSalesBatchService extends IService<TaSalesBatch> {
36 36
      * @return
37 37
      */
38 38
     ResponseBean getSalesBatchById(Integer salesBatchId);
39
+
40
+    /**
41
+     *
42
+     * @param salesBatchId
43
+     * @param orgId
44
+     * @return
45
+     */
46
+    ResponseBean getBuildingById(String salesBatchId,Integer orgId);
39 47
 }

+ 0
- 0
src/main/java/com/huiju/estateagents/service/ITaShareService.java 查看文件


部分文件因文件數量過多而無法顯示