lianbingjie 11 mēneši atpakaļ
vecāks
revīzija
f03e2a5799
88 mainītis faili ar 2069 papildinājumiem un 3601 dzēšanām
  1. 38 3135
      src/city.json
  2. 7 1
      src/config.yaml
  3. 1 1
      src/go.mod
  4. 2 2
      src/go.sum
  5. 7 0
      src/jfw/config/config.go
  6. 14 0
      src/jfw/front/dataExport.go
  7. 14 1
      src/jfw/front/entsearch.go
  8. 18 18
      src/jfw/front/front.go
  9. 5 1
      src/jfw/front/frontRouter.go
  10. 48 2
      src/jfw/front/nzjProject.go
  11. 8 1
      src/jfw/front/shorturl.go
  12. 5 4
      src/jfw/front/supsearch.go
  13. 203 203
      src/jfw/front/swordfish.go
  14. 10 0
      src/jfw/front/ws_dataExport.go
  15. 5 0
      src/jfw/front/wx_dataExport.go
  16. 5 0
      src/jfw/modules/app/src/app/front/dataExport.go
  17. 10 0
      src/jfw/modules/app/src/app/front/ws_dataExport.go
  18. 3 0
      src/jfw/modules/app/src/app/jyutil/activity.go
  19. 1 0
      src/jfw/modules/app/src/app/tag/ad.go
  20. 1 1
      src/jfw/modules/app/src/go.mod
  21. 2 2
      src/jfw/modules/app/src/go.sum
  22. 2 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js
  23. 13 3
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/set_industry.js
  24. 2 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js
  25. 9 3
      src/jfw/modules/app/src/web/templates/dataExport/dataExport.html
  26. 13 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_industry.html
  27. 3 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_toOrderDetail.html
  28. 1 1
      src/jfw/modules/app/src/web/templates/vipsubscribe/keyWord.html
  29. 13 1
      src/jfw/modules/bigmember/src/entity/marketAnalysis/marketAnalysisEntity.go
  30. 7 0
      src/jfw/modules/bigmember/src/entity/portraitWinnerSearch.go
  31. 5 5
      src/jfw/modules/bigmember/src/entity/portrait_screen.go
  32. 4 4
      src/jfw/modules/bigmember/src/go.mod
  33. 19 6
      src/jfw/modules/bigmember/src/go.sum
  34. 35 8
      src/jfw/modules/bigmember/src/service/analysis/esquery.go
  35. 9 2
      src/jfw/modules/bigmember/src/service/analysis/potential.go
  36. 91 45
      src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go
  37. 53 21
      src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go
  38. 51 0
      src/jfw/modules/bigmember/src/util/history.go
  39. 3 3
      src/jfw/modules/publicapply/src/Makefile
  40. 14 0
      src/jfw/modules/publicapply/src/bidcollection/bidcollection_test.http
  41. 156 35
      src/jfw/modules/publicapply/src/bidcollection/entity/entity.go
  42. 7 7
      src/jfw/modules/publicapply/src/bidcollection/service/service.go
  43. 21 0
      src/jfw/modules/publicapply/src/consts/history.go
  44. 38 6
      src/jfw/modules/publicapply/src/dataexport/service/action.go
  45. 6 0
      src/jfw/modules/publicapply/src/enterpriseSearch/service/search.go
  46. 1 1
      src/jfw/modules/publicapply/src/go.mod
  47. 1 0
      src/jfw/modules/publicapply/src/history/consts/consts.go
  48. 39 0
      src/jfw/modules/publicapply/src/history/entity/entity.go
  49. 28 0
      src/jfw/modules/publicapply/src/history/history_test.http
  50. 12 0
      src/jfw/modules/publicapply/src/history/init.go
  51. 10 0
      src/jfw/modules/publicapply/src/history/service/action.go
  52. 82 0
      src/jfw/modules/publicapply/src/history/service/service.go
  53. 1 0
      src/jfw/modules/publicapply/src/main.go
  54. 32 0
      src/jfw/modules/publicapply/src/util/history.go
  55. 290 15
      src/jfw/modules/publicapply/src/util/util.go
  56. 45 13
      src/jfw/modules/subscribepay/src/entity/dataexport.go
  57. 4 2
      src/jfw/modules/subscribepay/src/entity/equityCode.go
  58. 12 0
      src/jfw/modules/subscribepay/src/go.mod
  59. 23 0
      src/jfw/modules/subscribepay/src/go.sum
  60. 18 2
      src/jfw/modules/subscribepay/src/service/dataexportPack.go
  61. 18 0
      src/jfw/modules/subscribepay/src/service/invoice.go
  62. 1 0
      src/jfw/modules/subscribepay/src/timetask/timetask.go
  63. 13 0
      src/jfw/modules/subscribepay/src/util/util.go
  64. 1 0
      src/jfw/tag/ad.go
  65. 3 0
      src/web/staticres/big-member/js/ent_portrait.js
  66. 12 2
      src/web/staticres/big-member/js/set_industry.js
  67. 2 0
      src/web/staticres/common-module/big-member/js/buyer_project_news.js
  68. 2 0
      src/web/staticres/common-module/big-member/js/ent_project_news.js
  69. 2 0
      src/web/staticres/common-module/collection/js/ent_portrait.js
  70. 19 7
      src/web/staticres/common-module/collection/js/industry-mobile.js
  71. 16 8
      src/web/staticres/common-module/selector/js/industryMap.js
  72. 3 0
      src/web/staticres/css/ele-reset.css
  73. 3 1
      src/web/staticres/dataExport/js/delbox.js
  74. BIN
      src/web/staticres/images/index/new/delete.png
  75. 1 1
      src/web/staticres/js/index/index.js
  76. 237 2
      src/web/staticres/js/index/index_2023.12.js
  77. 1 1
      src/web/staticres/js/index_content.js
  78. 2 1
      src/web/staticres/js/login.js
  79. 65 0
      src/web/staticres/pccss/index_pc.css
  80. 4 3
      src/web/staticres/public-pc/js/header-nav.js
  81. 11 7
      src/web/templates/pc/brand/index.html
  82. 20 5
      src/web/templates/pc/dataExport_sieve.html
  83. 1 1
      src/web/templates/pc/newIndex.html
  84. 5 2
      src/web/templates/pc/orderDetail.html
  85. 22 0
      src/web/templates/pc/template/index/search-module.html
  86. 9 3
      src/web/templates/weixin/dataExport/dataExport.html
  87. 13 0
      src/web/templates/weixin/dataExport/dataExport_industry.html
  88. 3 1
      src/web/templates/weixin/dataExport/dataExport_toOrderDetail.html

+ 38 - 3135
src/city.json

@@ -1,3136 +1,39 @@
 {
-    "city": [
-        "金银川镇",
-        "郑东新",
-        "信阳客整所",
-        "北屯",
-        "鼓楼",
-        "辽河",
-        "南大港",
-        "北京",
-        "密云",
-        "延庆",
-        "天津",
-        "宁河",
-        "静海",
-        "蓟县",
-        "河北",
-        "石家庄",
-        "井陉",
-        "正定",
-        "栾城",
-        "行唐",
-        "灵寿",
-        "高邑",
-        "深泽",
-        "赞皇",
-        "无极县",
-        "平山县",
-        "元氏",
-        "赵县",
-        "辛集市",
-        "藁城",
-        "晋州",
-        "新乐",
-        "鹿泉",
-        "唐山",
-        "滦县",
-        "滦南",
-        "乐亭",
-        "迁西",
-        "玉田",
-        "唐海",
-        "遵化",
-        "迁安市",
-        "秦皇岛",
-        "青龙县",
-        "青龙满族自治县",
-        "昌黎",
-        "抚宁",
-        "卢龙",
-        "邯郸",
-        "临漳",
-        "成安",
-        "大名县",
-        "涉县",
-        "磁县",
-        "肥乡",
-        "永年",
-        "邱县",
-        "鸡泽",
-        "广平县",
-        "馆陶",
-        "魏县",
-        "曲周",
-        "武安",
-        "邢台",
-        "临城",
-        "内丘",
-        "柏乡县",
-        "隆尧",
-        "任县",
-        "南和",
-        "宁晋",
-        "巨鹿",
-        "新河县",
-        "广宗",
-        "平乡",
-        "威县",
-        "清河",
-        "临西",
-        "南宫",
-        "沙河市",
-        "保定",
-        "满城",
-        "清苑",
-        "涞水",
-        "阜平",
-        "徐水",
-        "定兴",
-        "唐县",
-        "高阳",
-        "容城",
-        "涞源",
-        "望都",
-        "安新",
-        "易县",
-        "曲阳",
-        "蠡县",
-        "顺平",
-        "博野",
-        "雄县",
-        "涿州",
-        "定州",
-        "安国",
-        "高碑店",
-        "张家口",
-        "宣化",
-        "张北",
-        "康保",
-        "沽源",
-        "尚义",
-        "蔚县",
-        "阳原",
-        "怀安",
-        "万全县",
-        "怀来",
-        "涿鹿",
-        "赤城",
-        "崇礼",
-        "承德",
-        "兴隆",
-        "平泉县",
-        "滦平",
-        "隆化",
-        "丰宁",
-        "宽城满族自治县",
-        "宽城县",
-        "围场",
-        "沧州",
-        "沧县",
-        "青县",
-        "东光县",
-        "海兴",
-        "盐山",
-        "肃宁",
-        "南皮",
-        "吴桥县",
-        "献县",
-        "孟村回族自治县",
-        "孟村县",
-        "泊头",
-        "任丘",
-        "黄骅",
-        "河间市",
-        "廊坊",
-        "固安",
-        "永清",
-        "香河",
-        "大城县",
-        "文安",
-        "大厂回族自治县",
-        "大厂县",
-        "霸州",
-        "三河",
-        "衡水",
-        "枣强",
-        "武邑",
-        "武强",
-        "饶阳",
-        "安平",
-        "故城县",
-        "景县",
-        "阜城县",
-        "冀州",
-        "深州",
-        "山西",
-        "太原",
-        "清徐",
-        "阳曲",
-        "娄烦",
-        "古交",
-        "大同市",
-        "阳高",
-        "天镇",
-        "广灵",
-        "灵丘",
-        "浑源",
-        "左云",
-        "阳泉",
-        "平定",
-        "盂县",
-        "长治",
-        "襄垣",
-        "屯留",
-        "平顺",
-        "黎城",
-        "壶关",
-        "长子",
-        "武乡",
-        "沁县",
-        "沁源",
-        "潞城",
-        "晋城",
-        "沁水",
-        "阳城",
-        "陵川",
-        "泽州",
-        "高平",
-        "朔州",
-        "山阴",
-        "应县",
-        "右玉",
-        "怀仁",
-        "晋中",
-        "榆社",
-        "左权县",
-        "和顺",
-        "昔阳",
-        "寿阳",
-        "太谷",
-        "祁县",
-        "平遥",
-        "灵石",
-        "介休",
-        "运城",
-        "临猗",
-        "万荣",
-        "闻喜",
-        "稷山",
-        "新绛",
-        "绛县",
-        "垣曲",
-        "夏县",
-        "平陆",
-        "芮城",
-        "永济",
-        "河津市",
-        "忻州",
-        "定襄",
-        "五台县",
-        "代县",
-        "繁峙",
-        "宁武",
-        "静乐",
-        "神池",
-        "五寨",
-        "岢岚",
-        "河曲",
-        "保德",
-        "偏关",
-        "原平",
-        "临汾",
-        "曲沃",
-        "翼城",
-        "襄汾",
-        "洪洞",
-        "古县",
-        "安泽",
-        "浮山",
-        "吉县",
-        "乡宁",
-        "大宁",
-        "隰县",
-        "永和",
-        "蒲县",
-        "汾西",
-        "侯马",
-        "霍州",
-        "吕梁",
-        "文水",
-        "交城",
-        "兴县",
-        "临县",
-        "柳林",
-        "石楼",
-        "岚县",
-        "方山县",
-        "中阳县",
-        "交口县",
-        "孝义市",
-        "汾阳",
-        "内蒙古",
-        "呼和浩特",
-        "土默特左旗",
-        "托克托",
-        "和林格尔",
-        "清水河",
-        "武川",
-        "包头",
-        "土默特右旗",
-        "固阳",
-        "达尔罕茂明安联合旗",
-        "乌海",
-        "赤峰",
-        "阿鲁科尔沁旗",
-        "巴林左旗",
-        "巴林右旗",
-        "林西",
-        "克什克腾旗",
-        "翁牛特旗",
-        "喀喇沁旗",
-        "宁城",
-        "敖汉旗",
-        "通辽",
-        "科尔沁左翼中旗",
-        "科尔沁左翼后旗",
-        "开鲁",
-        "库伦旗",
-        "奈曼旗",
-        "扎鲁特旗",
-        "霍林郭勒",
-        "鄂尔多斯",
-        "达拉特旗",
-        "准格尔旗",
-        "鄂托克前旗",
-        "鄂托克旗",
-        "杭锦旗",
-        "乌审旗",
-        "伊金霍洛旗",
-        "呼伦贝尔",
-        "阿荣旗",
-        "莫力达瓦达斡尔族自治旗",
-        "鄂伦春自治旗",
-        "鄂温克族自治旗",
-        "陈巴尔虎旗",
-        "新巴尔虎左旗",
-        "新巴尔虎右旗",
-        "满洲里",
-        "牙克石",
-        "扎兰屯",
-        "额尔古纳",
-        "根河",
-        "巴彦淖尔",
-        "五原",
-        "磴口",
-        "乌拉特前旗",
-        "乌拉特中旗",
-        "乌拉特后旗",
-        "杭锦后旗",
-        "乌兰察布",
-        "卓资",
-        "化德",
-        "商都县",
-        "兴和县",
-        "凉城",
-        "察哈尔右翼前旗",
-        "察哈尔右翼中旗",
-        "察哈尔右翼后旗",
-        "四子王旗",
-        "丰镇",
-        "兴安盟",
-        "乌兰浩特",
-        "阿尔山",
-        "科尔沁右翼前旗",
-        "科尔沁右翼中旗",
-        "扎赉特旗",
-        "突泉",
-        "锡林郭勒盟",
-        "二连浩特",
-        "锡林浩特",
-        "阿巴嘎旗",
-        "苏尼特左旗",
-        "苏尼特右旗",
-        "东乌珠穆沁旗",
-        "西乌珠穆沁旗",
-        "太仆寺旗",
-        "镶黄旗",
-        "正镶白旗",
-        "正蓝旗",
-        "多伦",
-        "阿拉善盟",
-        "阿拉善左旗",
-        "阿拉善右旗",
-        "额济纳旗",
-        "辽宁",
-        "沈阳",
-        "辽中",
-        "康平",
-        "法库",
-        "新民市",
-        "大连",
-        "长海",
-        "瓦房店",
-        "普兰店",
-        "庄河",
-        "鞍山",
-        "台安县",
-        "岫岩",
-        "海城市",
-        "抚顺",
-        "新宾",
-        "清原",
-        "本溪",
-        "桓仁",
-        "丹东",
-        "宽甸",
-        "东港市",
-        "凤城",
-        "锦州",
-        "黑山县",
-        "义县",
-        "凌海",
-        "北镇",
-        "营口",
-        "盖州",
-        "大石桥市",
-        "阜新",
-        "彰武",
-        "辽阳",
-        "灯塔市",
-        "盘锦",
-        "大洼",
-        "盘山",
-        "铁岭",
-        "西丰",
-        "昌图",
-        "调兵山",
-        "开原",
-        "朝阳市",
-        "建平",
-        "喀喇沁",
-        "北票",
-        "凌源",
-        "葫芦岛",
-        "绥中",
-        "建昌",
-        "兴城",
-        "吉林",
-        "长春",
-        "农安",
-        "九台",
-        "榆树",
-        "德惠",
-        "吉林",
-        "永吉",
-        "蛟河",
-        "桦甸",
-        "舒兰",
-        "磐石",
-        "四平",
-        "梨树县",
-        "伊通",
-        "公主岭",
-        "双辽",
-        "辽源",
-        "东丰",
-        "东辽",
-        "通化",
-        "辉南",
-        "柳河",
-        "梅河口",
-        "集安",
-        "白山市",
-        "抚松",
-        "靖宇",
-        "长白",
-        "临江",
-        "松原",
-        "前郭尔罗斯",
-        "长岭",
-        "乾安",
-        "扶余",
-        "白城",
-        "镇赉",
-        "通榆",
-        "洮南",
-        "大安市",
-        "延边州",
-        "延吉",
-        "图们",
-        "敦化",
-        "珲春",
-        "龙井市",
-        "和龙",
-        "汪清",
-        "安图县",
-        "黑龙江",
-        "哈尔滨",
-        "依兰县",
-        "方正县",
-        "宾县",
-        "巴彦",
-        "木兰县",
-        "通河县",
-        "延寿",
-        "双城",
-        "尚志",
-        "五常市",
-        "齐齐哈尔",
-        "龙江县",
-        "依安",
-        "泰来",
-        "甘南",
-        "富裕县",
-        "克山县",
-        "克东县",
-        "拜泉",
-        "讷河",
-        "鸡西市",
-        "鸡东县",
-        "虎林",
-        "密山",
-        "鹤岗",
-        "萝北",
-        "绥滨",
-        "双鸭山",
-        "集贤",
-        "友谊县",
-        "宝清",
-        "饶河",
-        "大庆",
-        "肇州",
-        "肇源",
-        "林甸",
-        "杜尔伯特",
-        "伊春市",
-        "嘉荫",
-        "铁力",
-        "佳木斯",
-        "桦南",
-        "桦川",
-        "汤原",
-        "抚远",
-        "同江市",
-        "富锦",
-        "七台河",
-        "勃利",
-        "牡丹江",
-        "东宁",
-        "林口",
-        "绥芬河",
-        "海林",
-        "宁安",
-        "穆棱",
-        "黑河",
-        "嫩江",
-        "逊克",
-        "孙吴",
-        "北安",
-        "五大连池",
-        "绥化",
-        "望奎",
-        "兰西",
-        "青冈",
-        "庆安",
-        "明水",
-        "绥棱",
-        "安达",
-        "肇东",
-        "海伦",
-        "呼玛",
-        "塔河",
-        "漠河",
-        "上海",
-        "崇明",
-        "江苏",
-        "南京",
-        "溧水",
-        "高淳",
-        "无锡",
-        "江阴",
-        "宜兴",
-        "徐州",
-        "丰县",
-        "沛县",
-        "铜山",
-        "睢宁",
-        "新沂",
-        "邳州",
-        "常州",
-        "溧阳",
-        "金坛",
-        "苏州",
-        "常熟",
-        "张家港",
-        "昆山",
-        "吴江",
-        "太仓",
-        "南通",
-        "海安",
-        "如东",
-        "启东",
-        "如皋",
-        "通州",
-        "海门",
-        "连云港",
-        "赣榆",
-        "东海",
-        "灌云",
-        "灌南",
-        "淮安",
-        "涟水",
-        "洪泽",
-        "洪泽县",
-        "盱眙",
-        "金湖",
-        "盐城",
-        "响水",
-        "滨海县",
-        "阜宁",
-        "射阳",
-        "建湖",
-        "东台",
-        "大丰",
-        "扬州",
-        "宝应",
-        "仪征",
-        "高邮",
-        "江都",
-        "镇江",
-        "丹阳",
-        "扬中",
-        "句容",
-        "泰州",
-        "兴化",
-        "靖江",
-        "泰兴市",
-        "泰兴镇",
-        "姜堰",
-        "宿迁",
-        "沭阳",
-        "泗阳",
-        "泗洪",
-        "浙江",
-        "杭州",
-        "桐庐",
-        "淳安",
-        "建德",
-        "富阳",
-        "临安",
-        "宁波",
-        "象山",
-        "宁海",
-        "余姚",
-        "慈溪",
-        "奉化",
-        "温州",
-        "洞头",
-        "永嘉",
-        "平阳",
-        "苍南",
-        "文成县",
-        "泰顺",
-        "瑞安",
-        "乐清",
-        "嘉兴",
-        "嘉善",
-        "海盐",
-        "海宁",
-        "平湖",
-        "桐乡",
-        "湖州",
-        "德清",
-        "长兴",
-        "安吉",
-        "绍兴",
-        "新昌",
-        "诸暨",
-        "上虞",
-        "嵊州",
-        "金华",
-        "武义",
-        "浦江",
-        "磐安",
-        "兰溪",
-        "义乌",
-        "东阳",
-        "永康",
-        "衢州",
-        "常山",
-        "开化",
-        "龙游",
-        "江山市",
-        "舟山",
-        "岱山",
-        "嵊泗",
-        "台州",
-        "玉环",
-        "三门县",
-        "天台县",
-        "仙居",
-        "温岭",
-        "临海",
-        "丽水",
-        "青田",
-        "缙云",
-        "遂昌",
-        "松阳",
-        "云和",
-        "庆元",
-        "景宁",
-        "龙泉市",
-        "安徽",
-        "合肥",
-        "长丰",
-        "肥东",
-        "肥西",
-        "芜湖",
-        "繁昌",
-        "南陵",
-        "蚌埠",
-        "怀远",
-        "五河",
-        "固镇",
-        "淮南",
-        "凤台",
-        "马鞍山",
-        "当涂",
-        "含山",
-        "和县",
-        "淮北",
-        "濉溪",
-        "铜陵",
-        "安庆",
-        "怀宁",
-        "枞阳",
-        "潜山",
-        "太湖县",
-        "宿松",
-        "望江",
-        "岳西",
-        "桐城",
-        "黄山",
-        "歙县",
-        "休宁",
-        "黟县",
-        "祁门",
-        "滁州",
-        "来安",
-        "全椒",
-        "定远",
-        "凤阳",
-        "天长市",
-        "明光市",
-        "阜阳",
-        "临泉",
-        "太和县",
-        "阜南",
-        "颍上",
-        "界首",
-        "宿州",
-        "砀山",
-        "萧县",
-        "灵璧",
-        "泗县",
-        "巢湖",
-        "庐江",
-        "无为县",
-        "六安",
-        "寿县",
-        "霍邱",
-        "舒城",
-        "金寨",
-        "霍山",
-        "亳州",
-        "涡阳",
-        "蒙城",
-        "利辛",
-        "池州",
-        "东至县",
-        "石台",
-        "青阳",
-        "宣城",
-        "郎溪",
-        "广德",
-        "泾县",
-        "绩溪",
-        "旌德",
-        "宁国市",
-        "福建",
-        "福州",
-        "闽侯",
-        "连江",
-        "罗源",
-        "闽清",
-        "永泰县",
-        "平潭",
-        "福清",
-        "长乐",
-        "厦门",
-        "莆田",
-        "仙游",
-        "三明",
-        "明溪",
-        "清流",
-        "宁化",
-        "大田",
-        "尤溪",
-        "沙县",
-        "将乐",
-        "泰宁",
-        "建宁",
-        "永安",
-        "泉州",
-        "惠安县",
-        "安溪",
-        "永春",
-        "德化",
-        "金门",
-        "石狮",
-        "晋江",
-        "南安",
-        "漳州",
-        "云霄",
-        "漳浦",
-        "诏安",
-        "长泰",
-        "东山县",
-        "南靖",
-        "平和县",
-        "华安",
-        "龙海",
-        "南平",
-        "顺昌",
-        "浦城",
-        "光泽",
-        "松溪",
-        "政和县",
-        "邵武",
-        "武夷山",
-        "建瓯",
-        "建阳",
-        "龙岩",
-        "长汀",
-        "永定",
-        "上杭",
-        "武平",
-        "连城",
-        "漳平",
-        "宁德",
-        "霞浦",
-        "古田",
-        "屏南",
-        "寿宁",
-        "周宁",
-        "柘荣",
-        "福安",
-        "福鼎",
-        "江西",
-        "南昌",
-        "新建",
-        "安义",
-        "进贤",
-        "景德镇",
-        "浮梁",
-        "乐平市",
-        "萍乡",
-        "莲花",
-        "上栗",
-        "芦溪",
-        "九江市",
-        "武宁",
-        "修水县",
-        "永修",
-        "德安",
-        "星子县",
-        "都昌",
-        "湖口县",
-        "彭泽",
-        "瑞昌",
-        "新余",
-        "分宜",
-        "鹰潭",
-        "余江",
-        "贵溪",
-        "赣州",
-        "赣县",
-        "信丰",
-        "大余",
-        "上犹",
-        "崇义",
-        "安远",
-        "龙南县",
-        "定南",
-        "全南",
-        "宁都",
-        "于都",
-        "兴国县",
-        "会昌",
-        "寻乌",
-        "石城",
-        "瑞金",
-        "南康",
-        "吉安",
-        "吉水",
-        "峡江",
-        "新干",
-        "永丰",
-        "泰和县",
-        "遂川",
-        "万安县",
-        "安福县",
-        "永新县",
-        "井冈山",
-        "宜春",
-        "奉新",
-        "万载县",
-        "上高",
-        "宜丰",
-        "靖安",
-        "铜鼓",
-        "丰城",
-        "樟树",
-        "高安",
-        "抚州",
-        "南城",
-        "黎川",
-        "南丰",
-        "崇仁",
-        "乐安",
-        "宜黄",
-        "金溪",
-        "资溪",
-        "东乡县",
-        "广昌",
-        "上饶",
-        "广丰",
-        "玉山",
-        "铅山",
-        "横峰",
-        "弋阳",
-        "余干",
-        "鄱阳",
-        "万年县",
-        "婺源",
-        "德兴",
-        "山东",
-        "济南",
-        "平阴",
-        "济阳",
-        "商河县",
-        "章丘",
-        "青岛",
-        "胶州",
-        "即墨",
-        "平度市",
-        "胶南",
-        "莱西",
-        "淄博",
-        "桓台",
-        "高青",
-        "沂源",
-        "枣庄",
-        "滕州",
-        "东营市",
-        "东营",
-        "垦利",
-        "利津",
-        "广饶",
-        "烟台",
-        "长岛县",
-        "龙口市",
-        "莱阳",
-        "莱州",
-        "蓬莱",
-        "招远",
-        "栖霞市",
-        "海阳",
-        "潍坊",
-        "临朐",
-        "昌乐",
-        "青州",
-        "诸城",
-        "寿光",
-        "安丘",
-        "高密",
-        "昌邑市",
-        "济宁",
-        "微山",
-        "鱼台",
-        "金乡",
-        "嘉祥",
-        "汶上",
-        "泗水",
-        "梁山",
-        "曲阜",
-        "兖州",
-        "邹城",
-        "泰安",
-        "宁阳",
-        "东平",
-        "新泰",
-        "肥城",
-        "威海",
-        "文登",
-        "荣成",
-        "乳山",
-        "日照",
-        "五莲",
-        "莒县",
-        "莱芜",
-        "临沂",
-        "沂南",
-        "郯城",
-        "沂水",
-        "苍山",
-        "费县",
-        "平邑",
-        "莒南",
-        "蒙阴",
-        "临沭",
-        "德州",
-        "陵县",
-        "宁津",
-        "庆云",
-        "临邑",
-        "齐河",
-        "平原",
-        "夏津",
-        "武城",
-        "乐陵",
-        "禹城",
-        "聊城",
-        "阳谷",
-        "莘县",
-        "茌平",
-        "东阿",
-        "冠县",
-        "高唐",
-        "临清",
-        "滨州",
-        "惠民",
-        "阳信",
-        "无棣",
-        "沾化",
-        "博兴",
-        "邹平",
-        "菏泽",
-        "曹县",
-        "单县",
-        "成武",
-        "巨野",
-        "郓城",
-        "鄄城",
-        "定陶",
-        "东明县",
-        "河南",
-        "郑州",
-        "管城",
-        "中牟",
-        "巩义",
-        "荥阳",
-        "新密",
-        "新郑",
-        "登封",
-        "开封",
-        "杞县",
-        "通许",
-        "尉氏",
-        "兰考",
-        "洛阳",
-        "孟津",
-        "新安",
-        "栾川",
-        "嵩县",
-        "汝阳",
-        "宜阳",
-        "洛宁",
-        "伊川",
-        "偃师",
-        "平顶山",
-        "宝丰",
-        "叶县",
-        "鲁山",
-        "郏县",
-        "舞钢",
-        "汝州",
-        "安阳",
-        "汤阴",
-        "滑县",
-        "内黄",
-        "林州",
-        "鹤壁",
-        "浚县",
-        "淇县",
-        "新乡",
-        "获嘉",
-        "原阳",
-        "延津",
-        "封丘",
-        "长垣",
-        "卫辉",
-        "辉市",
-        "焦作",
-        "修武",
-        "博爱",
-        "武陟",
-        "温县",
-        "沁阳",
-        "孟州",
-        "濮阳",
-        "清丰",
-        "南乐",
-        "范县",
-        "台前",
-        "许昌",
-        "鄢陵",
-        "襄城县",
-        "禹州",
-        "长葛",
-        "漯河",
-        "舞阳",
-        "临颍",
-        "三门峡",
-        "渑池",
-        "陕县",
-        "卢氏",
-        "义马",
-        "灵宝",
-        "南阳",
-        "南召",
-        "方城",
-        "西峡",
-        "镇平县",
-        "内乡",
-        "淅川",
-        "社旗",
-        "唐河",
-        "新野",
-        "桐柏",
-        "邓州",
-        "商丘",
-        "民权",
-        "睢县",
-        "宁陵",
-        "柘城",
-        "虞城",
-        "夏邑",
-        "永城",
-        "信阳",
-        "罗山",
-        "光山",
-        "新县",
-        "商城",
-        "固始",
-        "潢川",
-        "淮滨",
-        "息县",
-        "周口",
-        "扶沟",
-        "西华",
-        "商水",
-        "沈丘",
-        "郸城",
-        "淮阳",
-        "太康",
-        "鹿邑",
-        "项城",
-        "驻马店",
-        "西平",
-        "上蔡",
-        "平舆",
-        "正阳",
-        "确山",
-        "泌阳",
-        "汝南",
-        "遂平",
-        "新蔡",
-        "济源",
-        "湖北",
-        "武汉",
-        "黄石市",
-        "阳新县",
-        "大冶",
-        "十堰",
-        "郧县",
-        "郧西",
-        "竹山",
-        "竹溪",
-        "房县",
-        "丹江口",
-        "宜昌",
-        "远安",
-        "兴山",
-        "秭归",
-        "长阳",
-        "五峰",
-        "宜都",
-        "当阳",
-        "枝江",
-        "襄阳",
-        "南漳",
-        "谷城",
-        "保康",
-        "老河口",
-        "枣阳",
-        "宜城",
-        "鄂州",
-        "荆门",
-        "京山县",
-        "沙洋",
-        "钟祥",
-        "屈家岭",
-        "孝感",
-        "孝昌",
-        "大悟",
-        "云梦",
-        "应城",
-        "安陆",
-        "汉川",
-        "荆州",
-        "公安县",
-        "监利",
-        "江陵",
-        "石首",
-        "洪湖",
-        "松滋",
-        "黄冈市",
-        "团风县",
-        "红安",
-        "罗田",
-        "英山",
-        "浠水",
-        "蕲春",
-        "黄梅",
-        "麻城",
-        "武穴",
-        "咸宁",
-        "嘉鱼",
-        "通城",
-        "崇阳",
-        "通山",
-        "赤壁",
-        "随州",
-        "随县",
-        "广水",
-        "恩施州",
-        "恩施",
-        "利川",
-        "建始县",
-        "巴东",
-        "宣恩",
-        "咸丰",
-        "来凤",
-        "鹤峰",
-        "仙桃",
-        "潜江",
-        "天门市",
-        "神农架",
-        "江汉油田",
-        "湖南",
-        "长沙",
-        "望城",
-        "宁乡",
-        "浏阳",
-        "株洲",
-        "攸县",
-        "茶陵",
-        "炎陵",
-        "醴陵",
-        "湘潭",
-        "湘乡",
-        "韶山",
-        "衡阳",
-        "衡南",
-        "衡山",
-        "衡东",
-        "祁东",
-        "耒阳",
-        "常宁",
-        "邵阳",
-        "邵东",
-        "新邵",
-        "隆回",
-        "洞口县",
-        "绥宁",
-        "新宁县",
-        "城步",
-        "武冈",
-        "岳阳",
-        "华容县",
-        "湘阴",
-        "平江",
-        "汨罗",
-        "临湘",
-        "常德",
-        "安乡县",
-        "汉寿",
-        "澧县",
-        "临澧",
-        "桃源县",
-        "石门",
-        "津市市",
-        "张家界",
-        "慈利",
-        "桑植",
-        "益阳",
-        "南县",
-        "桃江",
-        "安化",
-        "沅江",
-        "郴州",
-        "桂阳",
-        "宜章",
-        "永兴",
-        "嘉禾",
-        "临武",
-        "汝城",
-        "桂东",
-        "安仁",
-        "资兴",
-        "永州",
-        "祁阳",
-        "东安县",
-        "双牌",
-        "道县",
-        "江永",
-        "宁远",
-        "蓝山",
-        "新田",
-        "江华",
-        "怀化",
-        "中方县",
-        "沅陵",
-        "辰溪",
-        "溆浦",
-        "会同",
-        "麻阳",
-        "新晃",
-        "芷江",
-        "靖州",
-        "通道县",
-        "通道侗族自治县",
-        "洪江",
-        "娄底",
-        "双峰",
-        "新化",
-        "冷水江",
-        "涟源",
-        "湘西",
-        "吉首",
-        "泸溪",
-        "凤凰县",
-        "花垣",
-        "保靖",
-        "古丈",
-        "永顺",
-        "龙山县",
-        "广东",
-        "广州",
-        "增城",
-        "从化",
-        "韶关",
-        "始兴",
-        "仁化",
-        "翁源",
-        "乳源",
-        "新丰",
-        "乐昌",
-        "南雄",
-        "深圳",
-        "珠海",
-        "汕头",
-        "南澳",
-        "佛山",
-        "江门市",
-        "台山市",
-        "开平市",
-        "鹤山市",
-        "恩平",
-        "湛江",
-        "遂溪",
-        "徐闻",
-        "廉江",
-        "雷州",
-        "吴川",
-        "茂名",
-        "电白",
-        "高州",
-        "化州",
-        "信宜",
-        "肇庆",
-        "广宁",
-        "怀集",
-        "封开",
-        "德庆",
-        "高要",
-        "四会市",
-        "惠州",
-        "博罗",
-        "惠东",
-        "龙门县",
-        "梅州",
-        "梅县",
-        "大埔",
-        "丰顺",
-        "五华县",
-        "平远",
-        "蕉岭",
-        "兴宁市",
-        "汕尾",
-        "海丰",
-        "陆河",
-        "陆丰",
-        "河源",
-        "紫金县",
-        "龙川",
-        "连平",
-        "和平县",
-        "东源",
-        "阳江市",
-        "阳西",
-        "阳东",
-        "阳春",
-        "清远",
-        "佛冈",
-        "阳山",
-        "连山县",
-        "连山壮族瑶族自治县",
-        "连南",
-        "清新",
-        "英德",
-        "连州",
-        "东莞",
-        "中山市",
-        "潮州",
-        "潮安",
-        "饶平",
-        "揭阳",
-        "揭东",
-        "揭西",
-        "惠来",
-        "普宁",
-        "云浮",
-        "新兴",
-        "郁南",
-        "云安",
-        "罗定",
-        "广西",
-        "南宁",
-        "武鸣",
-        "隆安",
-        "马山",
-        "上林",
-        "宾阳",
-        "横县",
-        "柳州",
-        "柳江",
-        "柳城",
-        "鹿寨",
-        "融安",
-        "融水",
-        "三江侗族自治县",
-        "三江县",
-        "桂林",
-        "阳朔",
-        "临桂",
-        "灵川",
-        "全州",
-        "兴安",
-        "永福",
-        "灌阳",
-        "龙胜",
-        "资源县",
-        "平乐",
-        "荔蒲",
-        "恭城",
-        "梧州",
-        "苍梧",
-        "藤县",
-        "蒙山",
-        "岑溪",
-        "北海市",
-        "北海经济开发",
-        "合浦",
-        "防城港",
-        "上思",
-        "东兴市",
-        "钦州",
-        "灵山县",
-        "浦北",
-        "贵港",
-        "平南",
-        "桂平",
-        "玉林",
-        "容县",
-        "陆川",
-        "博白",
-        "兴业县",
-        "北流",
-        "百色",
-        "田阳",
-        "田东",
-        "平果县",
-        "德保",
-        "靖西",
-        "那坡",
-        "凌云县",
-        "乐业县",
-        "田林县",
-        "西林",
-        "隆林",
-        "贺州",
-        "昭平",
-        "钟山县",
-        "富川",
-        "河池",
-        "南丹",
-        "天峨",
-        "凤山",
-        "东兰",
-        "罗城",
-        "环江",
-        "巴马",
-        "都安",
-        "大化",
-        "宜州",
-        "来宾",
-        "忻城",
-        "象州",
-        "武宣",
-        "金秀",
-        "合山",
-        "崇左",
-        "扶绥",
-        "宁明",
-        "龙州",
-        "大新县",
-        "天等",
-        "凭祥",
-        "海南",
-        "三沙",
-        "海口",
-        "三亚",
-        "五指山",
-        "琼海",
-        "儋州",
-        "文昌",
-        "万宁",
-        "东方市",
-        "定安",
-        "屯昌",
-        "澄迈",
-        "临高",
-        "白沙县",
-        "白沙黎族自治县",
-        "昌江自治县",
-        "乐东",
-        "陵水",
-        "保亭",
-        "琼中",
-        "重庆",
-        "綦江",
-        "潼南",
-        "铜梁",
-        "大足",
-        "荣昌",
-        "璧山",
-        "梁平",
-        "城口县",
-        "丰都",
-        "垫江",
-        "武隆",
-        "忠县",
-        "开县",
-        "云阳",
-        "奉节",
-        "巫山",
-        "巫溪",
-        "石柱土家族自治",
-        "秀山土家族苗族自治",
-        "酉阳土家族苗族自治",
-        "彭水苗族土家族自治",
-        "四川",
-        "成都",
-        "金堂",
-        "双流",
-        "郫县",
-        "大邑",
-        "蒲江",
-        "新津",
-        "都江堰",
-        "彭州",
-        "邛崃",
-        "崇州",
-        "自贡",
-        "荣县",
-        "富顺",
-        "攀枝花",
-        "米易",
-        "盐边",
-        "泸州",
-        "泸县",
-        "合江",
-        "叙永",
-        "古蔺",
-        "南部县",
-        "德阳",
-        "中江",
-        "罗江",
-        "广汉",
-        "什邡",
-        "绵竹",
-        "绵阳",
-        "三台县",
-        "盐亭",
-        "安县",
-        "梓潼",
-        "北川羌族自治",
-        "平武",
-        "江油",
-        "广元",
-        "旺苍",
-        "青川",
-        "剑阁",
-        "苍溪",
-        "遂宁",
-        "蓬溪",
-        "射洪",
-        "大英",
-        "内江",
-        "威远",
-        "资中",
-        "隆昌",
-        "乐山",
-        "犍为",
-        "井研",
-        "夹江",
-        "沐川",
-        "峨边彝族自治",
-        "马边彝族自治",
-        "峨眉山",
-        "南充",
-        "营山",
-        "蓬安",
-        "仪陇",
-        "西充",
-        "阆中",
-        "眉山",
-        "仁寿",
-        "彭山",
-        "洪雅",
-        "丹棱",
-        "青神",
-        "宜宾",
-        "南溪",
-        "江安",
-        "长宁县",
-        "高县",
-        "珙县",
-        "筠连",
-        "兴文",
-        "屏山",
-        "广安",
-        "岳池",
-        "武胜",
-        "邻水",
-        "华蓥",
-        "达州",
-        "达县",
-        "宣汉",
-        "开江县",
-        "大竹县",
-        "渠县",
-        "万源市",
-        "雅安市",
-        "名山县",
-        "荥经",
-        "汉源",
-        "石棉县",
-        "天全",
-        "芦山",
-        "宝兴",
-        "巴中",
-        "通江",
-        "南江县",
-        "平昌",
-        "资阳",
-        "安岳",
-        "乐至县",
-        "简阳",
-        "阿坝州",
-        "汶川",
-        "理县",
-        "茂县",
-        "松潘",
-        "九寨沟",
-        "金川县",
-        "小金县",
-        "黑水县",
-        "马尔康",
-        "壤塘",
-        "阿坝",
-        "若尔盖",
-        "红原",
-        "甘孜",
-        "康定",
-        "泸定",
-        "丹巴",
-        "九龙县",
-        "雅江",
-        "道孚",
-        "炉霍",
-        "新龙",
-        "德格",
-        "白玉县",
-        "石渠",
-        "色达",
-        "理塘",
-        "巴塘",
-        "乡城县",
-        "稻城",
-        "得荣",
-        "凉山",
-        "西昌",
-        "木里",
-        "盐源",
-        "德昌",
-        "会理",
-        "会东",
-        "宁南",
-        "普格",
-        "布拖",
-        "金阳",
-        "昭觉",
-        "喜德",
-        "冕宁",
-        "越西",
-        "甘洛",
-        "美姑",
-        "雷波",
-        "贵州",
-        "贵阳",
-        "开阳",
-        "息烽",
-        "修文",
-        "清镇",
-        "六盘水",
-        "水城",
-        "盘县",
-        "遵义",
-        "桐梓",
-        "绥阳",
-        "正安",
-        "道真",
-        "务川",
-        "凤冈",
-        "湄潭",
-        "余庆",
-        "习水",
-        "赤水",
-        "仁怀",
-        "安顺",
-        "平坝",
-        "普定",
-        "镇宁",
-        "关岭",
-        "紫云县",
-        "紫云苗族布依族自治县",
-        "毕节",
-        "大方县",
-        "黔西",
-        "金沙县",
-        "织金",
-        "纳雍",
-        "威宁",
-        "赫章",
-        "铜仁",
-        "江口县",
-        "玉屏",
-        "石阡",
-        "思南",
-        "印江",
-        "德江",
-        "沿河",
-        "松桃",
-        "黔西南",
-        "兴义",
-        "兴仁",
-        "普安",
-        "晴隆",
-        "贞丰",
-        "望谟",
-        "册亨",
-        "安龙县",
-        "黔东南",
-        "凯里市",
-        "黄平县",
-        "施秉",
-        "三穗",
-        "镇远县",
-        "岑巩",
-        "天柱",
-        "锦屏",
-        "剑河",
-        "台江县",
-        "台江",
-        "黎平",
-        "榕江",
-        "从江",
-        "雷山",
-        "麻江",
-        "丹寨",
-        "黔南布",
-        "都匀",
-        "福泉",
-        "荔波",
-        "贵定",
-        "瓮安",
-        "独山县",
-        "平塘",
-        "罗甸",
-        "长顺",
-        "龙里",
-        "惠水",
-        "三都",
-        "云南",
-        "昆明",
-        "呈贡",
-        "晋宁",
-        "富民县",
-        "宜良",
-        "石林",
-        "嵩明",
-        "禄劝",
-        "寻甸",
-        "安宁",
-        "曲靖",
-        "马龙",
-        "陆良",
-        "师宗",
-        "罗平县",
-        "富源",
-        "会泽",
-        "沾益",
-        "宣威",
-        "玉溪",
-        "江川",
-        "澄江",
-        "通海",
-        "华宁",
-        "易门",
-        "峨山",
-        "新平",
-        "元江",
-        "保山",
-        "施甸",
-        "腾冲",
-        "龙陵",
-        "昌宁",
-        "昭通",
-        "鲁甸",
-        "巧家",
-        "盐津",
-        "大关县",
-        "永善",
-        "绥江",
-        "镇雄",
-        "彝良",
-        "威信",
-        "水富",
-        "丽江",
-        "玉龙县",
-        "玉龙纳西族自治县",
-        "永胜",
-        "华坪",
-        "宁蒗",
-        "普洱",
-        "宁洱",
-        "墨江",
-        "景东县",
-        "景东彝族自治县",
-        "景谷",
-        "镇沅",
-        "江城自治县",
-        "江城县",
-        "孟连",
-        "澜沧",
-        "西盟",
-        "临沧",
-        "凤庆",
-        "云县",
-        "永德",
-        "镇康",
-        "双江",
-        "耿马",
-        "沧源",
-        "楚雄",
-        "双柏",
-        "牟定",
-        "南华",
-        "姚安",
-        "大姚",
-        "永仁",
-        "元谋",
-        "武定",
-        "禄丰",
-        "红河",
-        "个旧",
-        "开远",
-        "蒙自",
-        "屏边",
-        "建水",
-        "石屏",
-        "弥勒",
-        "泸西",
-        "元阳",
-        "金平自治县",
-        "金平县",
-        "绿春",
-        "河口自治县",
-        "文山",
-        "砚山",
-        "西畴",
-        "麻栗坡",
-        "马关县",
-        "丘北县",
-        "广南",
-        "富宁",
-        "西双版纳",
-        "景洪",
-        "勐海",
-        "勐腊",
-        "大理白族自治州",
-        "大理州",
-        "大理市",
-        "漾濞",
-        "祥云",
-        "宾川",
-        "弥渡",
-        "南涧",
-        "巍山",
-        "永平",
-        "云龙",
-        "洱源",
-        "剑川",
-        "鹤庆",
-        "德宏",
-        "瑞丽",
-        "潞西",
-        "梁河",
-        "盈江",
-        "陇川",
-        "怒江",
-        "泸水",
-        "福贡",
-        "贡山",
-        "兰坪",
-        "迪庆",
-        "香格里拉",
-        "德钦",
-        "维西",
-        "西藏",
-        "拉萨",
-        "林周",
-        "当雄",
-        "尼木",
-        "曲水",
-        "堆龙德庆",
-        "达孜",
-        "墨竹工卡",
-        "昌都",
-        "江达",
-        "贡觉",
-        "类乌齐",
-        "丁青",
-        "察雅",
-        "八宿",
-        "左贡",
-        "芒康",
-        "洛隆",
-        "边坝",
-        "乃东",
-        "扎囊",
-        "贡嘎",
-        "桑日",
-        "琼结",
-        "曲松",
-        "措美",
-        "洛扎",
-        "加查",
-        "隆子",
-        "错那",
-        "浪卡子",
-        "日喀则",
-        "南木林",
-        "江孜",
-        "定日",
-        "萨迦",
-        "拉孜",
-        "昂仁",
-        "谢通门",
-        "白朗",
-        "仁布",
-        "康马",
-        "定结",
-        "仲巴",
-        "亚东",
-        "吉隆",
-        "聂拉木",
-        "萨嘎",
-        "岗巴",
-        "那曲",
-        "嘉黎",
-        "比如县",
-        "聂荣县",
-        "安多县",
-        "申扎",
-        "索县",
-        "班戈",
-        "巴青",
-        "尼玛",
-        "普兰",
-        "札达",
-        "噶尔",
-        "日土",
-        "革吉",
-        "改则",
-        "措勤",
-        "林芝市",
-        "林芝县",
-        "工布江达",
-        "米林",
-        "墨脱",
-        "波密",
-        "察隅",
-        "朗县",
-        "陕西",
-        "西安",
-        "蓝田",
-        "周至",
-        "户县",
-        "高陵",
-        "铜川",
-        "宜君",
-        "宝鸡",
-        "凤翔县",
-        "岐山",
-        "扶风",
-        "眉县",
-        "陇县",
-        "千阳",
-        "麟游",
-        "凤县",
-        "太白县",
-        "咸阳",
-        "三原县",
-        "泾阳",
-        "乾县",
-        "礼泉",
-        "永寿",
-        "彬县",
-        "长武",
-        "旬邑",
-        "淳化",
-        "武功县",
-        "兴平",
-        "渭南",
-        "潼关",
-        "大荔",
-        "合阳",
-        "澄城",
-        "蒲城",
-        "白水",
-        "富平",
-        "韩城",
-        "华阴",
-        "延安",
-        "延长县",
-        "延川",
-        "子长",
-        "安塞",
-        "志丹",
-        "吴起",
-        "甘泉",
-        "富县",
-        "洛川",
-        "宜川",
-        "黄龙",
-        "黄陵",
-        "汉中",
-        "南郑县",
-        "城固",
-        "洋县",
-        "西乡",
-        "勉县",
-        "宁强",
-        "略阳",
-        "镇巴",
-        "留坝",
-        "佛坪",
-        "榆林",
-        "神木",
-        "府谷",
-        "横山",
-        "靖边",
-        "定边",
-        "绥德",
-        "米脂",
-        "佳县",
-        "吴堡",
-        "清涧",
-        "子洲",
-        "安康",
-        "汉阴",
-        "石泉",
-        "宁陕",
-        "紫阳",
-        "岚皋",
-        "平利",
-        "镇坪",
-        "旬阳",
-        "白河县",
-        "商洛",
-        "洛南",
-        "丹凤",
-        "商南",
-        "山阳",
-        "镇安县",
-        "柞水",
-        "甘肃",
-        "兰州",
-        "东乡自治县",
-        "永登",
-        "皋兰",
-        "榆中",
-        "嘉峪关",
-        "金昌",
-        "永昌",
-        "白银市",
-        "靖远",
-        "会宁",
-        "景泰县",
-        "天水",
-        "清水县",
-        "秦安",
-        "甘谷",
-        "武山",
-        "张家川",
-        "武威",
-        "民勤",
-        "古浪",
-        "天祝",
-        "张掖",
-        "肃南",
-        "民乐县",
-        "临泽",
-        "高台",
-        "山丹",
-        "平凉",
-        "泾川",
-        "灵台",
-        "崇信",
-        "华亭",
-        "庄浪",
-        "静宁",
-        "酒泉",
-        "金塔",
-        "瓜州",
-        "肃北",
-        "阿克塞",
-        "玉门",
-        "敦煌",
-        "庆阳",
-        "庆城",
-        "环县",
-        "华池",
-        "合水县",
-        "正宁",
-        "宁县",
-        "镇原县",
-        "定西",
-        "通渭",
-        "陇西",
-        "渭源",
-        "临洮",
-        "漳县",
-        "岷县",
-        "陇南",
-        "成县",
-        "文县",
-        "宕昌",
-        "康县",
-        "西和",
-        "礼县",
-        "徽县",
-        "两当县",
-        "临夏",
-        "康乐县",
-        "永靖",
-        "广河",
-        "和政",
-        "积石山",
-        "合作市",
-        "临潭",
-        "卓尼",
-        "舟曲",
-        "迭部",
-        "玛曲",
-        "碌曲",
-        "夏河",
-        "青海",
-        "共和县",
-        "西宁",
-        "大通自治县",
-        "大通县",
-        "湟中",
-        "湟源",
-        "平安县",
-        "民和",
-        "乐都",
-        "河南蒙古族自治县",
-        "互助土族自治县",
-        "互助县",
-        "化隆",
-        "循化",
-        "海北州",
-        "海北藏族自治州",
-        "门源",
-        "祁连",
-        "海晏",
-        "刚察",
-        "黄南",
-        "同仁",
-        "尖扎",
-        "泽库",
-        "同德",
-        "贵德",
-        "兴海",
-        "贵南",
-        "果洛",
-        "玛沁",
-        "班玛",
-        "甘德",
-        "达日",
-        "久治",
-        "玛多",
-        "玉树",
-        "杂多",
-        "称多",
-        "治多",
-        "囊谦",
-        "曲麻莱",
-        "海西州",
-        "海西蒙古族藏族自治州",
-        "格尔木",
-        "德令哈",
-        "乌兰",
-        "都兰",
-        "天峻",
-        "宁夏",
-        "银川",
-        "永宁",
-        "贺兰",
-        "灵武",
-        "石嘴山",
-        "平罗",
-        "吴忠",
-        "盐池",
-        "同心县",
-        "青铜峡",
-        "固原",
-        "西吉",
-        "隆德",
-        "泾源",
-        "彭阳",
-        "中卫",
-        "中宁",
-        "海原",
-        "新疆",
-        "乌鲁木齐",
-        "克拉玛依",
-        "吐鲁番",
-        "鄯善",
-        "托克逊",
-        "哈密",
-        "巴里坤",
-        "伊吾",
-        "昌吉",
-        "阜康",
-        "呼图壁",
-        "玛纳斯",
-        "奇台",
-        "吉木萨尔",
-        "木垒哈萨克",
-        "博尔塔拉",
-        "博乐",
-        "精河",
-        "温泉县",
-        "巴音郭楞",
-        "库尔勒",
-        "轮台",
-        "尉犁",
-        "若羌",
-        "且末",
-        "焉耆",
-        "和静",
-        "和硕",
-        "博湖",
-        "阿克苏",
-        "温宿",
-        "库车",
-        "沙雅",
-        "新和县",
-        "拜城",
-        "乌什",
-        "阿瓦提",
-        "柯坪",
-        "克孜勒",
-        "阿图什",
-        "阿克陶",
-        "阿合奇",
-        "乌恰",
-        "喀什",
-        "疏附",
-        "疏勒",
-        "英吉沙",
-        "泽普",
-        "莎车",
-        "叶城",
-        "麦盖提",
-        "岳普湖",
-        "伽师",
-        "巴楚",
-        "塔什",
-        "和田",
-        "墨玉",
-        "皮山",
-        "洛浦",
-        "策勒",
-        "于田县",
-        "民丰",
-        "伊犁",
-        "伊宁",
-        "奎屯",
-        "察布查尔锡伯",
-        "霍城",
-        "巩留",
-        "新源",
-        "昭苏",
-        "特克斯",
-        "尼勒克",
-        "塔城",
-        "乌苏",
-        "额敏",
-        "沙湾",
-        "托里",
-        "裕民",
-        "和布克赛尔",
-        "阿勒泰",
-        "布尔津",
-        "富蕴",
-        "福海",
-        "哈巴河",
-        "青河",
-        "吉木乃",
-        "石河子",
-        "阿拉尔",
-        "图木舒克",
-        "五家渠",
-        "台湾",
-        "台北",
-        "高雄",
-        "基隆",
-        "台中市",
-        "台南",
-        "新竹",
-        "嘉义",
-        "宜兰",
-        "桃园市",
-        "苗栗",
-        "彰化",
-        "南投",
-        "云林",
-        "屏东",
-        "台东",
-        "花莲",
-        "澎湖",
-        "香港",
-        "澳门",
-        "东城",
-        "西城",
-        "崇文",
-        "宣武",
-        "丰台",
-        "石景山",
-        "海淀",
-        "门头沟",
-        "房山",
-        "顺义",
-        "昌平",
-        "大兴",
-        "怀柔",
-        "平谷",
-        "河西",
-        "滨海新",
-        "南开",
-        "红桥",
-        "塘沽",
-        "汉沽",
-        "大港",
-        "东丽",
-        "西青",
-        "津南",
-        "北辰",
-        "武清",
-        "宝坻",
-        "井陉矿",
-        "裕华",
-        "路南",
-        "路北",
-        "古冶",
-        "丰南",
-        "丰润",
-        "海港",
-        "山海关",
-        "北戴河",
-        "邯山",
-        "丛台",
-        "复兴",
-        "峰峰矿",
-        "北市",
-        "南市",
-        "下花园",
-        "双滦",
-        "鹰手营子矿",
-        "运河",
-        "安次",
-        "广阳",
-        "桃城",
-        "小店",
-        "迎泽",
-        "杏花岭",
-        "尖草坪",
-        "万柏林",
-        "晋源",
-        "南郊",
-        "新荣",
-        "朔城",
-        "平鲁",
-        "榆次",
-        "盐湖",
-        "忻府",
-        "尧都",
-        "离石",
-        "玉泉",
-        "赛罕",
-        "东河",
-        "昆都仑",
-        "石拐",
-        "白云矿",
-        "九原",
-        "海勃湾",
-        "乌达",
-        "红山",
-        "元宝山",
-        "松山",
-        "科尔沁",
-        "东胜",
-        "海拉尔",
-        "临河",
-        "集宁",
-        "沈河",
-        "大东",
-        "皇姑",
-        "苏家屯",
-        "东陵",
-        "沈北新",
-        "于洪",
-        "西岗",
-        "沙河口",
-        "甘井子",
-        "旅顺口",
-        "金州",
-        "立山",
-        "千山",
-        "新抚",
-        "东洲",
-        "望花",
-        "顺城",
-        "溪湖",
-        "明山",
-        "南芬",
-        "元宝",
-        "振兴",
-        "振安",
-        "古塔",
-        "凌河",
-        "站前",
-        "西市",
-        "鲅鱼圈",
-        "老边",
-        "新邱",
-        "太平",
-        "清河门",
-        "细河",
-        "白塔",
-        "文圣",
-        "宏伟",
-        "弓长岭",
-        "太子河",
-        "双台子",
-        "兴隆台",
-        "银州",
-        "双塔",
-        "龙城",
-        "龙港",
-        "南票",
-        "杨家杖子开发",
-        "南关",
-        "二道",
-        "绿园",
-        "双阳",
-        "龙潭",
-        "船营",
-        "丰满",
-        "东昌",
-        "东昌府",
-        "二道江",
-        "八道江",
-        "江源",
-        "宁江",
-        "洮北",
-        "道里",
-        "南岗",
-        "道外",
-        "平房",
-        "松北",
-        "香坊",
-        "呼兰",
-        "阿城",
-        "龙沙",
-        "建华",
-        "铁锋",
-        "昂昂溪",
-        "富拉尔基",
-        "碾子山",
-        "梅里斯达斡尔族",
-        "鸡冠",
-        "恒山",
-        "滴道",
-        "城子河",
-        "麻山",
-        "工农",
-        "尖山",
-        "岭东",
-        "四方台",
-        "萨尔图",
-        "龙凤",
-        "让胡路",
-        "红岗",
-        "南岔",
-        "友好",
-        "翠峦",
-        "新青",
-        "美溪",
-        "金山屯",
-        "五营",
-        "乌马河",
-        "汤旺河",
-        "带岭",
-        "乌伊岭",
-        "上甘岭",
-        "东风",
-        "桃山",
-        "茄子河",
-        "阳明",
-        "爱民",
-        "爱辉",
-        "北林",
-        "大兴安岭",
-        "加格达奇",
-        "松岭",
-        "新林",
-        "呼中",
-        "黄浦",
-        "徐汇",
-        "静安",
-        "闸北",
-        "虹口",
-        "杨浦",
-        "闵行",
-        "嘉定",
-        "浦东新",
-        "金山 ",
-        "松江",
-        "青浦",
-        "奉贤",
-        "玄武",
-        "白下",
-        "秦淮",
-        "建邺",
-        "下关",
-        "浦口",
-        "雨花台",
-        "江宁",
-        "六合",
-        "崇安",
-        "南长",
-        "北塘",
-        "锡山",
-        "惠山",
-        "滨湖",
-        "九里",
-        "贾汪",
-        "泉山",
-        "天宁",
-        "钟楼",
-        "戚墅堰",
-        "新北",
-        "武进",
-        "沧浪",
-        "金阊",
-        "虎丘",
-        "吴中",
-        "相城",
-        "崇川",
-        "港闸",
-        "新浦",
-        "楚州",
-        "淮阴",
-        "清浦",
-        "亭湖",
-        "盐都",
-        "广陵",
-        "邗江",
-        "维扬",
-        "京口",
-        "润州",
-        "丹徒",
-        "海陵",
-        "高港",
-        "宿城",
-        "宿豫",
-        "上城",
-        "下城",
-        "江干",
-        "拱墅",
-        "滨江",
-        "萧山",
-        "余杭",
-        "海曙",
-        "江东",
-        "北仑",
-        "镇海",
-        "鄞州",
-        "鹿城",
-        "龙湾",
-        "瓯海",
-        "南湖",
-        "秀洲",
-        "吴兴",
-        "南浔",
-        "越城",
-        "婺城",
-        "金东",
-        "柯城",
-        "衢江",
-        "定海",
-        "椒江",
-        "黄岩",
-        "路桥",
-        "莲都",
-        "瑶海",
-        "庐阳",
-        "蜀山",
-        "新站",
-        "包河",
-        "镜湖",
-        "镜湖新",
-        "弋江",
-        "鸠江",
-        "三山",
-        "蚌山",
-        "禹会",
-        "淮上",
-        "田家庵",
-        "谢家集",
-        "八公山",
-        "潘集",
-        "金家庄",
-        "花山",
-        "雨山",
-        "博望新",
-        "杜集",
-        "相山",
-        "烈山",
-        "铜官山",
-        "狮子山",
-        "迎江",
-        "大观",
-        "宜秀",
-        "屯溪",
-        "徽州",
-        "琅琊",
-        "南谯",
-        "颍州",
-        "颍东",
-        "颍泉",
-        "埇桥",
-        "居巢",
-        "金安",
-        "裕安",
-        "谯城",
-        "贵池",
-        "宣州",
-        "仓山",
-        "马尾",
-        "晋安",
-        "思明",
-        "海沧",
-        "湖里",
-        "集美",
-        "同安",
-        "同安县",
-        "翔安",
-        "城厢",
-        "涵江",
-        "荔城",
-        "秀屿",
-        "梅列",
-        "三元",
-        "鲤城",
-        "丰泽",
-        "洛江",
-        "泉港",
-        "芗城",
-        "龙文",
-        "延平",
-        "新罗",
-        "蕉城",
-        "东湖",
-        "青云谱",
-        "湾里",
-        "青山湖",
-        "珠山",
-        "安源",
-        "湘东",
-        "庐山",
-        "浔阳",
-        "渝水",
-        "月湖",
-        "章贡",
-        "吉州",
-        "青原",
-        "袁州",
-        "临川",
-        "信州",
-        "历下",
-        "槐荫",
-        "天桥",
-        "历城",
-        "长清",
-        "市南",
-        "市北",
-        "四方",
-        "黄岛",
-        "崂山",
-        "李沧",
-        "城阳",
-        "淄川",
-        "张店",
-        "博山",
-        "临淄",
-        "周村",
-        "薛城",
-        "峄城",
-        "台儿庄",
-        "山亭",
-        "芝罘",
-        "福山",
-        "牟平",
-        "莱山",
-        "潍城",
-        "寒亭",
-        "坊子",
-        "奎文",
-        "任城",
-        "泰山",
-        "岱岳",
-        "环翠",
-        "岚山",
-        "莱城",
-        "钢城",
-        "兰山",
-        "罗庄",
-        "德城",
-        "东昌府",
-        "滨城",
-        "牡丹",
-        "中原",
-        "二七",
-        "金水",
-        "上街",
-        "惠济",
-        "龙亭",
-        "顺河回族",
-        "禹王台",
-        "金明",
-        "西工",
-        "瀍河回族",
-        "涧西",
-        "吉利",
-        "洛龙",
-        "卫东",
-        "石龙",
-        "湛河",
-        "文峰",
-        "北关",
-        "殷都",
-        "龙安",
-        "山城",
-        "淇滨",
-        "红旗",
-        "卫滨",
-        "凤泉",
-        "牧野",
-        "中站",
-        "马村",
-        "华龙",
-        "魏都",
-        "源汇",
-        "郾城",
-        "召陵",
-        "湖滨",
-        "宛城",
-        "卧龙",
-        "梁园",
-        "睢阳",
-        "浉河",
-        "平桥",
-        "川汇",
-        "驿城",
-        "江岸",
-        "江汉",
-        "硚口",
-        "汉阳",
-        "武昌",
-        "洪山",
-        "东西湖",
-        "汉南",
-        "蔡甸",
-        "江夏",
-        "黄陂",
-        "新洲",
-        "东湖开发",
-        "武汉经济开发",
-        "黄石港",
-        "西塞山",
-        "下陆",
-        "铁山",
-        "黄石经济开发",
-        "茅箭",
-        "张湾",
-        "十堰经济开发",
-        "武当山旅游经济特",
-        "西陵",
-        "伍家岗",
-        "点军",
-        "猇亭",
-        "夷陵",
-        "樊城",
-        "隆中风景",
-        "高新开发",
-        "鱼梁洲开发",
-        "梁子湖",
-        "鄂城",
-        "葛店开发",
-        "鄂州经济开发",
-        "东宝",
-        "掇刀",
-        "荆门经济开发",
-        "孝南",
-        "沙市",
-        "荆州经济开发",
-        "黄州",
-        "龙感湖管理",
-        "咸安",
-        "曾都",
-        "芙蓉",
-        "天心",
-        "岳麓",
-        "开福",
-        "雨花",
-        "荷塘",
-        "芦淞",
-        "石峰",
-        "天元",
-        "雨湖",
-        "岳塘",
-        "珠晖",
-        "雁峰",
-        "石鼓",
-        "蒸湘",
-        "南岳",
-        "双清",
-        "大祥",
-        "北塔",
-        "岳阳楼",
-        "云溪",
-        "君山",
-        "武陵",
-        "鼎城",
-        "武陵源",
-        "赫山",
-        "北湖",
-        "苏仙",
-        "零陵",
-        "冷水滩",
-        "鹤城",
-        "娄星",
-        "荔湾",
-        "越秀",
-        "海珠",
-        "天河",
-        "黄埔",
-        "番禺",
-        "花都",
-        "南沙",
-        "萝岗",
-        "武江",
-        "浈江",
-        "曲江",
-        "罗湖",
-        "福田",
-        "宝安",
-        "龙岗",
-        "盐田",
-        "香洲",
-        "斗门",
-        "斗门镇",
-        "金湾",
-        "龙湖",
-        "濠江",
-        "潮阳",
-        "潮南",
-        "澄海",
-        "禅城",
-        "南海",
-        "顺德",
-        "三水",
-        "高明",
-        "蓬江",
-        "江海",
-        "新会",
-        "赤坎",
-        "霞山",
-        "坡头",
-        "麻章",
-        "茂南",
-        "茂港",
-        "端州",
-        "鼎湖",
-        "惠城",
-        "惠阳",
-        "梅江",
-        "源城",
-        "清城",
-        "枫溪",
-        "湘桥",
-        "榕城",
-        "云城",
-        "青秀",
-        "江南",
-        "西乡塘",
-        "良庆",
-        "邕宁",
-        "鱼峰",
-        "柳南",
-        "柳北",
-        "秀峰",
-        "叠彩",
-        "七星",
-        "雁山",
-        "万秀",
-        "蝶山",
-        "长洲",
-        "银海",
-        "铁山港",
-        "港口",
-        "防城",
-        "钦南",
-        "钦北",
-        "港北",
-        "港南",
-        "覃塘",
-        "玉州",
-        "右江",
-        "八步",
-        "金城江",
-        "兴宾",
-        "江洲",
-        "秀英",
-        "龙华",
-        "琼山",
-        "美兰",
-        "洋浦经济开发",
-        "万州",
-        "涪陵",
-        "渝中",
-        "大渡口",
-        "沙坪坝",
-        "九龙坡",
-        "南岸",
-        "北碚",
-        "万盛",
-        "渝北",
-        "巴南",
-        "黔江",
-        "长寿",
-        "江津",
-        "合川",
-        "南川",
-        "永川",
-        "北部新",
-        "锦江",
-        "青羊",
-        "金牛",
-        "武侯",
-        "成华",
-        "龙泉驿",
-        "青白江",
-        "新都",
-        "温江",
-        "自流井",
-        "贡井",
-        "沿滩",
-        "仁和",
-        "江阳",
-        "纳溪",
-        "龙马潭",
-        "旌阳",
-        "涪城",
-        "游仙",
-        "元坝",
-        "朝天",
-        "船山",
-        "安居",
-        "五通桥",
-        "金口河",
-        "顺庆",
-        "高坪",
-        "嘉陵",
-        "东坡",
-        "翠屏",
-        "通川",
-        "雨城",
-        "巴州",
-        "雁江",
-        "南明",
-        "云岩",
-        "花溪",
-        "乌当",
-        "小河",
-        "金阳新",
-        "六枝特",
-        "红花岗",
-        "汇川",
-        "新浦新",
-        "西秀",
-        "黄果树开发",
-        "七星关",
-        "碧江",
-        "万山特",
-        "凯里经济开发",
-        "盘龙",
-        "官渡",
-        "西山",
-        "东川",
-        "麒麟",
-        "红塔",
-        "隆阳",
-        "昭阳",
-        "古城",
-        "思茅",
-        "临翔",
-        "山南市",
-        "阿里地",
-        "碑林",
-        "莲湖",
-        "灞桥",
-        "未央",
-        "雁塔",
-        "阎良",
-        "临潼",
-        "沣渭新",
-        "王益",
-        "印台",
-        "耀州",
-        "渭滨",
-        "金台",
-        "陈仓",
-        "秦都",
-        "渭城",
-        "临渭",
-        "宝塔",
-        "汉台",
-        "榆阳",
-        "汉滨",
-        "商州",
-        "杨凌示范",
-        "七里河",
-        "西固",
-        "红古",
-        "平川",
-        "秦州",
-        "麦积",
-        "凉州",
-        "甘州",
-        "崆峒",
-        "肃州",
-        "西峰",
-        "安定",
-        "武都",
-        "海东",
-        "兴庆",
-        "西夏",
-        "金凤",
-        "大武口",
-        "惠农",
-        "利通",
-        "红寺堡",
-        "原州",
-        "沙坡头",
-        "天山",
-        "沙依巴克",
-        "水磨沟",
-        "头屯河",
-        "达坂城",
-        "米东",
-        "独山子",
-        "白碱滩",
-        "乌尔禾",
-        "中西",
-        "九龙城",
-        "观塘",
-        "深水埗",
-        "湾仔",
-        "黄大仙",
-        "油尖旺",
-        "离岛",
-        "葵青",
-        "西贡",
-        "沙田",
-        "屯门",
-        "荃湾",
-        "元朗",
-        "花地玛堂",
-        "圣安多尼堂",
-        "大堂",
-        "望德堂",
-        "风顺堂",
-        "嘉模堂",
-        "圣方济各堂"
-    ]
-}
+  "area": [
+    "全国",
+    "北京",
+    "广东",
+    "山东",
+    "河南",
+    "浙江",
+    "江苏",
+    "陕西",
+    "上海",
+    "四川",
+    "湖北",
+    "福建",
+    "河北",
+    "安徽",
+    "湖南",
+    "辽宁",
+    "江西",
+    "山西",
+    "云南",
+    "新疆",
+    "重庆",
+    "广西",
+    "吉林",
+    "贵州",
+    "天津",
+    "甘肃",
+    "黑龙江",
+    "内蒙古",
+    "宁夏",
+    "海南",
+    "青海",
+    "香港",
+    "澳门",
+    "台湾"
+  ],
+  "city": []
+}

+ 7 - 1
src/config.yaml

@@ -1,11 +1,17 @@
 etcd:
   hosts:
+<<<<<<< HEAD
     - 192.168.3.206:2379
+=======
+  - 192.168.3.207:2379
+  - 192.168.3.165:2379
+  - 192.168.3.204:2379
+>>>>>>> master
 userCenterKey: "usercenter.rpc" #用户中台rpc
 powerCheckCenterKey: "powercheck.rpc" #权益校验中台
 resourceCenterKey: "resource.rpc" #资源中台
 entManageApplication: "entmanageapplication.rpc" #企业管理中台
-activityKey: "activity.rpc" #营销中台rpc
+activityKey: "activity.rpc2" #营销中台rpc
 publicserviceKey: "publicservice.rpc"
 
 

+ 1 - 1
src/go.mod

@@ -6,7 +6,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
 	app.yhyue.com/moapp/jybase v0.0.0-20240412015757-6d8429bb4dae
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.21.10
+	app.yhyue.com/moapp/jypkg v1.22.3
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.20
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/bwmarrin/snowflake v0.3.0

+ 2 - 2
src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240412015757-6d8429bb4dae/go.mod h1:XHNATN6t
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.21.10 h1:mzn1BB95aNc+xb7+6DGLTCdZNbBCSKvDvkYm6H1abrk=
-app.yhyue.com/moapp/jypkg v1.21.10/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
+app.yhyue.com/moapp/jypkg v1.22.3 h1:iD5eC6JuF4eQV80lvTu3/D4qZeuogWpW4XkCG9TKO9Y=
+app.yhyue.com/moapp/jypkg v1.22.3/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=

+ 7 - 0
src/jfw/config/config.go

@@ -32,6 +32,7 @@ var (
 	IpList               *ipmatch.WhiteIp
 	IpInitLock           sync.RWMutex //锁
 	JyAnonymousLimit     *anonymousLimit
+	AreaCity             areaInfo
 )
 
 type IndustryTrend struct {
@@ -65,10 +66,16 @@ type anonymousLimit struct {
 	Limit  int   `json:"limit"`  //限制多长时间
 }
 
+type areaInfo struct {
+	Area []string
+	City []string
+}
+
 func init() {
 	g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("config.yaml")
 	util.ReadConfig(&Sysconfig)
 	util.ReadConfig("./export.json", &ExportConfig)
+	util.ReadConfig("./city.json", &AreaCity)
 	IpInit()
 	//log.Println("sysconfig:", Sysconfig)
 	WeixinConfig, _ = Sysconfig["wxJianyu"].(map[string]interface{})

+ 14 - 0
src/jfw/front/dataExport.go

@@ -151,6 +151,10 @@ func (d *DataExport) SieveData() {
 	if industry != "" {
 		industryArr = strings.Split(industry, ",")
 		log.Println("industryArr", industryArr)
+		//P510 行业:其它
+		if qt := jy.IndustryHandle(industry); len(qt) > 0 {
+			industryArr = append(industryArr, qt...)
+		}
 	}
 	if subType != "" {
 		subTypeArr = strings.Split(subType, ",")
@@ -478,6 +482,16 @@ func (d *DataExport) ToOrderDetail(orderCode string) error {
 				}
 			}
 			filter.MinPrice = public.GetPriceDes_SieveCondition(filter.MinPrice, filter.MaxPrice)
+			// 处理行业其他
+			tmpIndustry := []string{}
+			for i := 0; i < len(filter.Industry); i++ {
+				cIndustry := filter.Industry[i]
+				if strings.Contains(cIndustry, "其它") {
+					continue
+				}
+				tmpIndustry = append(tmpIndustry, cIndustry)
+			}
+			filter.Industry = tmpIndustry
 			orderDetail["filter"] = filter
 		} else {
 			log.Println("筛选条件-关键词-结构体反序列化-错误", err)

+ 14 - 1
src/jfw/front/entsearch.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"jy/src/jfw/config"
 	"strconv"
+	"strings"
 
 	"app.yhyue.com/moapp/jypkg/jylabutil"
 
@@ -33,6 +34,10 @@ func init() {
 
 func (e *Entsearch) EntSearchIndex() error {
 	defer util.Catch()
+	//页面重构后 前端中转页 P480#2
+	if !strings.Contains(e.Request.URL.String(), "useOld") {
+		return e.Render("/pc/search/index.html", &e.T)
+	}
 	var shareid = e.GetString("id")
 	if len(shareid) == 0 {
 		shareid = "10"
@@ -44,8 +49,12 @@ func (e *Entsearch) EntSearchIndex() error {
 		e.T["isVip"] = userInfo.VipState > 0
 		e.T["isMember"] = userInfo.BigMember > 0
 		e.T["isEntniche"] = userInfo.EntMember > 0
-		e.T["isEntnicheNew"] = userInfo.IsNewEnt
+		e.T["isEntnicheNew"] = userInfo.EntMember > 0 && userInfo.IsNewEnt
 		e.T["isEntService"] = userInfo.EntService
+		if userInfo.EntService {
+			e.T["isEntniche"] = false
+			e.T["isEntnicheNew"] = false
+		}
 		e.T["isLogin"] = 1
 	} else { //P414
 		if cc, err := e.GetCookie(jy.ChannelCookieName); err == nil {
@@ -60,6 +69,10 @@ func (e *Entsearch) EntSearchIndex() error {
 }
 func (e *Entsearch) PushSearchIndex() error {
 	defer util.Catch()
+	//页面重构后 前端中转页 P480#2
+	if !strings.Contains(e.Request.URL.String(), "useOld") {
+		return e.Render("/pc/search/index.html", &e.T)
+	}
 	var shareid = e.GetString("id")
 	if len(shareid) == 0 {
 		shareid = "10"

+ 18 - 18
src/jfw/front/front.go

@@ -70,24 +70,24 @@ type Front struct {
 	aboutsearch        xweb.Mapper `xweb:"/swordfish/aboutsearch"`
 	aboutSR            xweb.Mapper `xweb:"/swordfish/aboutsearchresult"`
 	delOL              xweb.Mapper `xweb:"/swordfish/delovertimelist"` //手动删除30天无更新数据
-	pcAjaxReq          xweb.Mapper `xweb:"/front/pcAjaxReq"`
-	myFeedbacks        xweb.Mapper `xweb:"/swordfish/myFeedbacks"`
-	wxerr              xweb.Mapper `xweb:"/mob/err"`
-	getRecomKWs        xweb.Mapper `xweb:"/member/getRecomKWs"`           //获取推荐关键词
-	behaviorRecord     xweb.Mapper `xweb:"/member/behaviorRecord"`        //记录用户点击的关键词
-	tSGuide            xweb.Mapper `xweb:"/front/tenderSubscribe/guide"`  //引导页
-	transfer           xweb.Mapper `xweb:"/front/transfer"`               //原文链接中转
-	jyblog             xweb.Mapper `xweb:"/jyblog/index([^.]*).html"`     //剑鱼标讯博客
-	jybdetail          xweb.Mapper `xweb:"/jyblog/([^.]*).html"`          //剑鱼标讯博客三级页
-	blogpraise         xweb.Mapper `xweb:"/jyblog/blogpraise"`            //剑鱼标讯博客三级页点赞
-	jyCms              xweb.Mapper `xweb:"/jyCms/(.*)/index([^.]*).html"` //剑鱼栏目列表页
-	encrypt            xweb.Mapper `xweb:"/share/encrypt"`                //分享三级页加密
-	newhistorypush     xweb.Mapper `xweb:"/swordfish/newhistorypush"`     //新的历时推送记录
-	historypush        xweb.Mapper `xweb:"/swordfish/historypush"`        //历时推送记录
-	historypushPaging  xweb.Mapper `xweb:"/swordfish/historypush/paging"` //历时推送记录--分页
-	aboutus            xweb.Mapper `xweb:"/front/aboutus.html"`           //关于我们
-	busicooperation    xweb.Mapper `xweb:"/front/busicooperation.html"`   //商务合作
-	subscribeTransfer  xweb.Mapper `xweb:"/front/subscribeTransfer"`      //原文链接中转
+	//pcAjaxReq          xweb.Mapper `xweb:"/front/pcAjaxReq"`
+	myFeedbacks       xweb.Mapper `xweb:"/swordfish/myFeedbacks"`
+	wxerr             xweb.Mapper `xweb:"/mob/err"`
+	getRecomKWs       xweb.Mapper `xweb:"/member/getRecomKWs"`           //获取推荐关键词
+	behaviorRecord    xweb.Mapper `xweb:"/member/behaviorRecord"`        //记录用户点击的关键词
+	tSGuide           xweb.Mapper `xweb:"/front/tenderSubscribe/guide"`  //引导页
+	transfer          xweb.Mapper `xweb:"/front/transfer"`               //原文链接中转
+	jyblog            xweb.Mapper `xweb:"/jyblog/index([^.]*).html"`     //剑鱼标讯博客
+	jybdetail         xweb.Mapper `xweb:"/jyblog/([^.]*).html"`          //剑鱼标讯博客三级页
+	blogpraise        xweb.Mapper `xweb:"/jyblog/blogpraise"`            //剑鱼标讯博客三级页点赞
+	jyCms             xweb.Mapper `xweb:"/jyCms/(.*)/index([^.]*).html"` //剑鱼栏目列表页
+	encrypt           xweb.Mapper `xweb:"/share/encrypt"`                //分享三级页加密
+	newhistorypush    xweb.Mapper `xweb:"/swordfish/newhistorypush"`     //新的历时推送记录
+	historypush       xweb.Mapper `xweb:"/swordfish/historypush"`        //历时推送记录
+	historypushPaging xweb.Mapper `xweb:"/swordfish/historypush/paging"` //历时推送记录--分页
+	aboutus           xweb.Mapper `xweb:"/front/aboutus.html"`           //关于我们
+	busicooperation   xweb.Mapper `xweb:"/front/busicooperation.html"`   //商务合作
+	subscribeTransfer xweb.Mapper `xweb:"/front/subscribeTransfer"`      //原文链接中转
 	/********************wxkeyset:v1.8**************************/
 	wxKeysetAjaxReq xweb.Mapper `xweb:"/wxkeyset/ajaxReq"`           //订阅词ajax请求
 	wxKeyset        xweb.Mapper `xweb:"/wxkeyset/keyset/(\\w+)"`     //订阅词设置

+ 5 - 1
src/jfw/front/frontRouter.go

@@ -117,6 +117,10 @@ func (this *CommonRouter) PcCommonPage(folder, loginSign, htmlPage string) error
 	}
 	if folder == "collection" {
 		this.T["logid"] = config.Seoconfig["collection"].(string)
+		//页面重构后 前端中转页 P480#2
+		if !strings.Contains(this.Request.URL.String(), "useOld") {
+			return this.Render("/pc/search/index.html", &this.T)
+		}
 	}
 	return this.Render(fmt.Sprintf("/frontRouter/pc/%s/%s/%s.html", folder, loginSign, htmlPage))
 }
@@ -224,7 +228,7 @@ func (this *CommonRouter) doPcBigPage(pageSign, types string) error {
 	//page := pageSign
 	userid, _ := this.GetSession("userId").(string)
 	//没有登录跳转登录页面(采购单位画像| 企业画像 除外)
-	if !strings.Contains(pageSign, "unit_portrayal") && !strings.Contains(pageSign, "ent_portrait") && !strings.Contains(pageSign, "ent_ser_portrait") && userid == "" {
+	if !strings.Contains(pageSign, "nzj") && !strings.Contains(pageSign, "supply") && !strings.Contains(pageSign, "unit_portrayal") && !strings.Contains(pageSign, "ent_portrait") && !strings.Contains(pageSign, "ent_ser_portrait") && userid == "" {
 		return this.Redirect("/notin/page")
 	}
 	if userid == "" {

+ 48 - 2
src/jfw/front/nzjProject.go

@@ -13,6 +13,7 @@ import (
 	"fmt"
 	"jy/src/jfw/config"
 	"math/rand"
+	"sort"
 	"strconv"
 	"strings"
 	"sync"
@@ -85,8 +86,45 @@ func (l *ClaimProject) NzjConditions() {
 FROM
 	Jianyu_subjectdb.d_area_code where level = 1 and name != '其它'`)
 		if area != nil && len(*area) > 0 {
-			for _, m := range *area {
-				areaArr = append(areaArr, common.InterfaceToStr(m["name"]))
+			type ai struct {
+				name string
+				sort int
+			}
+			var (
+				areaInfo []ai
+				areaMap  = map[string]bool{}
+			)
+			if len(config.AreaCity.Area) > 0 {
+				for k, v := range config.AreaCity.Area {
+					areaMap[v] = true
+					areaInfo = append(areaInfo, ai{
+						name: v,
+						sort: k,
+					})
+				}
+				if len(*area) != len(config.AreaCity.Area) {
+					for _, m := range *area {
+						name := common.InterfaceToStr(m["name"])
+						if !areaMap[name] {
+							areaMap[name] = true
+							areaInfo = append(areaInfo, ai{
+								name: name,
+								sort: len(areaInfo) + 1,
+							})
+						}
+					}
+				}
+				sort.Slice(areaInfo, func(i, j int) bool {
+					return areaInfo[i].sort < areaInfo[j].sort
+				})
+				areaArr = []string{}
+				for _, m := range areaInfo {
+					areaArr = append(areaArr, m.name)
+				}
+			} else {
+				for _, m := range *area {
+					areaArr = append(areaArr, common.InterfaceToStr(m["name"]))
+				}
 			}
 		}
 		data = append(data, map[string]interface{}{"地区": areaArr})
@@ -97,6 +135,14 @@ FROM
     Jianyu_subjectdb.d_nzj_category_code WHERE name != '其它工程' and pcode = ""
  ORDER BY id asc`)
 		if categoryCode != nil && len(*categoryCode) > 0 {
+
+			var tmp []string
+			for _, m := range *categoryCode {
+				tmp = append(tmp, common.InterfaceToStr(m["name"]))
+			}
+			data = append(data, map[string]interface{}{
+				"工程类型": tmp,
+			})
 			for _, m := range *categoryCode {
 				category := public.GlobalCommonMysql.SelectBySql(fmt.Sprintf(`SELECT
     name

+ 8 - 1
src/jfw/front/shorturl.go

@@ -1039,7 +1039,14 @@ func (s *Short) Qr(t, id string) error {
 	if industry != "" {
 		param += "&industry=" + industry
 	}
-	data := config.Sysconfig["webdomain"].(string) + "/article/content/" + id + ".html" + param
+	///article/bdprivate/BXXXX 详情页
+	if strings.HasPrefix(id, "B") {
+		bdprivateId := encrypt.CommonEncodeArticle("content", encrypt.CommonDecodeArticle("bdprivate", id)[0])
+		if bdprivateId != "" {
+			id = bdprivateId
+		}
+	}
+	data := config.Sysconfig["webdomain"].(string) + "/article/content/" + url.QueryEscape(id) + ".html" + param
 	r, _ := qr.Encode(data, qr.M)
 	pngdat := r.PNG()
 	_, err := w.Write(pngdat)

+ 5 - 4
src/jfw/front/supsearch.go

@@ -388,6 +388,10 @@ func (p *Pcsearch) SearchPower(module string) {
 // PcSearchIndex 路由搜索
 func (p *Pcsearch) PcSearchIndex(module string) error {
 	defer util.Catch()
+	//页面重构后 前端中转页 P480#2
+	//if !strings.Contains(p.Request.URL.String(), "useOld") {
+	return p.Render("/pc/search/index.html", &p.T)
+	//}
 	sessVal := p.Session().GetMultiple()
 	p.T["logid"] = config.Seoconfig["jysslby"].(string)
 	pageSize, _ := p.GetInteger("pageSize")
@@ -716,10 +720,7 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 		}
 	}
 	//老版搜索页面
-	if strings.Contains(p.Request.URL.String(), "useOld") {
-		return p.Render("/pc/supsearch.html", &p.T)
-	}
-	return p.Render("/pc/search/index.html", &p.T)
+	return p.Render("/pc/supsearch.html", &p.T)
 }
 
 // Newbids  最新招标信息 --已失效

+ 203 - 203
src/jfw/front/swordfish.go

@@ -81,209 +81,209 @@ func (m *Front) Searchinfolist(p string) error {
 }
 
 // PcAjaxReq ajax分页请求
-func (m *Front) PcAjaxReq() {
-	territorialization := m.GetString("bid_field") // 领域类型 0101- 医疗
-	tabularflag := m.GetString("tabularflag")
-	sessVal := m.Session().GetMultiple()
-	userId := util.ObjToString(sessVal["userId"])
-	accountId := util.Int64All(sessVal["accountId"])
-	entAccountId := util.Int64All(sessVal["entAccountId"])
-	entId := util.Int64All(sessVal["entId"])
-	entUserId := util.Int64All(sessVal["entUserId"])
-	phone := util.ObjToString(sessVal["phone"])
-	currentPage, _ := m.GetInteger("pageNumber")
-	pageSize, _ := m.GetInteger("pageSize")
-	mobileTag := m.GetSlice("mobileTag[]") //P513中国移动定制招标采购搜索
-
-	if pageSize == 0 {
-		pageSize = 50
-	}
-	//userId = "63c11681800b227df5874680"//免费
-	//userId = "63d5cc0098f6fae01592ea7f" //付费
-	if tabularflag == "Y" && userId == "" {
-		//判断用户是否登录进行表格查询,否则返回基本数据
-		tabularflag = ""
-	}
-	userInfo := jy.GetVipState(m.Session(), *config.Middleground, userId)
-	if territorialization != "" && territorialization != "BIProperty" { // 如果是领域化数据 判断是否是付费用户 是否有权限 ,也不是物业产品
-		if (userInfo.BigMember <= 0 && userInfo.VipState <= 0) || (!jy.HasBidFieldPower(config.Middleground, m.Session(), MedicalFunctionCode)) {
-			m.ServeJson(map[string]interface{}{
-				"list": []map[string]interface{}{},
-			})
-			return
-		}
-	}
-	if len(mobileTag) > 0 { //当无该权限,把此字段置空
-		if !jy.HasBidFieldPower(config.Middleground, m.Session(), MobileTagSearchFunctionCode) {
-			mobileTag = []string{}
-		} else if mobileTag[0] == "all" {
-			mobileTag = mobileTagItemsValOptionsAll
-		}
-	}
-	area := m.GetString("area")
-	district := m.GetString("district")
-	subtype := m.GetString("subtype")
-	toptype := m.GetString("toptype") //信息类型
-	publishtime := m.GetString("publishtime")
-	selectType := m.GetString("selectType")
-	if selectType == "" {
-		selectType = "title,content"
-	}
-	searchGroup, _ := m.GetInteger("searchGroup") //搜索分组;默认0:全部;1:招标采购搜索;2:超前项目。
-	//物业版本参数接收
-	//地区
-	//到期时间
-	expireTime := m.GetString("expireTime")
-	//物业业态 propertyForm
-	propertyForm := m.GetString("propertyForm")
-	//业务类型  subinformation
-	subinformation := m.GetString("subinformation")
-	//合同周期 period
-	period := m.GetString("period")
-	//价格区间 scale
-	scale := m.GetString("scale")
-	//价格区间 scale
-	isfile, _ := m.GetInteger("isfile")
-	//换手率 changehand
-	changehand, _ := m.GetInteger("changehand")
-	if userId == "" {
-		//未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
-		// p397 未登录用户收回查看拟建权限
-		if searchGroup < 2 { //p415 超前项目支持未登录搜索
-			if strings.Contains(subtype, "采购意向") || strings.Contains(subtype, "拟建") {
-				var ss []string
-				for _, v := range strings.Split(subtype, ",") {
-					if v != "采购意向" && !strings.Contains(v, "拟建") {
-						ss = append(ss, v)
-					}
-				}
-				subtype = strings.Join(ss, ",")
-			}
-			if subtype == "" {
-				subtype = "招标预告,招标公告,招标结果,招标信用信息"
-			}
-		}
-		//未登录用户搜索范围 标题和 正文
-		var selectTypeArr []string
-		selectTypeSplit := strings.Split(selectType, ",")
-		// 未登录用户只能搜标题和正文
-		for i := 0; i < len(selectTypeSplit); i++ {
-			if selectTypeSplit[i] == "title" || selectTypeSplit[i] == "content" {
-				selectTypeArr = append(selectTypeArr, selectTypeSplit[i])
-			}
-		}
-		if len(selectTypeArr) > 0 {
-			selectType = strings.Join(selectTypeArr, ",")
-		}
-		if publishtime != "" {
-			publishtime = ""
-		}
-	}
-	industry := strings.TrimSpace(m.GetString("industry"))
-	minprice := m.GetString("minprice")               //最低价格
-	maxprice := m.GetString("maxprice")               //最高价格
-	fileExists := m.GetString("fileExists")           //是否有附件--所有用户都可用此功能 0:全部;1:有附件;-1:无附件
-	searchMode, _ := m.GetInteger("searchMode")       //搜索模式;默认0:精准模式(不进行系统分词);1:模糊模式(进行系统分词)。
-	wordsMode, _ := m.GetInteger("wordsMode")         //搜索关键词模式;默认0:包含所有关键词;1:包含任意关键词。
-	additionalWords := m.GetString("additionalWords") //关键词:附加关键词(副:五组,每组最多15个字符 每组,号隔开)
-	var (
-		//高级筛选 仅付费用户可查询
-		hasBuyerTel, hasWinnerTel string //是否有采购单位电话、是否有中标单位电话 y:有 n:没有
-		buyerclass                string //采购单位类别
-		notkey                    string //排除词
-		isPayedUser               bool
-		queryItems                []string
-		city                      string //城市
-		count, total, bCount      int64
-		isLimit                   = 1
-		list                      []*map[string]interface{}
-		heightKeys                string //需要高亮的关键词
-		//P492招标采购搜索匹配采购单位等优化
-		buyer  string //采购单位
-		winner string //中标企业
-		agency string //招标代理机构
-		bwa    bool
-	)
-	queryItems = userInfo.GetQueryItems(selectType, util.Int64All(config.Sysconfig["bidSearchOldUserLimit"]))
-	isPayedUser = userInfo.IsPayedUser()
-	if isPayedUser {
-		buyerclass = m.GetString("buyerclass")
-		hasBuyerTel, hasWinnerTel = m.GetString("buyertel"), m.GetString("winnertel")
-		notkey = m.GetString("notkey")
-		city = m.GetString("city")
-		//P492招标采购搜索匹配采购单位等优化
-		buyer = m.GetString("buyer")   //采购单位
-		winner = m.GetString("winner") //中标企业
-		agency = m.GetString("agency") //招标代理机构
-		bwa = buyer != "" || winner != "" || agency != ""
-	}
-	// p329  非反爬白名单用户不放开  需要处理通用词
-	onList, _ := jyutil.IsOnTheWhitelist(m.Session())
-	searchValueString := m.GetString("searchvalue")
-	if !onList && len(industry) == 0 {
-		searchValueString = jyutil.FilterGeneric(searchValueString)       // 关键词处理通用词
-		additionalWords = jyutil.AdditionalFilterGeneric(additionalWords) // 附加词处理通用词
-	}
-	b_word, a_word, s_word := jy.InterceptSearchKW(searchValueString, util.IntAllDef(config.Sysconfig["keywordsLimit"], 35), len(industry) == 0)
-	//放开用户不输入关键词可搜索 --P297需求
-	// p329 反爬白名单用户放开  非反爬白名单用户不放开  未输入关键词
-	//P492招标采购搜索匹配采购单位等优化--采购单位 || 中标企业 || 招标代理机构 有任何一个都可以进行搜索
-	if len(s_word) > 0 || (len(s_word) >= 0 && onList) || len(industry) > 0 || strings.TrimSpace(additionalWords) != "" || bwa || len(mobileTag) > 0 {
-		searchLimit := public.IsSearchLimit(queryItems)
-		//未登录用户标题、正文都限制,已登录用户只限制正文
-		if userId == "" {
-			searchLimit = true
-		}
-		//全文检索限制
-		if searchLimit {
-			//limitFlag = public.Lst.Flag
-			isLimit = public.Lst.IsLimited(m.Request, m.ResponseWriter, m.Session(), isPayedUser)
-
-			if isLimit == 1 { //没有被限制
-				defer public.Lst.Limit()
-			}
-		}
-		if isLimit == 1 {
-			searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
-			so := NewSearchOptimize(mobileTag, userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
-			if so.PageNum < 0 && so.PageSize < 0 {
-				log.Printf("查询参数超出范围,有可能是异常请求; 用户id:%s;用户手机号:%s \n", userId, phone)
-			} else {
-				m.SetSession("selectType", so.SelectType)
-				heightKeys = so.HeightKeys
-				count, total, list = so.GetBidSearchList(false)
-				if total < util.Int64All(config.Sysconfig["precisionNum"]) && so.SearchMode == 0 && so.KeyWords != "" {
-					soBlur := NewSearchOptimize(mobileTag, userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, 1, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
-					bCount = soBlur.FuzzySearchNumber()
-				}
-			}
-		}
-	} else {
-		searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
-		so := NewSearchOptimize(mobileTag, userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
-		list, count, total = so.GetBidSearchListByCache()
-	}
-	if userId == "" {
-		for _, v := range list {
-			*v = SearchFilter(*v)
-		}
-	}
-
-	m.ServeJson(map[string]interface{}{
-		"limitFlag":          false,
-		"status":             isLimit,
-		"list":               list,
-		"count":              count,
-		"bCount":             bCount,
-		"total":              total,
-		"totalPage":          (count + 1) / int64(pageSize),
-		"interceptOtherWord": a_word,                                                //截取后 用于提示的关键词
-		"interceptKeyWords":  b_word,                                                //超出限制长度 截取后的关键词
-		"interceptLimit":     util.IntAllDef(config.Sysconfig["keywordsLimit"], 35), //限制额度
-		"keywords":           m.GetString("searchvalue"),                            //关键词
-		"heightWords":        heightKeys,                                            //需要高亮的关键词词组  主关键词和附加词合并
-	})
-}
+//func (m *Front) PcAjaxReq() {
+//	territorialization := m.GetString("bid_field") // 领域类型 0101- 医疗
+//	tabularflag := m.GetString("tabularflag")
+//	sessVal := m.Session().GetMultiple()
+//	userId := util.ObjToString(sessVal["userId"])
+//	accountId := util.Int64All(sessVal["accountId"])
+//	entAccountId := util.Int64All(sessVal["entAccountId"])
+//	entId := util.Int64All(sessVal["entId"])
+//	entUserId := util.Int64All(sessVal["entUserId"])
+//	phone := util.ObjToString(sessVal["phone"])
+//	currentPage, _ := m.GetInteger("pageNumber")
+//	pageSize, _ := m.GetInteger("pageSize")
+//	mobileTag := m.GetSlice("mobileTag[]") //P513中国移动定制招标采购搜索
+//
+//	if pageSize == 0 {
+//		pageSize = 50
+//	}
+//	//userId = "63c11681800b227df5874680"//免费
+//	//userId = "63d5cc0098f6fae01592ea7f" //付费
+//	if tabularflag == "Y" && userId == "" {
+//		//判断用户是否登录进行表格查询,否则返回基本数据
+//		tabularflag = ""
+//	}
+//	userInfo := jy.GetVipState(m.Session(), *config.Middleground, userId)
+//	if territorialization != "" && territorialization != "BIProperty" { // 如果是领域化数据 判断是否是付费用户 是否有权限 ,也不是物业产品
+//		if (userInfo.BigMember <= 0 && userInfo.VipState <= 0) || (!jy.HasBidFieldPower(config.Middleground, m.Session(), MedicalFunctionCode)) {
+//			m.ServeJson(map[string]interface{}{
+//				"list": []map[string]interface{}{},
+//			})
+//			return
+//		}
+//	}
+//	if len(mobileTag) > 0 { //当无该权限,把此字段置空
+//		if !jy.HasBidFieldPower(config.Middleground, m.Session(), MobileTagSearchFunctionCode) {
+//			mobileTag = []string{}
+//		} else if mobileTag[0] == "all" {
+//			mobileTag = mobileTagItemsValOptionsAll
+//		}
+//	}
+//	area := m.GetString("area")
+//	district := m.GetString("district")
+//	subtype := m.GetString("subtype")
+//	toptype := m.GetString("toptype") //信息类型
+//	publishtime := m.GetString("publishtime")
+//	selectType := m.GetString("selectType")
+//	if selectType == "" {
+//		selectType = "title,content"
+//	}
+//	searchGroup, _ := m.GetInteger("searchGroup") //搜索分组;默认0:全部;1:招标采购搜索;2:超前项目。
+//	//物业版本参数接收
+//	//地区
+//	//到期时间
+//	expireTime := m.GetString("expireTime")
+//	//物业业态 propertyForm
+//	propertyForm := m.GetString("propertyForm")
+//	//业务类型  subinformation
+//	subinformation := m.GetString("subinformation")
+//	//合同周期 period
+//	period := m.GetString("period")
+//	//价格区间 scale
+//	scale := m.GetString("scale")
+//	//价格区间 scale
+//	isfile, _ := m.GetInteger("isfile")
+//	//换手率 changehand
+//	changehand, _ := m.GetInteger("changehand")
+//	if userId == "" {
+//		//未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
+//		// p397 未登录用户收回查看拟建权限
+//		if searchGroup < 2 { //p415 超前项目支持未登录搜索
+//			if strings.Contains(subtype, "采购意向") || strings.Contains(subtype, "拟建") {
+//				var ss []string
+//				for _, v := range strings.Split(subtype, ",") {
+//					if v != "采购意向" && !strings.Contains(v, "拟建") {
+//						ss = append(ss, v)
+//					}
+//				}
+//				subtype = strings.Join(ss, ",")
+//			}
+//			if subtype == "" {
+//				subtype = "招标预告,招标公告,招标结果,招标信用信息"
+//			}
+//		}
+//		//未登录用户搜索范围 标题和 正文
+//		var selectTypeArr []string
+//		selectTypeSplit := strings.Split(selectType, ",")
+//		// 未登录用户只能搜标题和正文
+//		for i := 0; i < len(selectTypeSplit); i++ {
+//			if selectTypeSplit[i] == "title" || selectTypeSplit[i] == "content" {
+//				selectTypeArr = append(selectTypeArr, selectTypeSplit[i])
+//			}
+//		}
+//		if len(selectTypeArr) > 0 {
+//			selectType = strings.Join(selectTypeArr, ",")
+//		}
+//		if publishtime != "" {
+//			publishtime = ""
+//		}
+//	}
+//	industry := strings.TrimSpace(m.GetString("industry"))
+//	minprice := m.GetString("minprice")               //最低价格
+//	maxprice := m.GetString("maxprice")               //最高价格
+//	fileExists := m.GetString("fileExists")           //是否有附件--所有用户都可用此功能 0:全部;1:有附件;-1:无附件
+//	searchMode, _ := m.GetInteger("searchMode")       //搜索模式;默认0:精准模式(不进行系统分词);1:模糊模式(进行系统分词)。
+//	wordsMode, _ := m.GetInteger("wordsMode")         //搜索关键词模式;默认0:包含所有关键词;1:包含任意关键词。
+//	additionalWords := m.GetString("additionalWords") //关键词:附加关键词(副:五组,每组最多15个字符 每组,号隔开)
+//	var (
+//		//高级筛选 仅付费用户可查询
+//		hasBuyerTel, hasWinnerTel string //是否有采购单位电话、是否有中标单位电话 y:有 n:没有
+//		buyerclass                string //采购单位类别
+//		notkey                    string //排除词
+//		isPayedUser               bool
+//		queryItems                []string
+//		city                      string //城市
+//		count, total, bCount      int64
+//		isLimit                   = 1
+//		list                      []*map[string]interface{}
+//		heightKeys                string //需要高亮的关键词
+//		//P492招标采购搜索匹配采购单位等优化
+//		buyer  string //采购单位
+//		winner string //中标企业
+//		agency string //招标代理机构
+//		bwa    bool
+//	)
+//	queryItems = userInfo.GetQueryItems(selectType, util.Int64All(config.Sysconfig["bidSearchOldUserLimit"]))
+//	isPayedUser = userInfo.IsPayedUser()
+//	if isPayedUser {
+//		buyerclass = m.GetString("buyerclass")
+//		hasBuyerTel, hasWinnerTel = m.GetString("buyertel"), m.GetString("winnertel")
+//		notkey = m.GetString("notkey")
+//		city = m.GetString("city")
+//		//P492招标采购搜索匹配采购单位等优化
+//		buyer = m.GetString("buyer")   //采购单位
+//		winner = m.GetString("winner") //中标企业
+//		agency = m.GetString("agency") //招标代理机构
+//		bwa = buyer != "" || winner != "" || agency != ""
+//	}
+//	// p329  非反爬白名单用户不放开  需要处理通用词
+//	onList, _ := jyutil.IsOnTheWhitelist(m.Session())
+//	searchValueString := m.GetString("searchvalue")
+//	if !onList && len(industry) == 0 {
+//		searchValueString = jyutil.FilterGeneric(searchValueString)       // 关键词处理通用词
+//		additionalWords = jyutil.AdditionalFilterGeneric(additionalWords) // 附加词处理通用词
+//	}
+//	b_word, a_word, s_word := jy.InterceptSearchKW(searchValueString, util.IntAllDef(config.Sysconfig["keywordsLimit"], 35), len(industry) == 0)
+//	//放开用户不输入关键词可搜索 --P297需求
+//	// p329 反爬白名单用户放开  非反爬白名单用户不放开  未输入关键词
+//	//P492招标采购搜索匹配采购单位等优化--采购单位 || 中标企业 || 招标代理机构 有任何一个都可以进行搜索
+//	if len(s_word) > 0 || (len(s_word) >= 0 && onList) || len(industry) > 0 || strings.TrimSpace(additionalWords) != "" || bwa || len(mobileTag) > 0 {
+//		searchLimit := public.IsSearchLimit(queryItems)
+//		//未登录用户标题、正文都限制,已登录用户只限制正文
+//		if userId == "" {
+//			searchLimit = true
+//		}
+//		//全文检索限制
+//		if searchLimit {
+//			//limitFlag = public.Lst.Flag
+//			isLimit = public.Lst.IsLimited(m.Request, m.ResponseWriter, m.Session(), isPayedUser)
+//
+//			if isLimit == 1 { //没有被限制
+//				defer public.Lst.Limit()
+//			}
+//		}
+//		if isLimit == 1 {
+//			searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
+//			so := NewSearchOptimize(mobileTag, userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
+//			if so.PageNum < 0 && so.PageSize < 0 {
+//				log.Printf("查询参数超出范围,有可能是异常请求; 用户id:%s;用户手机号:%s \n", userId, phone)
+//			} else {
+//				m.SetSession("selectType", so.SelectType)
+//				heightKeys = so.HeightKeys
+//				count, total, list = so.GetBidSearchList(false)
+//				if total < util.Int64All(config.Sysconfig["precisionNum"]) && so.SearchMode == 0 && so.KeyWords != "" {
+//					soBlur := NewSearchOptimize(mobileTag, userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, 1, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
+//					bCount = soBlur.FuzzySearchNumber()
+//				}
+//			}
+//		}
+//	} else {
+//		searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
+//		so := NewSearchOptimize(mobileTag, userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
+//		list, count, total = so.GetBidSearchListByCache()
+//	}
+//	if userId == "" {
+//		for _, v := range list {
+//			*v = SearchFilter(*v)
+//		}
+//	}
+//
+//	m.ServeJson(map[string]interface{}{
+//		"limitFlag":          false,
+//		"status":             isLimit,
+//		"list":               list,
+//		"count":              count,
+//		"bCount":             bCount,
+//		"total":              total,
+//		"totalPage":          (count + 1) / int64(pageSize),
+//		"interceptOtherWord": a_word,                                                //截取后 用于提示的关键词
+//		"interceptKeyWords":  b_word,                                                //超出限制长度 截取后的关键词
+//		"interceptLimit":     util.IntAllDef(config.Sysconfig["keywordsLimit"], 35), //限制额度
+//		"keywords":           m.GetString("searchvalue"),                            //关键词
+//		"heightWords":        heightKeys,                                            //需要高亮的关键词词组  主关键词和附加词合并
+//	})
+//}
 
 // PcAjaxReq_bak  ajax分页请求 备份
 func (m *Front) PcAjaxReq_Bak() {

+ 10 - 0
src/jfw/front/ws_dataExport.go

@@ -113,6 +113,16 @@ func (w *WsDataExport) WxToOrderDetail() error {
 				}
 			}
 			filter.MinPrice = public.GetPriceDes_SieveCondition(filter.MinPrice, filter.MaxPrice)
+			// 处理行业其他
+			tmpIndustry := []string{}
+			for i := 0; i < len(filter.Industry); i++ {
+				cIndustry := filter.Industry[i]
+				if strings.Contains(cIndustry, "其它") {
+					continue
+				}
+				tmpIndustry = append(tmpIndustry, cIndustry)
+			}
+			filter.Industry = tmpIndustry
 			orderDetail["filter"] = filter
 		} else {
 			log.Println("筛选条件-关键词-结构体反序列化-错误", err)

+ 5 - 0
src/jfw/front/wx_dataExport.go

@@ -1,6 +1,7 @@
 package front
 
 import (
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -152,6 +153,10 @@ func (w *WxDataExport) SaveData() error {
 			industry = ""
 		} else {
 			industryArr = strings.Split(industry, " ")
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(industry); len(qt) > 0 {
+				industryArr = append(industryArr, qt...)
+			}
 		}
 	}
 	if subType != "" {

+ 5 - 0
src/jfw/modules/app/src/app/front/dataExport.go

@@ -1,6 +1,7 @@
 package front
 
 import (
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -155,6 +156,10 @@ func (w *WxDataExport) SaveData() error {
 			industry = ""
 		} else {
 			industryArr = strings.Split(industry, " ")
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(industry); len(qt) > 0 {
+				industryArr = append(industryArr, qt...)
+			}
 		}
 	}
 	if subType != "" {

+ 10 - 0
src/jfw/modules/app/src/app/front/ws_dataExport.go

@@ -475,6 +475,16 @@ func (m *WsDataExport) ToOrderDetail() error {
 				}
 			}
 			filter.MinPrice = public.GetPriceDes_SieveCondition(filter.MinPrice, filter.MaxPrice)
+			// 处理行业其他
+			tmpIndustry := []string{}
+			for i := 0; i < len(filter.Industry); i++ {
+				cIndustry := filter.Industry[i]
+				if strings.Contains(cIndustry, "其它") {
+					continue
+				}
+				tmpIndustry = append(tmpIndustry, cIndustry)
+			}
+			filter.Industry = tmpIndustry
 			orderDetail["filter"] = filter
 		} else {
 			log.Println("筛选条件-关键词-结构体反序列化-错误", err)

+ 3 - 0
src/jfw/modules/app/src/app/jyutil/activity.go

@@ -4,6 +4,7 @@ import (
 	"app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/redis"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/public"
 	"bp.jydev.jianyu360.cn/BaseService/entManageApplication/entity"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
@@ -142,6 +143,7 @@ func GiveVip(mgoUserId string, positionId string, ua string) {
 			Cycleunit:  3,
 			Badge:      "give",
 			NewBuyset:  buyset,
+			Source:     "p583激活短信",
 		}
 		filterStr, _ = json.Marshal(filter)
 		orderChannel = func() (way string) {
@@ -196,6 +198,7 @@ func GiveVip(mgoUserId string, positionId string, ua string) {
 			PositionId: positionId,
 			AppId:      "10000",
 		})
+		jy.ClearBigVipUserPower(positionId)
 	}
 
 }

+ 1 - 0
src/jfw/modules/app/src/app/tag/ad.go

@@ -89,6 +89,7 @@ func Ad(sCode string, n int, host, sessionId string) []jy.AdInfo {
 				"accountId":    jyS.AccountId,
 				"positionId":   jyS.PositionId,
 				"userId":       jyS.UserId,
+				"mgoUserId":    jyS.MgoUserId,
 			}, *config.Middleground)
 			if baseInfo != nil && baseInfo.Uid != "" {
 				isLogin = true

+ 1 - 1
src/jfw/modules/app/src/go.mod

@@ -5,7 +5,7 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240412015757-6d8429bb4dae
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.21.10
+	app.yhyue.com/moapp/jypkg v1.22.3
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20231226074509-942d80dc34eb
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.18
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67

+ 2 - 2
src/jfw/modules/app/src/go.sum

@@ -22,8 +22,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240412015757-6d8429bb4dae/go.mod h1:XHNATN6t
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.21.10 h1:mzn1BB95aNc+xb7+6DGLTCdZNbBCSKvDvkYm6H1abrk=
-app.yhyue.com/moapp/jypkg v1.21.10/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
+app.yhyue.com/moapp/jypkg v1.22.3 h1:iD5eC6JuF4eQV80lvTu3/D4qZeuogWpW4XkCG9TKO9Y=
+app.yhyue.com/moapp/jypkg v1.22.3/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=

+ 2 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js

@@ -710,6 +710,8 @@ var vNode = {
             if (res.data.list && $.isArray(res.data.list)) {
               try {
                 res.data.list.forEach(function (item) {
+                  // 优先展示城市,无城市展示省份
+                  item.area = item.city || item.area || ''
                   item.visited = visitedPath.pathVisited(
                     new VisitedPathItem(
                       '/article/content/*.html',

+ 13 - 3
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/set_industry.js

@@ -11,12 +11,13 @@ var vNode = {
                 '监理咨询',
                 '材料设备',
                 '机电安装',
+                '其他'
             ],
             '水利水电': [
                 '水利工程',
                 '发电工程',
                 '航运工程',
-                '其他工程',
+                '其他工程'
             ],
             '能源化工': [
                 '原材料',
@@ -25,11 +26,13 @@ var vNode = {
                 '设备物资',
                 '化工产品',
                 '设备',
+                '其他'
             ],
             '弱电安防': [
                 '综合布线',
                 '智能系统',
-                '智能家居'
+                '智能家居',
+                '其他'
             ],
             '信息技术': [
                 '系统集成及安全',
@@ -43,6 +46,7 @@ var vNode = {
                 '专业设备',
                 '办公用品',
                 '生活用品',
+                '其他'
             ],
             '机械设备': [
                 '矿山机械',
@@ -63,12 +67,14 @@ var vNode = {
                 '设备',
                 '耗材',
                 '药品',
+                '其他'
             ],
             '市政设施': [
                 '道路',
                 '绿化',
                 '线路管网',
-                '综合项目'
+                '综合项目',
+                '其他'
             ],
             '服务采购': [
                 '法律咨询',
@@ -84,7 +90,11 @@ var vNode = {
                 '生产物资',
                 '生产设备',
                 '相关服务',
+                '其他'
             ],
+            '其他': [
+              '其他'
+            ]
         },
         // 页面中循环的数据
         industryListMap: [],

+ 2 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js

@@ -760,6 +760,8 @@ var vNode = {
                 that.dt.list = []
                 try {
                   res.data.list.forEach(function (item) {
+                    // 优先展示城市,无城市展示省份
+                    item.area = item.city || item.area || ''
                     item.visited = visitedPath.pathVisited(
                       new VisitedPathItem(
                         '/article/content/*.html',

+ 9 - 3
src/jfw/modules/app/src/web/templates/dataExport/dataExport.html

@@ -950,8 +950,14 @@
                     arr.push(industry[i]);
                     break
                 }
-                var str = industry[i].split("_")[1];
-                arr.push(str)
+                var str = industry[i].split("_")[1] !== '其他' ? industry[i].split("_")[1] : industry[i];
+                if(str) {
+                  if(industry[i] === '其他_其他') {
+                    arr.push('其他')
+                  } else {
+                    arr.push(str)
+                  }
+                }
             }
             $("#industry").text(arr.toString().replace(/,/g, " "));
             $(".confirm").hide();
@@ -1343,7 +1349,7 @@
                 city = localStorage.city;
             }
             if (localStorage.industry !== undefined && localStorage.industry !== "") {
-                industry = localStorage.industry;
+                industry = localStorage.industry.replace(/其他_其他/g, '其他');
             }
             if (localStorage.buyclass !== undefined && localStorage.buyclass !== "") {
                 var text = JSON.parse(localStorage.buyclass) == [] ? '全部' : JSON.parse(localStorage.buyclass).toString()

+ 13 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_industry.html

@@ -48,6 +48,7 @@
                     <dd data-value="建筑工程_勘察设计">勘察设计</dd>
                     <dd data-value="建筑工程_监理咨询">监理咨询</dd>
                     <dd data-value="建筑工程_机电安装">机电安装</dd>
+                    <dd data-value="建筑工程_其他">其他</dd>
                     </dl>
                     </li>
                     <li>
@@ -67,6 +68,7 @@
                             <dd data-value="能源化工_新能源">新能源</dd>
                             <dd data-value="能源化工_设备物资">设备物资</dd>
                             <dd data-value="能源化工_化工产品">化工产品</dd>
+                            <dd data-value="能源化工_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -75,6 +77,7 @@
                             <dd data-value="弱电安防_综合布线">综合布线</dd>
                             <dd data-value="弱电安防_智能系统">智能系统</dd>
                             <dd data-value="弱电安防_智能家居">智能家居</dd>
+                            <dd data-value="弱电安防_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -94,6 +97,7 @@
                     <dd data-value="行政办公_生活用品">生活用品</dd>
                     <dd data-value="行政办公_通用办公设备">通用办公设备</dd>
                     <dd data-value="行政办公_办公家具">办公家具</dd>
+                    <dd data-value="行政办公_其他">其他</dd>
                     </dl>
                     </li>
                     <li>
@@ -123,6 +127,7 @@
                     <dd data-value="医疗卫生_设备">设备</dd>
                     <dd data-value="医疗卫生_耗材">耗材</dd>
                     <dd data-value="医疗卫生_药品">药品</dd>
+                    <dd data-value="医疗卫生_其他">其他</dd>
                     </dl>
                     </li>
                     <li>
@@ -132,6 +137,7 @@
                             <dd data-value="市政设施_绿化">绿化</dd>
                             <dd data-value="市政设施_线路管网">线路管网</dd>
                             <dd data-value="市政设施_综合项目">综合项目</dd>
+                            <dd data-value="市政设施_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -153,8 +159,15 @@
                     <dd data-value="农林牧渔_生产物资">生产物资</dd>
                     <dd data-value="农林牧渔_生产设备">生产设备</dd>
                     <dd data-value="农林牧渔_相关服务">相关服务</dd>
+                    <dd data-value="农林牧渔_其他">其他</dd>
                     </dl>
                     </li>
+                    <li>
+                      <dl>
+                        <dt>其他</dt>
+                        <dd data-value="其他_其他">其他</dd>
+                      </dl>
+                    </li>
                 </ul>
             </div>
         </div>

+ 3 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_toOrderDetail.html

@@ -281,9 +281,11 @@
                     for (var i = 0; i < industry.length; i++) {
                         var d = industry[i];
                         if (d && d.split("_").length == 2) {
+                          if (d.split("_")[1] !== '其他') {
                             d = d.split("_")[1];
+                          }
                         } else {
-                            d = "";
+                            d = industry[i];
                         }
                         industryHtml += "<span>" + d + "&nbsp</span>";
                     }

+ 1 - 1
src/jfw/modules/app/src/web/templates/vipsubscribe/keyWord.html

@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="zh-CN">
+<html lang="zh-CN" style="font-size: 50px;">
 
 <head>
     {{include "/common/meta.html"}}

+ 13 - 1
src/jfw/modules/bigmember/src/entity/marketAnalysis/marketAnalysisEntity.go

@@ -6,6 +6,7 @@ import (
 	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/redis"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -207,6 +208,12 @@ func (mae *MarketAnalysisEntity) ForMatData() error {
 				farr = append(farr, fmt.Sprintf("%s_%s", name, vv))
 			}
 		}
+		if len(farr) > 0 {
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(strings.Join(farr, ",")); len(qt) > 0 {
+				farr = append(farr, qt...)
+			}
+		}
 		mae.FormatParam.Industry = farr
 	}
 	//格式化类型
@@ -515,11 +522,16 @@ func (mae *MarketAnalysisEntity) GetRecordList(pageNum, PageSize int, positionTy
 		if marketProfile = idMap[mongodb.BsonIdToSId(row["_id"])]; marketProfile != nil && qutil.IntAll(marketProfile["project_count"]) > 0 && status == 1 {
 			isDownload = true
 		}
+		//P510  回显 移除 其它
+		industry := qutil.ObjToString(row["s_industry"])
+		if industry != "" {
+			industry = strings.ReplaceAll(industry, "\"其它\"", "")
+		}
 		data := map[string]interface{}{
 			"id":               util.EncodeId(mongodb.BsonIdToSId(row["_id"])),
 			"keysItems":        qutil.ObjToString(row["s_keysItems"]),
 			"area":             qutil.ObjToString(row["s_area"]),
-			"industry":         qutil.ObjToString(row["s_industry"]),
+			"industry":         industry,
 			"buyerclass":       qutil.ObjToString(row["s_buyerClass"]),
 			"rangeTime":        qutil.ObjToString(row["s_rangeTime"]),
 			"s_rangeTimeExtra": qutil.ObjToString(row["s_rangeTimeExtra"]),

+ 7 - 0
src/jfw/modules/bigmember/src/entity/portraitWinnerSearch.go

@@ -568,3 +568,10 @@ func (ftb *winnerFistAndTopBuyer) formatData(limit int) (topReturn []map[string]
 	}
 	return topShow
 }
+func GetEntNameById(entId string) (name string) {
+	rData := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query":{"bool":{"must":[{"terms":{"id":["%s"]}}]}},"_source":["company_name"],"size":%d}`, entId, 1))
+	if rData == nil || len(*rData) == 0 {
+		return
+	}
+	return qutil.ObjToString((*rData)[0]["company_name"])
+}

+ 5 - 5
src/jfw/modules/bigmember/src/entity/portrait_screen.go

@@ -293,8 +293,8 @@ func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]inte
 		total = -1
 	}
 	start, limit := (pwp.PageNum-1)*pwp.PageSize, pwp.PageSize
-	fields := `"_id","projectname","bidamount","budget","title","publishtime","subtype","toptype","area"`
-	if start+limit <= tableShowNumLimit { //展示表格数据||pdf导出数据
+	fields := `"_id","projectname","bidamount","budget","title","publishtime","subtype","toptype","area","city","district"`
+	if start+limit <= tableShowNumLimit { //展示表格数据
 		fields += `,"bidopentime","buyer"`
 	}
 	//列表查询
@@ -419,7 +419,7 @@ func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]inter
 	}
 
 	start, limit := (pwp.PageNum-1)*pwp.PageSize, pwp.PageSize
-	fields := `"bidstatus","_id","title","subtype","projectname","publishtime","area"`
+	fields := `"bidstatus","_id","title","subtype","projectname","publishtime","area","city","district"`
 	if start+limit <= tableShowNumLimit { //表格数据
 		fields += `,"bidamount","budget","bidopentime","s_winner","entidlist"`
 	}
@@ -458,9 +458,9 @@ func (pwp *PortraitProjectScreen) FreePortraitNews(mustQueryArr []string, isWinn
 		var fields string
 		updateTime = time.Now().Unix()
 		if isWinner {
-			fields = `"_id","projectname","bidamount","budget","title","publishtime","subtype","toptype","area","bidopentime","buyer"`
+			fields = `"_id","projectname","bidamount","budget","title","publishtime","subtype","toptype","area","bidopentime","buyer","city","district"`
 		} else {
-			fields = `"bidstatus","_id","title","subtype","projectname","publishtime","area","bidamount","budget","bidopentime","s_winner","entidlist"`
+			fields = `"bidstatus","_id","title","subtype","projectname","publishtime","area","bidamount","budget","bidopentime","s_winner","entidlist","city","district"`
 		}
 		mustQueryArrStr := strings.Join(mustQueryArr, ",")
 		total = elastic.Count(biddingIndex, biddingIndex, fmt.Sprintf(NewMustSearch, mustQueryArrStr, ""))

+ 4 - 4
src/jfw/modules/bigmember/src/go.mod

@@ -1,13 +1,13 @@
 module jy/src/jfw/modules/bigmember/src
 
-go 1.19
+go 1.20
 
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240226084952-7e7b38ef8a66
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.21.10
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240603091545-83ceaad11e6b
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
+	app.yhyue.com/moapp/jypkg v1.22.2
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.18
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/gogf/gf/v2 v2.7.0
 	github.com/olivere/elastic/v7 v7.0.32

+ 19 - 6
src/jfw/modules/bigmember/src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240226084952-7e7b38ef8a66/go.mod h1:XHNATN6t
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.21.1 h1:za4ljUtoH1CoNeh953oIa9r6GJvLgS59kis0icXTbyY=
-app.yhyue.com/moapp/jypkg v1.21.1/go.mod h1:wyJeNc8I9R5799tqch7n8SEZrB0s8nmNou0brBh91w4=
+app.yhyue.com/moapp/jypkg v1.22.2 h1:JGACT09PXN/DEjDgBSwC7veHiNrSRZH73mAc9MUV5w8=
+app.yhyue.com/moapp/jypkg v1.22.2/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
@@ -31,8 +31,8 @@ bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be/go.
 bp.jydev.jianyu360.cn/BaseService/gateway v1.3.4/go.mod h1:BMLd/5wb3BIEGhnEgF9y1sJN9P5/Dw9kYsoiE9V8I9g=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2 h1:Qi8C7gZeR7+kjOtSl9ilR5HwbjCe8GO1RuotFb4+kFA=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2/go.mod h1:v8y7FCbkKEIRP4Ie9ZM8NtoRP+Fk4O3C1hnexNusYIQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240603091545-83ceaad11e6b h1:6f/if8nVoR89n7RbgFEniiUqt4QpqJNQX2kS2JJHDEM=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240603091545-83ceaad11e6b/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843 h1:u+8k/T0D6EUjj9BhI5RJdRa+8v4FZbyZhaNcm66L6Vs=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743/go.mod h1:1SQIPPL5Ya5BzQdByFKtTkXrXTWBv+PDqWIhNknLnZw=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220418005748-8ba5d936dd53/go.mod h1:E5lcDI3k4FESLxiAetCfWQTq8qfpy9cv0yN1oKoEO34=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419023723-0b32d4a41751/go.mod h1:6KL5LMEku83uRbre0W/bj5kXG2I6pJGBFtktmtp51yM=
@@ -41,8 +41,8 @@ bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.1.3 h1:lk3he0hY+8VK1/Hm+ZSlc
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.1.3/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
 bp.jydev.jianyu360.cn/BaseService/userCenter v0.0.0-20220418072311-2062bed1e700/go.mod h1:KjcrxTzM96tBc6G4B8tlLBn1lrVy5UJYF8+eTdP4xAE=
 bp.jydev.jianyu360.cn/BaseService/userCenter v0.0.0-20220421015128-4a36f3eac5c5/go.mod h1:GT0QC4aaKDuXxAvaU4G02XjCc31TU1ctqBGqxQYOfC4=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16 h1:CckcpZZs1jb76sn8b7YDJZTh30py1RymWzuj3FVO6iI=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16/go.mod h1:2V4LPtebYd1sN0xFoWF0OC8M2PCzKubVxXA0f5+stnY=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.18 h1:aJNS24p6SOAOsCMvdOF0togsiO6HxmLIExVyTjog8Io=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.18/go.mod h1:03bxckJBVCjal3uQ1loJmupbYHWRnaRC3V5LG4bgg6Y=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
@@ -852,10 +852,12 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5
 github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
 github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302 h1:uvdUDbHQHO85qeSydJtItA4T55Pw6BtAejd0APRJOCE=
+github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 github.com/alicebob/miniredis/v2 v2.17.0/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODVXVpYDRaGhWaL6I=
 github.com/alicebob/miniredis/v2 v2.22.0/go.mod h1:XNqvJdQJv5mSuVMc0ynneafpnL/zv52acZ6kqeS0t88=
 github.com/alicebob/miniredis/v2 v2.30.5/go.mod h1:b25qWj4fCEsBeAAR2mlb0ufImGC6uH3VlUfb/HS5zKg=
 github.com/alicebob/miniredis/v2 v2.32.1 h1:Bz7CciDnYSaa0mX5xODh6GUITRSx+cVhjNoOR4JssBo=
+github.com/alicebob/miniredis/v2 v2.32.1/go.mod h1:AqkLNAfUm0K07J28hnAyyQKf/x0YkCY/g5DCtuL01Mw=
 github.com/aliyun/aliyun-oss-go-sdk v2.1.6+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
@@ -885,7 +887,9 @@ github.com/bos-hieu/mongostore v0.0.2/go.mod h1:8AbbVmDEb0yqJsBrWxZIAZOxIfv/tsP8
 github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
 github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI=
 github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
+github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
 github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
+github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
 github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
 github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE=
 github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
@@ -999,6 +1003,7 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
 github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
+github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
@@ -1085,6 +1090,7 @@ github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqw
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
 github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
 github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
 github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
 github.com/go-xorm/xorm v0.7.9/go.mod h1:XiVxrMMIhFkwSkh96BW7PACl7UhLtx2iJIHMdmjh5sQ=
@@ -1132,6 +1138,7 @@ github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0L
 github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
 github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
 github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
+github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -1225,6 +1232,7 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe
 github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
+github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM=
 github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
@@ -1530,6 +1538,7 @@ github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkA
 github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw=
 github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo=
 github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
@@ -1547,6 +1556,7 @@ github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2
 github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM=
 github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM=
 github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
+github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/openzipkin/zipkin-go v0.3.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
@@ -1642,6 +1652,7 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
 github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
 github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
 github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
@@ -1759,6 +1770,7 @@ github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJB
 github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
 github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
 github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M=
+github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
 github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
 github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
 github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
@@ -2392,6 +2404,7 @@ golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
 golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
 golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM=
 golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
+golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

+ 35 - 8
src/jfw/modules/bigmember/src/service/analysis/esquery.go

@@ -902,17 +902,21 @@ func DecQueryFree(area map[string]interface{}, business_scope []ViewKeyWord, lim
 // 潜在客户和潜在竞争对手查询条件
 func PCQuery(area map[string]interface{}, industry []string, buyerclass []string, business_scope []ViewKeyWord, sort_no int, pcor string) string {
 	multi_match := `{"multi_match": {"query": %s,"type": "phrase", "fields": [%s]}}`
-	query := `{"query":{"bool":{"must":[%s],"must_not": [{"term": {"buyer": ""}}],"should":[%s],"minimum_should_match": %d}},"size": 0,%s}`
+	query := `{"query":{"bool":{"must":[%s],"must_not": [%s],"should":[%s],"minimum_should_match": %d}},"size": 0,%s}`
 	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
 	//21.1.20  为和画像保持一致  数据组要求 budget 改成 bidamount
 	query_aggs := `"aggs": {"group_field": {"terms": {"field": %s,"size": %d%s},"aggs": {"count": {"sum": {"field": "bidamount"}}}}}`
 	query_sort := `,"order": {"count": "desc"}`
 	query_bool_must := `{"terms":{"%s":[%s]}}`
-	bools := []string{}
-	musts := []string{}
-	//省份
-	areaCity := []string{}
-	citys := []string{}
+	//queryBoolMustScopeClass := `{"bool":{"should":[{"terms":{"s_subscopeclass":[%s]}},{"bool":{"must":[{"terms":{"s_topscopeclass":[%s]}},{"bool":{"must_not":[{"exists":{"field":"s_subscopeclass"}}]}}]}}],"minimum_should_match":1}}` //`{"bool":{"must":[{"terms":{"s_subscopeclass":[%s]}}]}}`
+	var (
+		bools, musts, areaCity, citys, mustNot []string
+	)
+	mustNot = append(mustNot, `{"term": {"buyer": ""}}`)
+	//musts := []string{}
+	////省份
+	//areaCity := []string{}
+	//citys := []string{}
 	if len(area) > 0 {
 		areaquery := `{"terms":{"area":[`
 		var i = 0
@@ -970,7 +974,30 @@ func PCQuery(area map[string]interface{}, industry []string, buyerclass []string
 		musts = append(musts, Buyerclass)
 	}
 	if len(industry) > 0 {
-		musts = append(musts, fmt.Sprintf(query_bool_must, "subscopeclass", `"`+strings.Join(industry, `","`)+`"`))
+		//var (
+		//	topSC []string
+		//	topQT bool
+		//)
+		//for _, sv := range industry {
+		//	if strings.Contains(sv, "其他") {
+		//		if len(strings.Split(sv, "_")) > 1 {
+		//			topSC = append(topSC, strings.Split(sv, "_")[0])
+		//		} else {
+		//			topQT = true
+		//		}
+		//	}
+		//}
+		////一级行业-其他
+		//if topQT {
+		//	mustNot = append(mustNot, `{"exists": {"field": "s_topscopeclass"}}`)
+		//}
+		//if len(topSC) > 0 {
+		//	//二级行业-其他
+		//	musts = append(musts, fmt.Sprintf(queryBoolMustScopeClass, `"`+strings.Join(industry, `","`)+`"`, `"`+strings.Join(topSC, `","`)+`"`))
+		//} else {
+		//	musts = append(musts, fmt.Sprintf(query_bool_must, "s_subscopeclass", `"`+strings.Join(industry, `","`)+`"`))
+		//}
+		musts = append(musts, fmt.Sprintf(query_bool_must, "s_subscopeclass", `"`+strings.Join(industry, `","`)+`"`))
 	}
 	boolsNum := 0
 	//should
@@ -1017,7 +1044,7 @@ func PCQuery(area map[string]interface{}, industry []string, buyerclass []string
 		query_sort = ""
 	}
 	query_aggs = fmt.Sprintf(query_aggs, query_sort)
-	qstr := fmt.Sprintf(query, strings.Join(musts, ","), strings.Join(bools, ","), boolsNum, query_aggs)
+	qstr := fmt.Sprintf(query, strings.Join(musts, ","), strings.Join(mustNot, ","), strings.Join(bools, ","), boolsNum, query_aggs)
 	log.Println("投标决策分析查询语句str:", qstr)
 	return qstr
 }

+ 9 - 2
src/jfw/modules/bigmember/src/service/analysis/potential.go

@@ -174,9 +174,16 @@ func (this *Analysis) CsORRsList() {
 				if getRes.ServiceId == 0 {
 					getRes.ServiceId = 7 //潜在客户-潜在伙伴/竞争对手
 				}
+				industry := getRes.Industry
+				if len(industry) > 0 {
+					//P510 行业:其它
+					if qt := jy.IndustryHandle(strings.Join(industry, ",")); len(qt) > 0 {
+						industry = append(industry, qt...)
+					}
+				}
 				//客户
 				if getRes.PCOR == "C" {
-					potComQ := PCQuery(getRes.Area, getRes.Industry, getRes.BuyerClass, getRes.Business_scope, getRes.Sort_no, getRes.PCOR)
+					potComQ := PCQuery(getRes.Area, industry, getRes.BuyerClass, getRes.Business_scope, getRes.Sort_no, getRes.PCOR)
 					var list []*PTComs
 					if config.Config.PotentialSwitch {
 						list = CustomersInfo(main_userId, entName, potComQ, getRes.PCOR)
@@ -217,7 +224,7 @@ func (this *Analysis) CsORRsList() {
 						},
 					}
 				} else if getRes.PCOR == "R" {
-					potRivQ := PCQuery(getRes.Area, getRes.Industry, getRes.BuyerClass, getRes.Business_scope, getRes.Sort_no, getRes.PCOR)
+					potRivQ := PCQuery(getRes.Area, industry, getRes.BuyerClass, getRes.Business_scope, getRes.Sort_no, getRes.PCOR)
 					var list []*PTComs
 					if config.Config.PotentialSwitch {
 						list = PRivals(main_userId, potRivQ, getRes.PCOR)

+ 91 - 45
src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go

@@ -142,19 +142,25 @@ func (this *EntPortrait) WinnerNewMsg() {
 		//}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
-
+		screen := &entity.PortraitScreen{
+			Ent:        entId,
+			Match:      this.GetString("match"),
+			ExactMatch: this.GetString("exactMatch") == "1",
+			MatchRange: this.GetString("matchRange"),
+			Area:       this.GetString("area"),
+			ScopeClass: this.GetString("scopeClass"),
+			TimeRange:  this.GetString("timeRange"),
+			HasPower:   hasPower,
+			BuyerClass: this.GetString("buyerClass"),
+		}
+		if screen.ScopeClass != "" {
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(screen.ScopeClass); len(qt) > 0 {
+				screen.ScopeClass = fmt.Sprintf("%s,%s", screen.ScopeClass, strings.Join(qt, ","))
+			}
+		}
 		rData, total, updateTime, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
-			Screen: &entity.PortraitScreen{
-				Ent:        entId,
-				Match:      this.GetString("match"),
-				ExactMatch: this.GetString("exactMatch") == "1",
-				MatchRange: this.GetString("matchRange"),
-				Area:       this.GetString("area"),
-				ScopeClass: this.GetString("scopeClass"),
-				TimeRange:  this.GetString("timeRange"),
-				HasPower:   hasPower,
-				BuyerClass: this.GetString("buyerClass"),
-			},
+			Screen:   screen,
 			PageNum:  pageNum,
 			PageSize: pageSize,
 		})
@@ -185,20 +191,26 @@ func (this *EntPortrait) WinnerNewMsgExport() {
 		if err != nil {
 			return nil, err
 		}
-
+		screen := &entity.PortraitScreen{
+			Ent:        entId,
+			Match:      this.GetString("match"),
+			ExactMatch: this.GetString("exactMatch") == "1",
+			MatchRange: this.GetString("matchRange"),
+			Area:       this.GetString("area"),
+			ScopeClass: this.GetString("scopeClass"),
+			TimeRange:  this.GetString("timeRange"),
+			HasPower:   hasPower,
+			BuyerClass: this.GetString("buyerClass"),
+		}
+		if screen.ScopeClass != "" {
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(screen.ScopeClass); len(qt) > 0 {
+				screen.ScopeClass = fmt.Sprintf("%s,%s", screen.ScopeClass, strings.Join(qt, ","))
+			}
+		}
 		//查询数据导出数据id列
 		pps := &entity.PortraitProjectScreen{
-			Screen: &entity.PortraitScreen{
-				Ent:        entId,
-				Match:      this.GetString("match"),
-				ExactMatch: this.GetString("exactMatch") == "1",
-				MatchRange: this.GetString("matchRange"),
-				Area:       this.GetString("area"),
-				ScopeClass: this.GetString("scopeClass"),
-				TimeRange:  this.GetString("timeRange"),
-				HasPower:   hasPower,
-				BuyerClass: this.GetString("buyerClass"),
-			},
+			Screen:   screen,
 			IsExport: true,
 			Free:     free,
 		}
@@ -230,6 +242,18 @@ func (this *EntPortrait) WinnerPortrait() {
 			return nil, err
 		}
 		entId := this.GetString("entId")
+		if userId != "" {
+			// p510 保存浏览记录
+			if userId != "" {
+				entName := entity.GetEntNameById(util.DecodeId(entId))
+				if entName != "" {
+					go func() {
+						redisKey := util.HistoryRedisKeyMap[util.TypeEntView]
+						util.SaveHistory(fmt.Sprintf("%s_%s", entName, entId), userId, redisKey)
+					}()
+				}
+			}
+		}
 		rData, err := cepm.WinnerPortraitData(&entity.PortraitScreen{
 			Ent:        util.DecodeId(entId),
 			Match:      this.GetString("match"),
@@ -362,19 +386,25 @@ func (this *EntPortrait) BuyerNewMsg() {
 		buyer := this.GetString("buyer")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
-
+		screen := &entity.PortraitScreen{
+			Ent:        buyer,
+			Match:      this.GetString("match"),
+			ExactMatch: this.GetString("exactMatch") == "1",
+			MatchRange: this.GetString("matchRange"),
+			Area:       this.GetString("area"),
+			ScopeClass: this.GetString("scopeClass"),
+			TimeRange:  this.GetString("timeRange"),
+			HasPower:   hasPower,
+		}
+		if screen.ScopeClass != "" {
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(screen.ScopeClass); len(qt) > 0 {
+				screen.ScopeClass = fmt.Sprintf("%s,%s", screen.ScopeClass, strings.Join(qt, ","))
+			}
+		}
 		//免费用户仅可查看三条记录
 		rData, total, updateTime, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
-			Screen: &entity.PortraitScreen{
-				Ent:        buyer,
-				Match:      this.GetString("match"),
-				ExactMatch: this.GetString("exactMatch") == "1",
-				MatchRange: this.GetString("matchRange"),
-				Area:       this.GetString("area"),
-				ScopeClass: this.GetString("scopeClass"),
-				TimeRange:  this.GetString("timeRange"),
-				HasPower:   hasPower,
-			},
+			Screen:   screen,
 			PageNum:  pageNum,
 			PageSize: pageSize,
 		})
@@ -402,17 +432,24 @@ func (this *EntPortrait) BuyerNewMsgExport() {
 		//}
 		buyer := this.GetString("buyer")
 		//免费用户仅可查看三十条记录
+		screen := &entity.PortraitScreen{
+			Ent:        buyer,
+			Match:      this.GetString("match"),
+			ExactMatch: this.GetString("exactMatch") == "1",
+			MatchRange: this.GetString("matchRange"),
+			Area:       this.GetString("area"),
+			ScopeClass: this.GetString("scopeClass"),
+			TimeRange:  this.GetString("timeRange"),
+			HasPower:   hasPower,
+		}
+		if screen.ScopeClass != "" {
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(screen.ScopeClass); len(qt) > 0 {
+				screen.ScopeClass = fmt.Sprintf("%s,%s", screen.ScopeClass, strings.Join(qt, ","))
+			}
+		}
 		pps := &entity.PortraitProjectScreen{
-			Screen: &entity.PortraitScreen{
-				Ent:        buyer,
-				Match:      this.GetString("match"),
-				ExactMatch: this.GetString("exactMatch") == "1",
-				MatchRange: this.GetString("matchRange"),
-				Area:       this.GetString("area"),
-				ScopeClass: this.GetString("scopeClass"),
-				TimeRange:  this.GetString("timeRange"),
-				HasPower:   hasPower,
-			},
+			Screen:   screen,
 			IsExport: true,
 			Free:     free,
 		}
@@ -479,6 +516,15 @@ func (this *EntPortrait) BuyerPortrait() {
 		if entName == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
+		if userId != "" {
+			// p510 保存浏览记录
+			if userId != "" {
+				go func() {
+					redisKey := util.HistoryRedisKeyMap[util.TypeBuyerView]
+					util.SaveHistory(entName, userId, redisKey)
+				}()
+			}
+		}
 		flag := this.GetString("flag") //分段请求标识
 		rData, err := cepm.BuyerPortraitData(&entity.PortraitScreen{
 			Ent:        entName,

+ 53 - 21
src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go

@@ -49,6 +49,18 @@ func (this *SubVipPortrait) SubVipEntDetail() {
 		if entId == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
+		if userId != "" {
+			// p510 保存浏览记录
+			if userId != "" {
+				entName := entity.GetEntNameById(entId)
+				if entName != "" {
+					go func() {
+						redisKey := util.HistoryRedisKeyMap[util.TypeEntView]
+						util.SaveHistory(fmt.Sprintf("%s_%s", entName, this.GetString("entId")), userId, redisKey)
+					}()
+				}
+			}
+		}
 		cepm, equity, err, _ := entity.CreateSubVipPortraitManager(userId, "entDetail", entId, true, this.Session())
 		if err != nil {
 			return nil, err
@@ -342,19 +354,25 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 		//if err != nil {
 		//	return nil, err
 		//}
-
+		screen := &entity.PortraitScreen{
+			Ent:        buyer,
+			Match:      this.GetString("match"),
+			ExactMatch: this.GetString("exactMatch") == "1",
+			MatchRange: this.GetString("matchRange"),
+			Area:       this.GetString("area"),
+			ScopeClass: this.GetString("scopeClass"),
+			TimeRange:  this.GetString("timeRange"),
+			HasPower:   power > 1,
+		}
+		if screen.ScopeClass != "" {
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(screen.ScopeClass); len(qt) > 0 {
+				screen.ScopeClass = fmt.Sprintf("%s,%s", screen.ScopeClass, strings.Join(qt, ","))
+			}
+		}
 		//免费用户仅可查看三条记录
 		rData, total, updateTime, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
-			Screen: &entity.PortraitScreen{
-				Ent:        buyer,
-				Match:      this.GetString("match"),
-				ExactMatch: this.GetString("exactMatch") == "1",
-				MatchRange: this.GetString("matchRange"),
-				Area:       this.GetString("area"),
-				ScopeClass: this.GetString("scopeClass"),
-				TimeRange:  this.GetString("timeRange"),
-				HasPower:   power > 1,
-			},
+			Screen:   screen,
 			PageNum:  pageNum,
 			PageSize: pageSize,
 			Free:     free,
@@ -386,17 +404,24 @@ func (this *SubVipPortrait) BuyerNewMsgExport() {
 		if err != nil {
 			return nil, err
 		}
+		screen := &entity.PortraitScreen{
+			Ent:        buyer,
+			Match:      this.GetString("match"),
+			ExactMatch: this.GetString("exactMatch") == "1",
+			MatchRange: this.GetString("matchRange"),
+			Area:       this.GetString("area"),
+			ScopeClass: this.GetString("scopeClass"),
+			TimeRange:  this.GetString("timeRange"),
+			HasPower:   power > 1,
+		}
+		if screen.ScopeClass != "" {
+			//P510 行业:其它
+			if qt := jy.IndustryHandle(screen.ScopeClass); len(qt) > 0 {
+				screen.ScopeClass = fmt.Sprintf("%s,%s", screen.ScopeClass, strings.Join(qt, ","))
+			}
+		}
 		pps := &entity.PortraitProjectScreen{
-			Screen: &entity.PortraitScreen{
-				Ent:        buyer,
-				Match:      this.GetString("match"),
-				ExactMatch: this.GetString("exactMatch") == "1",
-				MatchRange: this.GetString("matchRange"),
-				Area:       this.GetString("area"),
-				ScopeClass: this.GetString("scopeClass"),
-				TimeRange:  this.GetString("timeRange"),
-				HasPower:   power > 1,
-			},
+			Screen:   screen,
 			IsExport: true,
 			Free:     free,
 		}
@@ -461,6 +486,13 @@ func (this *SubVipPortrait) BuyerPortrait() {
 		if buyerName == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
+		// p510 保存浏览记录
+		if userId != "" {
+			go func() {
+				redisKey := util.HistoryRedisKeyMap[util.TypeBuyerView]
+				util.SaveHistory(buyerName, userId, redisKey)
+			}()
+		}
 		cepm, power, err, isFree := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyerName, false, this.Session())
 		cepm.Session = this.Session()
 		if err != nil {

+ 51 - 0
src/jfw/modules/bigmember/src/util/history.go

@@ -0,0 +1,51 @@
+package util
+
+import (
+	"app.yhyue.com/moapp/jybase/redis"
+	"fmt"
+	"strings"
+)
+
+const (
+	TypeSearch      = "1" // 标讯搜索历史记录
+	TypeEntSearch   = "2" // 企业历史搜索
+	TypeEntView     = "3" // 企业历史浏览
+	TypeBuyerSearch = "4" // 采购单位历史搜索
+	TypeBuyerView   = "5" // 采购单位历史浏览
+	RedisName       = "other"
+)
+
+var (
+	// HistoryRedisKeyMap 历史记录对应的Rediskey
+	HistoryRedisKeyMap = map[string]string{
+		TypeSearch:      "s_%s",
+		TypeEntSearch:   "history_ent_s_%s",
+		TypeEntView:     "history_ent_v_%s",
+		TypeBuyerSearch: "history_buyer_s_%s",
+		TypeBuyerView:   "history_buyer_v_%s",
+	}
+)
+
+// SaveHistory 保存历史记录
+func SaveHistory(matchKey string, userId string, redisKey string) bool {
+	redisKey = fmt.Sprintf(redisKey, userId)
+	history := redis.GetStr(RedisName, redisKey)
+	arrS := []string{}
+	arrS = strings.Split(history, ",")
+	//新增历史记录
+	if history == "" {
+		arrS = make([]string, 0)
+	}
+	for k, v := range arrS {
+		if v == strings.TrimSpace(matchKey) {
+			arrS = append(arrS[:k], arrS[k+1:]...)
+			break
+		}
+	}
+
+	arrS = append(arrS, strings.TrimSpace(matchKey))
+	if len(arrS) > 10 {
+		arrS = arrS[len(arrS)-10:]
+	}
+	return redis.Put(RedisName, redisKey, strings.Join(arrS, ","), -1)
+}

+ 3 - 3
src/jfw/modules/publicapply/src/Makefile

@@ -4,13 +4,14 @@
 NAME=publicapply_linux # 编译后文件名称
 NAME2=publicapply_linux2# 上传后的临时名称
 OUTPUT=../.output/# 编译后文件名称
-DIR="/home/jydevelop/publicapply" # 上传目录  这个是webdev环境的
+DIR="/jydata/jydevelop/publicapply" # 上传目录  这个是webdev环境的
 UserHost=root@192.168.3.240 # 用户名和地址
-DIR2="/home/jydevelop/publicapply/publicapply_linux2" # 上传后的目录
+DIR2="/jydata/jydevelop/publicapply/publicapply_linux2" # 上传后的目录
 output = ${OUTPUT}${NAME}
 
 .PHONY: obj
 obj:
+	go mod tidy
 	set GOOS=linux&go build -o ${output}
 
 .PHONY: scp_file
@@ -19,7 +20,6 @@ scp_file:
 
 .PHONY: deploy
 deploy:
-	git pull
 	make obj
 	make scp_file
 	ssh ${UserHost} 'cd ${DIR} && make rename && make reload'

+ 14 - 0
src/jfw/modules/publicapply/src/bidcollection/bidcollection_test.http

@@ -0,0 +1,14 @@
+POST http://192.168.3.240:828/publicapply/bidcoll/list
+Content-Type: application/json
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+{
+  "pagenum": 1,
+  "pagesize": 50,
+  "label": "",
+  "selectTime": "",
+  "buyerclass": "",
+  "buyerPhone": 0,
+  "winnerPhone": 0
+}
+

+ 156 - 35
src/jfw/modules/publicapply/src/bidcollection/entity/entity.go

@@ -5,6 +5,7 @@ import (
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/db"
 	"log"
+	"regexp"
 	"strconv"
 	"strings"
 
@@ -26,14 +27,22 @@ import (
 )
 
 const (
-	query          = `{"query":{"terms":{"_id":["%s"]}},"_source":["_id","subtype","s_winner","buyertel","winnertel","buyerclass","filetext"],"from":0,"size":%d}`
-	mongodb_fields = `{"_id":1,"area":1,"publishtime":1,"s_subscopeclass":1,"subtype":1,"title":1,"toptype":1,"type":1, "buyerclass":1,"budget":1,"bidamount":1,"winnertel":1,"s_winner":1,"buyertel":1,"attach_text":1}`
-	querys         = `{"query":{"terms":{"_id":["%s"]}},"_source":["_id","title","detail","area","city","publishtime","projectname","buyer","buyerclass","s_winner","bidamount","subtype","toptype","projectcode","buyertel","budget","bidopentime","agency","projectscope","winnerperson","winnertel","filetext","spidercode","site"],"from":0,"size":%d}`
+	query = `{"query":{"terms":{"_id":["%s"]}},"_source":["_id","subtype","s_winner","buyertel","winnertel","buyerclass","filetext"],"from":0,"size":%d}`
+	//mongodb_fields       = `{"_id":1,"area":1,"publishtime":1,"s_subscopeclass":1,"subtype":1,"title":1,"toptype":1,"type":1, "buyerclass":1,"budget":1,"bidamount":1,"winnertel":1,"s_winner":1,"buyertel":1,"attach_text":1}`
+	mongodbFieldBase     = `"_id":1,"title":1,"publishtime":1,"dataweight":1,"toptype":1,"subtype":1,"type":1,"area":1,"city":1,"s_subscopeclass":1,"bidamount":1,"budget":1,"buyerclass":1,"spidercode":1,"site":1,"buyer":1,"winner":1,"bidopentime":1,"district":1,"isValidFile":1` //搜索基础字段
+	mongodbFieldOfVip    = mongodbFieldBase + `,"buyertel":1,"buyerperson":1,"agency":1,"agencytel":1,"agencyperson":1,"s_winner":1,"winnertel":1,"winnerperson":1,"signendtime":1,"bidendtime":1,"projectinfo":1,"entidlist":1`                                                       //付费用户字段
+	mongodbFieldBaseStr  = `{` + mongodbFieldBase + `}`
+	mongodbFieldOfVipStr = `{` + mongodbFieldOfVip + `}`
+	querys               = `{"query":{"bool":{"must":[{"terms":{"_id":["%s"]}} %s]}},"_source":[%s],%s "from":0,"size":%d}`
+	highStr              = `  "highlight": {"pre_tags": [""],"post_tags": [""],"fields": {"detail": {"fragment_size": 115,"number_of_fragments": 1},"title": {"fragment_size": 115,"number_of_fragments": 1}}},`
+	BidSearchFieldBase   = `"_id","title","publishtime","dataweight","toptype","subtype","type","area","city","s_subscopeclass","bidamount","budget","buyerclass","spidercode","site","buyer","winner","bidopentime","district","isValidFile"` //搜索基础字段
+	BidSearchFieldOfVip  = BidSearchFieldBase + `,"buyertel","buyerperson","agency","agencytel","agencyperson","s_winner","winnertel","winnerperson","signendtime","bidendtime","projectinfo","entidlist"`                                     //付费用户字段
 )
 
 var (
 	insertCollKey  = []string{"userid", "bid", "buyerclass", "buyerinfo", "winnerinfo", "createdate"}
 	insertCollKey2 = []string{"userid", "bid", "labelid", "buyerclass", "buyerinfo", "winnerinfo", "createdate"}
+	ClearHtml      = regexp.MustCompile("<[^>]*>")
 )
 
 // 招标信息是否被收藏 并返回标签
@@ -406,31 +415,46 @@ func GetCollList(c *util.CollList, session *httpsession.Session) map[string]inte
 	if c.Pagesize != 0 {
 		pagesize_max = c.Pagesize
 	}
+	if c.Industry = strings.TrimSpace(c.Industry); c.Industry != "" {
+		//P510 行业:其它
+		if qt := jy.IndustryHandle(c.Industry); len(qt) > 0 {
+			c.Industry = fmt.Sprintf("%s,%s", c.Industry, strings.Join(qt, ","))
+		}
+	}
+	// 第一步 从tidb筛选出符合条件的  标签、收藏日期、采购单位类型、采购单位联系方式、中标单位联系方式
 	sql := util.CollListSql(c, isPay, userid)
 	log.Println(sql)
 	data := db.Mysql.SelectBySql(sql)
 	count := 0
 	result := []map[string]interface{}{}
+	esquery, idList, keyMust := "", []string{}, ""
 	if data != nil && len(*data) > 0 {
-		if c.Pagenum <= 0 {
-			c.Pagenum = 1
-		}
-		start := (c.Pagenum - 1) * pagesize_max
-		end := c.Pagenum * pagesize_max
-		if end > len(*data) {
-			end = len(*data)
-		}
-		if start < len(*data) {
-			result = (*data)[start:end]
+		// 第二步 如果筛选条件中有es的条件  需要查询出符合es条件的
+		if c.Price != "" || (c.PublishTime != "" && c.PublishTime != "all") || c.Subtype != "" || c.KeyWords != "" || c.Province != "" || c.City != "" || c.District != "" || c.Industry != "" {
+			esquery, idList, keyMust = util.CollListESQuery(c, *data)
+			*data = util.GetEsCollListId(esquery, idList)
+		}
+		if data != nil && len(*data) > 0 {
+			if c.Pagenum <= 0 {
+				c.Pagenum = 1
+			}
+			start := (c.Pagenum - 1) * pagesize_max
+			end := c.Pagenum * pagesize_max
+			if end > len(*data) {
+				end = len(*data)
+			}
+			if start < len(*data) {
+				result = (*data)[start:end]
+			}
+			count = len(*data)
 		}
-		count = len(*data)
 	}
 	haveNextPage := len(result) >= pagesize_max
 	// rdata["res"] = result
 	rdata["count"] = count
 	rdata["haveNextPage"] = haveNextPage
 	rdata["pageSize"] = pagesize_max
-	rdata["res"] = GetInfoById(db.Mgo_Bidding, db.DbConf.Mongodb.Bidding.Collection, db.DbConf.Mongodb.Bidding.Collection_change, result)
+	rdata["res"] = GetInfoById(db.Mgo_Bidding, db.DbConf.Mongodb.Bidding.Collection, db.DbConf.Mongodb.Bidding.Collection_change, result, keyMust, isPay)
 	return rdata
 }
 
@@ -467,25 +491,57 @@ func Power(session *httpsession.Session) (bool, map[string]interface{}) {
 }
 
 type InfoList struct {
-	Id              string      `json:"_id"`
-	Title           string      `json:"title"`
-	Area            string      `json:"area"`
-	Buyerclass      string      `json:"buyerclass"`
-	Type            string      `json:"type"`
-	S_subscopeclass string      `json:"s_subscopeclass"`
-	Publishtime     int64       `json:"publishtime"`
-	Budget          interface{} `json:"budget"`
-	Bidamount       interface{} `json:"bidamount"`
-	Buyer           string      `json:"buyer"`
-	S_winner        string      `json:"s_winner"`
-	Bidopentime     int64       `json:"bidopentime"`
-	FileExists      bool        `json:"fileExists"`
-	Site            string      `json:"site"`
-	Spidercode      string      `json:"spidercode"`
+	Id              string       `json:"_id"`
+	Title           string       `json:"title"`
+	Area            string       `json:"area"`
+	Buyerclass      string       `json:"buyerclass"`
+	Type            string       `json:"type"`
+	S_subscopeclass string       `json:"s_subscopeclass"`
+	Publishtime     int64        `json:"publishtime"`
+	Budget          interface{}  `json:"budget"`
+	Bidamount       interface{}  `json:"bidamount"`
+	Buyer           string       `json:"buyer"`
+	S_winner        string       `json:"s_winner"`
+	Bidopentime     int64        `json:"bidopentime"`
+	FileExists      bool         `json:"fileExists"`
+	Site            string       `json:"site"`
+	Spidercode      string       `json:"spidercode"`
+	Detail          string       `json:"detail"`
+	City            string       `json:"city"`
+	District        string       `json:"district"`
+	ProjectName     string       `json:"projectName"`
+	Projectcode     string       `json:"projectcode"`
+	BuyerTel        string       `json:"buyerTel"`
+	BuyerPerson     string       `json:"buyerPerson"`
+	Agency          string       `json:"agency"`
+	AgencyTel       string       `json:"agencyTel"`
+	AgencyPerson    string       `json:"agencyPerson"`
+	BidEndTime      int64        `json:"bidEndTime"`
+	SignEndTime     int64        `json:"signEndTime"`
+	Winner          string       `json:"winner"`
+	ProjectInfo     PInfo        `json:"projectInfo"`
+	WinnerInfoList  []WinnerInfo `json:"winnerInfo"`
+}
+
+type WinnerInfo struct {
+	Winner       string `json:"winner"`
+	WinnerTel    string `json:"winnerTel"`
+	WinnerPerson string `json:"winnerPerson"`
+	WinnerId     string `json:"winnerId"`
+}
+
+type PInfo struct {
+	ApproveCode    string `json:"approveCode"`    //项目代码
+	ApproveContent string `json:"approveContent"` //项目内容
+	ApproveDept    string `json:"approveDept"`    //审批部门
+	ApproveStatus  string `json:"approveStatus"`  //审批状态
+	ApproveTime    string `json:"approveTime"`    //审批时间
+	ProjectType    string `json:"projectType"`    //审批类型
+	ApproveNumber  string `json:"approveNumber"`  //
 }
 
 // 根据id取内容
-func GetInfoById(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, idlist []map[string]interface{}) []*InfoList {
+func GetInfoById(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, idlist []map[string]interface{}, keyMust string, isPay bool) []*InfoList {
 	var array []*InfoList
 	if len(idlist) == 0 {
 		return array
@@ -499,11 +555,17 @@ func GetInfoById(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, idlist
 		m[qu.ObjToString(v["bid"])] = true
 		es_ids = append(es_ids, qu.ObjToString(v["bid"]))
 	}
+	//  调整es语句 如果有关键词 高亮显示
 	infos := map[string]map[string]interface{}{}
 	// log.Println("es_ids:", len(es_ids))
 	if len(es_ids) > 0 {
-		log.Println("collection es-bidding query:", fmt.Sprintf(querys, strings.Join(es_ids, `","`), len(es_ids)))
-		list := elastic.Get("bidding", "bidding", fmt.Sprintf(querys, strings.Join(es_ids, `","`), len(es_ids)))
+		high := ""
+		if keyMust != "" {
+			keyMust = fmt.Sprintf(",%s", keyMust)
+			high = highStr
+		}
+		log.Println("collection es-bidding query:", fmt.Sprintf(querys, strings.Join(es_ids, `","`), keyMust, qu.If(isPay, BidSearchFieldOfVip, BidSearchFieldBase), high, len(es_ids)))
+		list := elastic.Get("bidding", "bidding", fmt.Sprintf(querys, strings.Join(es_ids, `","`), keyMust, qu.If(isPay, BidSearchFieldOfVip, BidSearchFieldBase), high, len(es_ids)))
 		if list != nil {
 			for _, v := range *list {
 				_id := qu.ObjToString(v["_id"])
@@ -522,8 +584,9 @@ func GetInfoById(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, idlist
 			mgo_ids = append(mgo_ids, _id)
 		}
 	}
+	mongoField := qu.If(isPay, mongodbFieldOfVipStr, mongodbFieldBaseStr)
 	if len(mgo_ids) > 0 {
-		list, ok := Mgo_bidding.Find(bidding, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_ids}}, nil, mongodb_fields, false, -1, -1)
+		list, ok := Mgo_bidding.Find(bidding, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_ids}}, nil, mongoField, false, -1, -1)
 		if ok && *list != nil {
 			for _, v := range *list {
 				_id := mg.BsonIdToSId(v["_id"])
@@ -542,7 +605,7 @@ func GetInfoById(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, idlist
 		}
 	}
 	if len(mgo_back_ids) > 0 {
-		list, ok := Mgo_bidding.Find(bidding_back, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_back_ids}}, nil, mongodb_fields, false, -1, -1)
+		list, ok := Mgo_bidding.Find(bidding_back, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_back_ids}}, nil, mongoField, false, -1, -1)
 		if ok && *list != nil {
 			for _, v := range *list {
 				_id := mg.BsonIdToSId(v["_id"])
@@ -561,6 +624,7 @@ func GetInfoById(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, idlist
 		if info == nil {
 			info = map[string]interface{}{}
 		}
+		// 格式化数据
 		array = append(array, InfoFormat(qu.ObjToString(v["bid"]), &info))
 	}
 	return array
@@ -568,6 +632,13 @@ func GetInfoById(Mgo_bidding mg.MongodbSim, bidding, bidding_back string, idlist
 
 // 列表单条信息格式化
 func InfoFormat(p string, info *map[string]interface{}) *InfoList {
+	//正文
+	detail := ""
+	if highlight, ok := (*info)["highlight"].(map[string][]string); ok {
+		for _, val := range highlight["detail"] {
+			detail += ClearHtml.ReplaceAllString(val, "")
+		}
+	}
 	area := qu.ObjToString((*info)["area"])
 	if area == "A" {
 		area = "全国"
@@ -599,6 +670,42 @@ func InfoFormat(p string, info *map[string]interface{}) *InfoList {
 	if _id == "" {
 		_id = qu.ObjToString((*info)["_id"])
 	}
+	winnerList := qu.ObjToString((*info)["s_winner"]) //中标企业名称集合
+	winnertel := qu.ObjToString((*info)["winnertel"])
+	if winnertel == "" &&winnerList!="" &&isbid((*info)["subtype"]) {
+		(*info)["winnertel"] = getwinnertel((*info)["s_winner"])
+	}
+	winnerInfoList := []WinnerInfo{}
+	if winnerList != "" && len(strings.Split(winnerList, ",")) > 0 {
+		for wk, wv := range strings.Split(winnerList, ",") {
+			var (
+				winnerId = ""
+			)
+			if (*info)["entidlist"] != nil {
+				if entIdList := qu.ObjArrToStringArr((*info)["entidlist"].([]interface{})); len(entIdList) > wk { //中标企业id集合
+					winnerId = entIdList[wk]
+				}
+			}
+			winnerInfoList = append(winnerInfoList, WinnerInfo{
+				Winner:       wv,                                                                                                          //中标企业 需要单独处理
+				WinnerTel:    qu.ObjToString((*info)["winnertel"]),                                                                        //中标企业联系电话
+				WinnerPerson: qu.ObjToString((*info)["winnerperson"]),                                                                     //中标企业联系人
+				WinnerId:     qu.If(winnerId != "" && len([]rune(winnerId)) > 12, encrypt.EncodeArticleId2ByCheck(winnerId), "").(string), //中标企业加密id  存在winnerId 异常的情况
+			})
+		}
+	}
+	projectInfo := PInfo{}
+	if (*info)["projectinfo"] != nil {
+		pInfo := qu.ObjToMap((*info)["projectinfo"])
+		projectInfo.ApproveCode = qu.ObjToString((*pInfo)["approvecode"])
+		projectInfo.ApproveContent = qu.ObjToString((*pInfo)["approvecontent"])
+		projectInfo.ApproveDept = qu.ObjToString((*pInfo)["approvedept"])
+		projectInfo.ApproveStatus = qu.ObjToString((*pInfo)["approvestatus"])
+		projectInfo.ProjectType = qu.ObjToString((*pInfo)["projecttype"])
+		projectInfo.ApproveNumber = qu.ObjToString((*pInfo)["approvenumber"])
+		projectInfo.ApproveTime = qu.ObjToString((*pInfo)["approvetime"])
+	}
+
 	return &InfoList{
 		Id:              encrypt.EncodeArticleId2ByCheck(_id),
 		Title:           qu.ObjToString((*info)["title"]),
@@ -615,6 +722,20 @@ func InfoFormat(p string, info *map[string]interface{}) *InfoList {
 		FileExists:      qu.If(config.Config.FileSignBool && (*info)["isValidFile"] != nil, (*info)["isValidFile"], false).(bool),
 		Site:            qu.ObjToString((*info)["site"]),
 		Spidercode:      qu.ObjToString((*info)["spidercode"]),
+		Detail:          detail,                                  // 正文
+		City:            qu.ObjToString((*info)["city"]),         // 城市
+		District:        qu.ObjToString((*info)["district"]),     // 区县
+		ProjectName:     qu.ObjToString((*info)["projectName"]),  // 项目名称
+		Projectcode:     qu.ObjToString((*info)["projectcode"]),  // 项目编号
+		BuyerTel:        qu.ObjToString((*info)["buyertel"]),     // 采购单位联系方式
+		BuyerPerson:     qu.ObjToString((*info)["buyerperson"]),  // 采购单位联系人
+		Agency:          qu.ObjToString((*info)["agency"]),       // 招标代理机构
+		AgencyTel:       qu.ObjToString((*info)["agencytel"]),    //代理机构联系电话
+		AgencyPerson:    qu.ObjToString((*info)["agencyperson"]), //代理机构联系人
+		BidEndTime:      qu.Int64All((*info)["bidendtime"]),      //投标截止日期
+		SignEndTime:     qu.Int64All((*info)["signendtime"]),     // 报名截止时间
+		Winner:          qu.ObjToString((*info)["winner"]),       //中标企业
+		WinnerInfoList:  winnerInfoList,
 	}
 }
 

+ 7 - 7
src/jfw/modules/publicapply/src/bidcollection/service/service.go

@@ -10,7 +10,7 @@ import (
 	qu "app.yhyue.com/moapp/jybase/common"
 )
 
-//招标信息是否被收藏
+// 招标信息是否被收藏
 func (this *ServiceStruct) IsCollAction() {
 	userId, _ := this.GetSession("userId").(string)
 	defer qu.Catch()
@@ -29,7 +29,7 @@ func (this *ServiceStruct) IsCollAction() {
 	this.ServeJson(r)
 }
 
-//获取标签
+// 获取标签
 func (this *ServiceStruct) GetLabelAction() {
 	userId, _ := this.GetSession("userId").(string)
 	defer qu.Catch()
@@ -42,7 +42,7 @@ func (this *ServiceStruct) GetLabelAction() {
 	this.ServeJson(r)
 }
 
-//招标信息收藏|移除收藏
+// 招标信息收藏|移除收藏
 func (this *ServiceStruct) BCAction() {
 	defer qu.Catch()
 	r := func() Result {
@@ -64,7 +64,7 @@ func (this *ServiceStruct) BCAction() {
 	this.ServeJson(r)
 }
 
-//添加或绑定标签|删除标签
+// 添加或绑定标签|删除标签
 func (this *ServiceStruct) LabelAction() {
 	defer qu.Catch()
 	r := func() Result {
@@ -86,7 +86,7 @@ func (this *ServiceStruct) LabelAction() {
 	this.ServeJson(r)
 }
 
-//收藏列表
+// 收藏列表
 func (this *ServiceStruct) CollList() {
 	defer qu.Catch()
 	r := func() Result {
@@ -107,7 +107,7 @@ func (this *ServiceStruct) CollList() {
 	this.ServeJson(r)
 }
 
-//新增标签
+// 新增标签
 func (this *ServiceStruct) AddLabel() {
 	userId, _ := this.GetSession("userId").(string)
 	defer qu.Catch()
@@ -124,7 +124,7 @@ func (this *ServiceStruct) AddLabel() {
 	this.ServeJson(r)
 }
 
-//是否有权限(超级订阅、商机管理、大会员)
+// 是否有权限(超级订阅、商机管理、大会员)
 func (this *ServiceStruct) Power() {
 	defer qu.Catch()
 	userId, _ := this.GetSession("userId").(string)

+ 21 - 0
src/jfw/modules/publicapply/src/consts/history.go

@@ -0,0 +1,21 @@
+package consts
+
+const (
+	TypeSearch      = "1" // 标讯搜索历史记录
+	TypeEntSearch   = "2" // 企业历史搜索
+	TypeEntView     = "3" // 企业历史浏览
+	TypeBuyerSearch = "4" // 采购单位历史搜索
+	TypeBuyerView   = "5" // 采购单位历史浏览
+	RedisName       = "other"
+)
+
+var (
+	// HistoryRedisKeyMap 历史记录对应的Rediskey
+	HistoryRedisKeyMap = map[string]string{
+		TypeSearch:      "s_%s",
+		TypeEntSearch:   "history_ent_s_%s",
+		TypeEntView:     "history_ent_v_%s",
+		TypeBuyerSearch: "history_buyer_s_%s",
+		TypeBuyerView:   "history_buyer_v_%s",
+	}
+)

+ 38 - 6
src/jfw/modules/publicapply/src/dataexport/service/action.go

@@ -148,19 +148,51 @@ func (des *DataExportStruct) ByCollection() {
 				}
 			}
 		} else {
-			buyerPhone, _ := des.GetInteger("buyerPhone")
-			winnerPhone, _ := des.GetInteger("winnerPhone")
-			sql := u.CollListSql(&u.CollList{
+			buyerPhone := des.GetString("buyerTel")
+			winnerPhone := des.GetString("winnerTel")
+			keyWords := des.GetString("keyWords")
+			publishTime := des.GetString("publishTime")
+			topType := des.GetString("topType")
+			subtype := des.GetString("subtype")
+			province := des.GetString("province")
+			city := des.GetString("city")
+			district := des.GetString("district")
+			industry := des.GetString("industry")
+			if industry != "" {
+				if qt := jy.IndustryHandle(industry); len(qt) > 0 {
+					industry = fmt.Sprintf("%s,%s", industry, strings.Join(qt, ","))
+				}
+			}
+			price := des.GetString("price")
+			c := u.CollList{
 				Label:       des.GetString("label"),
 				SelectTime:  des.GetString("selectTime"),
 				Buyerclass:  des.GetString("buyerclass"),
 				BuyerPhone:  buyerPhone,
 				WinnerPhone: winnerPhone,
-			}, entity.IsPay(des.Session()), userId)
+				KeyWords:    keyWords,
+				PublishTime: publishTime,
+				TopType:     topType,
+				Subtype:     subtype,
+				Province:    province,
+				City:        city,
+				District:    district,
+				Industry:    industry,
+				Price:       price,
+			}
+			sql := u.CollListSql(&c, entity.IsPay(des.Session()), userId)
 			data := db.Mysql.SelectBySql(sql)
+			esquery, idList := "", []string{}
 			if data != nil && len(*data) > 0 {
-				for _, v := range *data {
-					ids = append(ids, util.ObjToString(v["bid"]))
+				// 二次查询
+				if c.Price != "" || (c.PublishTime != "" && c.PublishTime != "all") || c.Subtype != "" || c.KeyWords != "" || c.Province != "" || c.City != "" || c.District != "" || c.Industry != "" {
+					esquery, idList, _ = u.CollListESQuery(&c, *data)
+					*data = u.GetEsCollListId(esquery, idList)
+				}
+				if data != nil && len(*data) > 0 {
+					for _, v := range *data {
+						ids = append(ids, util.ObjToString(v["bid"]))
+					}
 				}
 			}
 		}

+ 6 - 0
src/jfw/modules/publicapply/src/enterpriseSearch/service/search.go

@@ -2,7 +2,9 @@ package service
 
 import (
 	"jy/src/jfw/modules/publicapply/src/config"
+	"jy/src/jfw/modules/publicapply/src/consts"
 	"jy/src/jfw/modules/publicapply/src/enterpriseSearch/entity"
+	"jy/src/jfw/modules/publicapply/src/util"
 	"log"
 
 	. "app.yhyue.com/moapp/jybase/api"
@@ -44,6 +46,10 @@ func (esa *EnterpriseSearchAction) DoEntSearch() {
 		if vipData.Status > 0 || vipData.VipStatus > 0 {
 			entSearch.IsVip = true
 		}
+		// 存搜索记录
+		if entSearch.Match != "" && userId != "" {
+			util.SaveHistory(entSearch.Match, userId, consts.HistoryRedisKeyMap[consts.TypeEntSearch])
+		}
 		//查询
 		searchList, total, err := entSearch.DoQuery()
 		if err != nil {

+ 1 - 1
src/jfw/modules/publicapply/src/go.mod

@@ -5,7 +5,7 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240226084952-7e7b38ef8a66
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.21.11
+	app.yhyue.com/moapp/jypkg v1.22.2
 	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.20
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67

+ 1 - 0
src/jfw/modules/publicapply/src/history/consts/consts.go

@@ -0,0 +1 @@
+package consts

+ 39 - 0
src/jfw/modules/publicapply/src/history/entity/entity.go

@@ -0,0 +1,39 @@
+package entity
+
+import (
+	"app.yhyue.com/moapp/jybase/redis"
+	"fmt"
+	"jy/src/jfw/modules/publicapply/src/consts"
+	"strings"
+)
+
+func GetHistory(typeValue string, userId string) (map[string][]string, error) {
+	rs := map[string][]string{}
+	types := strings.Split(typeValue, ",")
+	for i := 0; i < len(types); i++ {
+		redisKey := consts.HistoryRedisKeyMap[types[i]]
+		if redisKey == "" {
+			return rs, fmt.Errorf("参数有误")
+		}
+		arrs := []string{}
+		values := redis.GetStr(consts.RedisName, fmt.Sprintf(redisKey, userId))
+		if values != "" {
+			arrs = strings.Split(values, ",")
+			if len(arrs) > 10 {
+				arrs = arrs[1:11]
+			}
+		}
+		if types[i] == consts.TypeSearch || types[i] == consts.TypeEntSearch || types[i] == consts.TypeBuyerSearch {
+			rs["search"] = arrs
+		} else {
+			rs["browse"] = arrs
+		}
+	}
+	return rs, nil
+}
+
+// DelHistory 删除历史记录
+func DelHistory(typeValue int, userId string) bool {
+	redisKey := consts.HistoryRedisKeyMap[fmt.Sprintf("%d", typeValue)]
+	return redis.Del(consts.RedisName, fmt.Sprintf(redisKey, userId))
+}

+ 28 - 0
src/jfw/modules/publicapply/src/history/history_test.http

@@ -0,0 +1,28 @@
+###
+POST http://127.0.0.1:828/publicapply/history/get
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+type=3
+###
+
+POST http://127.0.0.1:828/publicapply/history/del
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+type=1
+###
+
+POST http://127.0.0.1:828/publicapply/enterpriseSearch/doQuery
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+match=中原工学院&matchType=A&entArea=&entCity=&entCapital=&entType=&entStatus=&establish=&biddingArea=&entClass=&entContact=&pageSize=10&pageNum=0
+
+
+###
+POST http://127.0.0.1:828/publicapply/history/savePortrait
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+type=ent&name=中原工学院_11223333

+ 12 - 0
src/jfw/modules/publicapply/src/history/init.go

@@ -0,0 +1,12 @@
+package history
+
+import (
+	_ "jy/src/jfw/modules/publicapply/src/detail/config"
+	"jy/src/jfw/modules/publicapply/src/history/service"
+
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+)
+
+func init() {
+	xweb.AddAction(&service.History{})
+}

+ 10 - 0
src/jfw/modules/publicapply/src/history/service/action.go

@@ -0,0 +1,10 @@
+package service
+
+import "app.yhyue.com/moapp/jybase/go-xweb/xweb"
+
+type History struct {
+	*xweb.Action
+	getHistory   xweb.Mapper `xweb:"/history/get"`          // 获取历史记录
+	delHistory   xweb.Mapper `xweb:"/history/del"`          // 删除历史记录
+	savePortrait xweb.Mapper `xweb:"/history/savePortrait"` // 查看画像保存历史记录
+}

+ 82 - 0
src/jfw/modules/publicapply/src/history/service/service.go

@@ -0,0 +1,82 @@
+package service
+
+import (
+	. "app.yhyue.com/moapp/jybase/api"
+	"app.yhyue.com/moapp/jybase/common"
+	"fmt"
+	"jy/src/jfw/modules/publicapply/src/consts"
+	"jy/src/jfw/modules/publicapply/src/history/entity"
+	"jy/src/jfw/modules/publicapply/src/util"
+)
+
+// GetHistory 历史记录获取接口
+func (h *History) GetHistory() {
+	defer common.Catch()
+	r := func() Result {
+		userId := common.InterfaceToStr(h.Session().Get("userId"))
+		if userId == "" {
+			return Result{Data: nil, Error_code: -1, Error_msg: "需要登录"}
+		}
+		if h.Method() != "POST" {
+			return Result{Data: nil, Error_msg: Error_msg_1005}
+		}
+		//接收参数 	type: 1-标讯搜索历史记录  2-企业历史搜索 3-企业历史浏览 4-采购单位历史搜索 5-采购单位历史浏览
+		typeValue := h.GetString("type")
+		return NewResult(entity.GetHistory(typeValue, userId))
+	}()
+	h.ServeJson(r)
+}
+
+// DelHistory 历史记录删除接口
+func (h *History) DelHistory() {
+	defer common.Catch()
+	r := func() Result {
+		userId := common.InterfaceToStr(h.Session().Get("userId"))
+		if userId == "" {
+			return Result{Data: nil, Error_code: -1, Error_msg: "需要登录"}
+		}
+		if h.Method() != "POST" {
+			return Result{Data: nil, Error_msg: Error_msg_1005}
+		}
+		//接收参数
+		typeValue, err := h.GetInteger("type")
+		if err != nil {
+			return Result{Data: nil, Error_code: -1, Error_msg: "参数获取失败"}
+		}
+		if _, ok := consts.HistoryRedisKeyMap[fmt.Sprintf("%d", typeValue)]; !ok {
+			return Result{Data: nil, Error_code: -1, Error_msg: "无效参数"}
+		}
+		return Result{Data: entity.DelHistory(typeValue, userId)}
+
+	}()
+	h.ServeJson(r)
+}
+
+// SavePortrait 查看画像保存历史记录
+func (h *History) SavePortrait() {
+	defer common.Catch()
+	r := func() Result {
+		userId := common.InterfaceToStr(h.Session().Get("userId"))
+		if userId == "" {
+			return Result{Data: nil, Error_code: -1, Error_msg: "需要登录"}
+		}
+		if h.Method() != "POST" {
+			return Result{Data: nil, Error_msg: Error_msg_1005}
+		}
+		typeValue := h.GetString("type")
+		name := h.GetString("name")
+
+		redisKey := ""
+		switch typeValue {
+		case "buyer":
+			redisKey = consts.HistoryRedisKeyMap[consts.TypeBuyerView]
+		case "ent":
+			redisKey = consts.HistoryRedisKeyMap[consts.TypeEntView]
+		default:
+			return Result{Data: nil, Error_code: -1, Error_msg: "无效参数"}
+		}
+		return Result{Data: util.SaveHistory(name, userId, redisKey)}
+
+	}()
+	h.ServeJson(r)
+}

+ 1 - 0
src/jfw/modules/publicapply/src/main.go

@@ -29,6 +29,7 @@ import (
 
 	_ "jy/src/jfw/modules/publicapply/src/channel"
 	_ "jy/src/jfw/modules/publicapply/src/detail"
+	_ "jy/src/jfw/modules/publicapply/src/history"
 	_ "jy/src/jfw/modules/publicapply/src/shareFission"
 	_ "jy/src/jfw/modules/publicapply/src/subscribe"
 	_ "jy/src/jfw/modules/publicapply/src/subscribePush"

+ 32 - 0
src/jfw/modules/publicapply/src/util/history.go

@@ -0,0 +1,32 @@
+package util
+
+import (
+	"app.yhyue.com/moapp/jybase/redis"
+	"fmt"
+	"jy/src/jfw/modules/publicapply/src/consts"
+	"strings"
+)
+
+// SaveHistory 保存历史记录
+func SaveHistory(matchKey string, userId string, redisKey string) bool {
+	redisKey = fmt.Sprintf(redisKey, userId)
+	history := redis.GetStr(consts.RedisName, redisKey)
+	arrS := []string{}
+	arrS = strings.Split(history, ",")
+	//新增历史记录
+	if history == "" {
+		arrS = make([]string, 0)
+	}
+	for k, v := range arrS {
+		if v == strings.TrimSpace(matchKey) {
+			arrS = append(arrS[:k], arrS[k+1:]...)
+			break
+		}
+	}
+
+	arrS = append(arrS, strings.TrimSpace(matchKey))
+	if len(arrS) > 10 {
+		arrS = arrS[len(arrS)-10:]
+	}
+	return redis.Put(consts.RedisName, redisKey, strings.Join(arrS, ","), -1)
+}

+ 290 - 15
src/jfw/modules/publicapply/src/util/util.go

@@ -1,12 +1,14 @@
 package util
 
 import (
+	elastic "app.yhyue.com/moapp/jybase/es"
 	"crypto/md5"
 	"encoding/hex"
 	"encoding/json"
 	"fmt"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/db"
+	"log"
 	"regexp"
 	"strconv"
 	"strings"
@@ -19,6 +21,24 @@ import (
 )
 
 var ClearHtml = regexp.MustCompile("<[^>]*>")
+var (
+	queryBoolShould         = `{"bool":{"should":[%s],"minimum_should_match": 1}}`
+	queryBoolMustBoolShould = `{"bool":{"must":[{"range":{"bidamount":{%s}}}]}},{"bool":{"must":[{"range":{"budget":{%s}}}],"must_not":[{"range":{"bidamount":{"gte":-1}}}]}}`
+	queryBase               = `{"query":{"bool":{"must":[%s]}},"_source":["_id"],"from":0,"size":%d}`
+	gte                     = `"gte": %s`
+	lte                     = `"lte": %s`
+	queryBoolMust           = `{"bool":{"must":[{"terms":{"s_subscopeclass":[%s]}}]}}`
+	multiMatch              = `{"multi_match": {"query": "%s","type": "phrase", "fields": [%s]}}`
+	idTerms                 = `{"terms":{"_id":["%s"]}}`
+	topTypeMap              = map[string]string{
+		"招标预告":   "预告",
+		"招标公告":   "招标",
+		"招标结果":   "结果",
+		"招标信用信息": "其它",
+		"拟建项目":   "拟建",
+		"采购意向":   "采购意向",
+	}
+)
 
 // 加密
 func EncodeId(sid string) string {
@@ -49,12 +69,21 @@ type CollList struct {
 	Label       string `json:"label"`       //标签 用,分隔开
 	SelectTime  string `json:"selectTime"`  //收藏时间
 	Buyerclass  string `json:"buyerclass"`  //采购单位 用,分隔开
-	BuyerPhone  int    `json:"buyerPhone"`  //是否需要采购单位联系方式 1:需要 -1:不需要 0:未选中
-	WinnerPhone int    `json:"winnerPhone"` //是否需要中标单位联系方式 1:需要 -1:不需要 0:未选中
+	BuyerPhone  string `json:"buyerTel"`    //是否需要采购单位联系方式 y:需要
+	WinnerPhone string `json:"winnerTel"`   //是否需要中标单位联系方式 y:需要
 	Pagesize    int    `json:"pagesize"`    //每页展示数量
+	KeyWords    string `json:"keyWords"`    // 匹配标题正文  到es里面查
+	PublishTime string `json:"publishTime"` // 发布时间  到es里面查
+	TopType     string `json:"topType"`     // 信息类型-一级分类 到es里面查
+	Subtype     string `json:"subtype"`     // 信息类型-二级分类 到es里面查
+	Province    string `json:"province"`    // 项目地区_省份 到es里面查
+	City        string `json:"city"`        // 项目地区_城市 到es里面查
+	District    string `json:"district"`    // 项目地区_区县 到es里面查
+	Price       string `json:"price"`       // 金额区间 到es里面查
+	Industry    string `json:"industry"`    // 行业分类 到es里面查
 }
 
-// 搜藏列表
+// 搜藏列表-tidb 查询条件 个人标签、收藏时间、采购单位、采购单位联系方式、中标单位联系方式
 func CollListSql(c *CollList, isPay bool, userid string) string {
 	sql := fmt.Sprintf(`select bid from %s where userid ='%s'`, db.DbConf.Bdcollection, userid)
 	limit := config.BidCollConfig.FreeUserCollLimit
@@ -86,12 +115,12 @@ func CollListSql(c *CollList, isPay bool, userid string) string {
 	} else if c.SelectTime == "thisyear" { //去年
 		start = fmt.Sprint(time.Date(now.Year()-1, 1, 1, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
 		end = fmt.Sprint(time.Date(now.Year()-1, 12, 31, 23, 59, 59, 0, time.Local).Format(Date_Full_Layout))
-	} else if len(strings.Split(c.SelectTime, "_")) == 2 {
-		if c.SelectTime != "0_0" {
-			starttime := strings.Split(c.SelectTime, "_")[0]
+	} else if len(strings.Split(c.SelectTime, "-")) == 2 {
+		if c.SelectTime != "0-0" {
+			starttime := strings.Split(c.SelectTime, "-")[0]
 			startstamp, _ := strconv.Atoi(starttime)
 			start = time.Unix(int64(startstamp), 0).Format(Date_Full_Layout)
-			endtime := strings.Split(c.SelectTime, "_")[1]
+			endtime := strings.Split(c.SelectTime, "-")[1]
 			et, _ := strconv.ParseInt(endtime, 0, 64)
 			etTime := time.Unix(et, 0)
 			end = fmt.Sprint(time.Date(etTime.Year(), etTime.Month(), etTime.Day()+1, 0, 0, 0, 0, time.Local).Format(Date_Full_Layout))
@@ -123,23 +152,269 @@ func CollListSql(c *CollList, isPay bool, userid string) string {
 			}
 		}
 		//是否存在采购单位电话
-		if c.BuyerPhone == 1 {
+		if c.BuyerPhone == "y" {
 			sql += ` and buyerinfo = 1`
-		} else if c.BuyerPhone == -1 {
-			sql += ` and buyerinfo = 0`
-		}
+		} //else if c.BuyerPhone == -1 {
+		//sql += ` and buyerinfo = 0`
+		//}
 		//是否存在中标单位电话
-		if c.WinnerPhone == 1 {
+		if c.WinnerPhone == "y" { // p480二期参数调整
 			sql += ` and winnerinfo = 1`
-		} else if c.WinnerPhone == -1 {
-			sql += ` and winnerinfo = 0`
-		}
+		} // else if c.WinnerPhone == -1 {
+		//	sql += ` and winnerinfo = 0`
+		//}
 		limit = config.BidCollConfig.PayUserCollLimit
 	}
 	sql += fmt.Sprintf(` order by createdate desc limit %v`, limit)
 	return sql
 }
 
+// CollListESQuery 收藏列表es查询条件  匹配标题正 发布时间 信息类型 项目地区 金额区间
+func CollListESQuery(c *CollList, idmapList []map[string]interface{}) (qstr string, idList []string, keyMustStr string) {
+	m := map[string]struct{}{}
+	musts := []string{}
+	for _, v := range idmapList {
+		if _, ok := m[qutil.ObjToString(v["bid"])]; ok {
+			continue
+		}
+		m[qutil.ObjToString(v["bid"])] = struct{}{}
+		idList = append(idList, qutil.ObjToString(v["bid"]))
+	}
+	musts = append(musts, fmt.Sprintf(idTerms, strings.Join(idList, `","`)))
+	query := ``
+	//省份
+	area := c.Province
+	if area != "" {
+		query += `{"terms":{"area":[`
+		for k, v := range strings.Split(area, ",") {
+			if k > 0 {
+				query += `,`
+			}
+			query += `"` + v + `"`
+		}
+		query += `]}}`
+	}
+	//市--
+	city := c.City
+	if city != "" {
+		if len(query) > 0 {
+			query += ","
+		}
+		query += `{"terms":{"city":[`
+		for k, v := range strings.Split(city, ",") {
+			if k > 0 {
+				query += `,`
+			}
+			query += `"` + v + `"`
+		}
+		query += `]}}`
+	}
+	district := c.District
+	if district != "" {
+		if len(query) > 0 {
+			query += ","
+		}
+		for k, v := range strings.Split(district, ",") {
+			if k > 0 {
+				query += `,`
+			}
+			cityName := strings.Split(v, "_")[0]
+			districtName := strings.Split(v, "_")[1]
+			queryBoolMustAndDistrict := `{"bool":{"must":[{"terms":{"city":["%s"]}},{"terms":{"district":["%s"]}}]}}`
+			query += fmt.Sprintf(queryBoolMustAndDistrict, cityName, districtName)
+		}
+
+	}
+	if query != "" {
+		query = fmt.Sprintf(queryBoolShould, query)
+	}
+	//发布时间
+	publishTime := c.PublishTime
+	if publishTime != "" {
+		startTime, endTime := "", ""
+		now := time.Now()
+		switch publishTime {
+		case "lately-7":
+			startTime = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-7, 0, 0, 0, 0, time.Local).Unix())
+		case "lately-30":
+			startTime = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-30, 0, 0, 0, 0, time.Local).Unix())
+		case "thisyear":
+			startTime = fmt.Sprint(time.Date(now.Year()-1, now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second(), 0, time.Local).Unix())
+			endTime = fmt.Sprint(now.Unix())
+		case "threeyear":
+			startTime = fmt.Sprint(time.Date(now.Year()-3, now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second(), 0, time.Local).Unix())
+			endTime = fmt.Sprint(now.Unix())
+		case "fiveyear":
+			startTime = fmt.Sprint(time.Date(now.Year()-5, now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second(), 0, time.Local).Unix())
+			endTime = fmt.Sprint(now.Unix())
+		default:
+			if len(strings.Split(publishTime, "-")) > 1 {
+				startTime = strings.Split(publishTime, "-")[0]
+				endTime = strings.Split(publishTime, "-")[1]
+				//电脑端 时间选择 开始时间当天和结束时间当天相同
+				if startTime == endTime {
+					et, _ := strconv.ParseInt(endTime, 0, 64)
+					etTime := time.Unix(et, 0)
+					endTime = fmt.Sprint(time.Date(etTime.Year(), etTime.Month(), etTime.Day()+1, 0, 0, 0, 0, time.Local).Unix())
+				}
+			}
+		}
+		if startTime != "" || endTime != "" {
+			if len(query) > 0 {
+				query += ","
+			}
+			query += `{"range":{"publishtime":{`
+			if startTime != "" {
+				query += `"gte":` + startTime
+			}
+			if startTime != "" && endTime != "" {
+				query += `,`
+			}
+			if endTime != "" {
+				query += `"lt":` + endTime
+			}
+			query += `}}}`
+		}
+	}
+	//信息类型-二级
+	subtype := c.Subtype
+	topType := qutil.If(c.TopType != "", strings.Split(c.TopType, ","), []string{}).([]string)
+	allType := ``
+	//二级分类
+	if subtype != "" {
+		var typeInt = 0
+		allType += `{"terms":{"subtype":[`
+		for k, v := range strings.Split(subtype, ",") {
+			if tType := qutil.If(topTypeMap[v] != "" && c.TopType == "", topTypeMap[v], "").(string); tType != "" {
+				topType = append(topType, tType)
+				typeInt += 1
+				continue
+			}
+			if k > typeInt {
+				allType += `,`
+			}
+			allType += `"` + v + `"`
+		}
+		allType += `]}}`
+		if typeInt == len(strings.Split(subtype, ",")) {
+			allType = ``
+		}
+	}
+	//信息类型  一级分类
+	log.Println("topType:", topType)
+	if len(topType) > 0 {
+		if allType != "" {
+			allType += ","
+		}
+		allType += `{"terms":{"toptype":[`
+		for k, v := range topType {
+			if k > 0 {
+				allType += `,`
+			}
+			allType += `"` + v + `"`
+		}
+		allType += `]}}`
+	}
+
+	if allType != "" {
+		if query != "" {
+			query += ","
+		}
+		query += fmt.Sprintf(queryBoolShould, allType)
+	}
+	if query != "" {
+		musts = append(musts, query)
+	}
+	if c.KeyWords != "" {
+		var (
+			keyWordsMusts, wordsMusts []string
+		)
+		for _, v := range strings.Split(c.KeyWords, " ") {
+			if elastic.ReplaceYH(v) == "" {
+				continue
+			}
+			keyWordsMusts = append(keyWordsMusts, fmt.Sprintf(fmt.Sprintf(multiMatch, "%s", `"title","detail"`), elastic.ReplaceYH(v)))
+		}
+		//包含所有
+		wordsMusts = append(wordsMusts, keyWordsMusts...)
+		if len(wordsMusts) > 0 {
+			keyMustStr = fmt.Sprintf(elastic.NgramMust, strings.Join(wordsMusts, ","))
+			musts = append(musts, keyMustStr)
+		}
+	}
+	//行业
+	if c.Industry != "" {
+		musts = append(musts, fmt.Sprintf(queryBoolMust, `"`+strings.ReplaceAll(c.Industry, ",", `","`)+`"`))
+	}
+	//价格
+	if c.Price != "" && len(strings.Split(c.Price, "-")) > 1 {
+		minPrice, maxPrice := strings.Split(c.Price, "-")[0], strings.Split(c.Price, "-")[1]
+		if minPrice != "" || maxPrice != "" {
+			sq := ``
+			if minPrice != "" {
+				min, _ := strconv.ParseFloat(minPrice, 64)
+				minPrice = fmt.Sprintf("%.0f", min*10000)
+				if minPrice == "0" {
+					minPrice = ""
+				}
+			}
+			if maxPrice != "" {
+				max, _ := strconv.ParseFloat(maxPrice, 64)
+				maxPrice = fmt.Sprintf("%.0f", max*10000)
+				if maxPrice == "0" {
+					maxPrice = ""
+				}
+			}
+			if minPrice != "" {
+				sq += fmt.Sprintf(gte, minPrice)
+			}
+			if minPrice != "" && maxPrice != "" {
+				sq += `,`
+			}
+			if maxPrice != "" {
+				sq += fmt.Sprintf(lte, maxPrice)
+			}
+			if minPrice != "" || maxPrice != "" {
+				query_price := fmt.Sprintf(queryBoolShould, fmt.Sprintf(queryBoolMustBoolShould, sq, sq))
+				musts = append(musts, query_price)
+			}
+		}
+	}
+	qstr = fmt.Sprintf(queryBase, strings.Join(musts, ","), len(idList))
+	log.Println("qstr:", qstr)
+	return
+}
+
+// es里面的筛选条件再过滤一次id
+func GetEsCollListId(esQuery string, idList []string) (ids []map[string]interface{}) {
+	//idList 是为了最后处理有序
+	// 查询
+	rs := elastic.Get("bidding", "bidding", esQuery)
+	if rs == nil {
+		log.Println("未获取到数据")
+		return
+	}
+	idMap := map[string]struct{}{}
+	if rs != nil {
+		for _, v := range *rs {
+			_id := qutil.ObjToString(v["_id"])
+			if _, ok := idMap[_id]; !ok {
+				idMap[_id] = struct{}{}
+			}
+		}
+	}
+
+	// 获取有序数组
+	for i := 0; i < len(idList); i++ {
+		if _, ok := idMap[idList[i]]; ok {
+			ids = append(ids, map[string]interface{}{
+				"bid": idList[i],
+			})
+		}
+
+	}
+	return
+}
 func ConfirmIntArr(arr []interface{}) []int {
 	tmp := make([]int, 0)
 	for _, v := range arr {

+ 45 - 13
src/jfw/modules/subscribepay/src/entity/dataexport.go

@@ -262,16 +262,27 @@ func SendMailToBJFinance(order *map[string]interface{}, pay_time, transaction_id
 			if region == "" {
 				region = "全国"
 			}
-			var industryBuffer bytes.Buffer
-			for k, v := range sc.Industry {
-				if k > 0 {
+			var (
+				industryBuffer bytes.Buffer
+				ii             int
+			)
+			for _, v := range sc.Industry {
+				if ii > 0 {
 					industryBuffer.WriteString(" ")
 				}
+				if strings.Contains(v, "其它") {
+					continue
+				}
+				ii++
 				vs := strings.Split(v, "_")
 				if len(vs) == 1 {
 					industryBuffer.WriteString(vs[0])
 				} else {
-					industryBuffer.WriteString(vs[1])
+					if vs[1] == "其他" {
+						industryBuffer.WriteString(v)
+					} else {
+						industryBuffer.WriteString(vs[1])
+					}
 				}
 			}
 			if len(sc.Industry) > 0 {
@@ -661,19 +672,29 @@ func GetPackDataExportMailContent(filterId, download_url string) (content string
 			region = "全国"
 		}
 
-		var industryBuffer bytes.Buffer
-		for k, v := range sc.Industry {
-			if k > 0 {
+		var (
+			industryBuffer bytes.Buffer
+			ii             int
+		)
+		for _, v := range sc.Industry {
+			if ii > 0 {
 				industryBuffer.WriteString(" ")
 			}
+			if strings.Contains(v, "其它") {
+				continue
+			}
+			ii++
 			vs := strings.Split(v, "_")
 			if len(vs) == 1 {
 				industryBuffer.WriteString(vs[0])
 			} else {
-				industryBuffer.WriteString(vs[1])
+				if vs[1] == "其他" {
+					industryBuffer.WriteString(v)
+				} else {
+					industryBuffer.WriteString(vs[1])
+				}
 			}
 		}
-		// industry = industryBuffer.String()
 		if len(sc.Industry) > 0 {
 			industry = industryBuffer.String()
 		}
@@ -809,16 +830,27 @@ func GetDataExportMailContent(orderCode string) (content string, err error) {
 		if region == "" {
 			region = "全国"
 		}
-		var industryBuffer bytes.Buffer
-		for k, v := range sc.Industry {
-			if k > 0 {
+		var (
+			industryBuffer bytes.Buffer
+			ii             int
+		)
+		for _, v := range sc.Industry {
+			if ii > 0 {
 				industryBuffer.WriteString(" ")
 			}
+			if strings.Contains(v, "其它") {
+				continue
+			}
+			ii++
 			vs := strings.Split(v, "_")
 			if len(vs) == 1 {
 				industryBuffer.WriteString(vs[0])
 			} else {
-				industryBuffer.WriteString(vs[1])
+				if vs[1] == "其他" {
+					industryBuffer.WriteString(v)
+				} else {
+					industryBuffer.WriteString(vs[1])
+				}
 			}
 		}
 		if len(sc.Industry) > 0 {

+ 4 - 2
src/jfw/modules/subscribepay/src/entity/equityCode.go

@@ -26,6 +26,7 @@ type EquityCode struct {
 	Phone     string        //用户手机号
 	NickName  string        //用户昵称
 	GiftCode  int           //活动产品code
+	EquityId  int           //权益id
 	R         *http.Request //
 	OrderCode string        //订单编号
 	Sess      *httpsession.Session
@@ -55,7 +56,7 @@ func (e *EquityCode) Exchange() (msg string, b bool) {
 	//验证权益码的有效性
 	if e.Code != "" {
 		// AND state = 1 有效果权益码
-		res := util.ActivityMysql.SelectBySql(`SELECT userId,giftCode,startTime,endTime,state FROM equity_record WHERE equityCode = ? `, e.Code)
+		res := util.ActivityMysql.SelectBySql(`SELECT userId,giftCode,equityId,startTime,endTime,state FROM equity_record WHERE equityCode = ? `, e.Code)
 		if res == nil || len(*res) == 0 {
 			msg = "兑换码不存在"
 			return
@@ -73,6 +74,7 @@ func (e *EquityCode) Exchange() (msg string, b bool) {
 				return
 			}
 			e.GiftCode = qu.IntAll(r["giftCode"])
+			e.EquityId = qu.IntAll(r["equityId"])
 			//是否已被兑换
 			if r["userId"] != nil && qu.ObjToString(r["userId"]) != "" {
 				msg = "兑换码已被兑换"
@@ -162,7 +164,7 @@ type ProductInfoByEquity struct {
 
 // UseEquityCodeAndAuthority 权益码使用 并 赋权限
 func (e *EquityCode) UseEquityCodeAndAuthority() (m string, flag bool) {
-	gifts := util.ActivityMysql.SelectBySql(`SELECT a.entid,b.* FROM equity a LEFT JOIN gift b ON a.giftCode = b.giftCode WHERE a.giftCode = ?`, e.GiftCode)
+	gifts := util.ActivityMysql.SelectBySql(`SELECT a.entid,b.* FROM equity a LEFT JOIN gift b ON a.giftCode = b.giftCode WHERE a.giftCode =  ? AND a.state = 1 AND a.id = ?;`, e.GiftCode, e.EquityId)
 	if gifts != nil && len(*gifts) > 0 {
 		gift := (*gifts)[0]
 		productInfo := &ProductInfoByEquity{

+ 12 - 0
src/jfw/modules/subscribepay/src/go.mod

@@ -4,6 +4,7 @@ go 1.20
 
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240626030750-115a3c0929fb
+	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v1.21.11
 	bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2
 	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240805083653-598306c30969
@@ -59,6 +60,7 @@ require (
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
+	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
@@ -71,6 +73,7 @@ require (
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
+	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
@@ -90,7 +93,14 @@ require (
 	github.com/prometheus/procfs v0.12.0 // indirect
 	github.com/redis/go-redis/v9 v9.4.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
+	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
+	github.com/spf13/afero v1.9.3 // indirect
+	github.com/spf13/cast v1.5.0 // indirect
+	github.com/spf13/jwalterweatherman v1.1.0 // indirect
+	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/spf13/viper v1.15.0 // indirect
+	github.com/subosito/gotenv v1.4.2 // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
 	github.com/xdg-go/scram v1.1.2 // indirect
 	github.com/xdg-go/stringprep v1.0.4 // indirect
@@ -130,6 +140,8 @@ require (
 	google.golang.org/protobuf v1.33.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
+	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect

+ 23 - 0
src/jfw/modules/subscribepay/src/go.sum

@@ -18,6 +18,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20231025021840-2f91c944ecdd/go.mod h1:Hv9U/7oH
 app.yhyue.com/moapp/jybase v0.0.0-20240626030750-115a3c0929fb h1:LstR4tQbICqo2MO0A6za4rci4Y/lw+Nf898GlImARZM=
 app.yhyue.com/moapp/jybase v0.0.0-20240626030750-115a3c0929fb/go.mod h1:XHNATN6tsJKHdCB0DbUtFdPPHXexTUFyB3RlO+lUUoM=
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
+app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
+app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jypkg v1.21.11 h1:DcBNvSXKvoTNbjGu2ZgVcJowVz2Ls+iveCBekYD7UO0=
 app.yhyue.com/moapp/jypkg v1.21.11/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
@@ -998,6 +1000,7 @@ github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
 github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
+github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
@@ -1289,6 +1292,8 @@ github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b
 github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/howeyc/fsnotify v0.9.0 h1:0gtV5JmOKH4A8SsFxG2BczSeXWWPvcMT0euZt5gDAxY=
 github.com/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -1477,6 +1482,8 @@ github.com/memcachier/mc v2.0.1+incompatible/go.mod h1:7bkvFE61leUBvXz+yxsOnGBQS
 github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
 github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615/go.mod h1:Ad7oeElCZqA1Ufj0U9/liOF4BtVepxRcTvr2ey7zTvM=
 github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -1664,6 +1671,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.3 h1:DBBfY8eMYazKEJHb3JKpSPfpgd2mBCoNFlQx6C5fftU=
+github.com/sirupsen/logrus v1.8.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
 github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
 github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
@@ -1674,11 +1683,19 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd
 github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
 github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
 github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
+github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
+github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
+github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
+github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
+github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
 github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -1703,6 +1720,8 @@ github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
+github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
 github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
@@ -2212,6 +2231,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -2731,8 +2751,11 @@ gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaD
 gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
 gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

+ 18 - 2
src/jfw/modules/subscribepay/src/service/dataexportPack.go

@@ -28,6 +28,10 @@ import (
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 
+const (
+	dataExportPackRepeat = "dataExportPackRepeat_%s" // 数据导出一秒内重复请求
+)
+
 // 数据导出-数据包
 type DataExportPack struct {
 	*xweb.Action
@@ -67,8 +71,15 @@ func (des *DataExportPack) ScreenList() {
 				dataMap["city"] = strings.Join(qutil.ObjArrToStringArr(city), ",")
 				region, _ := dataMap["region"].([]interface{})
 				dataMap["region"] = strings.Join(qutil.ObjArrToStringArr(region), ",")
-				industry, _ := dataMap["industry"].([]interface{})
-				dataMap["industry"] = strings.Join(qutil.ObjArrToStringArr(industry), ",")
+				var industry []string
+				if industrys := qutil.ObjArrToStringArr(dataMap["industry"].([]interface{})); len(industrys) > 0 {
+					for _, v := range industrys {
+						if !strings.Contains(v, "其它") {
+							industry = append(industry, v)
+						}
+					}
+				}
+				dataMap["industry"] = strings.Join(industry, ",")
 				buyerclass, _ := dataMap["buyerclass"].([]interface{})
 				dataMap["buyerclass"] = strings.Join(qutil.ObjArrToStringArr(buyerclass), ",")
 				buyer, _ := dataMap["buyer"].([]interface{})
@@ -405,6 +416,11 @@ func (this *DataExportPack) Statistics() {
 func (this *DataExportPack) PackPay() {
 	userId, _ := this.GetSession("userId").(string)
 	filterId := encrypt.SE.Decode4Hex(this.GetString("filterId"))
+	key := fmt.Sprintf(dataExportPackRepeat, userId)
+	if err := util.RequestValidation("other", key); err != nil {
+		this.ServeJson(NewResult(nil, err))
+		return
+	}
 	rData, errMsg := func() (interface{}, error) {
 		//企业数据包、个人数据包流量包支付
 		//数据总量,扣除量

+ 18 - 0
src/jfw/modules/subscribepay/src/service/invoice.go

@@ -8,6 +8,7 @@ import (
 	"app.yhyue.com/moapp/jybase/go-xweb/log"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jybase/mail"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/dataexport"
 	"bytes"
 	"database/sql"
 	"encoding/json"
@@ -1360,6 +1361,23 @@ func (this *Invoice) Invoiceinfo() {
 			isCanInvoic = IsAllowInvoice(*status)
 		}
 		(*status)["is_can_invoice"] = isCanInvoic
+		filter := dataexport.SieveCondition{}
+		if (*status)["filter"] != nil {
+			err := json.Unmarshal([]byte((*status)["filter"].(string)), &filter)
+			if err == nil {
+				// 处理行业其他
+				tmpIndustry := []string{}
+				for i := 0; i < len(filter.Industry); i++ {
+					cIndustry := filter.Industry[i]
+					if strings.Contains(cIndustry, "其它") {
+						continue
+					}
+					tmpIndustry = append(tmpIndustry, cIndustry)
+				}
+				filter.Industry = tmpIndustry
+			}
+			(*status)["filter"] = filter
+		}
 		//是否存在可查看发票
 		(*status)["invoice_show"] = len(ShowList(order_code)) > 0
 		this.ServeJson(map[string]interface{}{

+ 1 - 0
src/jfw/modules/subscribepay/src/timetask/timetask.go

@@ -1153,6 +1153,7 @@ func checkDocMemberIsExpire(iy Identity) {
 						PositionId: strconv.Itoa(int(identity.PositionId)),
 						AppId:      "10000",
 					})
+					go config.Middleground.PowerCheckCenter.DelCheckRedis("10000", identity.PositionId)
 				}
 				m = make(map[string]interface{})
 			}

+ 13 - 0
src/jfw/modules/subscribepay/src/util/util.go

@@ -2,7 +2,9 @@ package util
 
 import (
 	qutil "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/compatible"
+	"fmt"
 	"strings"
 )
 
@@ -24,3 +26,14 @@ func IsMobileIOS(userAgent string) bool {
 	return mobileReg.MatchString(userAgent)
 	//return strings.Contains(userAgent, "iphone") || strings.Contains(userAgent, "ipad") || strings.Contains(userAgent, "ipod")
 }
+
+// RequestValidation 判断重复
+func RequestValidation(redisCode, repeatKey string) (err error) {
+	if ok, redisErr := redis.Exists(redisCode, repeatKey); ok && redisErr == nil {
+		err = fmt.Errorf("请求频繁 稍后再试")
+		return
+	}
+	//方式重复性请求--1秒内 允许请求一次
+	redis.Put("other", repeatKey, "REPEAT", 1)
+	return
+}

+ 1 - 0
src/jfw/tag/ad.go

@@ -75,6 +75,7 @@ func Ad(sCode string, n int, host, sessionId string) []jy.AdInfo {
 				"accountId":    jyS.AccountId,
 				"positionId":   jyS.PositionId,
 				"userId":       jyS.UserId,
+				"mgoUserId":    jyS.MgoUserId,
 			}, *config.Middleground)
 			if baseInfo != nil && baseInfo.Uid != "" {
 				isLogin = true

+ 3 - 0
src/web/staticres/big-member/js/ent_portrait.js

@@ -291,6 +291,9 @@ var vNode = {
                         _this.loading.clear()
                         _this.topProject.count = res.data.count
                         if (res.data.list && $.isArray(res.data.list)) {
+                            res.data.list.forEach((item) => {
+                              item.area = item.city || item.area || ''
+                            })
                             if (!_this.topProject.pageSign) {
                                 _this.singleTab = false
                             }

+ 12 - 2
src/web/staticres/big-member/js/set_industry.js

@@ -11,6 +11,7 @@ var vNode = {
                 '监理咨询',
                 '材料设备',
                 '机电安装',
+                '其他'
             ],
             '水利水电': [
                 '水利工程',
@@ -25,11 +26,13 @@ var vNode = {
                 '设备物资',
                 '化工产品',
                 '设备',
+                '其他'
             ],
             '弱电安防': [
                 '综合布线',
                 '智能系统',
-                '智能家居'
+                '智能家居',
+                '其他'
             ],
             '信息技术': [
                 '系统集成及安全',
@@ -43,6 +46,7 @@ var vNode = {
                 '专业设备',
                 '办公用品',
                 '生活用品',
+                '其他'
             ],
             '机械设备': [
                 '矿山机械',
@@ -63,12 +67,14 @@ var vNode = {
                 '设备',
                 '耗材',
                 '药品',
+                '其他'
             ],
             '市政设施': [
                 '道路',
                 '绿化',
                 '线路管网',
-                '综合项目'
+                '综合项目',
+                '其他'
             ],
             '服务采购': [
                 '法律咨询',
@@ -84,7 +90,11 @@ var vNode = {
                 '生产物资',
                 '生产设备',
                 '相关服务',
+                '其他'
             ],
+            '其他': [
+              '其他'
+            ]
         },
         // 页面中循环的数据
         industryListMap: [],

+ 2 - 0
src/web/staticres/common-module/big-member/js/buyer_project_news.js

@@ -457,6 +457,8 @@ var vConfig = {
         preSortList: function (list) {
             try {
                 list.forEach(function (item) {
+                    // 优先展示城市,无城市展示省份
+                    item.area = item.city || item.area || ''
                     item.visited = visitedPath.pathVisited(
                         new VisitedPathItem(
                             '/article/content/*.html',

+ 2 - 0
src/web/staticres/common-module/big-member/js/ent_project_news.js

@@ -479,6 +479,8 @@ var vConfig = {
         preSortList: function (list) {
             try {
                 list.forEach(function (item) {
+                    // 优先展示城市,无城市展示省份
+                    item.area = item.city || item.area || ''
                     item.visited = visitedPath.pathVisited(
                         new VisitedPathItem(
                             '/article/content/*.html',

+ 2 - 0
src/web/staticres/common-module/collection/js/ent_portrait.js

@@ -689,6 +689,8 @@ var vNode = {
             if (res.data.list && $.isArray(res.data.list)) {
               try {
                 res.data.list.forEach(function (item) {
+                  // 优先展示城市,无城市展示省份
+                  item.area = item.city || item.area || ''
                   item.visited = visitedPath.pathVisited(
                     new VisitedPathItem(
                       '/article/content/*.html',

+ 19 - 7
src/web/staticres/common-module/collection/js/industry-mobile.js

@@ -108,7 +108,8 @@ var industryComponent = {
             "工程施工",
             "监理咨询",
             "材料设备",
-            "机电安装"
+            "机电安装",
+            "其他"
           ]
         },
         {
@@ -126,14 +127,16 @@ var industryComponent = {
             "新能源",
             "设备物资",
             "化工产品",
-            "设备"
+            "设备",
+            "其他"
           ]
         },
         {
           "弱电安防": [
             "综合布线",
             "智能系统",
-            "智能家居"
+            "智能家居",
+            "其他"
           ]
         },
         {
@@ -150,7 +153,8 @@ var industryComponent = {
             "通用办公设备",
             "专业设备",
             "办公用品",
-            "生活用品"
+            "生活用品",
+            "其他"
           ]
         },
         {
@@ -176,7 +180,8 @@ var industryComponent = {
           "医疗卫生": [
             "设备",
             "耗材",
-            "药品"
+            "药品",
+            "其他"
           ]
         },
         {
@@ -184,7 +189,8 @@ var industryComponent = {
             "道路",
             "绿化",
             "线路管网",
-            "综合项目"
+            "综合项目",
+            "其他"
           ]
         },
         {
@@ -203,7 +209,13 @@ var industryComponent = {
           "农林牧渔": [
             "生产物资",
             "生产设备",
-            "相关服务"
+            "相关服务",
+            "其他"
+          ]
+        },
+        {
+          "其他": [
+            "其他"
           ]
         }
       ]

+ 16 - 8
src/web/staticres/common-module/selector/js/industryMap.js

@@ -4,7 +4,8 @@ var industryListMapExp = {
         '工程施工',
         '监理咨询',
         '材料设备',
-        '机电安装'
+        '机电安装', 
+        '其他'
     ],
     '水利水电': [
         '水利工程',
@@ -18,12 +19,14 @@ var industryListMapExp = {
         '新能源',
         '设备物资',
         '化工产品',
-        '设备'
+        '设备', 
+        '其他'
     ],
     '弱电安防': [
         '综合布线',
         '智能系统',
-        '智能家居'
+        '智能家居', 
+        '其他'
     ],
     '信息技术': [
         '系统集成及安全',
@@ -36,7 +39,8 @@ var industryListMapExp = {
         '通用办公设备',
         '专业设备',
         '办公用品',
-        '生活用品'
+        '生活用品', 
+        '其他'
     ],
     '机械设备': [
         '矿山机械',
@@ -56,13 +60,15 @@ var industryListMapExp = {
     '医疗卫生': [
         '设备',
         '耗材',
-        '药品'
+        '药品', 
+        '其他'
     ],
     '市政设施': [
         '道路',
         '绿化',
         '线路管网',
-        '综合项目'
+        '综合项目', 
+        '其他'
     ],
     '服务采购': [
         '法律咨询',
@@ -77,6 +83,8 @@ var industryListMapExp = {
     '农林牧渔': [
         '生产物资',
         '生产设备',
-        '相关服务'
-    ]
+        '相关服务', 
+        '其他'
+    ],
+    '其他': []
 }

+ 3 - 0
src/web/staticres/css/ele-reset.css

@@ -67,6 +67,9 @@
     position: absolute;
     right: 16px;
 }
+.el-pagination-container .el-pagination .el-input__suffix {
+  display: unset!important;
+}
 .el-pagination.is-background .el-pager li {
     background-color: #fff;
     border: 1px solid rgba(0, 0, 0, 0.05);

+ 3 - 1
src/web/staticres/dataExport/js/delbox.js

@@ -58,7 +58,9 @@ var DelBox = function () {
     key: 'createDefaultTemp',
     value: function createDefaultTemp(s, i, k) {
       var _this = this;
-
+      if(s === '其他') {
+        s = k
+      }
       var temp = document.createElement('div');
       temp.innerHTML = '<div data-arrIndex="' + i + '" data-key="' + k + '"  class="delete-box-close">' + s + '</div>';
       var child = this.toJqDom(temp.children);

BIN
src/web/staticres/images/index/new/delete.png


+ 1 - 1
src/web/staticres/js/index/index.js

@@ -115,7 +115,7 @@ $(function () {
       $("#zbIndex input").attr('placeholder', '请输入采购单位名称')
       entAssoc.getAssocList()
     } else if (dataId == 'gy') {
-      $("#zbIndex").attr("action", '/swordfish/page_web_pc/search/issued');
+      $("#zbIndex").attr("action", '/swordfish/page_big_pc/search/supply');
       $("#zbIndex .ser").attr("name", 'keywords')
       $("#zbIndex input").attr('placeholder', '请输入您想要查询的供应信息,多个关键词用空格隔开')
     }

+ 237 - 2
src/web/staticres/js/index/index_2023.12.js

@@ -27,6 +27,14 @@ var entAssoc = {
       var type = $(this).attr('data-type')
       var id = $(this).attr('data-id')
       var name = $(this).attr('data-name')
+      if (loginflag) {
+        try {
+          searchHistory.saveBrowseRecord({
+            type: type === 'ent' ? 'ent' : 'buyer',
+            name: type === 'ent' ? name +'_' + id : name
+          })
+        } catch (error) {}
+      }
       if (type === 'ent') {
         window.open('/swordfish/page_big_pc/svip/ent_ser_portrait/' + id)
       } else {
@@ -94,7 +102,7 @@ var entAssoc = {
     var isEntSearch = this.isEntSearch()
     this.list.forEach(function (item) {
       if (isEntSearch) {
-        html += ('<div class="pre-search-item ellipsis" data-type="ent" data-id=' + item.entId + '>' + item.name + '</div>')
+        html += ('<div class="pre-search-item ellipsis" data-type="ent" data-name=' + item.name + '  data-id=' + item.entId + '>' + item.name + '</div>')
       } else {
         html += ('<div class="pre-search-item ellipsis" data-type="buyer" data-name=' + item + '>' + item + '</div>')
       }
@@ -132,6 +140,230 @@ var entAssoc = {
   }
 }
 
+var searchHistory = {
+  isHaveSearch: false,
+  preSearch: {
+    hover: false,
+    focus: false
+  },
+  searchList: [],
+  browseList: [],
+  init: function () {
+    var _this = this
+    setTimeout(function () {
+      _this.getSearchHistory()
+    }, 300)
+    // 控制list显示隐藏
+    $('#keywords').on('focus', function () {
+      if(!_this.isHaveSearch) {
+        // 如果初始化时没拿到登录状态(没查询历史记录),获取焦点时再查询一次
+        _this.getSearchHistory()
+      }
+      _this.preSearch.focus = true
+      _this.checkListShow()
+    }).on('blur', function () {
+      setTimeout(() => {
+        _this.preSearch.focus = false
+        _this.checkListShow()
+      }, 300)
+    })
+    $('#keywords').on('input', function () {
+      if ($(this).val() === '') {
+        _this.preSearch.focus = true
+        _this.checkListShow()
+      } else {
+        _this.preSearch.focus = false
+        _this.checkListShow()
+      }
+    })
+    // 清除历史
+    $('.keywords-history-card .delete-img').click(function () {
+      var type = ''
+      if (_this.isBidSearch()) {
+        type = 1
+      } else if (_this.isEntSearch()) {
+        type = 2
+      } else if (_this.isBuyerSearch()) {
+        type = 4
+      }
+      _this.removeSearchHistory(type)
+    })
+    $('.browse-history-card .delete-img').click(function () {
+      var type = ''
+      if (_this.isEntSearch()) {
+        type = 3
+      } else if (_this.isBuyerSearch()) {
+        type = 5
+      }
+      _this.removeSearchHistory(type)
+    })
+    _this.goSearchInitEvent()
+  },
+  getType: function () {
+    var type = 1
+    if (this.isBidSearch()) {
+      type = 1
+    } else if (this.isEntSearch()) {
+      type = '2,3'
+    } else if (this.isBuyerSearch()) {
+      type = '4,5'
+    } else {
+      type = ''
+    }
+    return type
+  },
+  isBidSearch: function () {
+    return $('.index-search-module .search-type-list .active').text().indexOf('招标采购搜索') !== -1
+  },
+  isEntSearch: function () {
+    return $('.index-search-module .search-type-list .active').text().indexOf('企业搜索') !== -1
+  },
+  isBuyerSearch: function () {
+    return $('.index-search-module .search-type-list .active').text().indexOf('采购单位搜索') !== -1
+  },
+  checkListShow: function () {
+    var pass = this.isBidSearch() || this.isEntSearch() || this.isBuyerSearch()
+    var show = $('#keywords').val() === '' && this.preSearch.focus && (this.searchList.length || this.browseList.length) && pass
+    this.listShow(show)
+  },
+  listShow: function (f) {
+    if (f) {
+      $('.search-history-list').show()
+    } else {
+      $('.search-history-list').hide()
+    }
+  },
+  render: function (searchList, browseList) {
+    var searchContainer = $('.search-tag-container')
+    var browseContainer = $('.browse-list-container')
+    searchContainer.empty()
+    browseContainer.empty()
+    var sHtml = ''
+    var bHtml = ''
+    if (searchList && searchList.length) {
+      searchList.forEach(function (item) {
+        if(item.length > 20) {
+          sHtml += ('<span class="search-tag-item" data-name=' + item + '>' + item.substring(0, 20) + '...' + '</span>')
+        } else {
+          sHtml += ('<span class="search-tag-item" data-name=' + item + '>' + item + '</span>')
+        }
+      })
+      searchContainer.html(sHtml)
+      $('.keywords-history-card').show()
+    } else {
+      $('.keywords-history-card').hide()
+    }
+    if(browseList && browseList.length) {
+      browseList.forEach(function (item) {
+        bHtml += ('<div class="browse-history-item ellipsis" data-id=' + item.id +  '>' + item.name + '</div>')
+      })
+      browseContainer.html(bHtml)
+      $('.browse-history-card').show()
+    } else {
+      $('.browse-history-card').hide()
+    }
+  },
+  // 获取搜索历史记录
+  getSearchHistory: function () {
+    // type: 1-标讯搜索历史记录  2-企业历史搜索 3-企业历史浏览 4-采购单位历史搜索 5-采购单位历史浏览
+    var type = this.getType();
+    console.log(type, loginflag);
+    if(!type) return
+    if(!loginflag) return
+    var _this = this
+    _this.searchList = []
+    _this.browseList = []
+    $.ajax({
+      url: '/publicapply/history/get',
+      method: 'POST',
+      data: { type: type },
+      success: function (res) {
+        if (res.error_code === 0) {
+          _this.isHaveSearch = true
+          _this.searchList = res.data.search.reverse()
+          if (res.data.browse) {
+            // 格式化浏览历史数据(企业画像浏览记录跳转需要企业id, 存历史记录的时候保存格式为“企业名称_企业id”, 取的时候要分割开)
+            res.data.browse = res.data.browse.map(function(item) {
+              if (item.indexOf('_') > -1) {
+                var name = item.split('_')[0]
+                var id = item.split('_')[1]
+                return {
+                  name,
+                  id
+                }
+              } else {
+                return {
+                  name: item
+                }
+              }
+            })
+            _this.browseList = res.data.browse.reverse()
+          }
+          _this.render(res.data.search, res.data.browse)
+        }
+      }
+    })
+  },
+  // 点击搜索记录,跳转到搜索结果页
+  goSearchInitEvent: function () {
+    var _this = this
+    $('.search-tag-container').click('.search-tag-item', function(item){
+      var biddingSearch = _this.isBidSearch()
+      var entSearch = _this.isEntSearch()
+      var buyerSearch = _this.isBuyerSearch()
+      var name = item.target.dataset.name
+      if (biddingSearch) {
+        window.location.href = '/jylab/supsearch/index.html?keywords=' + name
+      } else if (entSearch) {
+        window.location.href = '/jylab/entSearch/index.html?searchvalue=' + name
+      } else if (buyerSearch) {
+        window.location.href = '/jylab/purSearch/index.html?searchvalue=' + name
+      }
+    })
+    $('.browse-list-container').click('.browse-history-item', function(item){
+      var entSearch = _this.isEntSearch()
+      var buyerSearch = _this.isBuyerSearch()
+      var entId = item.target.dataset.id
+      var buyer = item.target.innerText
+      if (entSearch) {
+        window.open('/swordfish/page_big_pc/free/loading/ent/' + entId)
+      } else if (buyerSearch) {
+        window.open('/swordfish/page_big_pc/free/loading/buyer/' + buyer)
+      }
+    })
+  },
+  // 清除历史搜索记录
+  removeSearchHistory: function(type) {
+    var _this = this
+    if (!type) return
+    $.ajax({
+      url: '/publicapply/history/del',
+      method: 'POST',
+      data: { type: type },
+      success: function (res) {
+        console.log(res)
+        if (res.error_code === 0) {
+         _this.getSearchHistory()
+        }
+      }
+    })
+  },
+  // 保存浏览记录(企业画像、采购单位画像)
+  saveBrowseRecord: function (data) {
+    var _this = this
+    $.ajax({
+      url: '/publicapply/history/savePortrait',
+      method: 'POST',
+      data: data,
+      success: function (res) {
+        if (res.error_code === 0 && res.data) {
+          _this.getSearchHistory()
+        }
+      }
+    })
+  }
+}
+
 var _page = {
   searchInput: $('.index-search-container .search-input'),
   searchConfMap: {
@@ -149,7 +381,7 @@ var _page = {
     },
     gy: {
       placeholder: '请输入您想要查询的供应信息,多个关键词用空格隔开',
-      target: '/swordfish/page_web_pc/search/issued',
+      target: '/swordfish/page_big_pc/search/supply',
     },
     wd: {
       placeholder: '在上亿级文档资料库里搜索文档',
@@ -226,6 +458,8 @@ var _page = {
       } else if (dataId == 'wd') {
         searchInput.attr('placeholder', conf.placeholder)
       }
+      searchHistory.getSearchHistory()
+      searchHistory.listShow(false)
     })
     // 确认搜索
     $('#doSearch').on('click', function () {
@@ -401,6 +635,7 @@ var _page = {
 $(function () {
   entAssoc.init()
   _page.init()
+  searchHistory.init()
 })
 
 // seo优化-底部广告位html内js迁移

+ 1 - 1
src/web/staticres/js/index_content.js

@@ -37,7 +37,7 @@ $(function () {
       $("#zbIndex .ser").attr("name",'searchvalue')
       $("#zbIndex input").attr('placeholder', '请输入采购单位名称')
     } else if (dataId == 'gy') {
-      $("#zbIndex").attr("action", '/swordfish/page_web_pc/search/issued');
+      $("#zbIndex").attr("action", '/swordfish/page_big_pc/search/supply');
       $("#zbIndex input").attr('placeholder', '请输入您想要查询的供应信息,多个关键词用空格隔开')
     }
   })

+ 2 - 1
src/web/staticres/js/login.js

@@ -2149,7 +2149,8 @@ function openLoginDig(type, redirectUrl,Logincallback) {
       '/jylab/supsearch/index.html',
       '/jylab/entSearch/index.html',
       '/jylab/purSearch/index.html',
-      '/search/issued'
+      // '/search/issued'
+      '/swordfish/page_big_pc/search/supply'
     ]
     console.info(location)
     logic = function (data, num) {

+ 65 - 0
src/web/staticres/pccss/index_pc.css

@@ -1752,3 +1752,68 @@
   border-bottom: 1px solid rgba(255,255,255,0.12);
 }
 /* ---- seo优化html内的样式迁移 END ---- */
+<<<<<<< HEAD
+=======
+
+/* 搜索历史 */
+.search-history-list {
+  position: absolute;
+  padding: 20px 0;
+  z-index: 6;
+  top: 38px;
+  left: 0;
+  width: 544px;
+  max-height: 520px;
+  background: #fff;
+  box-shadow: 0 0 20px rgb(0, 0, 0, 0.1);
+  border-radius: 8px;
+  overflow-y: auto;
+}
+.search-history-list::-webkit-scrollbar{
+  width: 4px;
+}
+.search-history-card .history-header{
+  display: flex;
+  justify-content: space-between;
+  padding: 0 20px;
+  font-size: 12px;
+  line-height: 18px;
+  color: #686868;
+}
+.search-history-card .delete-img{
+  width: 18px;
+  height: 18px;
+  cursor: pointer;
+}
+.search-history-card .history-main{
+  margin-top: 12px;
+}
+.search-history-card .search-tag-container{
+  padding: 0 20px;
+  display: flex;
+  flex-wrap: wrap;
+}
+.search-history-card .search-tag-container .search-tag-item{
+  display: inline-block;
+  padding: 1px 8px;
+  margin-right: 12px;
+  margin-bottom: 12px;
+  border-radius: 4px;
+  background: #F5F6F7;
+  font-size: 14px;
+  line-height: 22px;
+  border: 1px solid #ECECEC;
+  cursor: pointer;
+}
+.browse-history-card .browse-list-container .browse-history-item {
+  padding: 9px 20px;
+  font-size: 14px;
+  line-height: 22px;
+  cursor: pointer;
+}
+
+.browse-history-card .browse-list-container .browse-history-item:hover{
+  background: #EAF8FA;
+  color: #2ABED1;
+}
+>>>>>>> master

+ 4 - 3
src/web/staticres/public-pc/js/header-nav.js

@@ -166,9 +166,8 @@ function docScroll(e){
   }
 
 }
-window.addEventListener('scroll', docScroll, true)
 $(function(){
-
+  window.addEventListener('scroll', docScroll, true)
   // 搜索框显示、隐藏
   $("#public-nav .iner .fl .jy_nav_searchBtn").on("click",function(){
     $(this).hide()
@@ -349,7 +348,9 @@ function infoListCss(){
 }
 
 // 修复顶部导航因为放大而不显示登录按钮的问题
-fixScaleScroll()
+$(function() {
+  fixScaleScroll()
+})
 function fixScaleScroll () {
   $(window).on('scroll', function () {
     var scrollLeft = $('html').scrollLeft()

+ 11 - 7
src/web/templates/pc/brand/index.html

@@ -530,13 +530,17 @@
         $(".j-bottom").css('padding-bottom', Number($(".j-bottom").attr('data-padding-bottom')))
       }
     }
-    $('.pc-index-bottom .bottom-member-ad').on('load', function () {
-      fixBottomADHeight(true)
-    })
-    $('.pc-index-bottom .bottom-member-ad').attr('src', bottom_img[0].s_pic)
-    $('.pc-index-bottom .bottom-member-ad').unbind('click').click(function () {
-      window.open(bottom_img[0].s_link)
-    })
+    if (bottom_img != null) {
+      $('.pc-index-bottom .bottom-member-ad').on('load', function () {
+        fixBottomADHeight(true)
+      })
+      $('.pc-index-bottom .bottom-member-ad').attr('src', bottom_img[0].s_pic)
+      $('.pc-index-bottom .bottom-member-ad').unbind('click').click(function () {
+        window.open(bottom_img[0].s_link)
+      })
+    }else{
+      $('.pc-index-bottom .bottom-member-ad').hide();
+    }
   })
 </script>
 </html>

+ 20 - 5
src/web/templates/pc/dataExport_sieve.html

@@ -2039,8 +2039,20 @@
           var values = valArr.filter(function(s) {
             return v == s.split('_')[0]
           })
+          console.log(values, 'values')
           temp[v] = values.map(function(t) {
-            return t.replace('_','').replace(v, '')
+            if (t.indexOf('_') > -1) {
+              // 如果二级分类中有其他,则显示一级分类_二级分类
+              if (t.indexOf('_其他') > -1) {
+                return t
+              } else {
+                // 如果二级分类没用其他 则只显示二级分类
+                return t.replace('_','').replace(v, '')
+              }
+            } else {
+              // 如果只有一级分类(当前应该只有一级分类为其他的情况)则只显示一级分类
+              return t
+            }
           })
         })
         // console.log(temp);
@@ -2464,8 +2476,10 @@
 <script src="{{Msg "seo" "cdn"}}/dataExport/js/conditions_order.js?v={{Msg "seo" "version"}}5"></script>
 </body>
 <script type="text/javascript">
-    var industrylist = {{.T.industrylist}};
-    var sortArray = {{.T.sortArray}};
+    // var industrylist = {{.T.industrylist}};
+    // var sortArray = {{.T.sortArray}};
+    var industrylist = industryListMapExp
+    var sortArray = ["建筑工程","行政办公","医疗卫生","服务采购","机械设备","水利水电","能源化工","弱电安防","信息技术","交通工程","市政设施","农林牧渔","其他"];
     var paramObj = null;
     var selectDateBtnIndex = -1;//日期按钮索引
     var priceAllBtnSel = "1";//金额-全部-选中状态
@@ -2921,7 +2935,7 @@
     //行业
     function getIndustries() {
         var industryArr = new Array();
-        ClassArr.getArr().map(function (v) {
+        ClassArr.arr.map(function (v) {
             industryArr = industryArr.concat(v.split(","));
             return v
         })
@@ -3615,7 +3629,8 @@
     })
 
     /* 行业 */
-    var ClassData = {{.T.industrylist}};
+    // var ClassData = {{.T.industrylist}};
+    var ClassData = industryListMapExp
     var ClassArr = new DelBox({
         box: '#class-del'
     })

+ 1 - 1
src/web/templates/pc/newIndex.html

@@ -231,7 +231,7 @@
   <script>
     haslogin('10')
   </script>
-  <script type="text/javascript" src='{{Msg "seo" "cdn"}}/js/index/index_2023.12.js?v={{Msg "seo" "version"}}'></script>
+  <script type="text/javascript" src='{{Msg "seo" "cdn"}}/js/index/index_2023.12.js?v={{Msg "seo" "version"}}1'></script>
   <script defer src=//cdn-common.jianyu360.com/cdn/lib/echarts/4.8.0/echarts.min.js></script>
   <script defer type="text/javascript" src='{{Msg "seo" "cdn"}}/js/index/index_charts.js?v={{Msg "seo" "version"}}'></script>
 </body>

+ 5 - 2
src/web/templates/pc/orderDetail.html

@@ -326,10 +326,13 @@
                 for (var i = 0; i < industry.length; i++) {
                     var d = industry[i];
                     if (d && d.split("_").length == 2) {
-                        d = d.split("_")[1];
+                        if (d.split("_")[1] !== '其他') {
+                          d = d.split("_")[1];
+                        }
                     } else {
-                        d = "";
+                        d = industry[i];
                     }
+                    console.log(d, 'dddd');
                     industryHtml += "<span>" + d + "</span>";
                 }
             } else {

+ 22 - 0
src/web/templates/pc/template/index/search-module.html

@@ -30,6 +30,28 @@
           <input type="text" class="search-input" id="keywords" name="keywords" autocomplete="off" maxlength="50" placeholder="请输入项目名称等关键词,例如:医疗设备">
         </div>
         <section class="pre-search-list" style="display: none;"></section>
+        <section class="search-history-list" style="display: none;">
+            <div class="search-history-card keywords-history-card" style="display: none;">
+              <div class="history-header">
+                <span>历史搜索</span>
+                <img class="delete-img" src="/images/index/new/delete.png" alt="delete">
+              </div>
+              <div class="history-main">
+                <div class="search-tag-container"></div>
+              </div>
+            </div>
+            <div class="search-history-card browse-history-card" style="display: none;">
+              <div class="history-header">
+                <span>历史浏览</span>
+                <img class="delete-img" src="/images/index/new/delete.png" alt="delete">
+              </div>
+              <div class="history-main">
+                <div class="browse-list-container">
+                  <div class="browse-history-item ellipsis"></div>
+                </div>
+              </div>
+            </div>
+        </section>
         <button class="search-button button-blink blink-fast" type="submit" id="doSearch">剑鱼一下</button>
       </div>
     </div>

+ 9 - 3
src/web/templates/weixin/dataExport/dataExport.html

@@ -974,8 +974,14 @@
                     arr.push(industry[i]);
                     break
                 }
-                var str = industry[i].split("_")[1];
-                arr.push(str)
+                var str = industry[i].split("_")[1] !== '其他' ? industry[i].split("_")[1] : industry[i];
+                if(str) {
+                  if(industry[i] === '其他_其他') {
+                    arr.push('其他')
+                  } else {
+                    arr.push(str)
+                  }
+                }
             }
             $("#industry").text(arr.toString().replace(/,/g," "));
             $(".confirm").hide();
@@ -1351,7 +1357,7 @@
                 city = localStorage.city;
             }
             if(localStorage.industry!==undefined&&localStorage.industry!==""){
-                industry = localStorage.industry;
+                industry = localStorage.industry.replace(/其他_其他/g, '其他');
             }
             if(localStorage.buyclass !== undefined && localStorage.buyclass!== ""){
                 var text =  JSON.parse(localStorage.buyclass) == [] ? '全部' : JSON.parse(localStorage.buyclass).toString()

+ 13 - 0
src/web/templates/weixin/dataExport/dataExport_industry.html

@@ -47,6 +47,7 @@
                             <dd data-value="建筑工程_勘察设计">勘察设计</dd>
                             <dd data-value="建筑工程_监理咨询">监理咨询</dd>
                             <dd data-value="建筑工程_机电安装">机电安装</dd>
+                            <dd data-value="建筑工程_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -66,6 +67,7 @@
                             <dd data-value="能源化工_新能源">新能源</dd>
                             <dd data-value="能源化工_设备物资">设备物资</dd>
                             <dd data-value="能源化工_化工产品">化工产品</dd>
+                            <dd data-value="能源化工_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -74,6 +76,7 @@
                             <dd data-value="弱电安防_综合布线">综合布线</dd>
                             <dd data-value="弱电安防_智能系统">智能系统</dd>
                             <dd data-value="弱电安防_智能家居">智能家居</dd>
+                            <dd data-value="弱电安防_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -93,6 +96,7 @@
                             <dd data-value="行政办公_生活用品">生活用品</dd>
                             <dd data-value="行政办公_通用办公设备">通用办公设备</dd>
                             <dd data-value="行政办公_办公家具">办公家具</dd>
+                            <dd data-value="行政办公_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -122,6 +126,7 @@
                             <dd data-value="医疗卫生_设备">设备</dd>
                             <dd data-value="医疗卫生_耗材">耗材</dd>
                             <dd data-value="医疗卫生_药品">药品</dd>
+                            <dd data-value="信息技术_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -131,6 +136,7 @@
                             <dd data-value="市政设施_绿化">绿化</dd>
                             <dd data-value="市政设施_线路管网">线路管网</dd>
                             <dd data-value="市政设施_综合项目">综合项目</dd>
+                            <dd data-value="市政设施_其他">其他</dd>
                         </dl>
                     </li>
                     <li>
@@ -152,8 +158,15 @@
                             <dd data-value="农林牧渔_生产物资">生产物资</dd>
                             <dd data-value="农林牧渔_生产设备">生产设备</dd>
                             <dd data-value="农林牧渔_相关服务">相关服务</dd>
+                            <dd data-value="农林牧渔_其他">其他</dd>
                         </dl>
                     </li>
+                    <li>
+                      <dl>
+                        <dt>其他</dt>
+                        <dd data-value="其他_其他">其他</dd>
+                      </dl>
+                    </li>
                 </ul>
             </div>
         </div>

+ 3 - 1
src/web/templates/weixin/dataExport/dataExport_toOrderDetail.html

@@ -178,9 +178,11 @@
                     for (var i = 0; i < industry.length; i++) {
                         var d = industry[i];
                         if (d && d.split("_").length == 2) {
+                          if (d.split("_")[1] !== '其他') {
                             d = d.split("_")[1];
+                          }
                         } else {
-                            d = "";
+                            d = industry[i];
                         }
                         industryHtml += "<span>" + d + "&nbsp</span>";
                     }