ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/entity/Order.java
@@ -34,7 +34,10 @@ @ApiModelProperty("下单城市") @TableField("city") private String city; @TableField("province_code") private String provinceCode; @TableField("are_code") private String areaCode; @ApiModelProperty("订单编号") @TableField("order_number") private String orderNumber; @@ -55,6 +58,11 @@ @TableField("serve_id") private Integer serveId; @ApiModelProperty("打印次数") @TableField("print_count") private Integer printCount; @ApiModelProperty("回收服务名称") @TableField("serve_name") private String serveName; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/entity/OrderRequest.java
@@ -24,6 +24,9 @@ @ApiModelProperty("城市编码") private String cityCode; private String provinceCode; private String areaCode; @ApiModelProperty("订单编号") private String orderNumber; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/entity/ServeRecord.java
@@ -38,5 +38,14 @@ @ApiModelProperty("服务备注") @TableField("remark") private String remark; @ApiModelProperty("现场照片(多张照片 ','隔开)") @TableField("card_pic") private String cardPic; @ApiModelProperty("现场照片(多张照片 ','隔开)") @TableField("machine_pic") private String machinePic; @ApiModelProperty("现场照片(多张照片 ','隔开)") @TableField("paper_pic") private String paperPic; } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.vo.PaperInVo; import com.ruoyi.common.core.vo.Path; import com.ruoyi.order.api.entity.*; import com.ruoyi.order.api.feignClient.OrderClient; @@ -83,6 +84,18 @@ } @Override public R<Boolean> count(String orderId) { return R.fail(cause.getMessage()); } @Override public R<List<PaperInVo>> papercount(String workId, String date) { return null; } @Override public R<List<Integer>> queryIdsBycode(List<String> cityList) { return R.fail(cause.getMessage()); } @@ -103,6 +116,12 @@ } @Override public R<List<Order>> workday(Integer workId) { return null; } @Override public R<Page<Order>> orderList(Integer userId, Integer pageNum, Integer pageSize) { return R.fail(cause.getMessage()); } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.vo.PaperInVo; import com.ruoyi.common.core.vo.Path; import com.ruoyi.order.api.entity.*; import com.ruoyi.order.api.factory.OrderFallbackFactory; @@ -137,6 +138,11 @@ @PostMapping(value = "/order/updateState") R<Boolean> updateState(@RequestParam("orderId") String orderId, @RequestParam("state") Integer state); @PostMapping(value = "/order/count") R<Boolean> count(@RequestParam("orderId") String orderId); @PostMapping(value = "/order/papercount") R<List<PaperInVo>> papercount(@RequestParam("workId") String workId,@RequestParam("date") String date); @PostMapping(value = "/order/queryIdsBycode") R<List<Integer>> queryIdsBycode(@RequestBody List<String> cityList); @@ -171,6 +177,9 @@ @PostMapping(value = "/order/orderCountHome") R<OrderResultVO> orderCountHome(@RequestBody OrderCountRequest orderCount); @PostMapping(value = "/order/workday") R<List<Order>> workday(@RequestBody Integer workId); /** * 用户所关联订单记录分页列表 * ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GaoDeMapUtil.java
@@ -90,6 +90,10 @@ if (reGeoCode.size() > 0) { // 在regeocode中拿到 formatted_address 具体位置 String formatted = reGeoCode.get("formatted_address").toString(); JSONObject addressComponent = reGeoCode.getJSONObject("addressComponent"); String adcode = addressComponent.getString("adcode"); String s = convertToCityCode(adcode); System.err.println("====s"); return Result.succeed(formatted, "地址获取成功!"); } else { @@ -104,6 +108,54 @@ } } public static Result<String> getCityCode(String longitude, String latitude) { String url; try { url = "http://restapi.amap.com/v3/geocode/regeo?output=JSON&location=" + longitude + "," + latitude + "&key=" + GAO_DE_KEY + "&radius=0&extensions=base"; // 高德接口返回的是JSON格式的字符串 String queryResult = getResponse(url); if (ObjectUtils.isNull(queryResult)) { return Result.failed("查询结果为空"); } // 将获取结果转为json 数据 JSONObject obj = JSONObject.parseObject(queryResult); if (obj.get(GaoDeEnum.STATUS.getCode()).toString().equals(GaoDeEnum.INT_ONE.getCode())) { // 如果没有返回-1 JSONObject reGeoCode = obj.getJSONObject(GaoDeEnum.RE_GEO_CODE.getCode()); if (reGeoCode.size() > 0) { // 在regeocode中拿到 formatted_address 具体位置 String formatted = reGeoCode.get("formatted_address").toString(); JSONObject addressComponent = reGeoCode.getJSONObject("addressComponent"); String adcode = addressComponent.getString("adcode"); String s = convertToCityCode(adcode); System.err.println("====s"); return Result.succeed(s, "地址获取成功!"); } else { return Result.failed("未找到相匹配的地址!"); } } else { return Result.failed("请求错误!"); } } catch (Exception e) { e.printStackTrace(); return Result.failed("系统未知异常,请稍后再试"); } } public static String convertToCityCode(String districtCode) { // 确保输入的字符串长度至少为6位 if (districtCode.length() >= 6) { // 截取前6位中的前4位作为城市代码 return districtCode.substring(0, 4) + "00"; } else { throw new IllegalArgumentException("Invalid district code length: " + districtCode); } } /** * 功能描述: 根据两个定位点的经纬度算出两点间的距离 * 经纬度格式为: 经度,纬度 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/vo/PaperInVo.java
New file @@ -0,0 +1,10 @@ package com.ruoyi.common.core.vo; import lombok.Data; @Data public class PaperInVo { Integer serveId; Long count; String name; } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/vo/PrintDto.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.common.core.vo; import com.ruoyi.common.core.vo.PaperInVo; import lombok.Data; import java.util.List; @Data public class PrintDto { private String name; private String date; private List<PaperInVo> papers; } ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
@@ -10,6 +10,7 @@ import com.ruoyi.admin.utils.AddressDto; import com.ruoyi.admin.utils.DescribeInstances; import com.ruoyi.admin.utils.OcrBase; import com.ruoyi.admin.vo.OrderByServeRecordVO; import com.ruoyi.admin.vo.OrderDetailVO; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.BaseEntity; @@ -18,6 +19,9 @@ import com.ruoyi.common.core.utils.GaoDeMapUtil; import com.ruoyi.common.core.utils.SnowflakeIdWorker; import com.ruoyi.common.core.vo.CityInfoVO; import com.ruoyi.common.core.vo.PaperInVo; import com.ruoyi.common.core.vo.PrintDto; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.annotation.Logical; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.service.TokenService; @@ -43,7 +47,11 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -494,4 +502,128 @@ return R.ok(data); } @ApiOperation(value = "打印计数", tags = {"后台-订单管理"}) @PostMapping(value = "/print") public R print(@RequestParam Long id) { orderClient.count(String.valueOf(id)); return R.ok(); } @ApiOperation(value = "打印入库单子", tags = {"后台-订单管理"}) @PostMapping(value = "/paperCount") public R paperCount(@RequestParam Integer id,@RequestParam String date) { R<List<PaperInVo>> papercount = orderClient.papercount(String.valueOf(id),date); for (PaperInVo datum : papercount.getData()) { datum.setName(recoveryServeService.getById(datum.getServeId()).getServeName()); } PrintDto printDto =new PrintDto(); printDto.setName(masterWorkerService.getById(id).getRealName()); printDto.setPapers(papercount.getData()); printDto.setDate(date); return R.ok(printDto); } @Resource private RedisService redisService; @ApiOperation(value = "地图统计", tags = {"后台-订单管理-地图统计"}) @PostMapping(value = "/map/works") public R<List<MasterWorker>> map(String cityCode) { LoginUser loginUser = tokenService.getLoginUser(); if (null == loginUser) { return R.loginExpire("登录失效!"); } if (cityCode==null) { if (loginUser.getIsFranchisee()) { cityCode = loginUser.getCityList().get(0); } else { cityCode = "420100"; } } Set<Integer> workIds = redisService.getCacheSet("workerLocation:" + cityCode+":"); if (workIds==null||workIds.isEmpty()){ return R.ok(new ArrayList<>()); } List<MasterWorker> list = masterWorkerService.lambdaQuery().in(MasterWorker::getId, workIds).list(); for (MasterWorker masterWorker : list) { masterWorker.setLacation(redisService.getCacheObject("work:"+masterWorker.getId()+":")); } return R.ok(list); } @ApiOperation(value = "获师傅", tags = {"后台-订单管理-地图统计"}) @PostMapping(value = "/map/line") public R<List<OrderByServeRecordVO>> line(Integer id) { R<List<Order>> workday = orderClient.workday(id); System.out.println(workday.getData()); List<OrderByServeRecordVO> list = new ArrayList<>(); for (Order datum : workday.getData()) { OrderByServeRecordVO orderByServeRecord = new OrderByServeRecordVO(); // String masterFolderPath = "/usr/local/coordinate/" + datum.getServerId(); // File masterFolder = new File(masterFolderPath); // 检查师傅ID的文件夹是否存在,存在就读取轨迹数据 // System.out.println("文件是否存在:" + masterFolder.exists()); // if (masterFolder.exists()) { // 检查订单ID的JSON文件是否存在,不存在则创建 // String jsonFilePath = masterFolderPath + "/" + datum.getId() + ".json"; String jsonFilePath = "C:\\Users\\Admin\\Desktop\\1814257493315514369.json"; File jsonFile = new File(jsonFilePath); System.out.println("订单Json文件是否存在:" + jsonFile.exists()); if (jsonFile.exists()) { try { String jsonContent = new String(Files.readAllBytes(Paths.get(jsonFilePath))); System.out.println("JSON 文件内容:" + jsonContent); List<com.alibaba.fastjson2.JSONObject> coordinate = com.alibaba.fastjson2.JSONObject.parseObject(jsonContent, List.class); List<String> coordinateList = new ArrayList<>(); if (null != coordinate) { for (com.alibaba.fastjson2.JSONObject jsonObject : coordinate) { Object s = jsonObject.get("coordinate"); coordinateList.add(String.valueOf(s)); } orderByServeRecord.setCoordinate(coordinateList); } } catch (IOException e) { System.out.println(e.getMessage()); } // } } list.add(orderByServeRecord); } return R.ok(list); } @Resource private RegionService regionService; @ApiOperation(value = "获取城市名字", tags = {"后台-订单管理-地图统计"}) @PostMapping(value = "/map/cityName") public R line(String cityCode) { Region one = regionService.lambdaQuery().eq(Region::getCode, cityCode).one(); return R.ok(one.getName(),""); } // @ApiOperation(value = "获取司机的订单路线", tags = {"后台-订单管理-地图统计"}) // @PostMapping(value = "/map/works/line") // public R<List<MasterWorker>> map(@RequestParam Integer workId) { // // // return R.ok(list); // } } ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/MasterWorker.java
@@ -92,5 +92,7 @@ @ApiModelProperty("对应城市code") @TableField("city_code") private String cityCode; @TableField(exist = false) private String lacation; } ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
@@ -167,6 +167,9 @@ } if (null != serveRecord) { orderByServeRecord.setPhoto(Arrays.stream(serveRecord.getPhoto().split(",")).collect(Collectors.toList())); orderByServeRecord.setCardPic(serveRecord.getCardPic()); orderByServeRecord.setPaperPic(serveRecord.getPaperPic()); orderByServeRecord.setMachinePic(serveRecord.getMachinePic()); } result.setServeRecordInfo(orderByServeRecord); } ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeRecordVO.java
@@ -1,5 +1,6 @@ package com.ruoyi.admin.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -29,5 +30,15 @@ @ApiModelProperty("现场照片集合") private List<String> photo; @ApiModelProperty("现场照片(多张照片 ','隔开)") @TableField("card_pic") private String cardPic; @ApiModelProperty("现场照片(多张照片 ','隔开)") @TableField("machine_pic") private String machinePic; @ApiModelProperty("现场照片(多张照片 ','隔开)") @TableField("paper_pic") private String paperPic; } ruoyi-service/ruoyi-order/pom.xml
@@ -173,6 +173,12 @@ <artifactId>wechatpay-java</artifactId> <version>0.2.12</version> </dependency> <!-- <dependency>--> <!-- <groupId>com.ruoyi</groupId>--> <!-- <artifactId>ruoyi-api-order</artifactId>--> <!-- <version>3.6.4</version>--> <!-- <scope>compile</scope>--> <!-- </dependency>--> </dependencies> ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -1,15 +1,17 @@ package com.ruoyi.order.controller; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.GlobalException; import com.ruoyi.common.core.vo.AddressDto; import com.ruoyi.common.core.vo.PaperInVo; import com.ruoyi.common.core.vo.Path; import com.ruoyi.order.entity.*; import com.ruoyi.order.request.OrderCountDataRequest; import com.ruoyi.order.request.OrderRequest; @@ -105,6 +107,26 @@ return R.ok(orderService.lambdaUpdate() .eq(Order::getId, orderId).set(Order::getState, state).update()); } @ApiOperation(value = "订单列表-增加打印次数", tags = {"后台-订单管理"}) @PostMapping(value = "/count") public R<Boolean> count(@RequestParam("orderId") String orderId) { Order byId = orderService.getById(orderId); byId.setPrintCount(byId.getPrintCount()==null?1:byId.getPrintCount()+1); orderService.updateById(byId); return R.ok(); } @ApiOperation(value = "订单列表-获取入库单", tags = {"后台-订单管理"}) @PostMapping(value = "/papercount") public R<List<PaperInVo>> inpaper(@RequestParam("workId") String workId,@RequestParam("date") String date) { List<PaperInVo> paper = orderService.papercout(workId,date); return R.ok(paper); } /** * 更改订单状态且清空到达时间 @@ -310,6 +332,8 @@ order.setIsEvaluate(Constants.ZERO); order.setCityCode(orderRequest.getCityCode()); order.setOrderMoney(orderRequest.getOrderMoney()); order.setProvinceCode(orderRequest.getProvinceCode()); order.setAreaCode(orderRequest.getAreaCode()); return R.ok(orderService.save(order)); } @@ -376,6 +400,8 @@ if (order.getSubsidy()!=null){ order.setOrderMoney(order.getServePrice().add(order.getSubsidy())); } order.setProvinceCode(orderRequest.getProvinceCode()); order.setAreaCode(orderRequest.getAreaCode()); return R.ok(orderService.updateById(order)); } @@ -450,6 +476,33 @@ return R.ok(orderService.orderCountHome(orderCount)); } //获取师傅当天的订单 @PostMapping(value = "/workday") public R<List<Order>> workday(@RequestBody Integer workId) { // 获取当前日期 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 使用 format 方法将 LocalDate 对象转换为字符串 String formattedToday = LocalDate.now().format(formatter); System.out.println(formattedToday); // 输出:2023-09-12(假设今天是2023年9月12日) // 构建 Lambda 查询条件 LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper .eq(Order::getTime, formattedToday) // 当天开始时间 ; // 当天结束时间 // 执行查询 List<Order> orders = orderService.list(queryWrapper.eq(Order::getServerId,workId)); // 处理查询结果 for (Order order : orders) { System.out.println(order); } return R.ok(orders); } /** * 用户所关联订单记录分页列表 * @@ -681,7 +734,14 @@ .orderByAsc("CASE WHEN topSort IS NULL THEN 1 ELSE 0 END") .orderByAsc("topSort"); return R.ok(orderService.list(wrapper)); List<Order> list = orderService.list(wrapper); for (Order order : list) { if (order.getAcceptTime()==null){ order.setAcceptTime(order.getCreateTime()); } } return R.ok(list); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/entity/Order.java
@@ -35,6 +35,12 @@ @TableField("city") private String city; @TableField("province_code") private String provinceCode; @TableField("area_code") private String areaCode; @ApiModelProperty("订单编号") @TableField("order_number") private String orderNumber; @@ -43,6 +49,11 @@ @TableField("user_id") private Integer userId; @ApiModelProperty("下单用户id") @TableField("print_count") private Integer printCount; @ApiModelProperty("站点id") @TableField("site_id") private Integer siteId; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.vo.PaperInVo; import com.ruoyi.order.entity.Order; import com.ruoyi.order.vo.*; import org.apache.ibatis.annotations.Param; @@ -190,4 +191,6 @@ */ List<OrderQueryVO> orderCountByTimeRangeMonth(@Param("cityList") List<String> cityList, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("orderState") Integer orderState); List<PaperInVo> papercout(@Param("workId")String workId,@Param("date")String date); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/request/OrderRequest.java
@@ -19,6 +19,8 @@ @ApiModelProperty("下单城市") private String city; private String provinceCode; private String areaCode; @ApiModelProperty("城市编码") private String cityCode; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.vo.PaperInVo; import com.ruoyi.common.core.vo.Path; import com.ruoyi.order.entity.Order; import com.ruoyi.order.request.UserOrderRequest; @@ -131,4 +132,6 @@ * @return 下单结果 */ String orderEstimate(UserOrderRequest userOrderRequest); List<PaperInVo> papercout(String workId,String date); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.GaoDeMapUtil; import com.ruoyi.common.core.vo.AddressDto; import com.ruoyi.common.core.vo.PaperInVo; import com.ruoyi.common.core.vo.Path; import com.ruoyi.order.entity.ChangeDispatch; import com.ruoyi.order.entity.Order; @@ -358,6 +359,11 @@ return String.valueOf(order.getId()); } @Override public List<PaperInVo> papercout(String workId,String date) { return this.baseMapper.papercout(workId,date); } /** * 根据当前月份获取当前季度的开始月份 */ ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -9,6 +9,7 @@ <result column="order_money" property="orderMoney"/> <result column="site_name" property="siteName"/> <result column="serve_id" property="serveId"/> <result column="print_count" property="printCount"/> <result column="serve_name" property="serveName"/> <result column="serve_price" property="servePrice"/> <result column="reservation_name" property="reservationName"/> @@ -497,4 +498,12 @@ GROUP BY dateTime order by dateTime </select> <select id="papercout" resultType="com.ruoyi.common.core.vo.PaperInVo"> select count(*) as count, serve_id as serveId from t_order where is_delete = 0 and server_id = #{workId} and `time` = #{date} group by serve_id </select> </mapper> ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OrderController.java
@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.exception.GlobalException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.GaoDeMapUtil; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.entity.ChangeDispatch; import com.ruoyi.order.api.entity.Order; @@ -34,10 +36,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.*; import java.util.stream.Collectors; /** @@ -63,6 +62,9 @@ private ExchangeDispatchClient dispatchClient; @Resource private RecoveryServeService recoveryServeService; @Resource private RedisService redisService; /** * linux服务器保存订单轨迹文件夹 @@ -345,4 +347,23 @@ return R.ok(); } @ApiOperation(value = "上传经纬度", tags = {"师傅端-首页"}) @GetMapping(value = "/putLocation") @ApiImplicitParams({ @ApiImplicitParam(value = "workId", name = "workId", dataType = "int", required = true), @ApiImplicitParam(value = "师傅所在经度", name = "longitude", dataType = "String", required = true), @ApiImplicitParam(value = "师傅所在纬度", name = "latitude", dataType = "String", required = true) }) public R<Object> orderNavigation(@RequestParam Integer workId, @RequestParam String longitude, @RequestParam String latitude) { Result<String> address = GaoDeMapUtil.getCityCode(longitude, latitude); System.err.println(address.getDatas()); Set<Integer> strings = new HashSet<>(); strings.add(workId); redisService.setCacheSet("workerLocation:"+address.getDatas()+":", strings); redisService.setCacheObject("work:"+workId+":", longitude+","+latitude); return R.ok(); } }