DriverQYTTravel/guns-admin/pom.xml
@@ -17,6 +17,14 @@ <packaging>jar</packaging> <dependencies> <dependency> <groupId>cn.rongcloud.im</groupId> <artifactId>server-sdk-java</artifactId> <version>3.2.13</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -12,7 +12,9 @@ import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.dao.RegionMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.model.vo.CompanyVo; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.ALiSendSms; import com.stylefeng.guns.modular.system.util.ResultUtil; @@ -36,6 +38,8 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import static org.bouncycastle.cms.RecipientId.password; /** * 司机控制器 @@ -64,7 +68,7 @@ private ICarService carService; @Autowired private ALiSendSms aLiSendSms; private RegionMapper regionMapper; @Autowired private IOrderTaxiService orderTaxiService; @@ -83,7 +87,13 @@ @Autowired private GunsProperties gunsProperties; @Autowired private ICompanyService companyService; @Autowired private ICompanyCityService companyCityService; /** * 获取短信验证码 @@ -665,7 +675,7 @@ */ @ResponseBody @PostMapping("/api/driver/queryMyCar") @ApiOperation(value = "获取当前车辆及空闲车辆", tags = {"司机端-个人中心"}, notes = "") @ApiOperation(value = "获取当前车辆及空闲车辆 新增useState 1使用中 2空闲", tags = {"司机端-个人中心"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) @@ -1290,6 +1300,65 @@ /** * 获取省市区3级联动 * @return */ @ResponseBody @GetMapping("/base/driver/getRegion") @ApiOperation(value = "获取省市区3级联动", tags = {"司机端-注册"}, notes = "") @ApiImplicitParams({ }) public ResultUtil<List<Region>> getRegion(){ try { List<Region> regions = regionMapper.selectList(null); List<Region> regionList = regions.stream().filter(e -> e.getParentId() == 0).collect(Collectors.toList()); for (Region region : regionList) { region.setTire(1); List<Region> regionList1 = regions.stream().filter(e -> e.getParentId().equals(region.getId())).collect(Collectors.toList()); for (Region region1 : regionList1) { region1.setTire(2); List<Region> regionList2 = regions.stream().filter(e -> e.getParentId().equals(region1.getId())).collect(Collectors.toList()); region1.setChildren(regionList2); } region.setChildren(regionList1); } return ResultUtil.success(regionList); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @GetMapping("/base/driver/getCompany") @ApiOperation(value = "通过区code获取服务商", tags = {"司机端-注册"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "区code", name = "areaCode", required = true, dataType = "String"), }) public ResultUtil<List<CompanyVo>> getCompany(String areaCode){ try { ArrayList<CompanyVo> companyVos = new ArrayList<>(); List<CompanyCity> companyCities = companyCityService.selectList(new EntityWrapper<CompanyCity>().eq("areaCode", areaCode).eq("state", 1)); if(companyCities.isEmpty()){ return ResultUtil.success(companyVos); } List<Company> companies = companyService.selectList(new EntityWrapper<Company>().eq("type", 2).ne("flag", 3).in("id", companyCities.stream().map(CompanyCity::getCompanyId).collect(Collectors.toList()))); for (Company company : companies) { CompanyVo companyVo = new CompanyVo(company.getId(), company.getName()); companyVos.add(companyVo); } return ResultUtil.success(companyVos); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 设置提现密码 * @param withdrawPassword * @param request DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -161,7 +161,7 @@ new EntityWrapper<OrderTaxi>() .eq("type", 2) .eq("userId", orderPrivateCar.getUserId()) .ne("state", 1) .notIn("state", 1,11) .eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()) .eq("place", orderPrivateCar.getPlace()) ); @@ -173,7 +173,7 @@ if(orderPrivateCar.getState() == 10){ return ResultUtil.error("订单已取消"); } if(orderPrivateCar.getState() != 1){ if(orderPrivateCar.getState() != 1 && orderPrivateCar.getState() != 11){ return ResultUtil.error("手速有点慢哦,订单已被抢啦!"); } Driver driver = driverService.selectById(uid); DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CarMapper.java
@@ -26,4 +26,7 @@ * @throws Exception */ Car query(@Param("licensePlate") String licensePlate) throws Exception; List<Map<String, Object>> queryIdleDataFromId(@Param("id") Integer id); } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CarMapper.xml
@@ -68,4 +68,13 @@ addObjectId as addObjectId from t_car where state = 1 and carLicensePlate = #{licensePlate} </select> <select id="queryIdleDataFromId" resultType="java.util.Map"> select a.id as id, CONCAT(a.carLicensePlate, '-',c.`name`, b.`name`, ' ', a.carColor) as name from t_car a left join t_car_model b on (a.carModelId = b.id) left join t_car_brand c on (b.brandId = c.id) where a.state = 1 and find_in_set(a.bindDriverId,#{id}) </select> </mapper> DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Driver.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import io.swagger.annotations.ApiModelProperty; import java.util.Date; @@ -364,7 +365,74 @@ */ @TableField("entercode") private String entercode; @ApiModelProperty("省") private String province; @ApiModelProperty("省代码") private String provinceCode; @ApiModelProperty("市") private String city; @ApiModelProperty("市代码") private String cityCode; @ApiModelProperty("区") private String area; @ApiModelProperty("区代码") private String areaCode; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getProvinceCode() { return provinceCode; } public void setProvinceCode(String provinceCode) { this.provinceCode = provinceCode; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public String getAreaCode() { return areaCode; } public void setAreaCode(String areaCode) { this.areaCode = areaCode; } public String getQrCode() { return qrCode; } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Region.java
@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import io.swagger.annotations.ApiModelProperty; import java.util.List; /** * 省市区 @@ -20,28 +23,58 @@ * 城市名称 */ @TableField("name") @ApiModelProperty("城市名称") private String name; /** * 城市行政code */ @TableField("code") @ApiModelProperty("城市code") private String code; /** * 区号code */ @TableField("citycode") @ApiModelProperty("区号code") private String citycode; /** * 父级id */ @TableField("parent_id") @ApiModelProperty("父级id") private Integer parentId; /** * 英文 */ @TableField("english") @ApiModelProperty("英文名称") private String english; @TableField(exist = false) @ApiModelProperty("层级 1省 2市 3区") private Integer tire=3; @TableField(exist = false) @ApiModelProperty("下级") private List<Region> children; public Integer getTire() { return tire; } public void setTire(Integer tire) { this.tire = tire; } public List<Region> getChildren() { return children; } public void setChildren(List<Region> children) { this.children = children; } public Integer getId() { return id; } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/vo/CompanyVo.java
New file @@ -0,0 +1,17 @@ package com.stylefeng.guns.modular.system.model.vo; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class CompanyVo { @ApiModelProperty(value = "公司id") private Integer companyId; @ApiModelProperty(value = "公司名称") private String companyName; } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CarServiceImpl.java
@@ -48,16 +48,31 @@ @Override public Map<String, Object> queryCars(Integer uid) throws Exception { Driver driver = driverService.selectById(uid); List<Map<String, Object>> list = carMapper.queryIdleData(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); Map<String, Object> map = new HashMap<>(); map.put("list", list); Map<String, Object> map1 = driverService.queryInfo(uid); if(null == map1.get("licensePlate")){ map.put("car", ""); }else{ map.put("car", map1.get("licensePlate") + "-" + map1.get("brand") + " " + map1.get("carColor")); Integer carId = driver.getCarId(); map.put("car", ""); if(carId!=null){ Car car = carMapper.selectById(carId); if(car.getCarLicensePlate()!=null){ CarBrand carBrand = carBrandMapper.selectById(car.getCarBrandId()); CarModel carModel = carModelMapper.selectById(car.getCarModelId()); map.put("car", car.getCarLicensePlate()+"-" + carBrand.getName() +carModel.getName()+ " " + car.getCarColor()); } } List<Map<String, Object>> list = carMapper.queryIdleDataFromId(driver.getId()); // List<Map<String, Object>> list = carMapper.queryIdleData(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( // driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); for (Map<String, Object> stringObjectMap : list) { // 1使用中 2空闲中 if(stringObjectMap.get("id").toString().equals(carId.toString())){ map.put("useState", 1); }else { map.put("useState", 0); } } map.put("list", list); return map; } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -21,6 +21,7 @@ import com.stylefeng.guns.modular.system.warpper.LoginWarpper; import com.stylefeng.guns.modular.system.warpper.RegisteredWarpper; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import io.rong.models.response.TokenResult; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; @@ -348,7 +349,14 @@ driver.setSex(registeredWarpper.getSex()); driver.setIdCard(registeredWarpper.getIdCard()); String code = registeredWarpper.getPlaceOfEmployment(); driver.setArea(registeredWarpper.getArea()); driver.setAreaCode(registeredWarpper.getAreaCode()); driver.setCity(registeredWarpper.getCity()); driver.setCityCode(registeredWarpper.getCityCode()); driver.setProvince(registeredWarpper.getProvince()); driver.setProvinceCode(registeredWarpper.getProvinceCode()); String code = registeredWarpper.getAreaCode(); Company query = companyCityService.query(code); if(null == query){ return ResultUtil.error("选择从业地暂未开通业务"); @@ -502,7 +510,9 @@ loginWarpper.setToken(token); loginWarpper.setAppid(UUIDUtil.getRandomCode()); loginWarpper.setState(ToolUtil.isEmpty(driver.getIdCard()) ? 1 : 0); TokenResult token1 = RongCloudUtil.getToken(driver.getId().toString(), driver.getName(), driver.getHeadImgUrl()); loginWarpper.setRongYunToken(token1.getToken()); //创建高德猎鹰的终端数据 String tid = gdFalconUtil.createTerminal(phone); loginWarpper.setServerId(gdFalconUtil.getServerId()); @@ -838,10 +848,10 @@ if(driver.getState() == 3){ return ResultUtil.error("还在服务中,不能更换"); } // boolean idle = carService.idle(carId); // if(!idle){ // return ResultUtil.error("车辆已被绑定了"); // } boolean idle = carService.idle(carId); if(!idle){ return ResultUtil.error("当前车辆已经有其他司机在使用,请更换车辆"); } driver.setCarId(carId); this.updateById(driver); return ResultUtil.success(); DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -1,5 +1,6 @@ package com.stylefeng.guns.modular.system.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.core.util.ToolUtil; @@ -22,9 +23,11 @@ import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import com.stylefeng.guns.modular.taxi.service.impl.OrderTaxiServiceImpl; import org.apache.commons.lang.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; @@ -226,10 +229,13 @@ Map<String, String> map = new HashMap<>(); map.put("orderId", reassign.getOrderId().toString()); map.put("orderType", reassign.getOrderType().toString()); List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); for(Dispatch dispatch : dispatches){ jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); } // List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); // for(Dispatch dispatch : dispatches){ // jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); // } // qyt 改派直接推送 pushOrder(); } @@ -493,6 +499,13 @@ } public static List<Integer> orderIds = new ArrayList<>(); @Resource private RedisTemplate<String, Object> redisTemplate; /** * 改派支付完成后的操作 * @param id 改派单id @@ -548,6 +561,12 @@ } systemNoticeService.addSystemNotice(2, "您已使用" + (type == 1 ? "微信" : (type == 2?"支付宝":"云闪付")) + "成功支付改派申请费用!", reassigns.get(0).getOriginalDriverId(), 1); System.out.println("==============跨城修改改派通知状态完毕==================="); // qyt 新增改派 重新推送 }else{ System.err.println("预支付数据异常(orderId = " + id + ")"); } @@ -637,4 +656,70 @@ } @Autowired private ICompanyCityService companyCityService; @Autowired private IPushOrderService pushOrderService; /** * 推送订单给司机抢单 * @param orderTaxi * @throws Exception */ public void pushOrder(OrderTaxi orderTaxi, Integer type) throws Exception{ new Thread(new Runnable() { @Override public void run() { try { orderIds.add(orderTaxi.getId());//添加记录,防止调用接口重复提醒无人接单 String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); List<Integer> integers = new ArrayList<>(); if (ToolUtil.isNotEmpty(vehicle)) { integers = JSON.parseArray(vehicle).toJavaList(Integer.class); } Company query = companyCityService.query(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat()));//获取起点所属分公司 List<PushOrder> querys = pushOrderService.querys(null, 2, query.getId());//获取需要推送的次数 for (int i = 1; i <= querys.size(); i++) { PushOrder pushOrder = pushOrderService.querys(i, 2, query.getId()).get(0); System.out.println("pushOrder:" + pushOrder); //获取空闲司机 List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 if (list.size() > 0) { double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) lastIndex = lastIndex == 0 ? list.size() : lastIndex; list = list.subList(0, lastIndex);//获取空闲司机中占比数据 for (Driver driver : list) {//开始进行推送 //查询是否在限制推单范围内 boolean bo = false; for (Integer integer : integers) { if (integer.compareTo(driver.getId()) == 0) { bo = true; break; } } if (bo) { continue; } pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime()); } } Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 OrderTaxi orderTaxi1 = OrderTaxiServiceImpl.this.selectById(orderTaxi.getId()); Integer state = orderTaxi1.getState(); if (state != 1) { break; } if (i == querys.size() && state == 1) { pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2); orderIds.remove(orderTaxi.getId()); } } } catch (Exception e) { e.printStackTrace(); } } }).start(); } } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RongCloudUtil.java
New file @@ -0,0 +1,608 @@ package com.stylefeng.guns.modular.system.util; import com.stylefeng.guns.core.exception.GunsException; import io.rong.RongCloud; import io.rong.messages.BaseMessage; import io.rong.messages.TxtMessage; import io.rong.methods.group.Group; import io.rong.methods.user.User; import io.rong.models.Result; import io.rong.models.group.GroupMember; import io.rong.models.group.GroupModel; import io.rong.models.message.GroupMessage; import io.rong.models.message.PrivateMessage; import io.rong.models.message.SystemMessage; import io.rong.models.response.ResponseResult; import io.rong.models.response.TokenResult; import io.rong.models.user.UserModel; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.security.MessageDigest; import java.util.HashMap; import java.util.List; /** * 融云 */ public class RongCloudUtil { public static String appKey = "bmdehs6pbnozs"; public static String appSecret = "RovVwtABN1"; // 海外token获取RongCloud.getSingaporeInstance(appKey, appSecret); private static RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret); public static void main(String[] args) throws Exception { TokenResult token = getToken("1", "1", "1"); System.out.println(token.toString()); } /** * 融云注册 * @param id * @param name * @param portrait * @return * @throws Exception */ public static TokenResult getToken(String id, String name, String portrait) throws Exception{ User user = rongCloud.user; // rongCloud.message.group.recall() UserModel userModel = new UserModel() .setId(id) .setName(name) .setPortrait(portrait); TokenResult result = user.register(userModel); return result; } /** * 修改 * @param id * @param name * @param portrait * @return * @throws Exception */ public static Result update(String id, String name, String portrait) throws Exception{ User user = rongCloud.user; UserModel userModel = new UserModel() .setId(id) .setName(name) .setPortrait(portrait); Result result = user.update(userModel); return result; } /** * 推送 * @param userId * @param content * @param extras * @return * @throws Exception */ public static String push( String userId, String content,String extras) throws Exception { String platform="[\"ios\",\"android\"]"; String audience="{\"userid\":"+"[\""+userId+"\"]"+",\"is_to_all\":false}"; String notification="{\"alert\":\""+content+"\",\"ios\":"+extras+",\"android\":"+extras+"}"; String[] tag = {"10"}; StringBuilder sb = new StringBuilder(); sb.append("platform=").append(platform); sb.append("&tag=").append(tag.toString()); sb.append("&audience=").append(audience); sb.append("¬ification=").append(notification); /*sb.append(","); sb.append("\"extras\":").append(extras);*/ /*HostType apiHostType = new HostType("https://api-sg01.ronghub.com/message/system"); HttpURLConnection conn = HttpUtil.CreatePostHttpConnection(apiHostType, appKey, appSecret, "/publish.json", "application/json"); HttpUtil.setBodyParameter(sb, conn);*/ //return HttpUtil.returnResult(""); return ""; } /** * 通过融云发送系统信息,详见https://www.rongcloud.cn/docs/message_architecture.html#group_notification_message * @param senderId 发送人 * @param targetIds 接收人(数组) * @param baseMessage 消息内容 * @param pushContent 推送内容 * @param pushData 推送数据 */ public static void sendSystemMessage(String senderId, String[] targetIds, BaseMessage baseMessage, String pushContent, String pushData){ SystemMessage systemMessage = new SystemMessage() .setSenderId(senderId) .setTargetId(targetIds) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(0) .setIsCounted(0) .setContentAvailable(0); try { ResponseResult responseResult = rongCloud.message.system.send(systemMessage); System.out.println(responseResult); } catch (Exception e) { e.printStackTrace(); } } public static void sendSystemMessage1(String senderId, String[] targetIds, BaseMessage baseMessage, String pushContent, String pushData){ SystemMessage systemMessage = new SystemMessage() .setSenderId(senderId) .setTargetId(targetIds) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(0) .setIsCounted(0) .setContentAvailable(1); try { ResponseResult responseResult = rongCloud.message.system.send(systemMessage); System.out.println(responseResult); } catch (Exception e) { e.printStackTrace(); } } /** * 通过融云发送单聊消息 */ public static void sendPrivateMsg(String senderId, String targetId, BaseMessage baseMessage){ PrivateMessage privateMessage = new PrivateMessage() .setSenderId(senderId) .setTargetId(new String[]{targetId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(0); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } public static void sendPrivateMsg1(String senderId, String targetId, BaseMessage baseMessage){ PrivateMessage privateMessage = new PrivateMessage() .setSenderId(senderId) .setTargetId(new String[]{targetId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(1); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } public static void sendPrivateMsg(String senderId, String[] targetId, BaseMessage baseMessage){ PrivateMessage privateMessage = new PrivateMessage() .setSenderId(senderId) .setTargetId(targetId) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(1); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } /** * 发送群组消息 * @param fromUserId 注意当前用户id不会接收到该消息 * @param toGroupId 群id */ public static void sendGroupMessage(String fromUserId, String toGroupId, BaseMessage baseMessage, String pushContent, String pushData){ GroupMessage groupMessage = new GroupMessage() .setSenderId(fromUserId) .setTargetId(new String[]{toGroupId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(1) .setIsIncludeSender(1) .setContentAvailable(0); try { ResponseResult groupResult = rongCloud.message.group.send(groupMessage); System.out.println(groupResult); } catch (Exception e) { e.printStackTrace(); } } public static void sendGroupMessage1(String fromUserId, String toGroupId, BaseMessage baseMessage, String pushContent, String pushData){ GroupMessage groupMessage = new GroupMessage() .setSenderId(fromUserId) .setTargetId(new String[]{toGroupId}) .setObjectName(baseMessage.getType()) .setContent(baseMessage) .setPushContent(pushContent) .setPushData(pushData) .setIsPersisted(1) .setIsIncludeSender(1) .setContentAvailable(0); try { ResponseResult groupResult = rongCloud.message.group.send(groupMessage); } catch (Exception e) { e.printStackTrace(); } } /** * 移除黑名单 */ public static void removeBlackList(String userId,String friendId){ UserModel user = getUserModel(userId,friendId); try { rongCloud.user.blackList.remove(user); } catch (Exception e) { e.printStackTrace(); } } /** * 添加黑名单 */ public static void addBlackList(String userId,String friendId){ UserModel user = getUserModel(userId,friendId); try { rongCloud.user.blackList.add(user); } catch (Exception e) { e.printStackTrace(); } } private static UserModel getUserModel(String userId, String friendId){ UserModel blackUser = new UserModel().setId(userId); UserModel[] blacklist = {blackUser}; UserModel user = new UserModel() .setId(friendId) .setBlacklist(blacklist); return user; } /** * 通过融云发送单聊消息 */ public static void sendPrivateMsg(String fromUserId, String toUserId, String objectName, String content) { TxtMessage txtMessage = new TxtMessage(content, content); PrivateMessage privateMessage = new PrivateMessage() .setSenderId(fromUserId) .setTargetId(new String[]{toUserId}) // .setObjectName("RC:TxtMsg") .setObjectName(objectName) .setContent(txtMessage) .setPushContent("") .setPushData("") .setCount("") .setVerifyBlacklist(0) .setIsPersisted(1) .setIsCounted(1) .setIsIncludeSender(0); //发送单聊方法 try { rongCloud.message.msgPrivate.send(privateMessage); } catch (Exception e) { e.printStackTrace(); } } /** * 发送文本消息 * @param userId 发送用户id * @param toUserId 接收用户id * @param content 消息文本内容 * @return */ public static Integer privatePushTxtMessage(String userId, String toUserId, String content){ /*String url = "https://api-cn.ronghub.com/message/private/publish.json"; String data = "fromUserId=" + userId + "&toUserId=" + toUserId + "&objectName=RC:TxtMsg&content=" + content; String s = this.pushHttp(url, data); JSONObject jsonObject = JSON.parseObject(s); if(jsonObject.getIntValue("code") == 200){ return jsonObject.getIntValue("status"); }*/ //sendPrivateMsg(userId,toUserId,"RC:TxtMsg",content); String url = "https://api-sg01.ronghub.com/message/private/publish.json"; String data = "fromUserId=" + userId + "&toUserId=" + toUserId + "&objectName=RC:TxtMsg&content=" + content; sendPost(url,data); return 1; } public static Integer pushSilentAll(String userId, String groupNo,String[] toUserId,String name){ GroupMessage message = new GroupMessage(); message.setIsIncludeSender(1); message.setSenderId(userId); message.setTargetId(new String[]{groupNo}); message.setToUserId(toUserId); message.setObjectName("RC:TxtMsg"); TxtMessage txtMessage = new TxtMessage(name, ""); message.setContent(txtMessage); try{ rongCloud.message.group.sendDirection(message); }catch (Exception e){ e.printStackTrace(); } return 1; } // 单人禁言 public static Integer Silent(String userId, String groupNo,Integer minute,String groupName ) throws Exception { // String url = "https://api-cn.ronghub.com/group/user/gag/add.json"; // HashMap<String, String> map = new HashMap<>(); // map.put("userId",userId); // map.put("groupId",groupNo); // map.put("minute",minute); // String data = "fromUserId=" + userId + "&toUserId=" + toUserId + "&objectName=RC:TxtMsg&content=" + name; //sendPost(url,data); // String s = HttpRequestUtil.postRequest1(url, map, appKey, appSecret); GroupModel groupModel = new GroupModel(); GroupMember[] members = new GroupMember[1]; GroupMember groupMember = new GroupMember(); groupMember.setGroupId(groupNo); groupMember.setId(userId); members[0]=groupMember; groupModel.setId(groupNo); groupModel.setMembers(members); groupModel.setName(groupName); groupModel.setMinute(minute); rongCloud.group.gag.add(groupModel); return 1; } private static GroupModel initGroupModel(String groupId, List<String> memberIds, String groupName) { GroupMember[] members = new GroupMember[memberIds.size()]; for (int i = 0; i < memberIds.size(); i++) { members[i] = new GroupMember().setId(memberIds.get(i)); } return new GroupModel() .setId(groupId) .setMembers(members) .setName(groupName); } /** * 解散群组 * @param groupId 群组id */ public static Integer dismissGroup(String groupId, GroupMember[] members){ Group Group = rongCloud.group; //GroupMember[] members = new GroupMember[]{new GroupMember().setId(memberId)}; GroupModel group = new GroupModel() .setId(groupId) .setMembers(members); Result groupDismissResult = null; try { groupDismissResult = (Result)Group.dismiss(group); } catch (Exception e) { e.printStackTrace(); } System.out.println("dismiss: " + groupDismissResult.toString()); return groupDismissResult.getCode(); } /** * 创建群组 */ public static Integer createGroup(String groupNo, String groupName,GroupMember[] members){ Group Group = rongCloud.group; // GroupMember[] members = new GroupMember[]{new GroupMember().setId(userid)}; GroupModel group = new GroupModel() .setId(groupNo).setName(groupName).setMembers(members); Result groupDismissResult = null; try { groupDismissResult = (Result)Group.create(group); } catch (Exception e) { e.printStackTrace(); } return groupDismissResult.getCode(); } /** * 全体禁言 * @param groupIds * @return */ public static Integer banAdd(String[] groupIds){ Group Group = rongCloud.group; Result banAddResult = null; try { banAddResult = (Result)Group.ban.add(groupIds); } catch (Exception e) { e.printStackTrace(); } System.out.println("banAdd: " + banAddResult.toString()); return banAddResult.getCode(); } /** * 移除禁言 * @param groupIds * @return */ public static Integer banRemove(String[] groupIds){ Group Group = rongCloud.group; Result banRemoveResult = null; try { banRemoveResult = (Result)Group.ban.remove(groupIds); } catch (Exception e) { e.printStackTrace(); } System.out.println("banRemove: " + banRemoveResult.toString()); return banRemoveResult.getCode(); } public static void addGroup(String groupNo,List<String> userid,String groupName) throws Exception { GroupModel groupModel = initGroupModel(groupNo, userid, groupName); rongCloud.group.join(groupModel); try { } catch (Exception e) { e.printStackTrace(); } } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); String nonce = String.valueOf(Double.valueOf(Math.random() * 1000000.0D).intValue()); String timeMillis = String.valueOf(System.currentTimeMillis()); String signature = string2Sha1(appSecret + nonce + timeMillis); conn.setConnectTimeout(1000 * 30); conn.setRequestProperty("Host", "api-cn.ronghub.com"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("App-Key", appKey); conn.setRequestProperty("Nonce", nonce); conn.setRequestProperty("Timestamp", timeMillis); conn.setRequestProperty("Signature", signature); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } private static String string2Sha1(String str){ if(str==null||str.length()==0){ return null; } char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char buf[] = new char[j*2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (Exception e) { // TODO: handle exception return null; } } // public String initPortraitUri(List<String> headImg) { // List<String> picUrls = new ArrayList<>(); // int i = 0; // for (String memberAccount : headImg) { // if (memberAccount != null && StringUtils.isNotBlank(memberAccount)) { // picUrls.add(memberAccount); // i++; // if (i >= 9) { // break; // } // } // } // try { // // 生成九宫格群组头像 // byte[] buff = ImageUtil.getCombinationOfhead(picUrls); // //上传到Oss // /*String url = dfsClient.uploadFile(buff, "jpg"); // if (!Objects.equals(url, "")) { // return fileRoot + "/" + url; // }*/ // return OssUploadUtil.uploadByteOSS(buff); // } catch (Exception e) { // } // return ""; // } /*public static void main(String[] args) { try { TokenResult token = getToken("13688394165", "Crystal", "https://sinata.oss-cn-shenzhen.aliyuncs.com/Oo-logo.png"); System.out.println("token"); System.out.println(token); *//*if (SinataUtil.isNotEmpty(token)){ if(token.code==200){ System.out.println(token.getToken()); } }*//* } catch (Exception e) { System.out.println("kkkkkkk"); e.printStackTrace(); System.out.println(e.getMessage()); } }*/ } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginWarpper.java
@@ -17,6 +17,16 @@ private String terminalId; @ApiModelProperty("是否需要完善资料(0=否,1=是)") private Integer state = 0; @ApiModelProperty("融云token") private String rongYunToken; public String getRongYunToken() { return rongYunToken; } public void setRongYunToken(String rongYunToken) { this.rongYunToken = rongYunToken; } public Integer getId() { return id; DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/RegisteredWarpper.java
@@ -42,6 +42,71 @@ @ApiModelProperty("出租车资格证号") private String taxiAptitudeCard; @ApiModelProperty("省") private String province; @ApiModelProperty("省代码") private String provinceCode; @ApiModelProperty("市") private String city; @ApiModelProperty("市代码") private String cityCode; @ApiModelProperty("区") private String area; @ApiModelProperty("区代码") private String areaCode; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getAreaCode() { return areaCode; } public void setAreaCode(String areaCode) { this.areaCode = areaCode; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getProvinceCode() { return provinceCode; } public void setProvinceCode(String provinceCode) { this.provinceCode = provinceCode; } public String getPhone() { return phone; DriverQYTTravel/guns-admin/src/main/resources/application-dev.yml
@@ -29,14 +29,13 @@ max-request-size: 100MB max-file-size: 100MB redis: host: 172.21.35.151 port: 6512 password: SC_cache@20#25 host: 127.0.0.1 port: 6379 password: 123456 database: 0 timeout: 1000 cluster: nodes: 172.21.35.151:6512,172.21.35.152:6512,172.21.35.153:6512,172.21.35.151:6513,172.21.35.152:6513,172.21.35.153:6513 nodes: 127.0.1.1:6379 mybatis-plus: typeAliasesPackage: com.stylefeng.guns.modular global-config: @@ -58,17 +57,16 @@ spring: datasource: url: jdbc:mysql://172.21.35.140:8066/traffic_scdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai username: traffic_scusr password: QYT_sc@20#25 db-name: traffic_scdb #用来搜集数据库的所有表 url: jdbc:mysql://192.168.110.80:3306/qyttravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 db-name: qyttravel #用来搜集数据库的所有表 filters: wall,mergeStat --- spring: data: mongodb: uri: mongodb://qyt_jtcx:qyt_jtcx2025@172.21.35.195:27017,172.21.35.196:27017/traveling_track uri: mongodb://192.168.110.80:27017/traveling_track ---