From 9d67b4462bf494a0b25c1b40be8198f71666131e Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期二, 18 二月 2025 14:39:26 +0800 Subject: [PATCH] jtt808初始化 --- server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 154 insertions(+), 0 deletions(-) diff --git a/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java b/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java index 1ae9388..f596927 100644 --- a/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java +++ b/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java @@ -1,23 +1,177 @@ package com.doumee.jtt808.web.service; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.doumee.biz.system.SystemDictDataBiz; +import com.doumee.core.constants.Constants; +import com.doumee.core.constants.ResponseStatus; +import com.doumee.core.exception.BusinessException; +import com.doumee.core.utils.PositionUtil; +import com.doumee.core.utils.StringTools; +import com.doumee.core.wx.WxMiniUtilService; +import com.doumee.dao.business.*; +import com.doumee.dao.business.join.GoodsorderJoinMapper; +import com.doumee.dao.business.join.MemberRidesJoinMapper; +import com.doumee.dao.business.join.RefundJoinMapper; +import com.doumee.dao.business.model.*; +import com.doumee.dao.business.web.request.BackElecBikeRequest; +import com.doumee.dao.business.web.request.LocaltionDTO; import com.doumee.jtt808.web.endpoint.MessageManager; +import com.doumee.service.business.GoodsorderService; +import com.doumee.service.business.PricingRuleService; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +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 org.springframework.web.bind.annotation.RequestBody; import org.yzh.commons.model.APIResult; import org.yzh.protocol.t808.T0201_0500; import org.yzh.protocol.t808.T8500; import reactor.core.publisher.Mono; +import java.util.Date; +import java.util.List; +import java.util.Objects; + @Service public class Jtt808Service { @Autowired private MessageManager messageManager; + @Autowired + private GoodsorderService goodsorderService; + @Autowired + private DiscountMemberMapper discountMemberMapper; + + @Autowired + private DiscountLogMapper discountLogMapper; + + @Autowired + GoodsorderJoinMapper goodsorderJoinMapper; + + @Autowired + private SystemDictDataBiz systemDictDataBiz; + + @Autowired + private MemberMapper memberMapper; + @Autowired + private BaseParamMapper baseParamMapper; + @Autowired + private RefundMapper refundMapper; + + @Autowired + private RefundJoinMapper refundJoinMapper; + @Autowired + private SitesMapper sitesMapper; + + @Autowired + private MemberRidesJoinMapper memberRidesJoinMapper; + + @Autowired + private AdMapper adMapper; + + @Autowired + private TransactionsMapper transactionsMapper; + + @Autowired + private WxMiniUtilService wxMiniUtilService; + + @Autowired + PricingRuleService pricingRuleService; public APIResult<T0201_0500> bikeControl(@RequestBody T8500 request) { Mono<APIResult<T0201_0500>> result = messageManager.requestR(request, T0201_0500.class); APIResult<T0201_0500> data = result.block(); return data; } + @Transactional(rollbackFor = {BusinessException.class}) + public void backElecBike(BackElecBikeRequest param) { + if (param.getLatitude() == null || param.getLongitude() == null || StringUtils.isBlank(param.getMemberId())) { + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝瀹氫綅淇℃伅鏈夎锛岃纭瀹氫綅鏉冮檺宸插紑鍚紒"); + } + Member member = memberMapper.selectById(param.getMemberId()); + if (member == null) { + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿淇℃伅鏌ヨ澶辫触锛岃杩斿洖閲嶆柊杩涘叆灏忕▼搴忓啀璇曪紒"); + } + Goodsorder gparam = new Goodsorder(); + gparam.setMemberId(param.getMemberId()); + gparam.setStatus(Constants.goodsorderStatus.pay); + Goodsorder goodsorder = goodsorderService.findOne(gparam); + if(Objects.isNull(goodsorder)){ + throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"鏃犻獞琛岃鍗曡褰�"); + } + if(Constants.formatIntegerNum(goodsorder.getStatus()) != Constants.GOODSORDER_STATUS.HAVING_PAY.getKey() ){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヨ鍗曞綋鍓嶇姸鎬佷笉鏀寔缁撶畻鎿嶄綔锛岃灏濊瘯鍒锋柊鍒楄〃閲嶈瘯锛�" ); + } + //鏌ヨ楠戣璁板綍 + List<MemberRides> memberRides = goodsorderService.getMemberRidesForClose(goodsorder.getId()); + if(memberRides!=null && memberRides.size()>0){ + for (MemberRides rides : memberRides){ + if(Constants.equalsInteger(rides.getStatus(),Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey())){ + if(StringUtils.isNotBlank(rides.getDeviceSn()) &&Constants.equalsInteger(rides.getType(),Constants.ONE) ){ + Sites site = getBackSiteByPostion(param);//鏌ヨ鍋滆溅绔欑偣淇℃伅 + //濡傛灉鏄數杞﹀苟涓旀槸楠戣涓� 杩涜鍏抽攣澶勭悊 + lockBikes(rides.getDeviceSn(),Constants.ZERO);//鍙戣捣鍏抽攣鎸囦护璇锋眰 + } + } + } + } + //璁㈠崟缁撶畻 + Date date = new Date(); + goodsorder.setEditDate(date); + goodsorder.setEditor(null); + goodsorderService.dealCloseGoodsorderBiz( goodsorder,Constants.REFUND_TYPE.NORMAL.getKey(),memberRides); + + } + + /** + * 鍙戣捣鍏抽攣銆佸紑閿佹寚浠よ姹� + * @param clientId + */ + private void lockBikes(String clientId,int type) { + T8500 request = new T8500(); + request.setType(type);//鍏抽攣 + request.setClientId(StringTools.leftPad(clientId,12,'0')); + Mono<APIResult<T0201_0500>> result = messageManager.requestR(request, T0201_0500.class); + APIResult<T0201_0500> data = result.block(); + if(!data.isSuccess()){ + //濡傛灉寮�閿佸け璐ワ紝鍒欒繑鍥炲紓甯� + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝杩樿溅鍏抽攣澶辫触锛岃绋嶅悗閲嶈瘯锛屾垨鑰呰仈绯诲洯鍖虹鐞嗕汉鍛橈紒"); + } + } + + /** + * 鏌ヨ鍋滆溅绔欑偣淇℃伅 + * @param param + * @return + */ + private Sites getBackSiteByPostion(BackElecBikeRequest param) { + Sites site = null;//鏌ヨ鍋滆溅绔欑偣淇℃伅 + List<Sites> sitesList = sitesMapper.selectList(new QueryWrapper<Sites>().lambda() + .eq(Sites::getStatus,Constants.ZERO) + .eq(Sites::getIsdeleted,Constants.ZERO) + .eq(Sites::getType,Constants.ONE)); + if(sitesList ==null ||sitesList.size() ==0){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇锋寜鐓ц姹傚墠寰�鍋滆溅鐐瑰仠杞︼紒"); + } + for(Sites sites :sitesList){ + TypeReference typeReference = new TypeReference<List<LocaltionDTO>>(){}; + List<LocaltionDTO> array = JSONObject.parseObject(sites.getElectronicFence(), typeReference.getType()); + if(array == null || array.size() ==0){ + continue; + } + if(PositionUtil.isInPolygon(param.getLongitude(),param.getLatitude(),array)){ + //濡傛灉鍦ㄥ仠杞︾偣鑼冨洿鍐咃紱 + site = sites; + break; + } + if(site ==null){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇锋寜鐓ц姹傚墠寰�鍋滆溅鐐瑰仠杞︼紒"); + } + } + return site; + } } -- Gitblit v1.9.3