Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

82064491C07A712AE32B5B57EC6EF136 10 hónapja
szülő
commit
d78efaf5fc
35 módosított fájl, 855 hozzáadás és 190 törlés
  1. 66 53
      doc/就业驿站管理系统.pdb
  2. 61 50
      doc/就业驿站管理系统.pdm
  3. 5 4
      doc/待更新脚本
  4. 1 1
      h5app/public/appconfig.json
  5. 36 0
      h5app/src/api/recommendmgt/index.ts
  6. 8 0
      h5app/src/router/index.ts
  7. 1 1
      h5app/src/utils/config.ts
  8. 0 1
      h5app/src/views/pages/jobhunt/recommend/list.vue
  9. 1 1
      h5app/src/views/pages/jobhunt/recommend/recommend.vue
  10. 0 5
      h5app/src/views/pages/post/list.vue
  11. 1 1
      h5app/src/views/pages/post/recommendJob.vue
  12. 156 0
      h5app/src/views/pages/recommendMgt/detail.vue
  13. 169 0
      h5app/src/views/pages/recommendMgt/list.vue
  14. 5 0
      h5app/src/views/pages/wxMessage/companyInfo.vue
  15. 5 0
      h5app/src/views/pages/wxMessage/jobUserInfo.vue
  16. 2 2
      h5app/src/views/sapp/tabMain.vue
  17. 2 2
      h5app/src/views/sapp/tabWork.vue
  18. 2 6
      src/main/java/com/hz/employmentsite/AppConfig.java
  19. 3 1
      src/main/java/com/hz/employmentsite/controller/baseSettings/SiteUserController.java
  20. 7 1
      src/main/java/com/hz/employmentsite/controller/jobUserManager/RecommendMgtController.java
  21. 6 0
      src/main/java/com/hz/employmentsite/jobs/sendWxMessageJob.java
  22. 2 1
      src/main/java/com/hz/employmentsite/mapper/cquery/RecommendMgtCQuery.java
  23. 10 0
      src/main/java/com/hz/employmentsite/model/WxMessagestatus.java
  24. 70 0
      src/main/java/com/hz/employmentsite/model/WxMessagestatusExample.java
  25. 28 5
      src/main/java/com/hz/employmentsite/services/impl/WechatServiceImpl.java
  26. 26 8
      src/main/java/com/hz/employmentsite/services/impl/baseSettings/SiteInfoImpl.java
  27. 69 23
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/RecommendMgtServiceImpl.java
  28. 3 0
      src/main/java/com/hz/employmentsite/services/service/WechatService.java
  29. 4 0
      src/main/java/com/hz/employmentsite/services/service/jobUserManager/RecommendMgtService.java
  30. 3 1
      src/main/java/com/hz/employmentsite/vo/jobUserManager/RecommendMgtVo.java
  31. 2 4
      src/main/resources/application.yml
  32. 24 7
      src/main/resources/mapping/WxMessagestatusMapper.xml
  33. 8 3
      src/main/resources/mapping/cquery/RecommendMgtCQuery.xml
  34. 61 1
      vue/src/views/baseSettings/siteInfo/detail.vue
  35. 8 8
      vue/src/views/jobUserManager/recommendMgt/index.vue

+ 66 - 53
doc/就业驿站管理系统.pdb

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<?PowerDesigner AppLocale="UTF16" ID="{2D964471-9870-48BE-90E9-524D40D03B42}" Label="" LastModificationDate="1713443051" Name="就业驿站管理系统" Objects="512" Symbols="45" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.0.0.3514"?>
+<?PowerDesigner AppLocale="UTF16" ID="{2D964471-9870-48BE-90E9-524D40D03B42}" Label="" LastModificationDate="1713491209" Name="就业驿站管理系统" Objects="512" Symbols="45" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.0.0.3514"?>
 <!-- do not edit this file -->
 
 <Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
@@ -5329,7 +5329,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:CreationDate>1713436879</a:CreationDate>
 <a:ModificationDate>1713437121</a:ModificationDate>
 <a:IconMode>-1</a:IconMode>
-<a:Rect>((-5963,-32235), (5958,-20922))</a:Rect>
+<a:Rect>((-6079,-32722), (6074,-20435))</a:Rect>
 <a:LineColor>16512</a:LineColor>
 <a:FillColor>166354</a:FillColor>
 <a:ShadowColor>12632256</a:ShadowColor>
@@ -9214,7 +9214,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Code>wx_messageStatus</a:Code>
 <a:CreationDate>1713436879</a:CreationDate>
 <a:Creator>bowin90</a:Creator>
-<a:ModificationDate>1713437237</a:ModificationDate>
+<a:ModificationDate>1713491204</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <a:TotalSavingCurrency/>
 <c:Columns>
@@ -9267,6 +9267,17 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>text</a:DataType>
 </o:Column>
 <o:Column Id="o417">
+<a:ObjectID>AC18E990-27B9-4F67-A16C-23925A51DCFA</a:ObjectID>
+<a:Name>url</a:Name>
+<a:Code>url</a:Code>
+<a:CreationDate>1713491179</a:CreationDate>
+<a:Creator>bowin90</a:Creator>
+<a:ModificationDate>1713491209</a:ModificationDate>
+<a:Modifier>bowin90</a:Modifier>
+<a:DataType>varchar1000)</a:DataType>
+<a:Length>1000</a:Length>
+</o:Column>
+<o:Column Id="o418">
 <a:ObjectID>C2AE553A-6601-4B06-B346-50EE169BE412</a:ObjectID>
 <a:Name>推送时间</a:Name>
 <a:Code>sendTime</a:Code>
@@ -9277,7 +9288,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Comment>推送时间</a:Comment>
 <a:DataType>datetime</a:DataType>
 </o:Column>
-<o:Column Id="o418">
+<o:Column Id="o419">
 <a:ObjectID>16E88D0D-B4B6-43B2-A16E-7C2A64E17A25</a:ObjectID>
 <a:Name>状态</a:Name>
 <a:Code>recordStatus</a:Code>
@@ -9288,7 +9299,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Comment>状态,0未推送,1已推送</a:Comment>
 <a:DataType>int</a:DataType>
 </o:Column>
-<o:Column Id="o419">
+<o:Column Id="o420">
 <a:ObjectID>73ED08AC-7B97-4372-A56C-EDC66E8CC4AB</a:ObjectID>
 <a:Name>创建人</a:Name>
 <a:Code>createUserID</a:Code>
@@ -9300,7 +9311,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(50)</a:DataType>
 <a:Length>50</a:Length>
 </o:Column>
-<o:Column Id="o420">
+<o:Column Id="o421">
 <a:ObjectID>771B6440-956C-41CF-A3C9-F67876E4936A</a:ObjectID>
 <a:Name>创建时间</a:Name>
 <a:Code>createTime</a:Code>
@@ -9311,7 +9322,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Comment>创建时间</a:Comment>
 <a:DataType>datetime</a:DataType>
 </o:Column>
-<o:Column Id="o421">
+<o:Column Id="o422">
 <a:ObjectID>3A8D896F-2710-4FB6-8FC6-3D7DAA2E2B47</a:ObjectID>
 <a:Name>修改人</a:Name>
 <a:Code>modifyUserID</a:Code>
@@ -9323,7 +9334,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(50)</a:DataType>
 <a:Length>50</a:Length>
 </o:Column>
-<o:Column Id="o422">
+<o:Column Id="o423">
 <a:ObjectID>7C39DC5E-DB29-459A-A803-CF3EAABD4143</a:ObjectID>
 <a:Name>修改时间</a:Name>
 <a:Code>modifyTime</a:Code>
@@ -9336,7 +9347,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Column>
 </c:Columns>
 <c:Keys>
-<o:Key Id="o423">
+<o:Key Id="o424">
 <a:ObjectID>B8FCFC4F-8EE5-4A53-91B0-10071641EE3C</a:ObjectID>
 <a:Name>Key_1</a:Name>
 <a:Code>Key_1</a:Code>
@@ -9350,7 +9361,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Key>
 </c:Keys>
 <c:PrimaryKey>
-<o:Key Ref="o423"/>
+<o:Key Ref="o424"/>
 </c:PrimaryKey>
 </o:Table>
 <o:Table Id="o93">
@@ -9363,7 +9374,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Modifier>bowin90</a:Modifier>
 <a:TotalSavingCurrency/>
 <c:Columns>
-<o:Column Id="o424">
+<o:Column Id="o425">
 <a:ObjectID>C7465F14-9DE1-4590-B922-6BA638A38A3D</a:ObjectID>
 <a:Name>微信消息模板编码</a:Name>
 <a:Code>templateNo</a:Code>
@@ -9376,7 +9387,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Length>10</a:Length>
 <a:Column.Mandatory>1</a:Column.Mandatory>
 </o:Column>
-<o:Column Id="o425">
+<o:Column Id="o426">
 <a:ObjectID>9454C1FA-0CE3-4BA4-9448-E005B1D204B0</a:ObjectID>
 <a:Name>微信消息模板名称</a:Name>
 <a:Code>templateName</a:Code>
@@ -9388,7 +9399,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(50)</a:DataType>
 <a:Length>50</a:Length>
 </o:Column>
-<o:Column Id="o426">
+<o:Column Id="o427">
 <a:ObjectID>907393F7-CDCA-42B7-AA04-B541C0EE497B</a:ObjectID>
 <a:Name>微信消息模板ID</a:Name>
 <a:Code>templateId</a:Code>
@@ -9400,7 +9411,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(300)</a:DataType>
 <a:Length>300</a:Length>
 </o:Column>
-<o:Column Id="o427">
+<o:Column Id="o428">
 <a:ObjectID>8600CCC7-2960-4703-9562-AE96E2CF3F97</a:ObjectID>
 <a:Name>模板跳转url</a:Name>
 <a:Code>url</a:Code>
@@ -9414,7 +9425,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Column>
 </c:Columns>
 <c:Keys>
-<o:Key Id="o428">
+<o:Key Id="o429">
 <a:ObjectID>F1B3FF1D-0B67-4C0A-860E-BB3EFCFBCA1F</a:ObjectID>
 <a:Name>Key_1</a:Name>
 <a:Code>Key_1</a:Code>
@@ -9423,12 +9434,12 @@ LABL 0 Arial,8,N</a:FontList>
 <a:ModificationDate>1713441468</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <c:Key.Columns>
-<o:Column Ref="o424"/>
+<o:Column Ref="o425"/>
 </c:Key.Columns>
 </o:Key>
 </c:Keys>
 <c:PrimaryKey>
-<o:Key Ref="o428"/>
+<o:Key Ref="o429"/>
 </c:PrimaryKey>
 </o:Table>
 <o:Table Id="o94">
@@ -9437,11 +9448,11 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Code>wx_messageTempSetting_field</a:Code>
 <a:CreationDate>1713442884</a:CreationDate>
 <a:Creator>bowin90</a:Creator>
-<a:ModificationDate>1713443011</a:ModificationDate>
+<a:ModificationDate>1713443103</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <a:TotalSavingCurrency/>
 <c:Columns>
-<o:Column Id="o429">
+<o:Column Id="o430">
 <a:ObjectID>F5E9C7FD-BC70-4A21-B07D-072CDA88A141</a:ObjectID>
 <a:Name>微信消息模板编码</a:Name>
 <a:Code>templateNo</a:Code>
@@ -9454,19 +9465,20 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Length>10</a:Length>
 <a:Column.Mandatory>1</a:Column.Mandatory>
 </o:Column>
-<o:Column Id="o430">
+<o:Column Id="o431">
 <a:ObjectID>C1D08037-2874-40A3-BCF2-FF8CE3920A41</a:ObjectID>
 <a:Name>wxFieldName</a:Name>
 <a:Code>wxFieldName</a:Code>
 <a:CreationDate>1713442884</a:CreationDate>
 <a:Creator>bowin90</a:Creator>
-<a:ModificationDate>1713443011</a:ModificationDate>
+<a:ModificationDate>1713443103</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <a:Comment>微信字段名称</a:Comment>
 <a:DataType>varchar(30)</a:DataType>
 <a:Length>30</a:Length>
+<a:Column.Mandatory>1</a:Column.Mandatory>
 </o:Column>
-<o:Column Id="o431">
+<o:Column Id="o432">
 <a:ObjectID>8CC02B30-DA95-4D69-8223-4F4DDCAA310E</a:ObjectID>
 <a:Name>sysFieldName</a:Name>
 <a:Code>sysFieldName</a:Code>
@@ -9480,21 +9492,22 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Column>
 </c:Columns>
 <c:Keys>
-<o:Key Id="o432">
+<o:Key Id="o433">
 <a:ObjectID>A9ECA0F3-2901-45AB-9B65-AEB7A716B0BA</a:ObjectID>
 <a:Name>Key_1</a:Name>
 <a:Code>Key_1</a:Code>
 <a:CreationDate>1713442884</a:CreationDate>
 <a:Creator>bowin90</a:Creator>
-<a:ModificationDate>1713443011</a:ModificationDate>
+<a:ModificationDate>1713443103</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <c:Key.Columns>
-<o:Column Ref="o429"/>
+<o:Column Ref="o430"/>
+<o:Column Ref="o431"/>
 </c:Key.Columns>
 </o:Key>
 </c:Keys>
 <c:PrimaryKey>
-<o:Key Ref="o432"/>
+<o:Key Ref="o433"/>
 </c:PrimaryKey>
 </o:Table>
 </c:Tables>
@@ -9520,7 +9533,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o127"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o433">
+<o:ReferenceJoin Id="o434">
 <a:ObjectID>54F04187-9C05-49AC-A2AE-0F6805B87FA6</a:ObjectID>
 <a:CreationDate>1700727651</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9556,7 +9569,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o434">
+<o:ReferenceJoin Id="o435">
 <a:ObjectID>1C1F4C11-0B3A-4093-A82E-6A9FD4FD25D0</a:ObjectID>
 <a:CreationDate>1700727797</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9592,7 +9605,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o435">
+<o:ReferenceJoin Id="o436">
 <a:ObjectID>40A0CA90-8614-4815-97AD-0EBD6F0B71D9</a:ObjectID>
 <a:CreationDate>1700730987</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9628,7 +9641,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o436">
+<o:ReferenceJoin Id="o437">
 <a:ObjectID>FB4FAA07-CE83-4FCA-A8D0-3EAF2B4D6E07</a:ObjectID>
 <a:CreationDate>1700731007</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9664,7 +9677,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o163"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o437">
+<o:ReferenceJoin Id="o438">
 <a:ObjectID>D517805A-E4C7-4403-8465-67312BEA0D62</a:ObjectID>
 <a:CreationDate>1700731026</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9700,7 +9713,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o438">
+<o:ReferenceJoin Id="o439">
 <a:ObjectID>7A61F341-556C-4479-A342-A7646603F9F3</a:ObjectID>
 <a:CreationDate>1700731151</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9736,7 +9749,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o221"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o439">
+<o:ReferenceJoin Id="o440">
 <a:ObjectID>690001A1-24C5-4BB0-860C-27E191E15580</a:ObjectID>
 <a:CreationDate>1700731191</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9772,7 +9785,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o440">
+<o:ReferenceJoin Id="o441">
 <a:ObjectID>0B8B962D-B921-4C57-9B91-8C15F33BED75</a:ObjectID>
 <a:CreationDate>1700731590</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9808,7 +9821,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o441">
+<o:ReferenceJoin Id="o442">
 <a:ObjectID>CF00EFE5-091D-4B44-9BC6-78E0E41801E0</a:ObjectID>
 <a:CreationDate>1700731650</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9844,7 +9857,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o442">
+<o:ReferenceJoin Id="o443">
 <a:ObjectID>451F9C5E-5174-4834-8447-8BFBF152415E</a:ObjectID>
 <a:CreationDate>1700731691</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9880,7 +9893,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o443">
+<o:ReferenceJoin Id="o444">
 <a:ObjectID>348ADE0B-66DB-4664-989D-92DEC0AF1BCD</a:ObjectID>
 <a:CreationDate>1700731736</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9916,7 +9929,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o221"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o444">
+<o:ReferenceJoin Id="o445">
 <a:ObjectID>ABE69D56-EB12-409A-94E0-7250DB96B800</a:ObjectID>
 <a:CreationDate>1700731802</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9952,7 +9965,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o445">
+<o:ReferenceJoin Id="o446">
 <a:ObjectID>08EDE705-0BB1-4605-9A44-22080589321A</a:ObjectID>
 <a:CreationDate>1700731807</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9988,7 +10001,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o357"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o446">
+<o:ReferenceJoin Id="o447">
 <a:ObjectID>9948DA1B-7F6D-4BFD-944D-78B0BB942C79</a:ObjectID>
 <a:CreationDate>1701227667</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10024,7 +10037,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o188"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o447">
+<o:ReferenceJoin Id="o448">
 <a:ObjectID>B70423BB-9802-457F-AE23-4CBF7D842F4E</a:ObjectID>
 <a:CreationDate>1701660221</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10057,7 +10070,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Table Ref="o86"/>
 </c:ChildTable>
 <c:Joins>
-<o:ReferenceJoin Id="o448">
+<o:ReferenceJoin Id="o449">
 <a:ObjectID>5E4AB2FC-A524-45F4-9FE1-E46F2AFC9564</a:ObjectID>
 <a:CreationDate>1701661219</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10093,7 +10106,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o449">
+<o:ReferenceJoin Id="o450">
 <a:ObjectID>3629C8A8-9FDA-42D0-825C-8B0997759790</a:ObjectID>
 <a:CreationDate>1701934197</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10129,7 +10142,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o383"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o450">
+<o:ReferenceJoin Id="o451">
 <a:ObjectID>2374EDD3-256A-4744-B800-C1EAC2B3A8BA</a:ObjectID>
 <a:CreationDate>1703661458</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10165,7 +10178,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o401"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o451">
+<o:ReferenceJoin Id="o452">
 <a:ObjectID>E869B4C1-58EF-4215-B2EE-702BC081782A</a:ObjectID>
 <a:CreationDate>1703661902</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10201,7 +10214,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o221"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o452">
+<o:ReferenceJoin Id="o453">
 <a:ObjectID>9CCCDB43-37CB-4FEC-9728-5E1C604B931C</a:ObjectID>
 <a:CreationDate>1703727031</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10237,7 +10250,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o412"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o453">
+<o:ReferenceJoin Id="o454">
 <a:ObjectID>69BDF72C-5720-4C82-887C-A74DF7E2A01D</a:ObjectID>
 <a:CreationDate>1713147069</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10270,27 +10283,27 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Table Ref="o94"/>
 </c:ChildTable>
 <c:ParentKey>
-<o:Key Ref="o428"/>
+<o:Key Ref="o429"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o454">
+<o:ReferenceJoin Id="o455">
 <a:ObjectID>EA16D89A-A814-4871-B1D9-CCB394F38D05</a:ObjectID>
 <a:CreationDate>1713443051</a:CreationDate>
 <a:Creator>bowin90</a:Creator>
 <a:ModificationDate>1713443051</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <c:Object1>
-<o:Column Ref="o424"/>
+<o:Column Ref="o425"/>
 </c:Object1>
 <c:Object2>
-<o:Column Ref="o429"/>
+<o:Column Ref="o430"/>
 </c:Object2>
 </o:ReferenceJoin>
 </c:Joins>
 </o:Reference>
 </c:References>
 <c:DefaultGroups>
-<o:Group Id="o455">
+<o:Group Id="o456">
 <a:ObjectID>9EC8D640-B68B-4B22-9ECC-8604531BD893</a:ObjectID>
 <a:Name>PUBLIC</a:Name>
 <a:Code>PUBLIC</a:Code>
@@ -10301,7 +10314,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Group>
 </c:DefaultGroups>
 <c:TargetModels>
-<o:TargetModel Id="o456">
+<o:TargetModel Id="o457">
 <a:ObjectID>F5495246-0AD0-47FB-87F5-4932E41412CF</a:ObjectID>
 <a:Name>MySQL 5.0</a:Name>
 <a:Code>MYSQL50</a:Code>

+ 61 - 50
doc/就业驿站管理系统.pdm

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<?PowerDesigner AppLocale="UTF16" ID="{2D964471-9870-48BE-90E9-524D40D03B42}" Label="" LastModificationDate="1713443103" Name="就业驿站管理系统" Objects="512" Symbols="45" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.0.0.3514"?>
+<?PowerDesigner AppLocale="UTF16" ID="{2D964471-9870-48BE-90E9-524D40D03B42}" Label="" LastModificationDate="1713491246" Name="就业驿站管理系统" Objects="512" Symbols="45" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="16.0.0.3514"?>
 <!-- do not edit this file -->
 
 <Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
@@ -5329,7 +5329,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:CreationDate>1713436879</a:CreationDate>
 <a:ModificationDate>1713437121</a:ModificationDate>
 <a:IconMode>-1</a:IconMode>
-<a:Rect>((-5963,-32235), (5958,-20922))</a:Rect>
+<a:Rect>((-6196,-32722), (6188,-20435))</a:Rect>
 <a:LineColor>16512</a:LineColor>
 <a:FillColor>166354</a:FillColor>
 <a:ShadowColor>12632256</a:ShadowColor>
@@ -9214,7 +9214,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Code>wx_messageStatus</a:Code>
 <a:CreationDate>1713436879</a:CreationDate>
 <a:Creator>bowin90</a:Creator>
-<a:ModificationDate>1713437237</a:ModificationDate>
+<a:ModificationDate>1713491204</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <a:TotalSavingCurrency/>
 <c:Columns>
@@ -9267,6 +9267,17 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>text</a:DataType>
 </o:Column>
 <o:Column Id="o417">
+<a:ObjectID>AC18E990-27B9-4F67-A16C-23925A51DCFA</a:ObjectID>
+<a:Name>url</a:Name>
+<a:Code>url</a:Code>
+<a:CreationDate>1713491179</a:CreationDate>
+<a:Creator>bowin90</a:Creator>
+<a:ModificationDate>1713491246</a:ModificationDate>
+<a:Modifier>bowin90</a:Modifier>
+<a:DataType>varchar(1000)</a:DataType>
+<a:Length>1000</a:Length>
+</o:Column>
+<o:Column Id="o418">
 <a:ObjectID>C2AE553A-6601-4B06-B346-50EE169BE412</a:ObjectID>
 <a:Name>推送时间</a:Name>
 <a:Code>sendTime</a:Code>
@@ -9277,7 +9288,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Comment>推送时间</a:Comment>
 <a:DataType>datetime</a:DataType>
 </o:Column>
-<o:Column Id="o418">
+<o:Column Id="o419">
 <a:ObjectID>16E88D0D-B4B6-43B2-A16E-7C2A64E17A25</a:ObjectID>
 <a:Name>状态</a:Name>
 <a:Code>recordStatus</a:Code>
@@ -9288,7 +9299,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Comment>状态,0未推送,1已推送</a:Comment>
 <a:DataType>int</a:DataType>
 </o:Column>
-<o:Column Id="o419">
+<o:Column Id="o420">
 <a:ObjectID>73ED08AC-7B97-4372-A56C-EDC66E8CC4AB</a:ObjectID>
 <a:Name>创建人</a:Name>
 <a:Code>createUserID</a:Code>
@@ -9300,7 +9311,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(50)</a:DataType>
 <a:Length>50</a:Length>
 </o:Column>
-<o:Column Id="o420">
+<o:Column Id="o421">
 <a:ObjectID>771B6440-956C-41CF-A3C9-F67876E4936A</a:ObjectID>
 <a:Name>创建时间</a:Name>
 <a:Code>createTime</a:Code>
@@ -9311,7 +9322,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Comment>创建时间</a:Comment>
 <a:DataType>datetime</a:DataType>
 </o:Column>
-<o:Column Id="o421">
+<o:Column Id="o422">
 <a:ObjectID>3A8D896F-2710-4FB6-8FC6-3D7DAA2E2B47</a:ObjectID>
 <a:Name>修改人</a:Name>
 <a:Code>modifyUserID</a:Code>
@@ -9323,7 +9334,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(50)</a:DataType>
 <a:Length>50</a:Length>
 </o:Column>
-<o:Column Id="o422">
+<o:Column Id="o423">
 <a:ObjectID>7C39DC5E-DB29-459A-A803-CF3EAABD4143</a:ObjectID>
 <a:Name>修改时间</a:Name>
 <a:Code>modifyTime</a:Code>
@@ -9336,7 +9347,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Column>
 </c:Columns>
 <c:Keys>
-<o:Key Id="o423">
+<o:Key Id="o424">
 <a:ObjectID>B8FCFC4F-8EE5-4A53-91B0-10071641EE3C</a:ObjectID>
 <a:Name>Key_1</a:Name>
 <a:Code>Key_1</a:Code>
@@ -9350,7 +9361,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Key>
 </c:Keys>
 <c:PrimaryKey>
-<o:Key Ref="o423"/>
+<o:Key Ref="o424"/>
 </c:PrimaryKey>
 </o:Table>
 <o:Table Id="o93">
@@ -9363,7 +9374,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Modifier>bowin90</a:Modifier>
 <a:TotalSavingCurrency/>
 <c:Columns>
-<o:Column Id="o424">
+<o:Column Id="o425">
 <a:ObjectID>C7465F14-9DE1-4590-B922-6BA638A38A3D</a:ObjectID>
 <a:Name>微信消息模板编码</a:Name>
 <a:Code>templateNo</a:Code>
@@ -9376,7 +9387,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Length>10</a:Length>
 <a:Column.Mandatory>1</a:Column.Mandatory>
 </o:Column>
-<o:Column Id="o425">
+<o:Column Id="o426">
 <a:ObjectID>9454C1FA-0CE3-4BA4-9448-E005B1D204B0</a:ObjectID>
 <a:Name>微信消息模板名称</a:Name>
 <a:Code>templateName</a:Code>
@@ -9388,7 +9399,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(50)</a:DataType>
 <a:Length>50</a:Length>
 </o:Column>
-<o:Column Id="o426">
+<o:Column Id="o427">
 <a:ObjectID>907393F7-CDCA-42B7-AA04-B541C0EE497B</a:ObjectID>
 <a:Name>微信消息模板ID</a:Name>
 <a:Code>templateId</a:Code>
@@ -9400,7 +9411,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:DataType>varchar(300)</a:DataType>
 <a:Length>300</a:Length>
 </o:Column>
-<o:Column Id="o427">
+<o:Column Id="o428">
 <a:ObjectID>8600CCC7-2960-4703-9562-AE96E2CF3F97</a:ObjectID>
 <a:Name>模板跳转url</a:Name>
 <a:Code>url</a:Code>
@@ -9414,7 +9425,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Column>
 </c:Columns>
 <c:Keys>
-<o:Key Id="o428">
+<o:Key Id="o429">
 <a:ObjectID>F1B3FF1D-0B67-4C0A-860E-BB3EFCFBCA1F</a:ObjectID>
 <a:Name>Key_1</a:Name>
 <a:Code>Key_1</a:Code>
@@ -9423,12 +9434,12 @@ LABL 0 Arial,8,N</a:FontList>
 <a:ModificationDate>1713441468</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <c:Key.Columns>
-<o:Column Ref="o424"/>
+<o:Column Ref="o425"/>
 </c:Key.Columns>
 </o:Key>
 </c:Keys>
 <c:PrimaryKey>
-<o:Key Ref="o428"/>
+<o:Key Ref="o429"/>
 </c:PrimaryKey>
 </o:Table>
 <o:Table Id="o94">
@@ -9441,7 +9452,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Modifier>bowin90</a:Modifier>
 <a:TotalSavingCurrency/>
 <c:Columns>
-<o:Column Id="o429">
+<o:Column Id="o430">
 <a:ObjectID>F5E9C7FD-BC70-4A21-B07D-072CDA88A141</a:ObjectID>
 <a:Name>微信消息模板编码</a:Name>
 <a:Code>templateNo</a:Code>
@@ -9454,7 +9465,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Length>10</a:Length>
 <a:Column.Mandatory>1</a:Column.Mandatory>
 </o:Column>
-<o:Column Id="o430">
+<o:Column Id="o431">
 <a:ObjectID>C1D08037-2874-40A3-BCF2-FF8CE3920A41</a:ObjectID>
 <a:Name>wxFieldName</a:Name>
 <a:Code>wxFieldName</a:Code>
@@ -9467,7 +9478,7 @@ LABL 0 Arial,8,N</a:FontList>
 <a:Length>30</a:Length>
 <a:Column.Mandatory>1</a:Column.Mandatory>
 </o:Column>
-<o:Column Id="o431">
+<o:Column Id="o432">
 <a:ObjectID>8CC02B30-DA95-4D69-8223-4F4DDCAA310E</a:ObjectID>
 <a:Name>sysFieldName</a:Name>
 <a:Code>sysFieldName</a:Code>
@@ -9481,7 +9492,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Column>
 </c:Columns>
 <c:Keys>
-<o:Key Id="o432">
+<o:Key Id="o433">
 <a:ObjectID>A9ECA0F3-2901-45AB-9B65-AEB7A716B0BA</a:ObjectID>
 <a:Name>Key_1</a:Name>
 <a:Code>Key_1</a:Code>
@@ -9490,13 +9501,13 @@ LABL 0 Arial,8,N</a:FontList>
 <a:ModificationDate>1713443103</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <c:Key.Columns>
-<o:Column Ref="o429"/>
 <o:Column Ref="o430"/>
+<o:Column Ref="o431"/>
 </c:Key.Columns>
 </o:Key>
 </c:Keys>
 <c:PrimaryKey>
-<o:Key Ref="o432"/>
+<o:Key Ref="o433"/>
 </c:PrimaryKey>
 </o:Table>
 </c:Tables>
@@ -9522,7 +9533,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o127"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o433">
+<o:ReferenceJoin Id="o434">
 <a:ObjectID>54F04187-9C05-49AC-A2AE-0F6805B87FA6</a:ObjectID>
 <a:CreationDate>1700727651</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9558,7 +9569,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o434">
+<o:ReferenceJoin Id="o435">
 <a:ObjectID>1C1F4C11-0B3A-4093-A82E-6A9FD4FD25D0</a:ObjectID>
 <a:CreationDate>1700727797</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9594,7 +9605,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o435">
+<o:ReferenceJoin Id="o436">
 <a:ObjectID>40A0CA90-8614-4815-97AD-0EBD6F0B71D9</a:ObjectID>
 <a:CreationDate>1700730987</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9630,7 +9641,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o436">
+<o:ReferenceJoin Id="o437">
 <a:ObjectID>FB4FAA07-CE83-4FCA-A8D0-3EAF2B4D6E07</a:ObjectID>
 <a:CreationDate>1700731007</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9666,7 +9677,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o163"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o437">
+<o:ReferenceJoin Id="o438">
 <a:ObjectID>D517805A-E4C7-4403-8465-67312BEA0D62</a:ObjectID>
 <a:CreationDate>1700731026</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9702,7 +9713,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o438">
+<o:ReferenceJoin Id="o439">
 <a:ObjectID>7A61F341-556C-4479-A342-A7646603F9F3</a:ObjectID>
 <a:CreationDate>1700731151</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9738,7 +9749,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o221"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o439">
+<o:ReferenceJoin Id="o440">
 <a:ObjectID>690001A1-24C5-4BB0-860C-27E191E15580</a:ObjectID>
 <a:CreationDate>1700731191</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9774,7 +9785,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o440">
+<o:ReferenceJoin Id="o441">
 <a:ObjectID>0B8B962D-B921-4C57-9B91-8C15F33BED75</a:ObjectID>
 <a:CreationDate>1700731590</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9810,7 +9821,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o441">
+<o:ReferenceJoin Id="o442">
 <a:ObjectID>CF00EFE5-091D-4B44-9BC6-78E0E41801E0</a:ObjectID>
 <a:CreationDate>1700731650</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9846,7 +9857,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o442">
+<o:ReferenceJoin Id="o443">
 <a:ObjectID>451F9C5E-5174-4834-8447-8BFBF152415E</a:ObjectID>
 <a:CreationDate>1700731691</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9882,7 +9893,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o443">
+<o:ReferenceJoin Id="o444">
 <a:ObjectID>348ADE0B-66DB-4664-989D-92DEC0AF1BCD</a:ObjectID>
 <a:CreationDate>1700731736</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9918,7 +9929,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o221"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o444">
+<o:ReferenceJoin Id="o445">
 <a:ObjectID>ABE69D56-EB12-409A-94E0-7250DB96B800</a:ObjectID>
 <a:CreationDate>1700731802</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9954,7 +9965,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o270"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o445">
+<o:ReferenceJoin Id="o446">
 <a:ObjectID>08EDE705-0BB1-4605-9A44-22080589321A</a:ObjectID>
 <a:CreationDate>1700731807</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -9990,7 +10001,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o357"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o446">
+<o:ReferenceJoin Id="o447">
 <a:ObjectID>9948DA1B-7F6D-4BFD-944D-78B0BB942C79</a:ObjectID>
 <a:CreationDate>1701227667</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10026,7 +10037,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o188"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o447">
+<o:ReferenceJoin Id="o448">
 <a:ObjectID>B70423BB-9802-457F-AE23-4CBF7D842F4E</a:ObjectID>
 <a:CreationDate>1701660221</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10059,7 +10070,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Table Ref="o86"/>
 </c:ChildTable>
 <c:Joins>
-<o:ReferenceJoin Id="o448">
+<o:ReferenceJoin Id="o449">
 <a:ObjectID>5E4AB2FC-A524-45F4-9FE1-E46F2AFC9564</a:ObjectID>
 <a:CreationDate>1701661219</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10095,7 +10106,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o112"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o449">
+<o:ReferenceJoin Id="o450">
 <a:ObjectID>3629C8A8-9FDA-42D0-825C-8B0997759790</a:ObjectID>
 <a:CreationDate>1701934197</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10131,7 +10142,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o383"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o450">
+<o:ReferenceJoin Id="o451">
 <a:ObjectID>2374EDD3-256A-4744-B800-C1EAC2B3A8BA</a:ObjectID>
 <a:CreationDate>1703661458</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10167,7 +10178,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o401"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o451">
+<o:ReferenceJoin Id="o452">
 <a:ObjectID>E869B4C1-58EF-4215-B2EE-702BC081782A</a:ObjectID>
 <a:CreationDate>1703661902</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10203,7 +10214,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o221"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o452">
+<o:ReferenceJoin Id="o453">
 <a:ObjectID>9CCCDB43-37CB-4FEC-9728-5E1C604B931C</a:ObjectID>
 <a:CreationDate>1703727031</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10239,7 +10250,7 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Key Ref="o412"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o453">
+<o:ReferenceJoin Id="o454">
 <a:ObjectID>69BDF72C-5720-4C82-887C-A74DF7E2A01D</a:ObjectID>
 <a:CreationDate>1713147069</a:CreationDate>
 <a:Creator>bowinuser</a:Creator>
@@ -10272,27 +10283,27 @@ LABL 0 Arial,8,N</a:FontList>
 <o:Table Ref="o94"/>
 </c:ChildTable>
 <c:ParentKey>
-<o:Key Ref="o428"/>
+<o:Key Ref="o429"/>
 </c:ParentKey>
 <c:Joins>
-<o:ReferenceJoin Id="o454">
+<o:ReferenceJoin Id="o455">
 <a:ObjectID>EA16D89A-A814-4871-B1D9-CCB394F38D05</a:ObjectID>
 <a:CreationDate>1713443051</a:CreationDate>
 <a:Creator>bowin90</a:Creator>
 <a:ModificationDate>1713443051</a:ModificationDate>
 <a:Modifier>bowin90</a:Modifier>
 <c:Object1>
-<o:Column Ref="o424"/>
+<o:Column Ref="o425"/>
 </c:Object1>
 <c:Object2>
-<o:Column Ref="o429"/>
+<o:Column Ref="o430"/>
 </c:Object2>
 </o:ReferenceJoin>
 </c:Joins>
 </o:Reference>
 </c:References>
 <c:DefaultGroups>
-<o:Group Id="o455">
+<o:Group Id="o456">
 <a:ObjectID>9EC8D640-B68B-4B22-9ECC-8604531BD893</a:ObjectID>
 <a:Name>PUBLIC</a:Name>
 <a:Code>PUBLIC</a:Code>
@@ -10303,7 +10314,7 @@ LABL 0 Arial,8,N</a:FontList>
 </o:Group>
 </c:DefaultGroups>
 <c:TargetModels>
-<o:TargetModel Id="o456">
+<o:TargetModel Id="o457">
 <a:ObjectID>F5495246-0AD0-47FB-87F5-4932E41412CF</a:ObjectID>
 <a:Name>MySQL 5.0</a:Name>
 <a:Code>MYSQL50</a:Code>

+ 5 - 4
doc/待更新脚本

@@ -129,17 +129,18 @@ alter table pc_recommend_mgt add isSendUser bit comment '是否推送给求职
 
 create table wx_messageStatus
 (
-    messageStatus        varchar(50) not null comment '唯一ID',
+    messageStatusId      varchar(50) not null comment '唯一ID',
     openId               varchar(300) comment '微信openId',
     sourceId             varchar(50) comment '业务ID',
     content              text comment '推送内容',
+    url                  varchar(1000),
     sendTime             datetime comment '推送时间',
     recordStatus         int comment '状态,0未推送,1已推送',
     createUserID         varchar(50) comment '创建人',
     createTime           datetime comment '创建时间',
     modifyUserID         varchar(50) comment '修改人',
     modifyTime           datetime comment '修改时间',
-    primary key (messageStatus)
+    primary key (messageStatusId)
 );
 
 
@@ -165,9 +166,9 @@ alter table wx_messageTempSetting_field add constraint FK_Reference_26 foreign k
 
 
 insert into wx_messageTempSetting
-values('toCompany','-R2xeAeey7rOKN5VAuUr8cFMsJFlFp7ksN7m6H5_5VU','应聘人员信息通知','/wxMessage/jobUserInfo');
+values('toCompany','应聘人员信息通知','-R2xeAeey7rOKN5VAuUr8cFMsJFlFp7ksN7m6H5_5VU','/wxMessage/jobUserInfo');
 insert into wx_messageTempSetting
-values('toUser','hSE-nWMrspk2uHlJ9BahP4FJo9nCOUpnQiMAOQC2a6k','岗位信息通知','/wxMessage/companyInfo');
+values('toUser','岗位信息通知','hSE-nWMrspk2uHlJ9BahP4FJo9nCOUpnQiMAOQC2a6k','/wxMessage/companyInfo');
 
 insert into wx_messageTempSetting_field
 values('toCompany','thing28','userName'),('toCompany','phone_number34','usermobile'),('toCompany','thing10','userHuntPostName');

+ 1 - 1
h5app/public/appconfig.json

@@ -1,5 +1,5 @@
 {
   "isDev": true,
   "webSiteUrl": "http://www.bowintek.com/hzyz/mobile/index.html/#",
-  "webApiServiceUrl": ""
+  "webApiServiceUrl": "/api"
 }

+ 36 - 0
h5app/src/api/recommendmgt/index.ts

@@ -1,5 +1,41 @@
 import {request} from "@/utils/request";
 
+export function getList(query: any) {
+    return request(
+        {
+            url: 'jobusermgr/recommendmgt/getList',
+            method: 'get',
+            params: query,
+        },
+        {isNew: true},
+    );
+}
+
+export function getListById(recommendMgtID: any) {
+    return request(
+        {
+            url: 'jobusermgr/recommendmgt/getListById',
+            method: 'get',
+            params: {recommendMgtID},
+        },
+        {isNew: true},
+    );
+}
+
+export function setEntryState(data: any) {
+    return request(
+        {
+            url: 'jobusermgr/recommendmgt/setEntryState',
+            method: 'post',
+            data: data,
+        },
+        {
+            isNew: true,
+            successMsg: '提交成功!',
+            errorMsg: '提交失败!'
+        },
+    );
+}
 
 export function addRecommend(data: any) {
     return request(

+ 8 - 0
h5app/src/router/index.ts

@@ -57,6 +57,14 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/jobhunt/recommend/recommend',
                 component: () => import('@/views/pages/jobhunt/recommend/recommend.vue')
             },
+            {
+                path: 'tabMain/recommendMgt/list',
+                component: () => import('@/views/pages/recommendMgt/list.vue')
+            },
+            {
+                path: 'tabMain/recommendMgt/detail',
+                component: () => import('@/views/pages/recommendMgt/detail.vue')
+            },
             {
                 path: 'tabMain/company/list',
                 component: () => import('@/views/pages/company/list.vue')

+ 1 - 1
h5app/src/utils/config.ts

@@ -12,7 +12,7 @@ export interface ConfigParams  {
 export const getConfig = async <ConfigParams>(
 ): Promise<ConfigParams> => {
     try {
-        const res = await service.request({url: '../hzyz/mobile/appconfig.json'});
+        const res = await service.request({url: '../mobile/appconfig.json'});
 
         return res.data as ConfigParams;
     } catch (error: any) {

+ 0 - 1
h5app/src/views/pages/jobhunt/recommend/list.vue

@@ -84,7 +84,6 @@ export default defineComponent({
       getJobHuntList(searchParams).then(data => {
         dataList.value = dataList.value.concat(data.list);
         total.value = data.total;
-        console.log(dataList.value);
       })
       loading.value = false;
     }

+ 1 - 1
h5app/src/views/pages/jobhunt/recommend/recommend.vue

@@ -183,7 +183,7 @@ export default defineComponent({
 <style lang="less">
 .custom {
   --placeholder-color: gray;
-  --placeholder-font-style: italic;
+  //--placeholder-font-style: italic;
   --placeholder-opacity: 1;
 }
 

+ 0 - 5
h5app/src/views/pages/post/list.vue

@@ -166,22 +166,17 @@ export default defineComponent({
       if(route.query.reload)reload();
     });
 
-    const onPicker = () => {
-      router.push({path: './picker', query: {}});
-    }
     return {
       arrowBackOutline,
       addCircleOutline,
       buildOutline,
       trashOutline,
       router,
-      colors,
       total,
       loading,
       dataList,
       pagination,
       searchParams,
-      onPicker,
       onBack,
       onAdd,
       onEdit,

+ 1 - 1
h5app/src/views/pages/post/recommendJob.vue

@@ -183,7 +183,7 @@ export default defineComponent({
 <style lang="less">
 .custom {
   --placeholder-color: gray;
-  --placeholder-font-style: italic;
+  //--placeholder-font-style: italic;
   --placeholder-opacity: 1;
 }
 

+ 156 - 0
h5app/src/views/pages/recommendMgt/detail.vue

@@ -0,0 +1,156 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>推荐详情信息</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <div class="bw-vue-form">
+        <div class="form-title">推荐详情</div>
+        <div class="form-detail">
+          <ion-label>求职人</ion-label>
+          <ion-text>{{ dataModel.name }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>求职岗位</ion-label>
+          <ion-text>{{ dataModel.qzProfessionName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>招聘企业</ion-label>
+          <ion-text>{{ dataModel.companyName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>招聘岗位</ion-label>
+          <ion-text>{{ dataModel.zpProfessionName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>求职人联系电话</ion-label>
+          <ion-text>{{ dataModel.userMobile }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>企业联系人</ion-label>
+          <ion-text>{{ dataModel.companyUserName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>企业联系电话</ion-label>
+          <ion-text>{{ dataModel.companyMobile }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>入职状态</ion-label>
+          <ion-text>{{ dataModel.entryStateName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>推送时间</ion-label>
+          <ion-text>{{ dayjs(dataModel.createTime).format('YYYY-MM-DD') }}</ion-text>
+        </div>
+      </div>
+    </ion-content>
+    <ion-footer>
+      <ion-button shape="round" expand="block"
+                  @click="onSetEntryState(dataModel.recommendMgtID, dataModel.entryState!=1?'1':'0')">
+        {{ dataModel.entryState != 1 ? '已入职' : '已离职' }}
+      </ion-button>
+    </ion-footer>
+  </ion-page>
+</template>
+
+<script lang="ts">
+import {defineComponent, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline} from 'ionicons/icons';
+import {getListById, setEntryState} from '@/api/recommendmgt/index'
+
+interface RecommendModel {
+  companyMobile: string,
+  companyName: string,
+  companyUserName: string,
+  entryState: any,
+  entryStateName: string,
+  genderName: string,
+  jobHuntID: string,
+  jobPeopleIsRead: string,
+  jobPeopleIsReadName: string,
+  name: string,
+  officialAccountsID: string,
+  postID: string,
+  postIsRead: string,
+  postIsReadName: string,
+  pushName: string,
+  qzProfessionName: string,
+  recommendMgtID: string,
+  recommendType: any,
+  recommendTypeName: string,
+  userMobile: string,
+  zpProfessionName: string
+}
+
+export default defineComponent({
+  name: "RecommendDetail",
+  setup() {
+    const loading = ref(true);
+    const dataModel = ref<RecommendModel>({
+      companyMobile: "",
+      companyName: "",
+      companyUserName: "",
+      entryState: null,
+      entryStateName: "",
+      genderName: "",
+      jobHuntID: "",
+      jobPeopleIsRead: "",
+      jobPeopleIsReadName: "",
+      name: "",
+      officialAccountsID: "",
+      postID: "",
+      postIsRead: "",
+      postIsReadName: "",
+      pushName: "",
+      qzProfessionName: "",
+      recommendMgtID: "",
+      recommendType: null,
+      recommendTypeName: "",
+      userMobile: "",
+      zpProfessionName: ""
+    });
+    const router = useRouter();
+    const route = useRoute();
+    const loadData = async function (id: any) {
+      loading.value = true;
+      getListById(id).then((data) => {
+        debugger;
+        dataModel.value = data;
+      })
+      loading.value = false;
+    }
+
+    const onSetEntryState = async (recommendMgtID: any, entryState: any) => {
+      setEntryState({recommendMgtID: recommendMgtID, entryState: entryState}).then(() => {
+        loadData(route.query.recommendMgtID);
+      });
+    }
+
+    const onBack = () => {
+      router.push({path: './list', query: {reload: 1}});
+    }
+
+    return {
+      dataModel,
+      arrowBackOutline,
+      dayjs,
+      route,
+      loadData,
+      onSetEntryState,
+      onBack
+    }
+  }, created() {
+    this.loadData(this.route.query.recommendMgtID);
+  }
+});
+</script>
+<style lang="less">
+
+</style>

+ 169 - 0
h5app/src/views/pages/recommendMgt/list.vue

@@ -0,0 +1,169 @@
+<template>
+  <ion-page class="list-page company-list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>推荐信息管理</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item class="search-item">
+        <ion-input placeholder="姓名" class="custom"
+                   v-model="searchParams.name"
+                   style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
+        <ion-button slot="end"
+                    style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;"
+                    @click="reload">搜索
+        </ion-button>
+      </ion-item>
+      <ion-list class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key" detail @click="onDetail(record.recommendMgtID)">
+          <ion-label>
+            <h2>{{ record.name }}</h2>
+            <ion-label style="display: flex;justify-content: space-between;">
+              <p>求职岗位:{{ record.professionName }}</p>
+              <p>{{ record.entryStateName }}</p>
+            </ion-label>
+            <p>招聘企业:{{ record.companyName }}</p>
+            <ion-label style="display: flex;justify-content: space-between;">
+              <p>联系电话:{{ record.userMobile }}</p>
+              <p>企业电话:{{ record.companyMobile }}</p>
+            </ion-label>
+            <p>
+              推送时间:{{ dayjs(record.createTime).format('YYYY-MM-DD') }}
+            </p>
+          </ion-label>
+        </ion-item>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+import {getList, setEntryState} from '@/api/recommendmgt/index'
+
+export default defineComponent({
+  name: 'recommendMgtList',
+  components: {IonIcon, BEmpty},
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(10);
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParams.pageIndex,
+      pageSize: searchParams.pageSize
+    }));
+    const searchParams = reactive({
+      pageIndex: 1,
+      pageSize: 5,
+      name: '',
+    });
+    const dataList = ref<any>([]);
+
+    const loadData = async function () {
+      loading.value = true;
+      getList(searchParams).then(data => {
+        dataList.value = dataList.value.concat(data.list);
+        total.value = data.total;
+      })
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParams.pageIndex = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          searchParams.pageIndex += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onDetail = (recommendMgtID: any) => {
+      router.push({path: './detail', query: {reload: 1, id: recommendMgtID,status: 1}});
+    }
+
+    const onBack = () => {
+      router.push('../');
+    }
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload) reload();
+    });
+
+    return {
+      arrowBackOutline,
+      router,
+      total,
+      loading,
+      dataList,
+      pagination,
+      searchParams,
+      onBack,
+      onDetail,
+      onScroll,
+      loadData,
+      reload,
+      dayjs,
+    }
+  }, created() {
+    this.loadData();
+  }
+});
+</script>
+
+<style lang="less">
+.custom {
+  --placeholder-color: gray;
+  //--placeholder-font-style: italic;
+  --placeholder-opacity: 1;
+}
+
+.company-list-page {
+  .list-content {
+    margin: 0px 15px !important;
+    background-color: white !important;
+    border-radius: 0 !important;
+
+    ion-item {
+      margin-top: 10px;
+      font-size: 14px;
+      border: 1px solid rgb(242, 242, 245);
+
+      p {
+        font-size: 12px;
+      }
+    }
+  }
+}
+
+.container {
+  display: flex;
+  justify-content: center; /* 水平居中 */
+  align-items: center; /* 垂直居中 */
+}
+</style>

+ 5 - 0
h5app/src/views/pages/wxMessage/companyInfo.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+
+  </div>
+</template>

+ 5 - 0
h5app/src/views/pages/wxMessage/jobUserInfo.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+
+  </div>
+</template>

+ 2 - 2
h5app/src/views/sapp/tabMain.vue

@@ -34,11 +34,11 @@
           </div>
           <div class="tool-title">岗位信息管理</div>
         </a>
-        <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/post/recommend')">
+        <a class="tool-item box-line" @click="router.push('/tabs/tabMain/recommendMgt/list')">
           <div class="tool-img">
             <img src="@/assets/icon/gwtj.png">
           </div>
-          <div class="tool-title">岗位推荐</div>
+          <div class="tool-title">推荐信息管理</div>
         </a>
         <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/work/task/list')">
           <div class="tool-img">

+ 2 - 2
h5app/src/views/sapp/tabWork.vue

@@ -102,11 +102,11 @@
                </div>
                <div class="tool-title">岗位信息管理</div>
              </a>
-             <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/post/recommend')">
+             <a class="tool-item box-line" @click="router.push('/tabs/tabMain/recommendMgt/list')">
                <div class="tool-img">
                  <img src="@/assets/icon/gwtj.png">
                </div>
-               <div class="tool-title">岗位推荐</div>
+               <div class="tool-title">推荐信息管理</div>
              </a>
              <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/work/log/list')">
                <div class="tool-img">

+ 2 - 6
src/main/java/com/hz/employmentsite/AppConfig.java

@@ -73,14 +73,10 @@ public class AppConfig {
     public String wxAppId;
     @Value("${appconfig.wxconfig.appSecret}")
     public String wxAppSecret;
-    @Value("${appconfig.wxconfig.messageTemplateId}")
-    public String wxMessageTemplateId;
-    @Value("${appconfig.wxconfig.redirectURI}")
-    public String wxRedirectURI;
+    @Value("${appconfig.wxconfig.wxMessageBaseUrl}")
+    public String wxMessageBaseUrl;
     @Value("${appconfig.wxconfig.accessScope}")
     public String wxAccessScope;
-    @Value("${appconfig.wxconfig.testOpenId}")
-    public String testOpenId;
 
 
 

+ 3 - 1
src/main/java/com/hz/employmentsite/controller/baseSettings/SiteUserController.java

@@ -80,17 +80,19 @@ public class SiteUserController {
                                @RequestParam(required = false) String siteID) throws Exception{
         PageInfo<SiteUserVo> result = userInfoService.getList(pageIndex, pageSize, siteUserIDList, siteUserName, siteID, null, null, null);
         ExcelHelper.ExcelData data = excelHelper.new ExcelData();
-        data.setTitles(Arrays.asList(new String[]{"序号","人员名称","角色", "性别", "联系电话","所属驿站"}));
+        data.setTitles(Arrays.asList(new String[]{"序号", "工号", "人员名称", "角色", "性别", "联系电话", "身份证号", "所属驿站"}));
         int i = 0;
         List<List<Object>> rowsData= new ArrayList();
         for (SiteUserVo item : result.getList()) {
             List<Object> row = new ArrayList();
             ++i;
             row.add(i);
+            row.add(item.userNo);
             row.add(item.siteUserName);
             row.add(item.roleName);
             row.add(item.genderName);
             row.add(item.mobile);
+            row.add(item.idCard);
             row.add(item.siteName);
             rowsData.add(row);
         }

+ 7 - 1
src/main/java/com/hz/employmentsite/controller/jobUserManager/RecommendMgtController.java

@@ -26,7 +26,7 @@ public class RecommendMgtController {
 
     @ResponseBody
     @GetMapping("/getList")
-    public BaseResponse getList(@RequestParam("page") int pageIndex, @RequestParam("limit") int pageSize,
+    public BaseResponse getList(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,
                                 @RequestParam(required = false) String name, @RequestParam(required = false) String companyName,
                                 @RequestParam(required = false) Integer recommendType, @RequestParam(required = false) Integer entryState,
                                 @RequestParam(required = false) String pushName, @RequestParam(required = false) String professionName) {
@@ -35,6 +35,12 @@ public class RecommendMgtController {
         return RespGenerstor.success(result);
     }
 
+    @ResponseBody
+    @GetMapping("/getListById")
+    public BaseResponse getListById(@RequestParam(required = false) String recommendMgtID) {
+        return RespGenerstor.success(recommendMgtService.getListById(recommendMgtID));
+    }
+
     @PostMapping("/setEntryState")
     public BaseResponse setEntryState(@RequestBody PcRecommendMgt data) {
         var result = recommendMgtService.setEntryState(data.getRecommendMgtID(), data.getEntryState());

+ 6 - 0
src/main/java/com/hz/employmentsite/jobs/sendWxMessageJob.java

@@ -1,6 +1,7 @@
 package com.hz.employmentsite.jobs;
 
 import com.hz.employmentsite.AppConfig;
+import com.hz.employmentsite.services.service.jobUserManager.RecommendMgtService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -12,12 +13,17 @@ public class sendWxMessageJob {
     @Autowired
     private AppConfig appConfig;
 
+    @Autowired
+    private RecommendMgtService recommendMgtService;
+
     @Scheduled(cron="${appconfig.jobconfig.send-wxmessage-cron}")
     public void syncClassData() {
         if (appConfig.jobconfig_isRunJob) {
             log.info("开始推送微信通知");
             try {
 
+                recommendMgtService.sendWxMessage();
+
             } catch (Exception e) {
                 log.info("推送微信通知数据错误:" + e.getMessage());
             }

+ 2 - 1
src/main/java/com/hz/employmentsite/mapper/cquery/RecommendMgtCQuery.java

@@ -10,7 +10,8 @@ import java.util.HashMap;
 import java.util.List;
 
 public interface RecommendMgtCQuery {
-    List<RecommendMgtVo> getRecommendMgtList(@Param("name") String name,
+    List<RecommendMgtVo> getRecommendMgtList(@Param("recommendMgtID") String recommendMgtID,
+                                             @Param("name") String name,
                                              @Param("companyName") String companyName,
                                              @Param("recommendType") Integer recommendType,
                                              @Param("entryState") Integer entryState,

+ 10 - 0
src/main/java/com/hz/employmentsite/model/WxMessagestatus.java

@@ -9,6 +9,8 @@ public class WxMessagestatus {
 
     private String sourceId;
 
+    private String url;
+
     private Date sendTime;
 
     private Integer recordStatus;
@@ -47,6 +49,14 @@ public class WxMessagestatus {
         this.sourceId = sourceId == null ? null : sourceId.trim();
     }
 
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
     public Date getSendTime() {
         return sendTime;
     }

+ 70 - 0
src/main/java/com/hz/employmentsite/model/WxMessagestatusExample.java

@@ -315,6 +315,76 @@ public class WxMessagestatusExample {
             return (Criteria) this;
         }
 
+        public Criteria andUrlIsNull() {
+            addCriterion("url is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlIsNotNull() {
+            addCriterion("url is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlEqualTo(String value) {
+            addCriterion("url =", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotEqualTo(String value) {
+            addCriterion("url <>", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlGreaterThan(String value) {
+            addCriterion("url >", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlGreaterThanOrEqualTo(String value) {
+            addCriterion("url >=", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlLessThan(String value) {
+            addCriterion("url <", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlLessThanOrEqualTo(String value) {
+            addCriterion("url <=", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlLike(String value) {
+            addCriterion("url like", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotLike(String value) {
+            addCriterion("url not like", value, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlIn(List<String> values) {
+            addCriterion("url in", values, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotIn(List<String> values) {
+            addCriterion("url not in", values, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlBetween(String value1, String value2) {
+            addCriterion("url between", value1, value2, "url");
+            return (Criteria) this;
+        }
+
+        public Criteria andUrlNotBetween(String value1, String value2) {
+            addCriterion("url not between", value1, value2, "url");
+            return (Criteria) this;
+        }
+
         public Criteria andSendTimeIsNull() {
             addCriterion("sendTime is null");
             return (Criteria) this;

+ 28 - 5
src/main/java/com/hz/employmentsite/services/impl/WechatServiceImpl.java

@@ -2,10 +2,9 @@ package com.hz.employmentsite.services.impl;
 
 import com.hz.employmentsite.AppConfig;
 import com.hz.employmentsite.mapper.WxMessagestatusMapper;
+import com.hz.employmentsite.mapper.WxMessagetempsettingFieldMapper;
 import com.hz.employmentsite.mapper.WxMessagetempsettingMapper;
-import com.hz.employmentsite.model.WxMessagestatus;
-import com.hz.employmentsite.model.WxMessagestatusExample;
-import com.hz.employmentsite.model.WxMessagetempsetting;
+import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.WechatService;
 import com.hz.employmentsite.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -36,6 +35,9 @@ public class WechatServiceImpl implements WechatService {
     @Autowired
     private WxMessagetempsettingMapper wxMessagetempsettingMapper;
 
+    @Autowired
+    private WxMessagetempsettingFieldMapper wxMessagetempsettingFieldMapper;
+
     @Autowired
     private StringUtils stringUtils;
 
@@ -106,6 +108,11 @@ public class WechatServiceImpl implements WechatService {
         if (wxMessagestatus != null && wxMessagestatus.getRecordStatus().equals(1))
             throw new Exception("该消息已有成功推送记录,请勿重复推送!");
 
+        String sendUrl = "";
+        if(stringUtils.IsNullOrEmpty(url)){
+            sendUrl = appConfig.wxMessageBaseUrl + url;
+        }
+
         if (wxMessagestatus == null) {
             wxMessagestatus = new WxMessagestatus();
             wxMessagestatus.setMessageStatusId(UUID.randomUUID().toString());
@@ -114,12 +121,19 @@ public class WechatServiceImpl implements WechatService {
             wxMessagestatus.setContent(sendData.toString());
             wxMessagestatus.setRecordStatus(0);
             wxMessagestatus.setCreateTime(new Date());
+            wxMessagestatus.setUrl(sendUrl);
 
             wxMessagestatusMapper.insert(wxMessagestatus);
+        } else {
+            wxMessagestatus.setContent(sendData.toString());
+            wxMessagestatus.setUrl(sendUrl);
+            wxMessagestatus.setModifyTime(new Date());
+
+            wxMessagestatusMapper.updateByPrimaryKey(wxMessagestatus);
         }
 
         try {
-            sendMsg(openId, templateId, url, sendData);
+            sendMsg(openId, templateId, sendUrl, sendData);
 
             wxMessagestatus.setRecordStatus(1);
             wxMessagestatus.setSendTime(new Date());
@@ -135,11 +149,20 @@ public class WechatServiceImpl implements WechatService {
     }
 
     @Override
-    public List<WxMessagetempsetting> getWxMessagetempsettingList(){
+    public List<WxMessagetempsetting> getWxMessagetempsettingList() {
         List<WxMessagetempsetting> dataList = wxMessagetempsettingMapper.selectByExample(null);
 
         return dataList;
     }
 
+    @Override
+    public List<WxMessagetempsettingField> getWxMessagetempFieldList(String templateNo) {
+        WxMessagetempsettingFieldExample exp = new WxMessagetempsettingFieldExample();
+        WxMessagetempsettingFieldExample.Criteria cri = exp.or();
+        cri.andTemplateNoEqualTo(templateNo);
+
+        return wxMessagetempsettingFieldMapper.selectByExample(exp);
+    }
+
 
 }

+ 26 - 8
src/main/java/com/hz/employmentsite/services/impl/baseSettings/SiteInfoImpl.java

@@ -3,6 +3,7 @@ package com.hz.employmentsite.services.impl.baseSettings;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.hz.employmentsite.filter.exception.BaseException;
+import com.hz.employmentsite.mapper.PcCompanyMapper;
 import com.hz.employmentsite.mapper.PcSiteInstitutionMapper;
 import com.hz.employmentsite.mapper.PcSiteMapper;
 import com.hz.employmentsite.mapper.PcSiteUserMapper;
@@ -42,10 +43,13 @@ public class SiteInfoImpl implements SiteInfoService {
     @Autowired
     private PcSiteInstitutionMapper pcSiteInstitutionMapper;
 
+    @Autowired
+    private PcCompanyMapper pcCompanyMapper;
+
     @Override
     public PageInfo<SiteInfoVo> getList(int pageIndex, int pageSize, List<String> siteIDList, String siteCode, String siteName, String institutionID, String regionCode, String streetCode) {
         PageHelper.startPage(pageIndex, pageSize);
-        List<SiteInfoVo> dataList = siteInfoCQuery.getList(stringUtils.ListToInSql(siteIDList),siteCode,siteName,institutionID,regionCode,streetCode);
+        List<SiteInfoVo> dataList = siteInfoCQuery.getList(stringUtils.ListToInSql(siteIDList), siteCode, siteName, institutionID, regionCode, streetCode);
         PageInfo<SiteInfoVo> result = new PageInfo(dataList);
         return result;
     }
@@ -183,17 +187,31 @@ public class SiteInfoImpl implements SiteInfoService {
     public Integer delete(List<String> idList){
         var result = 0;
         for (String curSiteID: idList) {
+            // 关联站点工作人员检查
             PcSiteUserExample siteUserExp = new PcSiteUserExample();
             siteUserExp.or().andSiteIDEqualTo(curSiteID);
             var curSiteUserList = pcSiteUserMapper.selectByExample(siteUserExp).stream().toList();
-            if( curSiteUserList != null && curSiteUserList.size()>0){
-                throw new BaseException("10004","所选驿站站点已有关联站点人员信息,不允许删除!");
-            }else{
-                PcSiteExample contactExample = new PcSiteExample();
-                contactExample.or().andSiteIDEqualTo(curSiteID);
-                pcSiteMapper.deleteByExample(contactExample);
-                result += pcSiteMapper.deleteByExample(contactExample);
+            if (curSiteUserList != null && curSiteUserList.size() > 0) {
+                throw new BaseException("10004", "所选驿站站点已有关联站点人员信息,不允许删除!");
+            }
+            // 关联企业检查
+            PcCompanyExample companyExample = new PcCompanyExample();
+            companyExample.or().andSiteIDEqualTo(curSiteID);
+            List<PcCompany> companyList = pcCompanyMapper.selectByExample(companyExample).stream().toList();
+            if (!companyList.isEmpty()) {
+                throw new BaseException("10004", "所选驿站站点已有关联企业信息信息,不允许删除!");
             }
+
+            // 删除站点-机构关联表
+            PcSiteInstitutionExample siteInstitutionExample = new PcSiteInstitutionExample();
+            siteInstitutionExample.or().andSiteIDEqualTo(curSiteID);
+            pcSiteInstitutionMapper.deleteByExample(siteInstitutionExample);
+
+            // 删除主表
+            PcSiteExample contactExample = new PcSiteExample();
+            contactExample.or().andSiteIDEqualTo(curSiteID);
+            pcSiteMapper.deleteByExample(contactExample);
+            result += pcSiteMapper.deleteByExample(contactExample);
         }
         return result;
     }

+ 69 - 23
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/RecommendMgtServiceImpl.java

@@ -2,10 +2,12 @@ package com.hz.employmentsite.services.impl.jobUserManager;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.hz.employmentsite.filter.exception.BaseException;
 import com.hz.employmentsite.mapper.PcRecommendMgtMapper;
 import com.hz.employmentsite.mapper.cquery.RecommendMgtCQuery;
 import com.hz.employmentsite.model.PcRecommendMgt;
 import com.hz.employmentsite.model.WxMessagetempsetting;
+import com.hz.employmentsite.model.WxMessagetempsettingField;
 import com.hz.employmentsite.services.service.WechatService;
 import com.hz.employmentsite.services.service.jobUserManager.RecommendMgtService;
 import com.hz.employmentsite.util.StringUtils;
@@ -35,13 +37,22 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
     public PageInfo<RecommendMgtVo> getList(Integer page, Integer rows, String name, String companyName, Integer recommendType, Integer entryState, String pushName, String professionName) {
         PageHelper.startPage(page, rows);
 
-        List<RecommendMgtVo> list = recommendMgtCQuery.getRecommendMgtList(name, companyName, recommendType, entryState, pushName, professionName);
+        List<RecommendMgtVo> list = recommendMgtCQuery.getRecommendMgtList(null, name, companyName, recommendType, entryState, pushName, professionName);
 
         PageInfo<RecommendMgtVo> result = new PageInfo(list);
 
         return result;
     }
 
+    @Override
+    public RecommendMgtVo getListById(String recommendMgtID) {
+        RecommendMgtVo data = recommendMgtCQuery.getRecommendMgtList(recommendMgtID,null,null,null,null,null,null).stream().findFirst().orElse(null);
+        if(data==null){
+            throw new BaseException("500","未查询到数据");
+        }
+        return data;
+    }
+
     @Override
     public int addRecommend(List<PcRecommendMgt> list, String userID) {
         try {
@@ -113,43 +124,78 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
     }
 
 
-    public void SendWxMessage() {
+    @Override
+    public void sendWxMessage() {
+        sendUser();
+
+        sendCompany();
+    }
+
+    private void sendUser() {
         List<HashMap<String, Object>> toUserList = recommendMgtCQuery.getCompanypostToUsermessageList();
-        List<HashMap<String, Object>> toCompanyList = recommendMgtCQuery.getUserhuntpostToCompanymessageList();
 
         WxMessagetempsetting toUserTemp = wechatService.getWxMessagetempsettingList().stream().filter(it -> it.getTemplateNo().equals("toUser")).findFirst().orElse(null);
-        WxMessagetempsetting toCompanyTemp = wechatService.getWxMessagetempsettingList().stream().filter(it -> it.getTemplateNo().equals("toUser")).findFirst().orElse(null);
 
         if (toUserTemp != null) {
-            toUserList.forEach(item -> {
-                try {
-                    String recommendmgtid = item.get("recommendmgtid").toString();
+            List<WxMessagetempsettingField> fieldList = wechatService.getWxMessagetempFieldList(toUserTemp.getTemplateNo());
+            if (fieldList.size() > 0) {
+                toUserList.forEach(item -> {
+                    try {
+                        String recommendmgtid = item.get("recommendmgtid").toString();
 
-                    PcRecommendMgt pcRecommendMgt = pcRecommendMgtMapper.selectByPrimaryKey(recommendmgtid);
+                        PcRecommendMgt pcRecommendMgt = pcRecommendMgtMapper.selectByPrimaryKey(recommendmgtid);
 
-                    /*List<String> fields = Arrays.stream(toUserTemp.getFields().split("\\,")).toList();*/
+                        Map<String, String> data = new HashMap<>();
+                        fieldList.forEach(field -> {
+                            data.put(field.getWxFieldName(), item.get(field.getSysFieldName()).toString());
+                        });
 
-                   /* Map<String, String> data = new HashMap<>();
-                    fields.forEach(field->{
-                        data.put(field, item.get("field").toString());
-                    });*/
 
+                        boolean result = wechatService.sendMsg(item.get("userOpenId").toString(), recommendmgtid, toUserTemp.getUrl() + "?recommendmgtid=" + recommendmgtid, toUserTemp.getTemplateId(), data);
 
-                    /*boolean result = wechatService.sendMsg(item.get("userOpenId").toString(), recommendmgtid, toUserTemp.getUrl(), toUserTemp.getTemplateId(), data);
+                        if (result) {
+                            pcRecommendMgt.setIsSendUser(true);
+                            pcRecommendMgtMapper.updateByPrimaryKey(pcRecommendMgt);
+                        }
+                    } catch (Exception e) {
 
-                    if (result) {
-                        pcRecommendMgt.setIsSendUser(true);
-                        pcRecommendMgtMapper.updateByPrimaryKey(pcRecommendMgt);
-                    }*/
-                } catch (Exception e) {
-
-                }
-            });
+                    }
+                });
+            }
         }
+    }
+
+    private void sendCompany() {
+        List<HashMap<String, Object>> toCompanyList = recommendMgtCQuery.getUserhuntpostToCompanymessageList();
+
+        WxMessagetempsetting toCompanyTemp = wechatService.getWxMessagetempsettingList().stream().filter(it -> it.getTemplateNo().equals("toCompany")).findFirst().orElse(null);
 
         if (toCompanyTemp != null) {
+            List<WxMessagetempsettingField> fieldList = wechatService.getWxMessagetempFieldList(toCompanyTemp.getTemplateNo());
+            if (fieldList.size() > 0) {
+                toCompanyList.forEach(item -> {
+                    try {
+                        String recommendmgtid = item.get("recommendmgtid").toString();
 
-        }
+                        PcRecommendMgt pcRecommendMgt = pcRecommendMgtMapper.selectByPrimaryKey(recommendmgtid);
+
+                        Map<String, String> data = new HashMap<>();
+                        fieldList.forEach(field -> {
+                            data.put(field.getWxFieldName(), item.get(field.getSysFieldName()).toString());
+                        });
 
+
+                        boolean result = wechatService.sendMsg(item.get("companyOpenId").toString(), recommendmgtid, toCompanyTemp.getUrl() + "?recommendmgtid=" + recommendmgtid, toCompanyTemp.getTemplateId(), data);
+
+                        if (result) {
+                            pcRecommendMgt.setIsSendCompany(true);
+                            pcRecommendMgtMapper.updateByPrimaryKey(pcRecommendMgt);
+                        }
+                    } catch (Exception e) {
+
+                    }
+                });
+            }
+        }
     }
 }

+ 3 - 0
src/main/java/com/hz/employmentsite/services/service/WechatService.java

@@ -1,6 +1,7 @@
 package com.hz.employmentsite.services.service;
 
 import com.hz.employmentsite.model.WxMessagetempsetting;
+import com.hz.employmentsite.model.WxMessagetempsettingField;
 import me.chanjar.weixin.common.error.WxErrorException;
 
 import java.util.List;
@@ -16,4 +17,6 @@ public interface WechatService {
 
     List<WxMessagetempsetting> getWxMessagetempsettingList();
 
+    List<WxMessagetempsettingField> getWxMessagetempFieldList(String templateNo);
+
 }

+ 4 - 0
src/main/java/com/hz/employmentsite/services/service/jobUserManager/RecommendMgtService.java

@@ -14,6 +14,8 @@ import java.util.List;
 public interface RecommendMgtService {
     PageInfo<RecommendMgtVo> getList(Integer page, Integer rows, String name, String companyName, Integer recommendType, Integer entryState, String pushName, String professionName);
 
+    RecommendMgtVo getListById(String recommendMgtID);
+
     /**
      * 修改入职状态
      * @param id
@@ -49,4 +51,6 @@ public interface RecommendMgtService {
                                                  Integer type, Integer cultureLeve, Integer keyPersonType);
 
     List<ProfessionLevel> getProfessionLevelList();
+
+    void sendWxMessage();
 }

+ 3 - 1
src/main/java/com/hz/employmentsite/vo/jobUserManager/RecommendMgtVo.java

@@ -11,7 +11,9 @@ public class RecommendMgtVo extends PcRecommendMgt {
     public String companyMobile;
     public String name;
     public String userMobile;
-    public String professionName;
+    public String zpProfessionName;//招聘岗位
+    public String qzProfessionName;//求职岗位
+    public String companyUserName;//企业联系人
     public String recommendTypeName;
     public String entryStateName;
     public String postIsReadName;

+ 2 - 4
src/main/resources/application.yml

@@ -103,7 +103,7 @@ appconfig:
     class-cron: '0 0 5 1 * ?'
     student-cron: '0 0 6 1 * ?'
     teacher-cron: '0 0 7 1 * ?'
-    send-wxmessage-cron: '0 0/5 * * * ?'
+    send-wxmessage-cron: '0 0/5 * * 1 ?'
 
   #同步教务系统组织结构数据配置
   educonfig:
@@ -121,9 +121,7 @@ appconfig:
   wxconfig:
     appId: 'wx737c2a7879b897c1'
     appSecret: '0d37c99bf2edd9ef3d839869bfa724ad'
-    messageTemplateId: '-R2xeAeey7rOKN5VAuUr8cFMsJFlFp7ksN7m6H5_5VU'
-    redirectURI: 'http://www.bowintek.com/hzyz/mobile'
+    wxMessageBaseUrl: 'http://www.bowintek.com/hzyz/mobile/index.html/#'
     accessScope: 'snsapi_base'
-    testOpenId: ''
 
 

+ 24 - 7
src/main/resources/mapping/WxMessagestatusMapper.xml

@@ -5,6 +5,7 @@
     <id column="messageStatusId" jdbcType="VARCHAR" property="messageStatusId" />
     <result column="openId" jdbcType="VARCHAR" property="openId" />
     <result column="sourceId" jdbcType="VARCHAR" property="sourceId" />
+    <result column="url" jdbcType="VARCHAR" property="url" />
     <result column="sendTime" jdbcType="TIMESTAMP" property="sendTime" />
     <result column="recordStatus" jdbcType="INTEGER" property="recordStatus" />
     <result column="createUserID" jdbcType="VARCHAR" property="createUserID" />
@@ -74,7 +75,7 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    messageStatusId, openId, sourceId, sendTime, recordStatus, createUserID, createTime, 
+    messageStatusId, openId, sourceId, url, sendTime, recordStatus, createUserID, createTime, 
     modifyUserID, modifyTime
   </sql>
   <sql id="Blob_Column_List">
@@ -130,13 +131,13 @@
   </delete>
   <insert id="insert" parameterType="com.hz.employmentsite.model.WxMessagestatus">
     insert into wx_messagestatus (messageStatusId, openId, sourceId, 
-      sendTime, recordStatus, createUserID, 
-      createTime, modifyUserID, modifyTime, 
-      content)
+      url, sendTime, recordStatus, 
+      createUserID, createTime, modifyUserID, 
+      modifyTime, content)
     values (#{messageStatusId,jdbcType=VARCHAR}, #{openId,jdbcType=VARCHAR}, #{sourceId,jdbcType=VARCHAR}, 
-      #{sendTime,jdbcType=TIMESTAMP}, #{recordStatus,jdbcType=INTEGER}, #{createUserID,jdbcType=VARCHAR}, 
-      #{createTime,jdbcType=TIMESTAMP}, #{modifyUserID,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}, 
-      #{content,jdbcType=LONGVARCHAR})
+      #{url,jdbcType=VARCHAR}, #{sendTime,jdbcType=TIMESTAMP}, #{recordStatus,jdbcType=INTEGER}, 
+      #{createUserID,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{modifyUserID,jdbcType=VARCHAR}, 
+      #{modifyTime,jdbcType=TIMESTAMP}, #{content,jdbcType=LONGVARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.hz.employmentsite.model.WxMessagestatus">
     insert into wx_messagestatus
@@ -150,6 +151,9 @@
       <if test="sourceId != null">
         sourceId,
       </if>
+      <if test="url != null">
+        url,
+      </if>
       <if test="sendTime != null">
         sendTime,
       </if>
@@ -182,6 +186,9 @@
       <if test="sourceId != null">
         #{sourceId,jdbcType=VARCHAR},
       </if>
+      <if test="url != null">
+        #{url,jdbcType=VARCHAR},
+      </if>
       <if test="sendTime != null">
         #{sendTime,jdbcType=TIMESTAMP},
       </if>
@@ -223,6 +230,9 @@
       <if test="row.sourceId != null">
         sourceId = #{row.sourceId,jdbcType=VARCHAR},
       </if>
+      <if test="row.url != null">
+        url = #{row.url,jdbcType=VARCHAR},
+      </if>
       <if test="row.sendTime != null">
         sendTime = #{row.sendTime,jdbcType=TIMESTAMP},
       </if>
@@ -254,6 +264,7 @@
     set messageStatusId = #{row.messageStatusId,jdbcType=VARCHAR},
       openId = #{row.openId,jdbcType=VARCHAR},
       sourceId = #{row.sourceId,jdbcType=VARCHAR},
+      url = #{row.url,jdbcType=VARCHAR},
       sendTime = #{row.sendTime,jdbcType=TIMESTAMP},
       recordStatus = #{row.recordStatus,jdbcType=INTEGER},
       createUserID = #{row.createUserID,jdbcType=VARCHAR},
@@ -270,6 +281,7 @@
     set messageStatusId = #{row.messageStatusId,jdbcType=VARCHAR},
       openId = #{row.openId,jdbcType=VARCHAR},
       sourceId = #{row.sourceId,jdbcType=VARCHAR},
+      url = #{row.url,jdbcType=VARCHAR},
       sendTime = #{row.sendTime,jdbcType=TIMESTAMP},
       recordStatus = #{row.recordStatus,jdbcType=INTEGER},
       createUserID = #{row.createUserID,jdbcType=VARCHAR},
@@ -289,6 +301,9 @@
       <if test="sourceId != null">
         sourceId = #{sourceId,jdbcType=VARCHAR},
       </if>
+      <if test="url != null">
+        url = #{url,jdbcType=VARCHAR},
+      </if>
       <if test="sendTime != null">
         sendTime = #{sendTime,jdbcType=TIMESTAMP},
       </if>
@@ -317,6 +332,7 @@
     update wx_messagestatus
     set openId = #{openId,jdbcType=VARCHAR},
       sourceId = #{sourceId,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
       sendTime = #{sendTime,jdbcType=TIMESTAMP},
       recordStatus = #{recordStatus,jdbcType=INTEGER},
       createUserID = #{createUserID,jdbcType=VARCHAR},
@@ -330,6 +346,7 @@
     update wx_messagestatus
     set openId = #{openId,jdbcType=VARCHAR},
       sourceId = #{sourceId,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
       sendTime = #{sendTime,jdbcType=TIMESTAMP},
       recordStatus = #{recordStatus,jdbcType=INTEGER},
       createUserID = #{createUserID,jdbcType=VARCHAR},

+ 8 - 3
src/main/resources/mapping/cquery/RecommendMgtCQuery.xml

@@ -4,7 +4,8 @@
     <select id="getRecommendMgtList" resultType="com.hz.employmentsite.vo.jobUserManager.RecommendMgtVo">
         select a.recommendmgtid,a.postid,a.jobhuntid,a.recommendtype,a.entrystate,a.officialaccountsid,
         a.postisread,a.jobpeopleisread,a.createuserid,a.createtime,a.modifyuserid,a.modifytime,
-        c.companyname,c.usermobile as companymobile,e.`name`,e.usermobile,f.professionname,
+        c.companyname,c.usermobile as companymobile,c.username as companyusername,e.`name`,e.usermobile,
+        f.professionname as zpprofessionname,f2.professionname as qzprofessionname,
         dic1.`name` as recommendtypename,dic2.`name` as entrystatename,dic3.`name` as postisreadname,
         dic4.`name` as jobpeopleisreadname,g.`name` as pushname, dic5.`name` as gendername
         from pc_recommend_mgt a
@@ -13,6 +14,7 @@
         left join pc_jobhunt d on a.JobHuntID = d.JobHuntID
         left join pc_jobuser e on d.JobUserID = e.JobuserID
         left join pc_profession f on b.ProfessionID = f.ProfessionID
+        left join pc_profession f2 on d.ProfessionID = f2.ProfessionID
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='RecommendType') dic1 on a.RecommendType = dic1.`Value`
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='EntryState') dic2 on a.EntryState = dic2.`Value`
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='IsRead') dic3 on a.PostIsRead = dic3.`Value`
@@ -20,6 +22,9 @@
         left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='Gender') dic5 on e.Sex = dic5.`Value`
         left join sys_user g on a.CreateUserID = g.UserID
         <where>
+            <if test="recommendMgtID != '' and recommendMgtID != null">
+                and a.RecommendMgtID = #{recommendMgtID}
+            </if>
             <if test="name != '' and name != null">
                 and e.name like Concat('%',#{name},'%')
             </if>
@@ -121,7 +126,7 @@
                  inner join pc_company c on b.CompanyID = c.CompanyID
                  inner join pc_jobhunt d on a.JobHuntID = d.JobHuntID
                  inner join pc_jobuser e on d.JobUserID = e.JobuserID
-        where (a.isSendUser = 0 || a.isSendUser is null)
+        where (a.isSendUser = 0 || a.isSendUser is null) and e.openId is not null
     </select>
     <select id="getUserhuntpostToCompanymessageList" resultType="java.util.HashMap">
         select a.recommendmgtid,c.openId as companyOpenId,
@@ -131,7 +136,7 @@
                  inner join pc_company c on b.CompanyID = c.CompanyID
                  inner join pc_jobhunt d on a.JobHuntID = d.JobHuntID
                  inner join pc_jobuser e on d.JobUserID = e.JobuserID
-        where (a.isSendCompany = 0 || a.isSendCompany is null)
+        where (a.isSendCompany = 0 || a.isSendCompany is null) and c.openId is not null
     </select>
 
 </mapper>

+ 61 - 1
vue/src/views/baseSettings/siteInfo/detail.vue

@@ -13,6 +13,12 @@
       <a-descriptions-item label="经度">{{ siteInfo.siteLongitude }}</a-descriptions-item>
       <a-descriptions-item label="纬度">{{ siteInfo.siteLatitude }}</a-descriptions-item>
     </a-descriptions>
+    <a-divider orientation="left">站点工作人员</a-divider>
+    <a-table :columns="siteUserColumns" :data-source="siteUserList" :scroll="{ x:'100%', y: 200 }"
+             :pagination="siteUserTabPagination"
+             @change="siteUserTabChange"
+             bordered>
+    </a-table>
     <a-divider orientation="left">其他信息</a-divider>
     <a-descriptions bordered>
       <a-descriptions-item label="备注">{{ siteInfo.remark }}</a-descriptions-item>
@@ -21,11 +27,15 @@
 </template>
 
 <script setup lang="ts">
-import {onMounted, reactive} from "vue";
+import {computed, onMounted, reactive, ref} from "vue";
 import {getSiteByID} from "@/api/baseSettings/siteInfo";
+import type {TableColumnsType, TableProps} from "ant-design-vue";
+import {getSiteUserList} from "@/api/baseSettings/userInfo";
+import {getPaginationTotalTitle} from "@/utils/common";
 
 // 站点信息
 const siteInfo = reactive({
+  siteID: "",
   siteCode: "",
   siteName: "",
   institutionName: "",
@@ -38,6 +48,40 @@ const siteInfo = reactive({
   siteLatitude: "",
   remark: "",
 })
+// 站点人员查询数据
+const siteUserSearchParams = reactive({
+  pageIndex: 1,
+  pageSize: 20,
+  siteUserName: '',
+  siteID: '',
+  userNo: ""
+});
+// 站点人员表结构
+const siteUserColumns: TableColumnsType = [
+  {
+    title: '序号',
+    align: "center",
+    key: 'siteUserID',
+    customRender: item => `${siteUserSearchParams.pageSize * (siteUserSearchParams.pageIndex - 1) + item.index + 1}`
+  },
+  {title: '工号', dataIndex: 'userNo', key: 'userNo', align: "center"},
+  {title: '人员名称', dataIndex: 'siteUserName', key: 'siteUserName', align: "center"},
+  {title: '性别', dataIndex: 'genderName', key: 'genderName', align: "center"},
+  {title: '联系电话', dataIndex: 'mobile', key: 'mobile', align: "center"},
+];
+// 站点人员数据
+const siteUserList = ref([]);
+const siteUserTabFormState = reactive({
+  total: 0,
+  loading: false
+});
+const siteUserTabPagination = computed(() => ({
+  total: siteUserTabFormState.total,
+  current: siteUserSearchParams.pageIndex,
+  pageSize: siteUserSearchParams.pageSize,
+  showSizeChanger: true,
+  showTotal: total => getPaginationTotalTitle(total)
+}));
 
 // 站点数据加载
 function loadData(siteID: any) {
@@ -46,8 +90,24 @@ function loadData(siteID: any) {
       siteInfo[key] = result[key];
     })
   });
+  findSiteUser(siteID)
 }
 
+// 查询站点人员数据
+function findSiteUser(siteId: string) {
+  siteUserSearchParams["siteID"] = siteId;
+  getSiteUserList(siteUserSearchParams).then((result: any) => {
+    siteUserList.value = result.list;
+  });
+}
+
+// 站点人员表格变更
+const siteUserTabChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
+  siteUserSearchParams.pageIndex = pag.current;
+  siteUserSearchParams.pageSize = pag.pageSize;
+  findSiteUser(siteInfo.siteID);
+};
+
 // 页面初始化
 onMounted(() => {
   const id = history.state.params?.id;

+ 8 - 8
vue/src/views/jobUserManager/recommendMgt/index.vue

@@ -127,8 +127,8 @@ export default defineComponent({
     const modalRoleEditRef = ref();
     const formRef = ref<FormInstance>();
     const searchParamsState = reactive({
-      page: 1,
-      limit: 20,
+      pageIndex: 1,
+      pageSize: 20,
       post: '',
       name: '',
       companyName: '',
@@ -149,14 +149,14 @@ export default defineComponent({
         width: 80,
         key: 'recommendMgtID',
         customRender: (item) =>
-          `${searchParamsState.limit * (searchParamsState.page - 1) + item.index + 1}`,
+          `${searchParamsState.pageSize * (searchParamsState.pageIndex - 1) + item.index + 1}`,
       },
       {title: '求职者', dataIndex: 'name', key: 'name', width: 100},
       {title: '求职者电话', dataIndex: 'userMobile', key: 'userMobile', width: 150},
       {title: '岗位', dataIndex: 'professionName', key: 'professionName', width: 150},
       {title: '企业', dataIndex: 'companyName', key: 'companyName', width: 150},
       {title: '企业电话', dataIndex: 'companyMobile', key: 'companyMobile', width: 150},
-      {title: '类型', dataIndex: 'recommendTypeName', key: 'recommendTypeName', width: 100},
+      {title: '推荐类型', dataIndex: 'recommendTypeName', key: 'recommendTypeName', width: 100},
       {title: '入职状态', dataIndex: 'entryStateName', key: 'entryStateName'},
       {title: '推送人', dataIndex: 'pushName', key: 'pushName'},
       {
@@ -167,8 +167,8 @@ export default defineComponent({
     ];
     const pagination = computed(() => ({
       total: formState.total,
-      current: searchParamsState.page,
-      pageSize: searchParamsState.limit,
+      current: searchParamsState.pageIndex,
+      pageSize: searchParamsState.pageSize,
       showSizeChanger: true,
       showTotal: (total) => getPaginationTotalTitle(total),
     }));
@@ -185,8 +185,8 @@ export default defineComponent({
       pageSize: number;
       current: number;
     }) => {
-      searchParamsState.page = pag.current;
-      searchParamsState.limit = pag.pageSize;
+      searchParamsState.pageIndex = pag.current;
+      searchParamsState.pageSize = pag.pageSize;
       loadData();
     };