admin/src/api/business/carEvent.js
@@ -14,3 +14,7 @@ download: true }) } export function syncByDate (data) { return request.post('/business/carEvent/syncByDate', data) } admin/src/components/business/OperaCarEventHkWindow.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,173 @@ <template> <GlobalWindow :title="title" width="500px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" > <el-form :model="form" ref="form" :rules="rules" > <el-form-item label="åæ¥æ¥æ" prop="createDate"> <el-date-picker v-model="form.createDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:ss:mm" type="date"> </el-date-picker> </el-form-item> </el-form> </GlobalWindow> </template> <script> import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' import { syncByDate } from '@/api/business/carEvent' export default { name: 'OperaVisitsHkWindow', extends: BaseOpera, components: { GlobalWindow }, data () { return { form:{createDate: null}, rules: { createDate: [ { required: true, message: 'è¯·éæ©æ¥æ', trigger: 'blur' } ] } } }, methods: { open(title){ this.visible=true this.title=title }, // åæ¥ä¿¡æ¯ confirm () { this.$refs.form.validate((valid) => { if (!valid) { return } // è°ç¨æ°å»ºæ¥å£ this.isWorking = true syncByDate({ createDate: this.form.createDate }) .then(() => { this.visible = false this.$tip.apiSuccess('忥æå') this.$emit('success') }) .catch(e => { this.$tip.apiFailed(e) }) .finally(() => { this.isWorking = false }) }) } } } </script> <style> .el-image-viewer__wrapper { z-index: 3000 !important; } </style> <style lang="scss" scoped> .list { width: 100%; display: flex; flex-direction: column; .list_item { width: 100%; margin-bottom: 30px; &:last-child { margin-bottom: 0 !important; } .list_item_label { font-size: 18px; font-weight: 600; color: #000000; margin-bottom: 15px; } .list_item_info { font-size: 14px; color: #222222; margin-bottom: 10px; } .list_item_status { width: 100%; display: flex; flex-direction: column; .list_item_status_item { width: 100%; max-height: 100px; position: relative; margin-bottom: 30px; .dian { width: 15px; height: 15px; border-radius: 50%; background: #ffb447; position: absolute; left: 0; top: 50%; transform: translate(0, -50%); } .xian { width: 1px; height: calc(100% + 30px); background: #ffb447; position: absolute; top: 50%; left: 7px; transform: translate(-50%, 0); } .status_info { /*width: 100%;*/ height: 100%; display: flex; flex-direction: column; margin-left: 30px; box-sizing: border-box; .status_info_a { font-size: 16px; color: black; margin-bottom: 10px; } .status_info_b { font-size: 13px; color: #666666; margin-bottom: 10px; } .status_info_c { padding: 5px 10px; background: #ececec; font-size: 13px; color: black; border-radius: 5px; box-sizing: border-box; } } } } .list_item_val { width: 100%; margin-bottom: 15px; &:last-child { margin-bottom: 0 !important; } .list_item_val_item { font-size: 14px; color: #222222; margin-bottom: 5px; &:last-child { margin-bottom: 0 !important; } } } } } </style> admin/src/views/business/carEvent.vue
@@ -51,6 +51,7 @@ <!-- è¡¨æ ¼åå页 --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:carevent:exportExcel']"> <li><el-button type="primary" v-permissions="['business:carevent:sync']" @click="$refs.OperaCarEventHkWindow.open('忥è¿è½¦è®°å½')">忥</el-button></li> <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:carevent:exportExcel']" @click="exportExcel">导åº</el-button></li> </ul> <el-table @@ -108,6 +109,8 @@ :pagination="tableData.pagination" > </pagination> <OperaCarEventHkWindow ref="OperaCarEventHkWindow" @success="search()" /> </template> </TableLayout> </template> @@ -116,11 +119,12 @@ import BaseTable from '@/components/base/BaseTable' import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' import OperaCarEventHkWindow from '@/components/business/OperaCarEventHkWindow' import { timeForMat } from '@/utils/util' export default { name: 'CarEvent', extends: BaseTable, components: { TableLayout, Pagination }, components: { TableLayout, Pagination ,OperaCarEventHkWindow}, data () { return { // æç´¢ server/dmvisit_admin/src/main/java/com/doumee/api/business/CarEventController.java
@@ -10,12 +10,14 @@ import com.doumee.dao.business.model.CarEvent; import com.doumee.dao.system.vo.CarEventVo; import com.doumee.service.business.CarEventService; import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import javax.swing.event.CaretEvent; import java.util.ArrayList; import java.util.List; @@ -28,6 +30,9 @@ @RestController @RequestMapping("/business/carEvent") public class CarEventController extends BaseController { @Autowired private HkSyncParkServiceImpl hkSyncParkService; @Autowired private CarEventService carEventService; @@ -83,7 +88,13 @@ // ExcelExporter.build(CarEventVo.class).exportWithFirstAndEnd (carEventService.findPageExcel(pageWrap),"å车åºäºä»¶æ¨éè®°å½è¡¨", null, "å车åºäºä»¶æ¨éè®°å½å¯¼åºæ¥è¡¨",null , response); ExcelExporter.build(CarEventDTO.class).export(carEventService.findVisitCarPage(pageWrap).getRecords(), "å车åºäºä»¶æ¨éè®°å½è¡¨", response); } @ApiOperation("æ ¹æ®æ¥æ(starttime)忥è¿è½¦æ°æ®") @PostMapping("/syncByDate") @RequiresPermissions("business:carevent:sync") public ApiResponse syncByDate(@RequestBody CarEvent param) { hkSyncParkService.syncParkRecords(param.getCreateDate()); return ApiResponse.success(null); } @ApiOperation("æ ¹æ®IDæ¥è¯¢") @GetMapping("/{id}") @RequiresPermissions("business:carevent:query") server/dmvisit_admin/src/main/resources/application.yml
@@ -10,7 +10,7 @@ # application: # name: doumeemes profiles: active: testHS active: devYL # JSONè¿åé ç½® jackson: server/dmvisit_screen/src/main/java/com/doumee/service/impl/ScreenServiceImpl.java
@@ -38,13 +38,13 @@ public CountDataResponse countData(BaseRequest param){ MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.select("count(1) as applyTotalNum"); queryWrapper.select("(select count(1) from visits where TO_DAYS(create_date)=TO_DAYS(now()) and status not in(5,6,8)) as applyPassNum"); queryWrapper.select("(select count(1) from visits where TO_DAYS(create_date)=TO_DAYS(now()) and status in (5)) as visitInNum"); queryWrapper.select("(select count(1) from visits where TO_DAYS(create_date)=TO_DAYS(now()) and status in (6,8)) as visitOutNum"); queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status not in(5,6,8)) as applyPassNum"); queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (5)) as visitInNum"); queryWrapper.select("(select count(1) from visits where TO_DAYS(starttime)=TO_DAYS(now()) and status in (6,8)) as visitOutNum"); queryWrapper.select("(select count(1) from car_event where TO_DAYS(create_date)=TO_DAYS(now()) and inout_type=0 and event_type="+ HKConstants.EventTypes.PARK_PASS_IN.getKey() +") as carInNum"); queryWrapper.select("(select count(1) from car_event where TO_DAYS(create_date)=TO_DAYS(now()) and (inout_type !=0 ) and event_type="+ HKConstants.EventTypes.PARK_PASS_OUT.getKey() +") as carOutNum"); queryWrapper.eq(Visits::getIsdeleted, Constants.ZERO ); queryWrapper.apply("TO_DAYS(create_date)=TO_DAYS(now())" ); queryWrapper.apply("TO_DAYS(starttime)=TO_DAYS(now())" ); queryWrapper.last("limit 1"); CountDataResponse vModel =visitsMapper.selectJoinOne(CountDataResponse.class,queryWrapper); vModel.setVisitorNum(vModel.getVisitInNum()+vModel.getVisitOutNum());//仿¥è®¿å®¢æ»æ° @@ -56,7 +56,7 @@ wrapper.last("limit 1"); CountDataResponse cModel =carEventMapper.selectJoinOne(CountDataResponse.class,wrapper); vModel.setMemberCarNum(vModel.getMemberCarNum());//仿¥å工车è¾è¿åºæ° vModel.setMemberCarNum(vModel.getCarInNum() - vModel.getMemberCarNum());//仿¥é¢çº¦è½¦è¾è¿åºæ° vModel.setVisitCarNum(vModel.getCarInNum() - vModel.getMemberCarNum());//仿¥é¢çº¦è½¦è¾è¿åºæ° return vModel; } @@ -99,7 +99,7 @@ wrapper.selectAll(VisitEvent.class) ; wrapper.apply("TO_DAYS(create_date)=TO_DAYS(now())" ); wrapper.last("limit 50"); wrapper.orderByDesc(VisitEvent::getCreateDate); wrapper.orderByDesc(VisitEvent::getStartTime); List<VisitEvent> result =visitEventMapper.selectList( wrapper); if(result!=null){ for(VisitEvent event :result){ @@ -202,7 +202,7 @@ MPJLambdaWrapper<CarEvent> wrapper = new MPJLambdaWrapper<>(); wrapper.select("count(id) as num, create_date"); wrapper.apply("TO_DAYS(create_date)+"+days+" >= TO_DAYS(now()) " ); wrapper.eq(CarEvent::getEventType, HKConstants.EventTypes.PARK_LINE_IN.getKey()); wrapper.in(CarEvent::getEventType, HKConstants.EventTypes.PARK_PASS_IN.getKey(), HKConstants.EventTypes.PARK_PASS_OUT.getKey()); wrapper.groupBy("TO_DAYS(create_date)"); wrapper.orderByDesc(CarEvent::getCreateDate); List<CarEvent> result =carEventMapper.selectJoinList(CarEvent.class,wrapper); @@ -210,12 +210,22 @@ } private List<VisitEvent> getVisitEventListByDays(int days) { MPJLambdaWrapper<VisitEvent> wrapper = new MPJLambdaWrapper<>(); wrapper.select("count(id) as num, create_date"); wrapper.apply("TO_DAYS(create_date)+"+days+" >= TO_DAYS(now()) " ); wrapper.select("count(id) as num, starttime"); wrapper.apply("TO_DAYS(starttime)+"+days+" >= TO_DAYS(now()) " ); wrapper.eq(VisitEvent::getEventType, HKConstants.EventTypes.VISIT_SIGN_IN.getKey()); wrapper.groupBy("TO_DAYS(create_date)"); wrapper.groupBy("TO_DAYS(starttime)"); wrapper.orderByDesc(CarEvent::getCreateDate); List<VisitEvent> result =visitEventMapper.selectJoinList(VisitEvent.class,wrapper); return result; } private List<Visits> getVisitListByDays(int days) { MPJLambdaWrapper<Visits> wrapper = new MPJLambdaWrapper<>(); wrapper.select("count(id) as num, starttime"); wrapper.apply("TO_DAYS(starttime)+"+days+" >= TO_DAYS(now()) " ); wrapper.in(Visits::getStatus, 5,6,7); wrapper.groupBy("TO_DAYS(starttime)"); wrapper.orderByDesc(CarEvent::getCreateDate); List<Visits> result =visitsMapper.selectJoinList(Visits.class,wrapper); return result; } @Override @@ -254,9 +264,17 @@ } return 0; } private Integer getVisistNumByDate(String s, List<VisitEvent> result) { private Integer getVisistEventNumByDate(String s, List<VisitEvent> result) { for(VisitEvent event:result){ if(StringUtils.equals(s,DateUtil.formatDate(event.getCreateDate(),"MM.dd"))){ return event.getNum(); } } return 0; } private Integer getVisistNumByDate(String s, List<Visits> result) { for(Visits event:result){ if(StringUtils.equals(s,DateUtil.formatDate(event.getStarttime(),"MM.dd"))){ return event.getNum(); } } @@ -287,7 +305,7 @@ times.add(DateUtil.formatDate(DateUtil.dateDayAdd(new Date(), -(days-i)+1),"MM.dd")); numList.add(0); } List<VisitEvent> result = getVisitEventListByDays(days); List<Visits> result = getVisitListByDays(days); if(result!=null&& result.size()>0){ for (int i = 0; i < days; i++) { numList.set(i,getVisistNumByDate(times.get(i),result)); server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -28,7 +28,7 @@ public interface InterfacePath{ // String doorEvents = "/api/acs/v2/door/events";//é¨ç¦äºä»¶æ¥è¯¢ // String visitEvents = "/api/visitor/v1/event/turnover/search";//访客äºä»¶æ¥è¯¢ // String parkEvents = "/api/pms/v1/crossRecords/page";//å车åºäºä»¶æ¥è¯¢ String parkCrossRecords = "/api/pms/v1/crossRecords/page";//å车åºè¿ç¨è®°å½ String rootOrg = "/api/resource/v1/org/rootOrg";//è·åè·ç»ç» String orgAllList = "/api/resource/v1/org/orgList";//è·åå ¨éç»ç»ä¿¡æ¯ String userAllList = "/api/resource/v2/person/personList";//è·åå ¨éç¨æ·å表 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -684,5 +684,16 @@ saveInterfaceLog(body,result,path); return result; } /** * å车åºè¿è½¦è®°å½æ¥è¯¢ * @param body * @return */ public static String parkCrossRecords(String body) { Map<String, String> path = getPath(HKConstants.InterfacePath.parkCrossRecords); String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json", null);// post请æ±application/jsonç±»ååæ° saveInterfaceLog(body,result,path); return result; } } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ParkCrossRecordListRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.doumee.core.haikang.model.param.request; import lombok.Data; @Data public class ParkCrossRecordListRequest { private String startTime ;//string True éå¯¹æ´æ°æ¶é´çæ¥è¯¢å¼å§æ¥æï¼IOS8601æ ¼å¼ï¼åèéå½B ISO8601æ¶é´æ ¼å¼è¯´æ private String endTime;// string False éå¯¹æ´æ°æ¶é´çæ¥è¯¢æªæ¢æ¥æï¼IOS8601æ ¼å¼ï¼åèéå½B ISO8601æ¶é´æ ¼å¼è¯´æ private Integer pageNo ;//integer True 页ç ,pageNoâ¥1 private Integer pageSize;// integer True åé¡µå¤§å° } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TimeRangeListRequest.java
@@ -4,7 +4,16 @@ @Data public class TimeRangeListRequest { private String parkSyscode;// string False å车åºå¯ä¸æ è¯ï¼æå¤§é¿åº¦64ï¼ ä¸å¡«ä¸å°å ¶ä½ä¸ºè¿æ»¤æ¡ä»¶ï¼ å¯éè¿è·åå车åºå表æ¥å£è·å private String entranceSyscode;// string False åºå ¥å£å¯ä¸æ è¯ï¼æå¤§é¿åº¦64ï¼ ä¸å¡«ä¸å°å ¶ä½ä¸ºè¿æ»¤æ¡ä»¶ private String plateNo ;//string False 车çå·ï¼æå¤§é¿åº¦16ï¼ private String cardNo ;//string False å¡å· private Integer vehicleOut;// number False è¿åºåºæ è¯0-è¿åº1-åºåº private Integer vehicleType;// number False 车è¾ç±»å0ï¼å ¶ä»è½¦1ï¼å°å车2ï¼å¤§å车3ï¼æ©æè½¦ private Integer releaseResult;// number False æ¾è¡ç»æ0-æªæ¾è¡1-æ£å¸¸æ¾è¡2-离线æ¾è¡ private Integer releaseWay;// number False æ¾è¡æ¹å¼10-æªå¼é¸11-èªå¨å¼é¸12-人工/人工å¼é¸13-饿§å¨å¼é¸ private Integer releaseReason;// number False æ¾è¡åå 100-åºå®è½¦èªå¨æ¾è¡101-临æ¶è½¦èªå¨æ¾è¡102-é¢çº¦è½¦èªå¨æ¾è¡103-䏿·å¤è½¦èªå¨æ¾è¡ private String carCategory ;//string False 车è¾åç±»9-é»åå10-åºå®è½¦11-临æ¶è½¦12-é¢çº¦è½¦14-ç¹æ®è½¦ private String startTime ;//string True éå¯¹æ´æ°æ¶é´çæ¥è¯¢å¼å§æ¥æï¼IOS8601æ ¼å¼ï¼åèéå½B ISO8601æ¶é´æ ¼å¼è¯´æ private String endTime;// string False éå¯¹æ´æ°æ¶é´çæ¥è¯¢æªæ¢æ¥æï¼IOS8601æ ¼å¼ï¼åèéå½B ISO8601æ¶é´æ ¼å¼è¯´æ private Integer pageNo ;//integer True 页ç ,pageNoâ¥1 server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkCrossRecordInfoResponse.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.doumee.core.haikang.model.param.respose; import lombok.Data; @Data public class ParkCrossRecordInfoResponse { private String vehicleId ;// string False 车è¾IDï¼æå¤§é¿åº¦64ï¼ private String crossRecordSyscode;// string False è¿è½¦è®°å½å¯ä¸æ è¯ï¼æå¤§é¿åº¦64ï¼ private String parkSyscode;// string False å车åºå¯ä¸æ è¯ï¼æå¤§é¿åº¦64ï¼ private String parkName ;//string False å车åºåç§°ï¼æå¤§é¿åº¦64ï¼ private String entranceSyscode ;//string False åºå ¥å£å¯ä¸æ è¯ï¼æå¤§é¿åº¦64ï¼ private String entranceName;// string False åºå ¥å£åç§°ï¼æå¤§é¿åº¦64ï¼ private String roadwaySyscode ;//string False 车éå¯ä¸æ è¯ private String roadwayName;// string False 车éåç§° private Integer vehicleOut ;//number False æ¯å¦åºåº0-è¿åºï¼1-åºåº private Integer releaseMode ;//number False æ¾è¡æ¨¡å¼0-ç¦æ¢æ¾è¡ï¼1-åºå®è½¦å æï¼2-临æ¶è½¦å ¥åºï¼3-é¢çº¦è½¦å ¥åºï¼10-离线åºåºï¼11-ç¼´è´¹åºåºï¼12-é¢ä»è´¹åºåºï¼13-å è´¹åºåºï¼30- éæ³å¡ä¸æ¾è¡ï¼31-æå¨æ¾è¡ï¼32-ç¹æ®è½¦è¾æ¾è¡ï¼33-è忥æ¾è¡ï¼35-ç¾¤ç»æ¾è¡ï¼36-饿§å¨å¼é¸ private Integer releaseResult ;//number False æ¾è¡ç»æ0-æªæ¾è¡1-æ£å¸¸æ¾è¡2-离线æ¾è¡ private Integer releaseWay;// number False æ¾è¡æ¹å¼10-æªå¼é¸11-èªå¨å¼é¸12-人工/人工å¼é¸13-饿§å¨å¼é¸ private Integer releaseReason;// number False æ¾è¡åå ï¼100-åºå®è½¦èªå¨æ¾è¡101-临æ¶è½¦èªå¨æ¾è¡102-é¢çº¦è½¦èªå¨æ¾è¡103-䏿·å¤è½¦èªå¨æ¾è¡ private String plateNo ;//string False 车çå·ç ï¼æå¤§é¿åº¦16ï¼ private String cardNo ;//string False å¡çå·ç ï¼æå¤§é¿åº¦32ï¼ private Integer vehicleColor;// number False 车è¾é¢è²0ï¼å ¶ä»é¢è²ï¼1ï¼ç½è²ï¼2ï¼é¶è²ï¼3ï¼ç°è²ï¼4ï¼é»è²ï¼ 5ï¼çº¢è²ï¼ 6ï¼æ·±èè²ï¼ 7ï¼èè²ï¼8ï¼é»è²ï¼9ï¼ç»¿è²ï¼10ï¼æ£è²ï¼ 11ï¼ç²è²ï¼ 12ï¼ç´«è²â private Integer vehicleType ;//number False 车è¾ç±»å0ï¼å ¶ä»è½¦ï¼1ï¼å°å车ï¼2ï¼å¤§åè½¦ï¼ 3ï¼æ©æè½¦ private Integer plateColor ;// number False 车çé¢è²0:èè²,1:é»è²,2:ç½è²,3:é»è²,4:绿è²,5:æ°èªé»è², 255:å ¶ä»é¢è² private Integer plateType ;// number False 车çç±»å0:æ åæ°ç¨è½¦,1:02弿°ç¨è½¦,3:è¦è½¦,4:æ°ç¨è½¦åè¡å°¾ç车,5:使é¦è½¦,6:åç¨è½¦,7:æ©æè½¦,8:æ°è½æºè½¦ private String carCategory;// string False 车è¾åç±» private String carCategoryName;// string False 车è¾åç±»åç§° private String vehiclePicUri;// string False 车è¾å¾çuriï¼æå¤§é¿åº¦256ï¼ private String plateNoPicUri;// string False 车çå¾çuriï¼æå¤§é¿åº¦256ï¼ private String facePicUri;// string False 人è¸å¾çuriï¼æå¤§é¿åº¦256ï¼ private String aswSyscode ;//string False å¾çæå¡å¯ä¸æ è¯ï¼æå¤§é¿åº¦64ï¼ private String crossTime ;//string False éè¿æ¶é´ISO8601æ ¼å¼ï¼ yyyy-MM-ddTHH:mm:ss+å½åæ¶åºï¼ä¾å¦å京æ¶é´ï¼ 2018-07-26T15:00:00+08:00 详è§ISO8601å议解é private String createTime;// string False å建æ¶é´ ISO8601æ ¼å¼ï¼ yyyy-MM-ddTHH:mm:ss+å½åæ¶åºï¼ä¾å¦å京æ¶é´ï¼ 2018-07-26T15:00:00+08:00详è§ISO8601å议解é } server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -910,6 +910,24 @@ return null; } /** *è¿è½¦è®°å½æ¥è¯¢ï¼åé¡µï¼ * @return */ public static BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> parkCrossRecords(ParkCrossRecordListRequest param){ log.info("ãæµ·åº·è¿è½¦è®°å½æ¥è¯¢æ¥è¯¢ã================å¼å§===="+JSONObject.toJSONString(param)); try { String res = HKTools.parkCrossRecords(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference< BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> >(){}; BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType()); logResult(result,"海康è¿è½¦è®°å½æ¥è¯¢æ¥è¯¢"); return result; }catch (Exception e){ log.error("ãæµ·åº·è¿è½¦è®°å½æ¥è¯¢æ¥è¯¢ã================失败====ï¼\n"+ e.getMessage()); } return null; } /** *å¢éè½¦è¾æ¥è¯¢ï¼åé¡µï¼ * @return */ server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -228,6 +228,10 @@ private String erpId; @ApiModelProperty(value = "ç»è®¡æ°é ") @TableField(exist = false) private int num ; @ApiModelProperty(value = "å建人ç¼ç ï¼å ³èmember表)", example = "1") @ExcelColumn(name="å建人ç¼ç ï¼å ³èmember表)") private Integer createMemberId; server/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -74,4 +74,5 @@ void syncParkBookBySingleModel(ParkBook c); void syncEmpowerResultData(); void syncEmpowerDetailData(); void syncParkRecords(Date date); } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -42,6 +42,10 @@ } @Override // @Async public void syncParkRecords(Date date){ } @Override // @Async public String syncDoors(DoorsListRequest param){ return null; } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
@@ -1,16 +1,23 @@ package com.doumee.service.business.impl.hksync; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.config.DataSyncConfig; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseListPageResponse; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.CarChargeAddRequest; import com.doumee.core.haikang.model.param.request.CarChargeDelRequest; import com.doumee.core.haikang.model.param.request.ParkListRequest; import com.doumee.core.haikang.model.param.request.*; import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse; import com.doumee.core.haikang.model.param.respose.ParkCrossRecordInfoResponse; import com.doumee.core.haikang.model.param.respose.ParkListResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DESUtil; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.CarEventMapper; import com.doumee.dao.business.ParksMapper; import com.doumee.dao.business.join.ParkBookJoinMapper; import com.doumee.dao.business.model.*; @@ -18,6 +25,8 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -31,9 +40,13 @@ public class HkSyncParkServiceImpl extends HkSyncBaseServiceImpl { @Autowired private DataSyncConfig dataSyncConfig; @Autowired private ParksMapper parksMapper; @Autowired private ParkBookJoinMapper parkBookMapper; @Autowired private CarEventMapper carEventMapper; @Override public void syncParkBookData() { if(Constants.DEALING_HK_PARKBOOK){ @@ -283,4 +296,123 @@ } @Override @Transactional public void syncParkRecords(Date date){ try { if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对ä¸èµ·ï¼å½å䏿¯ææµ·åº·æ°æ®åæ¥æä½~"); } ParkCrossRecordListRequest param = new ParkCrossRecordListRequest(); //ï¼å ¨éåæ¥ï¼ boolean hasNext = true; int curTotal = 0; int curPage = 1; //æ¥è¯¢ä»å¤©ç Date start = Utils.Date.getStart(date); Date end = new Date(); if(DateUtil.daysBetweenDates(end,start) >1){ end = Utils.Date.getEnd(date); } param.setStartTime(DateUtil.getISO8601Timestamp2( start)); param.setEndTime(DateUtil.getISO8601Timestamp2( end)); List<CarEvent> allHkList = new ArrayList<>(); while (hasNext){ //å页éåå¾ªç¯æ¥è¯¢ææé¨ç¦è®¾å¤æ°æ® param.setPageNo(curPage); param.setPageSize(100); BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> response = HKService.parkCrossRecords(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) ){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对ä¸èµ·ï¼æµ·åº·åæ¥æ°æ®å¤±è´¥~"); } if(response.getData() == null || response.getData().getTotal() ==0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªåæ¥å°ä»»ä½ä¿¡æ¯ï¼"); } BaseListPageResponse<ParkCrossRecordInfoResponse> r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allHkList.addAll(getNewCarEventModelBYList(r.getList())); } curPage++; } if(allHkList .size() == 0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªåæ¥å°ä»»ä½ä¿¡æ¯ï¼"); } //æ¸ ç©ºåæå½å¤©çæ°æ® carEventMapper.delete(new UpdateWrapper<CarEvent>().lambda() .ge(CarEvent::getCreateDate,start) .le(CarEvent::getCreateDate,end)); if(allHkList.size()>0){ int sublistSize = 500; int startIndex = 0; int endIndex = sublistSize; while (startIndex < allHkList.size()) { if (endIndex > allHkList.size()) { endIndex = allHkList.size(); } List<CarEvent> sublist = allHkList.subList(startIndex, endIndex); if(sublist.size()>0){ carEventMapper.insertBatchSomeColumn(sublist);//æå ¥æ°æ°æ® } startIndex = endIndex; endIndex += sublistSize; } } }catch (BusinessException e){ throw e; } } private List<CarEvent> getNewCarEventModelBYList(List<ParkCrossRecordInfoResponse> list ) { List<CarEvent> newList = new ArrayList<>(); if(list == null || list.size()==0){ return newList; } for(ParkCrossRecordInfoResponse model :list){ if( model.getReleaseResult() ==null || !( model.getReleaseResult() == 1|| model.getReleaseResult() == 2 )){ continue; } CarEvent c = new CarEvent(); c.setHappenTime(model.getCrossTime()); c.setCreateDate(DateUtil.getISO8601DateByStr2(model.getCrossTime())); c.setSvrIndex(model.getAswSyscode()); c.setVehiclePicUrl(model.getVehiclePicUri()); c.setPlatePicUrl(model.getPlateNoPicUri()); c.setVehicleType(model.getVehicleType()); c.setPlateColor(model.getPlateColor()); c.setPlateType(model.getPlateType()); c.setCardNo(model.getCardNo()); c.setReleaseReason(model.getReleaseReason()); c.setPlateNos(model.getPlateNo()); c.setReleaseResult(model.getReleaseResult()); c.setInoutType(model.getVehicleOut()); c.setParkIndex(model.getParkSyscode()); c.setParkName(model.getParkName()); c.setEventId(model.getCrossRecordSyscode()); c.setGateIndex(model.getEntranceSyscode()); c.setGateName(model.getEntranceName()); c.setIsdeleted(Constants.ZERO); if(model.getVehicleOut() !=null &&model.getVehicleOut() == 0 ){ c.setEventType(HKConstants.EventTypes.PARK_PASS_IN.getKey()); }else { c.setEventType(HKConstants.EventTypes.PARK_PASS_OUT.getKey()); } newList.add(c); } return newList; } } server/dmvisit_service/src/main/resources/application-testYL.yml
@@ -43,7 +43,7 @@ title: ${project.name}æ¥å£ææ¡£ description: ${project.name}æ¥å£ææ¡£ enabled: true context-path: /erp_api context-path: # ç¦ç¨swaggeræ¶çéå®åå°å redirect-uri: / @@ -61,7 +61,6 @@ map: remoteHost: https://apis.map.qq.com appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ des_pwd: 123456SDFKDJF