From b4d8cb69ff3a3d35a10a7e5c487ff683b31cc9f1 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 24 二月 2023 10:06:03 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java | 19 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java | 163 +++ management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUserException.js | 8 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/HttpUtils.java | 295 +++++++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/RespBody.java | 33 management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html | 165 +++- management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html | 141 +++ driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml | 5 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java | 2 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TAppUserResp.java | 54 + management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderRefusalMapper.java | 2 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java | 1 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java | 155 +++ management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetail.html | 2 management/guns-admin/pom.xml | 9 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java | 2 management/guns-admin/src/main/webapp/static/modular/system/tDriver/tOrderRefusal.js | 101 ++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/WxJsonUtils.java | 109 ++ management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverDetail.html | 26 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/config/WxConfig.java | 48 + management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetailException.html | 2 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UUIDUtil.java | 99 ++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TDriverResp.java | 49 + management/guns-admin/src/main/resources/application.yml | 24 management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverCommission.html | 61 + management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriverCommission.js | 227 +++++ management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html | 115 +- management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js | 104 ++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java | 34 management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverArea.html | 57 + management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/AccessTokenRespBody.java | 38 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/Constant.java | 28 management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js | 2 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java | 6 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java | 32 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/TokenUtils.java | 53 + management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUser.js | 6 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java | 46 + management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverAudit.html | 6 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAppUserServiceImpl.java | 3 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverService.java | 24 41 files changed, 2,174 insertions(+), 182 deletions(-) diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java index 132e8a4..8b0bc8d 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java @@ -6,6 +6,7 @@ import com.supersavedriving.driver.modular.system.util.ResultUtil; import com.supersavedriving.driver.modular.system.warpper.AddOrderWarpper; import com.supersavedriving.driver.modular.system.warpper.HallOrderList; +import com.supersavedriving.driver.modular.system.warpper.OrderInfoWarpper; import com.supersavedriving.driver.modular.system.warpper.ResponseWarpper; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -171,7 +172,16 @@ - public ResponseWarpper<> queryOrderInfo(Long orderId, HttpServletRequest request){ + + @ResponseBody + @PostMapping("/api/order/queryOrderInfo") + @ServiceLog(name = "获取订单详情", url = "/api/order/queryOrderInfo") + @ApiOperation(value = "获取订单详情", tags = {"司机端-首页"}, notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"), + @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + }) + public ResponseWarpper<OrderInfoWarpper> queryOrderInfo(Long orderId, HttpServletRequest request){ if(null == orderId){ return ResponseWarpper.success(ResultUtil.paranErr("orderId")); } @@ -180,12 +190,28 @@ if(null == uid){ return ResponseWarpper.success(ResultUtil.tokenErr()); } - ResultUtil resultUtil = orderService.receiveOrder(uid, orderId); - return ResponseWarpper.success(resultUtil); + OrderInfoWarpper orderInfoWarpper = orderService.queryOrderInfo(uid, orderId); + return ResponseWarpper.success(orderInfoWarpper); }catch (Exception e){ e.printStackTrace(); return new ResponseWarpper(500, e.getMessage()); } } + + + public ResponseWarpper driverProcessOperations(Long orderId, Integer state, HttpServletRequest request){ + if(null == orderId){ + return ResponseWarpper.success(ResultUtil.paranErr("orderId")); + } + if(null == state){ + return ResponseWarpper.success(ResultUtil.paranErr("state")); + } + try { + + }catch (Exception e){ + e.printStackTrace(); + return new ResponseWarpper(500, e.getMessage()); + } + } } diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml index f52b957..f2b1ab6 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml @@ -102,7 +102,10 @@ a.estimatedPrice, a.estimatedMileage, a.startPrice, - a.state + a.waitTime, + a.actualMileage, + a.state, + (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(a.startTime)) / 60 as travelTime from t_order a left join t_app_user b on (a.userId = b.id) where a.id = #{orderId} diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java index 58aa711..648e12e 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java @@ -76,5 +76,5 @@ * @return * @throws Exception */ - OrderInfoWarpper queryOrderInfo(Long orderId) throws Exception; + OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception; } diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java index b7067c1..d26afc6 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java @@ -104,15 +104,13 @@ * 司机上线且空闲,下单直接给当前司机,其余进大厅 * 司机下的订单不需要创建新用户,且只能走线下支付 */ + int count = this.selectCount(new EntityWrapper<Order>().eq("userPhone", addOrderWarpper.getPhone()).eq("status", 1).in("state", Arrays.asList(101, 102, 103, 104, 105, 106, 201))); if(count > 0){ return ResultUtil.error("该用户还有未完成的订单"); } Driver driver = driverService.selectById(uid); DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1)); - if(null == driverWork){ - return ResultUtil.error("请先上班"); - } Order order1 = this.selectOne(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201))); Order order = new Order(); if(driverWork != null && null == order1){ @@ -577,8 +575,19 @@ } + /** + * 获取订单详情 + * @param orderId + * @return + * @throws Exception + */ @Override - public OrderInfoWarpper queryOrderInfo(Long orderId) throws Exception { - return null; + public OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception { + OrderInfoWarpper orderInfoWarpper = this.baseMapper.queryOrderInfo(orderId); + String value = redisUtil.getValue("DRIVER" + uid); + Map<String, Double> distance = GeodesyUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value); + Double wgs84 = distance.get("WGS84"); + orderInfoWarpper.setCurrentDistance(wgs84); + return orderInfoWarpper; } } diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java index 829b219..8a1837f 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java @@ -41,6 +41,12 @@ private Double estimatedMileage; @ApiModelProperty("起步价") private Double startPrice; + @ApiModelProperty("等待时长") + private Integer waitTime; + @ApiModelProperty("行驶里程") + private Double actualMileage; + @ApiModelProperty("行驶时间") + private Integer travelTime; @ApiModelProperty("订单状态(101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待评价,108=已完成,201=转单中,301=已取消)") private Integer state; } diff --git a/management/guns-admin/pom.xml b/management/guns-admin/pom.xml index ebeb9ff..d4f4371 100644 --- a/management/guns-admin/pom.xml +++ b/management/guns-admin/pom.xml @@ -248,6 +248,15 @@ <scope>system</scope> <systemPath>${project.basedir}/lib/proguard.jar</systemPath> </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpmime</artifactId> + <version>4.5.6</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-redis</artifactId> + </dependency> <!--引入本地工行支付jar end--> </dependencies> diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/config/WxConfig.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/config/WxConfig.java new file mode 100644 index 0000000..182b6cc --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/config/WxConfig.java @@ -0,0 +1,48 @@ +package com.stylefeng.guns.modular.system.config; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 项目中需继承此类 + * + * @author lihen + */ +@Component +@ConfigurationProperties(prefix = "wx.conf") +public class WxConfig { + + /** + * 获取 App ID + * + * @return App ID + */ + @JsonProperty("appId") + public String appId; + + /** + * 获取 Secret + * + * @return Secret + */ + @JsonProperty("secret") + public String secret; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java index 4e3dabe..4df1237 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java @@ -127,7 +127,6 @@ @RequestMapping(value = "/add") @ResponseBody public Object add(TAgent tAgent) { - System.err.println(tAgent); String[] split = tAgent.getAreaId().split("/"); // 查询省市 // 黑龙江省/大兴安岭地区 diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java index db2eab3..2e10b03 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAppUserController.java @@ -3,13 +3,17 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.log.LogObjectHolder; +import com.stylefeng.guns.modular.system.controller.resp.TAppUserResp; import com.stylefeng.guns.modular.system.controller.util.ExcelUtil; import com.stylefeng.guns.modular.system.enums.CouponStatusEnum; +import com.stylefeng.guns.modular.system.enums.OrderStateEnum; import com.stylefeng.guns.modular.system.exports.TAppUserExceptionExport; import com.stylefeng.guns.modular.system.model.TAppUser; import com.stylefeng.guns.modular.system.model.TCoupon; +import com.stylefeng.guns.modular.system.model.TOrder; import com.stylefeng.guns.modular.system.service.ITAppUserService; import com.stylefeng.guns.modular.system.service.ITCouponService; +import com.stylefeng.guns.modular.system.service.ITOrderService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; @@ -18,10 +22,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; +import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -46,6 +52,8 @@ private ITAppUserService tAppUserService; @Autowired private ITCouponService tCouponService; + @Autowired + private ITOrderService tOrderService; /** * 跳转到首页 @@ -139,7 +147,6 @@ @RequestMapping("/userDetail") public String userDetail(Integer tAppUserId, Model model) { tAppUserService.detail(tAppUserId,model); - return PREFIX + "tAppUserDetail.html"; } @@ -164,7 +171,30 @@ EntityWrapper<TAppUser> wrapper = tAppUserService.getUserListWrapper(createTime,nickname,phone,id,status); // 是否异常 wrapper.eq("is_exception",2); - return tAppUserService.selectList(wrapper); + List<TAppUser> tAppUsers = tAppUserService.selectList(wrapper); + List<TAppUserResp> tAppUserRespList = new ArrayList<>(tAppUsers.size()); + for (TAppUser tAppUser : tAppUsers) { + TAppUserResp tAppUserResp = new TAppUserResp(); + BeanUtils.copyProperties(tAppUser,tAppUserResp); + List<TCoupon> tCoupons = tCouponService.selectList(new EntityWrapper<TCoupon>().eq("user_id", tAppUser.getId())); + List<TCoupon> notUsedList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.NOT_USED.getCode())).collect(Collectors.toList()); + tAppUserResp.setCouponSum(tCoupons.size()); + tAppUserResp.setNotUsedCount(notUsedList.size()); + List<TOrder> orders = tOrderService.selectList(new EntityWrapper<TOrder>().eq("userId", tAppUser.getId()).orderBy(true,"createTime",false)); + if(!CollectionUtils.isEmpty(orders)){ + List<TOrder> collect1 = orders.stream().filter(order->Objects.nonNull(order.getState())) + .filter(order -> OrderStateEnum.WAIT_EVALUATED.getCode() == order.getState() || + OrderStateEnum.FINISH.getCode() == order.getState()).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(collect1)) { + tAppUserResp.setConsumeSum(collect1.size()); + // 总消费金额 + collect1.stream().map(TOrder::getPayMoney).reduce(BigDecimal::add) + .ifPresent(tAppUserResp::setConsumePrice); + } + } + tAppUserRespList.add(tAppUserResp); + } + return tAppUserRespList; } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java index d49eb15..eb37640 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java @@ -1,19 +1,25 @@ package com.stylefeng.guns.modular.system.controller.general; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.shiro.ShiroUser; import com.stylefeng.guns.modular.system.controller.resp.TDriverResp; -import com.stylefeng.guns.modular.system.controller.util.ExcelUtil; -import com.stylefeng.guns.modular.system.model.TAgent; -import com.stylefeng.guns.modular.system.model.TAppUser; +import com.stylefeng.guns.modular.system.controller.util.*; +import com.stylefeng.guns.modular.system.model.*; +import com.stylefeng.guns.modular.system.service.ITAgentService; +import com.stylefeng.guns.modular.system.service.ITBranchOfficeService; +import com.stylefeng.guns.modular.system.service.ITRegionService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.apache.logging.log4j.core.util.UuidUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.shiro.subject.Subject; +import org.springframework.beans.BeanUtils; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; @@ -23,10 +29,10 @@ import org.springframework.beans.factory.annotation.Autowired; import com.stylefeng.guns.core.log.LogObjectHolder; import org.springframework.web.bind.annotation.RequestParam; -import com.stylefeng.guns.modular.system.model.TDriver; import com.stylefeng.guns.modular.system.service.ITDriverService; import javax.servlet.http.HttpServletResponse; +import java.io.File; import java.io.OutputStream; import java.math.BigDecimal; import java.text.DateFormat; @@ -34,6 +40,7 @@ import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 控制器 @@ -50,12 +57,35 @@ @Autowired private ITDriverService tDriverService; + @Autowired + private ITRegionService tRegionService; + + @Autowired + private ITAgentService tAgentService; + + @Autowired + private ITBranchOfficeService tBranchOfficeService; + @Autowired + private RedisTemplate<String,String> redisTemplate; + @Autowired + private HttpUtils httpUtils; + @Autowired + private TokenUtils tokenUtils; + /** * 跳转到首页 */ @RequestMapping("") public String index() { return PREFIX + "tDriver.html"; + } + + /** + * 跳转到佣金首页 + */ + @RequestMapping("/commission") + public String commissionIndex() { + return PREFIX + "tDriverCommission.html"; } /** @@ -69,10 +99,31 @@ /** * 跳转到修改 */ - @RequestMapping("/tDriver_update/{tDriverId}") - public String tDriverUpdate(@PathVariable Integer tDriverId, Model model) { + @RequestMapping("/tDriver_update") + public String tDriverUpdate( Integer tDriverId, Model model) { TDriver tDriver = tDriverService.selectById(tDriverId); - model.addAttribute("item",tDriver); + TDriverResp tDriverResp = new TDriverResp(); + BeanUtils.copyProperties(tDriver,tDriverResp); + + // 查询邀请人 + TDriver tDriver1 = tDriverService.selectById(tDriver.getInviterId()); + if(Objects.nonNull(tDriver1)){ + tDriverResp.setInviterName(tDriver1.getName()); + tDriverResp.setInviterPhone(tDriver1.getPhone()); + } + + // 查询区域 + TRegion district = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", tDriver.getAreaCode()) + .last("LIMIT 1")); + TRegion city = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", tDriver.getCityCode()) + .last("LIMIT 1")); + + tDriverResp.setArea(tDriver.getProvinceName()+"/"+tDriver.getCityName()+"/"+tDriver.getAreaName()); + if(Objects.nonNull(district) && Objects.nonNull(city)){ + tDriverResp.setAreaId(city.getParentId()+"/"+city.getId()+"/"+district.getId()); + } + + model.addAttribute("item",tDriverResp); LogObjectHolder.me().set(tDriver); return PREFIX + "tDriver_edit.html"; } @@ -139,9 +190,39 @@ */ @RequestMapping("/driverDetail") public String driverDetail(Integer tDriverId, Model model) { - tDriverService.detail(tDriverId,model); - + tDriverService.auditPage(tDriverId,model); return PREFIX + "tDriverDetail.html"; + } + + /** + * 跳转区域页面 + */ + @RequestMapping("/areaPage") + public String areaDetail(String area,String areaId,Model model) { + List<TRegion> tRegions = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", 0)); + model.addAttribute("provinceList",tRegions); + List<Integer> provinceIds = tRegions.stream().map(TRegion::getId).collect(Collectors.toList()); + // 查询市 + List<TRegion> tRegions1 = tRegionService.selectList(new EntityWrapper<TRegion>().in("parent_id", provinceIds)); + model.addAttribute("cityList",tRegions1); + + // 查询区 + List<Integer> cityIds = tRegions1.stream().map(TRegion::getId).collect(Collectors.toList()); + List<TRegion> tRegions2 = tRegionService.selectList(new EntityWrapper<TRegion>().in("parent_id", cityIds)); + model.addAttribute("districtList",tRegions2); + + if(StringUtils.hasLength(area) && StringUtils.hasLength(areaId)){ + String[] split = area.split("/"); + model.addAttribute("provinceName",split[0]); + model.addAttribute("cityName",split[1]); + model.addAttribute("districtName",split[2]); + + String[] split1 = areaId.split("/"); + model.addAttribute("provinceId",split1[0]); + model.addAttribute("cityId",split1[1]); + model.addAttribute("districtId",split1[2]); + } + return PREFIX + "tDriverArea.html"; } /** @@ -151,6 +232,17 @@ @ResponseBody public Object list(String createTime,String phone,Integer status) { EntityWrapper<TDriver> wrapper = tDriverService.getPageList(createTime,phone,status); + wrapper.ne("isException",2); + List<TDriver> tDrivers = tDriverService.selectList(wrapper); + return tDriverService.getTDriverResp(tDrivers); + } + /** + * 获取佣金列表 + */ + @RequestMapping(value = "/commission/list") + @ResponseBody + public Object commissionList(String name,String phone,Integer status) { + EntityWrapper<TDriver> wrapper = tDriverService.getCommissionPageList(name,phone,status); wrapper.ne("isException",2); List<TDriver> tDrivers = tDriverService.selectList(wrapper); return tDriverService.getTDriverResp(tDrivers); @@ -174,6 +266,24 @@ @ResponseBody public Object listBack(String condition) { return tDriverService.selectList(null); + } + /** + * ocr + */ + @RequestMapping(value = "/ocr") + @ResponseBody + public Object ocr(String imgUrl) { + /*String accessToken = redisTemplate.opsForValue().get(TokenUtils.ACCESS_TOKEN_CACHE_KEY); + if (!StringUtils.hasLength(accessToken)) { + accessToken = tokenUtils.getSimpleAccessToken(); + } + File file = new File(imgUrl); + String url = Constant.OCR_URL.replace("MODE", "scan").replace("ACCESS_TOKEN", accessToken); + String result = httpUtils.registRequest(url, file); + JSONObject jsonObject = JSONObject.parseObject(result); + System.err.println(jsonObject); + return jsonObject;*/ + return tDriverService.ocr(imgUrl); } /** @@ -200,6 +310,12 @@ @RequestMapping(value = "/add") @ResponseBody public Object add(TDriver tDriver) { + + int count = tDriverService.selectCount(new EntityWrapper<TDriver>().eq("phone", tDriver.getPhone())); + if(count>0){ + return "该司机已存在!"; + } + tDriverService.addOrUpdate(tDriver); tDriverService.insert(tDriver); return SUCCESS_TIP; } @@ -252,6 +368,9 @@ @RequestMapping(value = "/update") @ResponseBody public Object update(TDriver tDriver) { +// Object ocr = ocr("E:\\071bf986db0b00355c0ed190bbd3b16.png"); +// System.err.println(ocr); + tDriverService.addOrUpdate(tDriver); tDriverService.updateById(tDriver); return SUCCESS_TIP; } @@ -265,6 +384,24 @@ return tDriverService.selectById(tDriverId); } + @ApiOperation(value = "省查询",notes="省查询") + @RequestMapping(value = "/areaProvince") + @ResponseBody + public Object areaProvince(Model model) { + return tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", 0)); + } + + @ApiOperation(value = "市区查询",notes="市区查询") + @RequestMapping(value = "/areaCity") + @ResponseBody + public Object areaCity(Integer parentId,Model model) { + List<TRegion> tRegions = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", parentId)); + model.addAttribute("list",tRegions); + return tRegions; + } + + + @ApiOperation(value = "导出司机列表",notes="导出司机列表") @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/AccessTokenRespBody.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/AccessTokenRespBody.java new file mode 100644 index 0000000..040dec1 --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/AccessTokenRespBody.java @@ -0,0 +1,38 @@ +package com.stylefeng.guns.modular.system.controller.resp; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.io.Serializable; + +/** + * 接收accessToken实体 + */ +public class AccessTokenRespBody extends RespBody implements Serializable { + + /** + * 获取到的凭证 + */ + @JsonProperty("access_token") + private String accessToken; + /** + * 凭证有效时间,单位:秒 + */ + @JsonProperty("expires_in") + private int expiresIn; + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public int getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(int expiresIn) { + this.expiresIn = expiresIn; + } +} \ No newline at end of file diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/RespBody.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/RespBody.java new file mode 100644 index 0000000..4f8c789 --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/RespBody.java @@ -0,0 +1,33 @@ +package com.stylefeng.guns.modular.system.controller.resp; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * @author ck + * @ClassName RespBody + * @Description + * @date 2023-02-23 11:44 + */ +public class RespBody { + @JsonProperty("errcode") + private Integer errorCode; + + @JsonProperty("errmsg") + private String errorMsg; + + public Integer getErrorCode() { + return errorCode; + } + + public void setErrorCode(Integer errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } +} \ No newline at end of file diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TAppUserResp.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TAppUserResp.java new file mode 100644 index 0000000..2522e2f --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TAppUserResp.java @@ -0,0 +1,54 @@ +package com.stylefeng.guns.modular.system.controller.resp; + +import com.stylefeng.guns.modular.system.model.TAppUser; +import com.stylefeng.guns.modular.system.model.TOrder; +import io.swagger.annotations.ApiModelProperty; + +import java.math.BigDecimal; + +public class TAppUserResp extends TAppUser { + + @ApiModelProperty(value = "优惠券总数") + private Integer couponSum; + + @ApiModelProperty(value = "剩余优惠券") + private Integer notUsedCount; + + @ApiModelProperty(value = "消费次数") + private Integer consumeSum; + + @ApiModelProperty(value = "历史消费") + private BigDecimal consumePrice; + + public Integer getCouponSum() { + return couponSum; + } + + public void setCouponSum(Integer couponSum) { + this.couponSum = couponSum; + } + + public Integer getNotUsedCount() { + return notUsedCount; + } + + public void setNotUsedCount(Integer notUsedCount) { + this.notUsedCount = notUsedCount; + } + + public Integer getConsumeSum() { + return consumeSum; + } + + public void setConsumeSum(Integer consumeSum) { + this.consumeSum = consumeSum; + } + + public BigDecimal getConsumePrice() { + return consumePrice; + } + + public void setConsumePrice(BigDecimal consumePrice) { + this.consumePrice = consumePrice; + } +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TDriverResp.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TDriverResp.java index cc7c340..3230778 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TDriverResp.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TDriverResp.java @@ -25,6 +25,55 @@ @ApiModelProperty(value = "连续未上线天数") private Integer notOnlineCount; + + @ApiModelProperty(value = "邀请人姓名") + private String inviterName; + + @ApiModelProperty(value = "邀请人电话") + private String inviterPhone; + + @ApiModelProperty(value = "加盟区域") + private String area; + + @ApiModelProperty(value = "加盟区域ID") + private String areaId; + + @Override + public String getAreaId() { + return areaId; + } + + @Override + public void setAreaId(String areaId) { + this.areaId = areaId; + } + + public String getInviterName() { + return inviterName; + } + + public void setInviterName(String inviterName) { + this.inviterName = inviterName; + } + + public String getInviterPhone() { + return inviterPhone; + } + + public void setInviterPhone(String inviterPhone) { + this.inviterPhone = inviterPhone; + } + + @Override + public String getArea() { + return area; + } + + @Override + public void setArea(String area) { + this.area = area; + } + public Integer getNotOnlineCount() { return notOnlineCount; } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/Constant.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/Constant.java new file mode 100644 index 0000000..3cff83b --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/Constant.java @@ -0,0 +1,28 @@ +package com.stylefeng.guns.modular.system.controller.util; + +public class Constant { + + /** + * OCR识别地址 + */ + public static final String OCR_URL = "https://api.weixin.qq.com/cv/ocr/driving?type=MODE&access_token=ACCESS_TOKEN"; + + /** + * 请求参数 + * 属性 类型 默认值 必填 说明 + * grant_type string 是 填写 client_credential + * appid string 是 小程序唯一凭证,即 AppID,可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态) + * secret string 是 小程序唯一凭证密钥,即 AppSecret,获取方式同 appid + * 返回值 + * Object + * 返回的 JSON 数据包 + * <p> + * 属性 类型 说明 + * access_token string 获取到的凭证 + * expires_in number 凭证有效时间,单位:秒。目前是7200秒之内的值。 + * errcode number 错误码 + * errmsg string 错误信息 + */ + public static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"; + +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/HttpUtils.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/HttpUtils.java new file mode 100644 index 0000000..084d76d --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/HttpUtils.java @@ -0,0 +1,295 @@ +package com.stylefeng.guns.modular.system.controller.util; + +import com.google.common.collect.Lists; +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.HttpStatus; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.FileBody; +import org.apache.http.entity.mime.content.StringBody; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.net.SocketTimeoutException; +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class HttpUtils { + + private Logger log = LoggerFactory.getLogger(this.getClass()); + + private final static String KEY = "5cc9622f299335639dbc046f3812c52a"; + + //请求超时时间 + private final static Integer TIME_OUT = 1000; + //http连接池 + private static volatile PoolingHttpClientConnectionManager poolingHttpClientConnectionManager; + //请求配置 + private static RequestConfig requestConfig; + + public static PoolingHttpClientConnectionManager getPoolingHttpClientConnectionManager() { + if (poolingHttpClientConnectionManager == null) { + synchronized (HttpUtils.class) { + if (poolingHttpClientConnectionManager == null) { + poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); + //连接池最大连接数 + poolingHttpClientConnectionManager.setMaxTotal(1024); + //每个路由最大连接数 + poolingHttpClientConnectionManager.setDefaultMaxPerRoute(32); + + //配置请求的超时设置 + requestConfig = + RequestConfig.custom().setConnectionRequestTimeout(TIME_OUT).setConnectTimeout(TIME_OUT).setSocketTimeout(TIME_OUT).build(); + } + } + } + return poolingHttpClientConnectionManager; + } + + public static CloseableHttpClient getHttpClient() { + return HttpClients.custom().setConnectionManager(getPoolingHttpClientConnectionManager()).setDefaultRequestConfig(requestConfig).build(); + } + + /** + * 请求发送执行 + * + * @param httpMethd + * @return + */ + public String registRequest(HttpUriRequest httpMethd) { + CloseableHttpClient httpClient = getHttpClient(); + CloseableHttpResponse httpResponse = null; + try { + httpResponse = httpClient.execute(httpMethd, HttpClientContext.create()); + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + log.error("响应失败 statusCode {}", statusCode); + httpMethd.abort(); + } + log.debug("响应成功 statusCode {}", statusCode); + String response = EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8); + log.debug("响应成功 response {}", response); + return response; + } catch (ConnectTimeoutException e) { + throw new RuntimeException("接口超时"); + } catch (SocketTimeoutException e) { + throw new RuntimeException("读取接口数据超时"); + } catch (IOException e) { + throw new RuntimeException("接口请求失败,请尝试检查网络环境或请求接口是否能正常访问"); + } finally { + // 关闭响应 + try { + if (httpResponse != null) { + httpResponse.close(); + } + // 关闭连接 + //httpClient.close(); + } catch (IOException e) { + throw new RuntimeException("关闭流异常:IOException"); + } + } + } + + /** + * 请求发送执行 + * + * @param url + * @return + */ + public String registRequest(String url, File file) { + CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse httpResponse = null; + try { + HttpPost httpPost = new HttpPost(url); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(5000) + .build(); + httpPost.setConfig(requestConfig); + HttpEntity entity = MultipartEntityBuilder.create().addPart("img", new FileBody(file)).build(); + httpPost.setEntity(entity); + httpResponse = httpClient.execute(httpPost); + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + log.error("响应失败 statusCode {}", statusCode); + httpPost.abort(); + } + log.debug("响应成功 statusCode {}", statusCode); + String response = EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8); + log.debug("响应成功 response {}", response); + return response; + } catch (ConnectTimeoutException e) { + throw new RuntimeException("接口超时"); + } catch (SocketTimeoutException e) { + throw new RuntimeException("读取接口数据超时"); + } catch (IOException e) { + throw new RuntimeException("接口请求失败,请尝试检查网络环境或请求接口是否能正常访问"); + } finally { + // 关闭响应 + try { + if (httpResponse != null) { + httpResponse.close(); + } + // 关闭连接 + httpClient.close(); + } catch (IOException e) { + throw new RuntimeException("关闭流异常:IOException"); + } + } + } + + /** + * + * @param type + * @param file + * @return + * @throws Exception + */ + public String ocr(String type, File file){ + CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse response = null; + String result = null; + // HttpClient请求的相关设置,可以不用配置,用默认的参数,这里设置连接和超时时长(毫秒) + RequestConfig config = RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build(); + try { + HttpPost httppost = new HttpPost("http://v.juhe.cn/certificates/query"); + // FileBody封装File类型的参数 + FileBody bin = new FileBody(file); + // StringBody封装String类型的参数 + StringBody keyBody = new StringBody(KEY, ContentType.TEXT_PLAIN); + StringBody typeBody = new StringBody(type, ContentType.TEXT_PLAIN); + // addPart将参数传入,并指定参数名称 + HttpEntity reqEntity = MultipartEntityBuilder.create() + .addPart("pic", bin).addPart("key", keyBody) + .addPart("cardType", typeBody).build(); + httppost.setEntity(reqEntity); + httppost.setConfig(config); + // 执行网络请求并返回结果 + response = httpClient.execute(httppost); + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + result = ConvertStreamToString(resEntity.getContent(), "UTF-8"); + } + EntityUtils.consume(resEntity); + } catch (Exception e) { + throw new RuntimeException("接口请求失败,请尝试检查网络环境或请求接口是否能正常访问"+":"+e); + } finally { + try { + response.close(); + httpClient.close(); + } catch (IOException e) { + throw new RuntimeException("流关闭失败!"+":"+e); + } + } + // 得到的是JSON类型的数据需要第三方解析JSON的jar包来解析 + return result; + } + + // 此方法是把传进的字节流转化为相应的字符串并返回,此方法一般在网络请求中用到 + public static String ConvertStreamToString(InputStream is, String charset) + throws Exception { + StringBuilder sb = new StringBuilder(); + try (InputStreamReader inputStreamReader = new InputStreamReader(is,charset)) { + try (BufferedReader reader = new BufferedReader(inputStreamReader)) { + String line = null; + while ((line = reader.readLine()) != null) { + sb.append(line).append("\r\n"); + } + } + } + return sb.toString(); + } + + public List<BasicNameValuePair> toPairs(Map<String, Object> params) { + List<BasicNameValuePair> pairs = Lists.newArrayList(); + if (params != null && !params.isEmpty()) { + pairs = params.entrySet().stream().map(entry -> new BasicNameValuePair(entry.getKey(), + entry.getValue().toString())).collect(Collectors.toList()); + } + return pairs; + } + + /** + * get url请求 + * + * @param url + * @return + */ + public String get(String url) { + HttpGet request = new HttpGet(); + try { + request.setURI(new URI(url)); + return registRequest(request); + } catch (Exception e) { + log.error("请求失败", e); + } + return null; + } + + /** + * PSOT URL方式提交 + * + * @param url 请求url + * @param params 请求参数 + * @return + */ + public String postFromUrl(String url, Map<String, Object> params) { + HttpPost request = new HttpPost(url); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(10000) + .setConnectTimeout(5000) + .build(); + request.setConfig(requestConfig); + request.setEntity(new UrlEncodedFormEntity(toPairs(params), Consts.UTF_8)); + return registRequest(request); + } + + /** + * PSOT JSON方式提交 + * + * @param url 请求url + * @param params json串 + * @return + */ + public String postFromJson(String url, String params) { + HttpPost request = new HttpPost(url); + request.setHeader("Content-type", "application/json"); + request.setHeader("Accept", "application/json"); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(8000) + .setConnectTimeout(6000) + .build(); + request.setConfig(requestConfig); + StringEntity entity = new StringEntity(params, StandardCharsets.UTF_8); + entity.setContentType("application/json"); + request.setEntity(entity); + try { + return registRequest(request); + } catch (Exception e) { + log.error("请求失败", e); + } + return null; + } +} + diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/TokenUtils.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/TokenUtils.java new file mode 100644 index 0000000..cf18ad9 --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/TokenUtils.java @@ -0,0 +1,53 @@ +package com.stylefeng.guns.modular.system.controller.util; + +import com.stylefeng.guns.modular.system.config.WxConfig; +import com.stylefeng.guns.modular.system.controller.resp.AccessTokenRespBody; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.client.RestTemplate; + +import java.text.MessageFormat; +import java.util.concurrent.TimeUnit; + +/** + * @Description + * @Author xiaochen + * @Date 2021/11/5/00519:26 + */ +@Component +public class TokenUtils { + public final static String ACCESS_TOKEN_CACHE_KEY = "accessToken"; + @Autowired + private RedisTemplate<String, String> redisTemplate; + @Autowired + private WxConfig wxConfig; + @Autowired + private RestTemplate wxRestTemplate; + @Autowired + private WxJsonUtils wxJsonUtils; +// @Autowired +// private RedisUtils redisUtils; + + /** + * @return + */ + public String getSimpleAccessToken() { + String accessToken = redisTemplate.opsForValue().get(ACCESS_TOKEN_CACHE_KEY); + if (StringUtils.hasLength(accessToken)) { + return accessToken; + } + String requestUrl = MessageFormat.format(Constant.ACCESS_TOKEN_URL, wxConfig.getAppId(), wxConfig.getSecret()); + String respBody = wxRestTemplate.getForEntity(requestUrl, String.class).getBody(); + AccessTokenRespBody accessTokenRespBody = wxJsonUtils.parseObject(respBody, AccessTokenRespBody.class); + // 判断有误异常 + if (StringUtils.hasLength(accessTokenRespBody.getErrorMsg())) { + // 抛出错误 + throw new RuntimeException(accessTokenRespBody.getErrorCode() + ":" + accessTokenRespBody.getErrorMsg()); + } + redisTemplate.opsForValue().set(ACCESS_TOKEN_CACHE_KEY, accessTokenRespBody.getAccessToken(), 2, TimeUnit.HOURS); + return accessTokenRespBody.getAccessToken(); + } + +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UUIDUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UUIDUtil.java new file mode 100644 index 0000000..394feb2 --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UUIDUtil.java @@ -0,0 +1,99 @@ +package com.stylefeng.guns.modular.system.controller.util; + + + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.UUID; + +/** + * 定义生成随机码的工具类 + */ +public class UUIDUtil { + + private int i = 1; + + + /** + * 定义生成原生的UUID随机码 + * @return + */ + public static String getNativeUUID(){ + return UUID.randomUUID().toString(); + } + + + /** + * 生成32位随机码 + * @return + */ + public static String getRandomCode(){ + return UUIDUtil.getNativeUUID().replaceAll("-", ""); + } + + + /** + * 获取给定长度的随机码 + * @param num + * @return + * @throws Exception + */ + public static String getRandomCode(Integer num) throws Exception{ + String str = null; + if(0 < num){ + if(num % 32 > 0){ + Integer s = num / 32; + Integer l = num % 32; + StringBuffer sb = new StringBuffer(); + for(int i = 0; i < s; i++){ + sb.append(UUIDUtil.getRandomCode()); + } + sb.append(UUIDUtil.getRandomCode().substring(0, l)); + str = sb.toString(); + }else if(num % 32 == 0){ + Integer s = num / 32; + StringBuffer sb = new StringBuffer(); + for(int i = 0; i < s; i++){ + sb.append(UUIDUtil.getRandomCode()); + } + str = sb.toString(); + }else{ + str = UUIDUtil.getRandomCode().substring(0, num); + } + }else{ + throw new Exception("参数只能大于0"); + } + return str; + } + + + /** + * 获取根据当前时间的字符串数据 + * @return + */ + public synchronized static String getTimeStr(){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + return simpleDateFormat.format(new Date()); + } + + + + /** + * @Description: 获取数字随机码 + * @Author pzb + * @Date 2021/8/11 16:52 + * @Param + * @Return + * @Exception + */ + public static String getNumberRandom(Integer num){ + if(null == num){ + num = 32; + } + StringBuffer sb = new StringBuffer(); + for(int i = 0; i < num; i++){ + sb.append(Double.valueOf(Math.random() * 10).intValue()); + } + return sb.toString(); + } +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/WxJsonUtils.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/WxJsonUtils.java new file mode 100644 index 0000000..3d170f8 --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/WxJsonUtils.java @@ -0,0 +1,109 @@ +package com.stylefeng.guns.modular.system.controller.util; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Component +public final class WxJsonUtils { + + private Logger log = LoggerFactory.getLogger(this.getClass()); + + public static final String dateFormat = "yyyy-MM-dd"; + public static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + private static final ObjectMapper OM = new ObjectMapper(); + private static final JavaTimeModule timeModule = new JavaTimeModule(); + + /** + * 转换LocalDateTime + */ + static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { + @Override + public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(localDateTime.format(DateTimeFormatter.ofPattern(dateTimeFormat))); + } + } + + /** + * 转换LocalDate + */ + static class LocalDateSerializer extends JsonSerializer<LocalDate> { + @Override + public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(localDate.format(DateTimeFormatter.ofPattern(dateFormat))); + } + } + + /** + * 设置 ObjectMapper + * + * @return + */ + private ObjectMapper getObjectMapper() { + // 序列化 + timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer()); + timeModule.addSerializer(LocalDate.class, new LocalDateSerializer()); + // 反序列化 + timeModule.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(dateTimeFormat))); + timeModule.addDeserializer(LocalDate.class, + new LocalDateDeserializer(DateTimeFormatter.ofPattern(dateFormat))); + // 允许对象忽略json中不存在的属性 + OM.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + OM.registerModule(timeModule); + return OM; + } + + /** + * 将对象序列化 + */ + public <T> String toJsonString(T obj) { + try { + ObjectMapper om = getObjectMapper(); + return om.writeValueAsString(obj); + } catch (JsonProcessingException e) { + log.error("转json字符串失败:{}", obj); + return null; + } + } + + /** + * 反序列化对象字符串 + */ + public <T> T parseObject(String json, Class<T> clazz) { + try { + ObjectMapper om = getObjectMapper(); + return om.readValue(json, clazz); + } catch (IOException e) { + throw new RuntimeException("反序列化对象字符串失败"); + } + } + + /** + * 反序列化字符串成为对象 + */ + public <T> T parseObject(String json, TypeReference<T> valueTypeRef) { + try { + ObjectMapper om = getObjectMapper(); + return om.readValue(json, valueTypeRef); + } catch (IOException e) { + throw new RuntimeException("反序列化字符串成为对象失败"); + } + } + +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderRefusalMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderRefusalMapper.java index 2cbe428..e54ca9b 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderRefusalMapper.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderRefusalMapper.java @@ -2,6 +2,7 @@ import com.stylefeng.guns.modular.system.model.TOrderRefusal; import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; /** * <p> @@ -11,6 +12,7 @@ * @author stylefeng * @since 2023-02-21 */ +@Mapper public interface TOrderRefusalMapper extends BaseMapper<TOrderRefusal> { } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java index 778bd4f..53dbfca 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java @@ -131,6 +131,10 @@ */ private Integer integral; /** + * 剩余积分 + */ + private Double score; + /** * 状态(1=正常,2=冻结,3=删除) */ private Integer status; @@ -165,6 +169,48 @@ @ApiModelProperty(value = "驾驶证初次领证时间") private Date firstCertificateTime; + @ApiModelProperty(value = "佣金") + private BigDecimal commission; + + @TableField(exist = false) + @ApiModelProperty(value = "区域") + private String area; + + @TableField(exist = false) + @ApiModelProperty(value = "区域id") + private String areaId; + + public BigDecimal getCommission() { + return commission; + } + + public void setCommission(BigDecimal commission) { + this.commission = commission; + } + + public Double getScore() { + return score; + } + + public void setScore(Double score) { + this.score = score; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getAreaId() { + return areaId; + } + + public void setAreaId(String areaId) { + this.areaId = areaId; + } public Date getFirstCertificateTime() { return firstCertificateTime; diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverService.java index 0da500f..8da146e 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverService.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITDriverService.java @@ -1,5 +1,6 @@ package com.stylefeng.guns.modular.system.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.modular.system.controller.resp.TDriverResp; import com.stylefeng.guns.modular.system.model.TDriver; @@ -42,10 +43,25 @@ void auditPage(Integer id, Model model); /** - * 跳转详情页面 - * @param tDriverId - * @param model + * 聚合ocr识别 + * @param imgUrl + * @return */ - void detail(Integer tDriverId, Model model); + JSONObject ocr(String imgUrl); + + /** + * 新增修改处理数据 + * @param tDriver + */ + void addOrUpdate(TDriver tDriver); + + /** + * 查询佣金列表 + * @param name + * @param phone + * @param status + * @return + */ + EntityWrapper<TDriver> getCommissionPageList(String name, String phone, Integer status); } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java index 3ba7242..584192f 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java @@ -168,7 +168,7 @@ if(!CollectionUtils.isEmpty(tDrivers)){ // 司机数 - List<TDriver> drivers = tDrivers.stream().filter(driver -> driver.getAgentId().equals(tAgent.getId())).collect(Collectors.toList()); + List<TDriver> drivers = tDrivers.stream().filter(driver -> tAgent.getId().equals(driver.getAgentId())).collect(Collectors.toList()); tAgentResp.setDriverCount(drivers.size()); // 司机充值计算 List<Integer> driverIds = drivers.stream().map(TDriver::getId).collect(Collectors.toList()); diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAppUserServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAppUserServiceImpl.java index ceb0da7..a151726 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAppUserServiceImpl.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAppUserServiceImpl.java @@ -53,7 +53,7 @@ model.addAttribute("nickname",tAppUser.getNickname()); model.addAttribute("remark",tAppUser.getRemark()); model.addAttribute("createTime",DateUtil.formatDate(tAppUser.getCreateTime())); - // 客户渠道 + // todo 客户渠道 model.addAttribute("customerChannel",""); // 消费信息:优惠券数据 @@ -61,6 +61,7 @@ List<TCoupon> notUsedList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.NOT_USED.getCode())).collect(Collectors.toList()); List<TCoupon> usedList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.USED.getCode())).collect(Collectors.toList()); List<TCoupon> expiredList = tCoupons.stream().filter(coupon -> coupon.getCouponStatus().equals(CouponStatusEnum.EXPIRED.getCode())).collect(Collectors.toList()); + model.addAttribute("couponSum",tCoupons.size()); model.addAttribute("notUsedCount",notUsedList.size()); model.addAttribute("usedCount",usedList.size()); model.addAttribute("expiredCount",expiredList.size()); diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java index 9d0bbb6..a3d2fd9 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java @@ -1,13 +1,17 @@ package com.stylefeng.guns.modular.system.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.modular.system.controller.resp.TDriverResp; +import com.stylefeng.guns.modular.system.controller.util.HttpUtils; +import com.stylefeng.guns.modular.system.controller.util.UUIDUtil; import com.stylefeng.guns.modular.system.dao.*; import com.stylefeng.guns.modular.system.enums.OrderStateEnum; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.ITDriverService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.stylefeng.guns.modular.system.service.ITRegionService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -15,6 +19,8 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.io.File; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.Period; @@ -47,6 +53,14 @@ private TDriverMapper tDriverMapper; @Autowired private TAppUserMapper tAppUserMapper; + @Autowired + private TOrderRefusalMapper tOrderRefusalMapper; + @Autowired + private TRegionMapper tRegionMapper; + @Autowired + private ITRegionService itRegionService; + @Autowired + private HttpUtils httpUtils; @Override public EntityWrapper<TDriver> getPageList(String createTime, String phone, Integer status) { @@ -104,10 +118,9 @@ && order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) && order.getState().equals(OrderStateEnum.FINISH.getCode()) && new SimpleDateFormat("yyyyMM").format(order.getCreateTime()).equals(monthDate)).collect(Collectors.toList()); tDriverResp.setMonthOrderCount(monthOrderCount.size()); - // TODO 拒单次数 - List<TOrder> refusalCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) - && order.getState().equals(OrderStateEnum.CANCELED.getCode())).collect(Collectors.toList()); - tDriverResp.setRefusalCount(refusalCount.size()); + // 拒单次数 + List<TOrderRefusal> driverRefusalList = tOrderRefusalMapper.selectList(new EntityWrapper<TOrderRefusal>().eq("driver_id", tDriver.getId())); + tDriverResp.setRefusalCount(driverRefusalList.size()); tDriverRespList.add(tDriverResp); } @@ -122,6 +135,7 @@ model.addAttribute("id",tDriver.getId()); model.addAttribute("code",tDriver.getCode()); model.addAttribute("name",tDriver.getName()); + model.addAttribute("avatar",tDriver.getAvatar()); model.addAttribute("phone",tDriver.getPhone()); model.addAttribute("sex",tDriver.getSex()); model.addAttribute("driverLicenseNumber",tDriver.getDriverLicenseNumber()); @@ -134,21 +148,32 @@ model.addAttribute("provinceName",tDriver.getProvinceName()); model.addAttribute("cityName",tDriver.getCityName()); model.addAttribute("areaName",tDriver.getAreaName()); + model.addAttribute("integral",tDriver.getIntegral()); + model.addAttribute("score",tDriver.getScore()); model.addAttribute("createTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tDriver.getCreateTime())); // 计算驾龄 - ZoneId zoneId = ZoneId.systemDefault(); - LocalDate firstTime = tDriver.getFirstCertificateTime().toInstant().atZone(zoneId).toLocalDate(); - LocalDate now = tDriver.getFirstCertificateTime().toInstant().atZone(zoneId).toLocalDate(); - Period period = Period.between(firstTime, now); - model.addAttribute("drivingExperience",period.getYears()); + if(Objects.nonNull(tDriver.getFirstCertificateTime())){ + ZoneId zoneId = ZoneId.systemDefault(); + LocalDate firstTime = tDriver.getFirstCertificateTime().toInstant().atZone(zoneId).toLocalDate(); + LocalDate now = tDriver.getFirstCertificateTime().toInstant().atZone(zoneId).toLocalDate(); + Period period = Period.between(firstTime, now); + model.addAttribute("drivingExperience",period.getYears()); + }else { + model.addAttribute("drivingExperience",0); + } List<TOrder> tOrders = tOrderMapper.selectList(new EntityWrapper<TOrder>()); String monthDate = new SimpleDateFormat("yyyyMM").format(new Date()); - // 设置余额 - tDriver.setBalance(tDriver.getBackgroundBalance().add(tDriver.getBalance())); + if(Objects.nonNull(tDriver.getBackgroundBalance()) && Objects.nonNull(tDriver.getBalance())){ + // 设置余额 + tDriver.setBalance(tDriver.getBackgroundBalance().add(tDriver.getBalance())); + model.addAttribute("balance",tDriver.getBalance()); + }else { + model.addAttribute("balance",BigDecimal.ZERO); + } // 所属代理商 TAgent tAgent = tAgentMapper.selectById(tDriver.getAgentId()); @@ -166,17 +191,27 @@ } // 查询邀请人 - if(1 == tDriver.getInviterType()){ + if(Objects.nonNull(tDriver.getInviterType()) && 1 == tDriver.getInviterType()){ TAppUser tAppUser = tAppUserMapper.selectById(tDriver.getInviterId()); model.addAttribute("inviterName",tAppUser.getNickname()); model.addAttribute("inviterPhone",tAppUser.getPhone()); - }else if(2 == tDriver.getInviterType()){ + }else if(Objects.nonNull(tDriver.getInviterType()) && 2 == tDriver.getInviterType()){ TDriver tDriver1 = tDriverMapper.selectById(tDriver.getInviterId()); model.addAttribute("inviterName",tDriver1.getName()); model.addAttribute("inviterPhone",tDriver1.getPhone()); }else { model.addAttribute("inviterName",""); model.addAttribute("inviterPhone",""); + } + + // 查询当前用户邀请了哪些人 + List<TDriver> list = tDriverMapper.selectList(new EntityWrapper<TDriver>().eq("inviterId", tDriver.getId())); + if(!CollectionUtils.isEmpty(list)){ + model.addAttribute("inviterCount",list.size()); + model.addAttribute("inviterCommission",0); + }else { + model.addAttribute("inviterCommission",0); + model.addAttribute("inviterCount",0); } if(!CollectionUtils.isEmpty(tOrders)){ @@ -189,21 +224,101 @@ && order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) && order.getState().equals(OrderStateEnum.FINISH.getCode()) && new SimpleDateFormat("yyyyMM").format(order.getCreateTime()).equals(monthDate)).collect(Collectors.toList()); model.addAttribute("monthOrderCount",monthOrderCount.size()); - // TODO 拒单次数 - List<TOrder> refusalCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) - && order.getState().equals(OrderStateEnum.CANCELED.getCode())).collect(Collectors.toList()); - model.addAttribute("refusalCount",refusalCount.size()); + // 拒单次数 + List<TOrderRefusal> driverRefusalList = tOrderRefusalMapper.selectList(new EntityWrapper<TOrderRefusal>().eq("driver_id", tDriver.getId())); + model.addAttribute("refusalCount",driverRefusalList.size()); + // todo 累计收入 + model.addAttribute("cumulativeIncome",0); }else { - model.addAttribute("cumulativeOrderCount",""); - model.addAttribute("monthOrderCount",""); - model.addAttribute("refusalCount",""); + model.addAttribute("cumulativeOrderCount",0); + model.addAttribute("monthOrderCount",0); + model.addAttribute("refusalCount",0); + // 累计收入 + model.addAttribute("cumulativeIncome",0); } } @Override - public void detail(Integer tDriverId, Model model) { - auditPage(tDriverId,model); - // TODO 查询司机 - TDriver tDriver = tDriverMapper.selectById(tDriverId); + public JSONObject ocr(String imgUrl) { + File file = new File(imgUrl); + String result = httpUtils.ocr("2", file); + JSONObject jsonObject = JSONObject.parseObject(result); + return jsonObject; + } + + @Override + public void addOrUpdate(TDriver tDriver) { + // 对省市区做处理 + String[] split = tDriver.getAreaId().split("/"); + // 查询省市 + // 黑龙江省/大兴安岭地区 + // 702/852 + TRegion province = tRegionMapper.selectById(split[0]); + tDriver.setProvinceName(province.getName()); + tDriver.setProvinceCode(province.getCode()); + + TRegion city = tRegionMapper.selectById(split[1]); + if(Objects.isNull(city)){ + city = itRegionService.selectOne(new EntityWrapper<TRegion>().eq("name",split[1])); + } + tDriver.setCityName(city.getName()); + tDriver.setCityCode(city.getCode()); + + TRegion area = tRegionMapper.selectById(split[2]); + if(Objects.isNull(area)){ + area = itRegionService.selectOne(new EntityWrapper<TRegion>().eq("name",split[2])); + } + tDriver.setAreaName(area.getName()); + tDriver.setAreaCode(area.getCode()); + + tDriver.setCode(UUIDUtil.getNumberRandom(16)); + tDriver.setBalance(BigDecimal.ZERO); + tDriver.setBackgroundBalance(BigDecimal.ZERO); + + // 通过省市查询代理商 + List<TAgent> tAgent = tAgentMapper.selectList(new EntityWrapper<TAgent>().eq("provinceCode", province.getCode()) + .eq("cityCode", city.getCode()) + .last("LIMIT 1")); + if(!CollectionUtils.isEmpty(tAgent)){ + tDriver.setAgentId(tAgent.get(0).getId()); + } + // 查询邀约人(司机端) + List<TDriver> emergencyDriver = tDriverMapper.selectList(new EntityWrapper<TDriver>().eq("phone", tDriver.getEmergencyPhone()) + .last("LIMIT 1")); + if(!CollectionUtils.isEmpty(emergencyDriver)){ + tDriver.setInviterId(emergencyDriver.get(0).getId()); + tDriver.setInviterType(2); + } + // 通过省市区查询分公司 + List<TBranchOffice> tBranchOffice = tBranchOfficeMapper.selectList(new EntityWrapper<TBranchOffice>().eq("provinceCode", province.getCode()) + .eq("cityCode", city.getCode()) + .eq("districtCode", area.getCode()) + .last("LIMIT 1")); + if(!CollectionUtils.isEmpty(tBranchOffice)){ + tDriver.setBranchOfficeId(tBranchOffice.get(0).getId()); + } + + // ocr识别 +// JSONObject ocr = this.ocr("E:\\071bf986db0b00355c0ed190bbd3b16.png"); +// System.err.println(ocr); + } + + @Override + public EntityWrapper<TDriver> getCommissionPageList(String name, String phone, Integer status) { + EntityWrapper<TDriver> wrapper = new EntityWrapper<>(); + // 手机号 + if(StringUtils.hasLength(phone)){ + wrapper.like("phone",phone); + } + // 状态 + if(Objects.nonNull(status)){ + wrapper.eq("status",status); + } + // 姓名 + if(StringUtils.hasLength(name)){ + wrapper.like("name",name); + } + wrapper.orderBy(true,"approvalStatus"); + return wrapper; } } diff --git a/management/guns-admin/src/main/resources/application.yml b/management/guns-admin/src/main/resources/application.yml index f4ab612..abbfe9c 100644 --- a/management/guns-admin/src/main/resources/application.yml +++ b/management/guns-admin/src/main/resources/application.yml @@ -16,12 +16,12 @@ spring: profiles: active: local - datasource: - url: jdbc:mysql://192.168.0.80:3306/super_save_driving?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8 - username: root - password: 123456 - db-name: super_save_driving #用来搜集数据库的所有表 - filters: wall,mergeStat +# datasource: +# url: jdbc:mysql://192.168.0.80:3306/super_save_driving?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8 +# username: root +# password: 123456 +# db-name: super_save_driving #用来搜集数据库的所有表 +# filters: wall,mergeStat mvc: static-path-pattern: /static/** view: @@ -35,6 +35,12 @@ multipart: max-request-size: 100MB max-file-size: 100MB + redis: + #测试环境 + host: 127.0.0.1 + port: 6379 + timeout: 5000 + database: 10 mybatis-plus: type-aliases-package: com.stylefeng.guns.modular.system.model @@ -44,8 +50,10 @@ configuration: configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射 log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #输出Sql,如需打印Sql注释该配置 - - +wx: + conf: + appId: wx3613e8d4c8624ea1 + secret: 25782eabe39e796a92d2fcb38947e7dc #eureka: # client: diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html index a86a8cf..ae8f418 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html @@ -3,71 +3,82 @@ <div class="ibox-content"> <div class="form-horizontal"> - <div class="row"> - <input hidden id="areaId" value="areaId"> - <div class="col-sm-12"> - <div class="form-group"> - <label class="col-sm-3 control-label">负责人姓名:</label> - <div class="col-sm-6"> - <input class="form-control" id="principal" name="principal" type="text"> + <div class="row" > + <div class="col-sm-12" style="text-align: center"> + <input hidden id="areaId" value="areaId"> + <div class="initialLevel col-sm-12 control-label form-group" style="text-align: center"> + <div class="initialLevel col-sm-6 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >负责人姓名:</label> + <input id="principal" name="principal" type="text" style="height: 30px" required> </div> </div> - <div class="hr-line-dashed"></div> - </div> - <div class="col-sm-12"> - <div class="form-group"> - <label class="col-sm-3 control-label">联系电话:</label> - <div class="col-sm-6"> - <input class="form-control" id="principalPhone" name="principalPhone" type="text"> + <!--<div class="col-sm-12"> + <div class="form-group"> + <span style="color:red">*</span> + <label class="col-sm-3 control-label">负责人姓名:</label> + <div class="col-sm-6"> + <input class="form-control" id="principal" name="principal" type="text"> + </div> + </div> + <div class="hr-line-dashed"></div> + </div>--> + <div class="initialLevel col-sm-12 control-label form-group"> + <div class="initialLevel col-sm-6 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >联系电话:</label> + <input id="principalPhone" name="principalPhone" type="number" style="height: 30px" required> </div> </div> - <div class="hr-line-dashed"></div> - </div> - <div class="col-sm-12"> - <div class="form-group"> - <label class="col-sm-3 control-label">邮箱:</label> - <div class="col-sm-6"> - <input class="form-control" id="email" name="email" type="text"> + + <div class="initialLevel col-sm-12 control-label form-group"> + <div class="initialLevel col-sm-6 control-label form-group" > + <label class="control-label" >邮箱:</label> + <input id="email" name="email" type="email" style="height: 30px" required> </div> </div> - <div class="hr-line-dashed"></div> + + <div class="initialLevel col-sm-12 control-label form-group"> + <div class="initialLevel col-sm-6 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >代理区域:</label> + <input id="area" onclick="TAgent.area()" name="area" placeholder="请选择" style="height: 30px" readonly> + </div> + </div> + + <!--<div class="col-sm-12"> + <div class="form-group"> + <span style="color:red">*</span> + <label class="col-sm-3 control-label">代理区域:</label> + <div class="col-sm-6"> + <input class="form-control" id="area" onclick="TAgent.area()" name="area" type="text" placeholder="请选择"> + </div> + </div> + <div class="hr-line-dashed"></div> + </div>--> + + <div class="initialLevel col-sm-12 control-label form-group"> + <div class="initialLevel col-sm-6 control-label form-group" > + <label class="control-label" >开户银行:</label> + <input id="bankDeposit" name="bankDeposit" type="text" style="height: 30px" required> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group"> + <div class="initialLevel col-sm-6 control-label form-group" > + <label class="control-label" >银行账户:</label> + <input id="bankAccount" name="bankAccount" type="number" style="height: 30px" required> + </div> + </div> + </div> - <div class="col-sm-12"> - <div class="form-group"> - <label class="col-sm-3 control-label">代理区域:</label> - <div class="col-sm-6"> - <input class="form-control" id="area" onclick="TAgent.area()" name="area" type="text" placeholder="请选择"> - </div> - </div> - <div class="hr-line-dashed"></div> - </div> - - <div class="col-sm-12"> - <div class="form-group"> - <label class="col-sm-3 control-label">开户银行:</label> - <div class="col-sm-6"> - <input class="form-control" id="bankDeposit" name="bankDeposit" type="text"> - </div> - </div> - <div class="hr-line-dashed"></div> - </div> - - <div class="col-sm-12"> - <div class="form-group"> - <label class="col-sm-3 control-label">银行账户:</label> - <div class="col-sm-6"> - <input class="form-control" id="bankAccount" name="bankAccount" type="text"> - </div> - </div> - <div class="hr-line-dashed"></div> - </div> </div> <div class="row btn-group-m-t"> <div class="col-sm-10" style="text-align: center"> - <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TAgentInfoDlg.addSubmit()"/> <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TAgentInfoDlg.close()"/> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TAgentInfoDlg.addSubmit()"/> </div> </div> </div> diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetail.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetail.html index c587b89..2fa1341 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetail.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetail.html @@ -18,7 +18,7 @@ <div class="initialLevel col-sm-12 control-label form-group" > <div class="initialLevel col-sm-1 control-label form-group" style="margin-left: 10px" > - <img src="https://lmg.jj20.com/up/allimg/1114/040221103339/210402103339-7-1200.jpg" /> + <img src="${avatar}" style="height: 100px;width: 100px"/> </div> <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >昵称:</label> diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetailException.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetailException.html index 49027f2..aa752b8 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetailException.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAppUser/tAppUserDetailException.html @@ -18,7 +18,7 @@ <div class="initialLevel col-sm-12 control-label form-group" > <div class="initialLevel col-sm-1 control-label form-group" style="margin-left: 10px" > - <img src="https://lmg.jj20.com/up/allimg/1114/040221103339/210402103339-7-1200.jpg" /> + <img src="${avatar}" style="height: 100px;width: 100px"/> </div> <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >昵称:</label> diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverArea.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverArea.html new file mode 100644 index 0000000..2876b71 --- /dev/null +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverArea.html @@ -0,0 +1,57 @@ +@layout("/common/_container.html"){ +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12" style="height: 100px;"> + <input hidden id="provinceName" value="${provinceName}"> + <input hidden id="cityName" value="${cityName}"> + <input hidden id="districtName" value="${districtName}"> + <input hidden id="provinceId" value="${provinceId}"> + <input hidden id="cityId" value="${cityId}"> + <input hidden id="districtId" value="${districtId}"> + + <div class="col-sm-4 control-label"> + <label class="col-sm-1" style="width: 20px;">省:</label> + <select class="input-group col-sm-2 " onclick="TDriver.areaCity()" id="province" style="width: 200px;height: 33px" name="province"> + <option value="">请选择省</option> + @for(i in provinceList){ + <option id="${i.id}" value="${i.name}"${i.name == provinceName ? 'selected=selected' : ''}>${i.name}</option> + @} + </select> + </div> + <div class="col-sm-4 control-label"> + <label class="col-sm-1" style="width: 20px;">市:</label> + <select class="input-group col-sm-2" onclick="TDriver.areaDistrict()" id="city" style="width: 200px;height: 33px" name="city"> + <option>请选择市</option> + @for(city in cityList){ + <option id="${city.id}" value="${city.name}"${city.name == cityName ? 'selected=selected' : ''}>${city.name}</option> + @} + </select> + </div> + <div class="col-sm-4 control-label"> + <label class="col-sm-1" style="width: 20px;">区:</label> + <select class="input-group col-sm-2" id="district" style="width: 200px;height: 33px" name="district"> + <option>请选择区</option> + @for(district in districtList){ + <option id="${district.id}" value="${district.name}"${district.name == districtName ? 'selected=selected' : ''}>${district.name}</option> + @} + </select> + </div> + </div> + <div class="hidden-xs" id="TAppUserTableToolbar" role="group" style="text-align:center"> + <#button name="取消" icon="fa-plus" clickFun="TDriverInfoDlg.close()" /> + <#button name="确定" icon="fa-plus" clickFun="TDriver.submitArea()"/> + </div> + + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/static/modular/system/tDriver/tDriver.js"></script> +<script src="${ctxPath}/static/modular/system/tDriver/tDriver_info.js"></script> +<script type="text/javascript"> +</script> +@} diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverAudit.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverAudit.html index 161689d..64a22d6 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverAudit.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverAudit.html @@ -25,7 +25,7 @@ </div> <div class="initialLevel col-sm-2 control-label form-group" > <label class="control-label">头像:</label> - <img src="https://lmg.jj20.com/up/allimg/1114/040221103339/210402103339-7-1200.jpg" /> + <img src="${avatar}" style="height: 100px;width: 100px"/> </div> <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label">紧急联系人:</label> @@ -89,11 +89,11 @@ <div class="initialLevel col-sm-12 control-label form-group" > <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >驾驶证照片:</label> - <img src="https://lmg.jj20.com/up/allimg/1114/040221103339/210402103339-7-1200.jpg" /> + <img src="${driverLicense}" style="height: 100px;width: 100px"/> </div> <div class="initialLevel col-sm-2 control-label form-group" > <label class="control-label">身份证照片:</label> - <img src="https://lmg.jj20.com/up/allimg/1114/040221103339/210402103339-7-1200.jpg" /> + <img src="${idcardFront}" style="height: 100px;width: 100px"/> </div> </div> diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverCommission.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverCommission.html new file mode 100644 index 0000000..5fb163e --- /dev/null +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverCommission.html @@ -0,0 +1,61 @@ +@layout("/common/_container.html"){ +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-title"> + <h5>管理</h5> + </div> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + <div class="col-sm-3"> + <#NameCon id="phone" name="手机号" /> + </div> + <div class="col-sm-3"> + <#NameCon id="name" name="司机姓名" /> + </div> + <div class="col-sm-1"> + <select class="input-group" id="status" style="width: 80px;height: 33px" name="status"> + <option value="">状态</option> + <option value="1">正常</option> + <option value="2">冻结</option> + </select> + </div> + <div class="col-sm-3"> + <#button name="搜索" icon="fa-search" clickFun="TDriverCommission.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TDriverCommission.resetSearch()" space="true"/> + </div> + <div class="col-sm-3"> + <button type="button" class="btn btn-primary " onclick="TDriverCommission.export()" id="export"> + <i class="fa "></i> 导出 + </button> + </div> + </div> + <!--<div class="hidden-xs" id="TDriverTableToolbar" role="group"> + @if(shiro.hasPermission("/tDriver/add")){ + <#button name="添加" icon="fa-plus" clickFun="TDriver.openAddTDriver()"/> + @} + @if(shiro.hasPermission("/tDriver/update")){ + <#button name="修改" icon="fa-edit" clickFun="TDriver.openTDriverDetail()" space="true"/> + @} + @if(shiro.hasPermission("/tDriver/delete")){ + <#button name="删除" icon="fa-remove" clickFun="TDriver.delete()" space="true"/> + @} + </div>--> + <#table id="TDriverCommissionTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/static/modular/system/tDriver/tDriverCommission.js"></script> +<script type="text/javascript"> + laydate.render({ + elem: '#createTime', + type: 'date', + range: true + }); +</script> +@} diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverDetail.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverDetail.html index a4a6e19..d77e2c5 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverDetail.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriverDetail.html @@ -66,11 +66,11 @@ <div class="initialLevel col-sm-12 control-label form-group" > <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >身份证正面照:</label> - <img src="https://lmg.jj20.com/up/allimg/1114/040221103339/210402103339-7-1200.jpg" /> + <img src="${idcardFront}" style="height: 100px;width: 100px"/> </div> <div class="initialLevel col-sm-2 control-label form-group" > <label class="control-label">身份证背面照:</label> - <img src="https://lmg.jj20.com/up/allimg/1114/040221103339/210402103339-7-1200.jpg" /> + <img src="${idcardBack}" style="height: 100px;width: 100px"/> </div> </div> @@ -96,38 +96,38 @@ <div class="initialLevel col-sm-12 control-label form-group" > <div class="initialLevel col-sm-2 control-label form-group" > <label class="control-label" >累计订单:</label> - <label>${name}</label> + <label>${cumulativeOrderCount}</label> </div> <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >邀约用户人数:</label> - <label>${idcard}</label> + <label>${inviterCount}</label> </div> <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >累计获得佣金:</label> - <label>${idcard}</label> + <label>${inviterCommission}</label> </div> <div class="initialLevel col-sm-2 control-label form-group" > <label class="control-label" >当前积分:</label> - <label>${idcard}</label> + <label>${integral}</label> </div> <div class="initialLevel col-sm-2 control-label form-group" > <label class="control-label" >代驾次数:</label> - <label>${idcard}</label> + <label>${cumulativeOrderCount}</label> </div> </div> <div class="initialLevel col-sm-12 control-label form-group" > <div class="initialLevel col-sm-2 control-label form-group" > <label class="control-label" >累计获得收入:</label> - <label>${name}</label> + <label>${cumulativeIncome}</label> </div> <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >钱包余额:</label> - <label>${idcard}</label> + <label>${balance}</label> </div> <div class="initialLevel col-sm-3 control-label form-group" > <label class="control-label" >评论分数:</label> - <label>${idcard}</label> + <label>${score}</label> </div> </div> @@ -152,13 +152,13 @@ </div> <script src="${ctxPath}/static/modular/system/tDriver/tDriver.js"></script> <script src="${ctxPath}/static/modular/system/tDriver/tDriver_info.js"></script> -<script src="${ctxPath}/static/modular/system/tOrderRefusal/tOrderRefusal.js"></script> +<script src="${ctxPath}/static/modular/system/tDriver/tOrderRefusal.js"></script> <script type="text/javascript"> - /*$(function () { + $(function () { var queryData = {}; queryData['condition'] = $("#driverId").val();; TOrderRefusal.table.refresh({query: queryData}); - });*/ + }); laydate.render({ elem: '#createTime', type: 'date', diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html index 615e008..90fb3a1 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html @@ -1,53 +1,132 @@ @layout("/common/_container.html"){ -<div class="ibox float-e-margins"> - <div class="ibox-content"> - <div class="form-horizontal"> - - <div class="row"> - <div class="col-sm-6 b-r"> - <#input id="id" name="主键" underline="true"/> - <#input id="code" name="编号" underline="true"/> - <#input id="name" name="姓名" underline="true"/> - <#input id="avatar" name="头像" underline="true"/> - <#input id="phone" name="手机号" underline="true"/> - <#input id="password" name="密码" underline="true"/> - <#input id="sex" name="性别(1=男,2=女)" underline="true"/> - <#input id="source" name="来源(1=)" underline="true"/> - <#input id="emergencyContact" name="紧急联系人" underline="true"/> - <#input id="emergencyPhone" name="紧急联系电话" underline="true"/> - <#input id="driverLicenseNumber" name="驾驶证号码" underline="true"/> - <#input id="driverLicense" name="驾驶证照片" underline="true"/> - <#input id="idcard" name="身份证号码" underline="true"/> - <#input id="idcardFront" name="身份证正面照"/> - </div> - - <div class="col-sm-6"> - <#input id="idcardBack" name="身份证背面照" underline="true"/> - <#input id="inviterType" name="邀约人类型(1=用户,2=司机)" underline="true"/> - <#input id="inviterId" name="邀约人id" underline="true"/> - <#input id="agentId" name="代理商id" underline="true"/> - <#input id="branchOfficeId" name="分公司id" underline="true"/> - <#input id="balance" name="账户余额" underline="true"/> - <#input id="approvalStatus" name="审核状态(1=待审核,2=已同意,3=已拒绝)" underline="true"/> - <#input id="approvalNotes" name="审核注释" underline="true"/> - <#input id="approvalUserId" name="审核用户id" underline="true"/> - <#input id="approvalTime" name="审核时间" underline="true"/> - <#input id="serverStatus" name="服务状态(1=空闲,2=服务中)" underline="true"/> - <#input id="integral" name="剩余积分" underline="true"/> - <#input id="status" name="状态(1=正常,2=冻结,3=删除)" underline="true"/> - <#input id="createTime" name="添加时间" underline="true"/> - </div> +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-title"> + <h5>添加</h5> </div> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <input hidden id="areaId" value="${areaId}"> + <hr/> + <div class="initialLevel col-sm-12 control-label form-group" > + <div style="background-color: gray;height: 35px;line-height: 35px"> + <label style="color: #0C0C0C;text-align:left;">司机信息</label> + </div> + </div> + <hr/> + <div class="col-sm-12" style="cursor: pointer;text-align: right;"> + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >姓名:</label> + <input id="name" type="text" style="height: 30px" required> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >手机号:</label> + <input id="phone" type="number" style="height: 30px" required> + </div> + </div> - <div class="row btn-group-m-t"> - <div class="col-sm-10"> - <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TDriverInfoDlg.addSubmit()"/> - <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TDriverInfoDlg.close()"/> + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >紧急联系人姓名:</label> + <input id="emergencyContact" type="text" style="height: 30px" required> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >紧急联系人电话:</label> + <input id="emergencyPhone" type="number" style="height: 30px" required> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <label class="control-label" >邀约人姓名:</label> + <input id="inviterName" type="text" style="height: 30px"> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <label class="control-label" >邀约人电话:</label> + <input id="inviterPhone" type="number" style="height: 30px"> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >服务区域:</label> + <input id="area" onclick="TDriver.area()" name="area" placeholder="请选择" style="height: 30px" readonly required> + </div> + </div> + </div> + + <hr/> + <div class="initialLevel col-sm-12 control-label form-group" > + <div style="background-color: gray;height: 35px;line-height: 35px"> + <label style="color: #0C0C0C;text-align:right">认证资料</label> + </div> + </div> + <hr/> + + <div class="col-sm-12"> + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >身份证号码:</label> + <input id="idcard" type="text" style="height: 30px" required> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >身份证正面照:</label> + <#uploadImg id="idcardFront"/> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >身份证背面照:</label> + <#uploadImg id="idcardBack"/> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >驾驶证:</label> + <#uploadImg id="driverLicense"/> + </div> + </div> + </div> + </div> + </div> + + <div class="row btn-group-m-t"> + <div class="col-sm-10" style="text-align: center"> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TDriverInfoDlg.close()"/> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TDriverInfoDlg.addSubmit()"/> + </div> </div> </div> </div> - </div> </div> <script src="${ctxPath}/static/modular/system/tDriver/tDriver_info.js"></script> +<script src="${ctxPath}/static/modular/system/tDriver/tDriver.js"></script> +<script type="text/javascript"> + $(function () { + var idCardPositive = new $WebUpload("idcardFront"); + idCardPositive.setUploadBarId("progressBar"); + idCardPositive.init(); + var idCardPositive = new $WebUpload("idcardBack"); + idCardPositive.setUploadBarId("progressBar"); + idCardPositive.init(); + var idCardPositive = new $WebUpload("driverLicense"); + idCardPositive.setUploadBarId("progressBar"); + idCardPositive.init(); + }); +</script> @} diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html index 4ca8c12..d2b958c 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html @@ -1,5 +1,121 @@ @layout("/common/_container.html"){ -<div class="ibox float-e-margins"> +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + <div class="ibox-title"> + <h5>添加</h5> + </div> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <input hidden id="id" value="${item.id}"/> + <input hidden id="areaId" value="${item.areaId}"> + <hr/> + <div class="initialLevel col-sm-12 control-label form-group" > + <div style="background-color: gray;height: 35px;line-height: 35px"> + <label style="color: #0C0C0C;text-align:left;">司机信息</label> + </div> + </div> + <hr/> + <div class="col-sm-12" style="cursor: pointer;text-align: right;"> + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >姓名:</label> + <input id="name" value="${item.name}" type="text" style="height: 30px" required> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >手机号:</label> + <input id="phone" value="${item.phone}" type="number" style="height: 30px" required> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >紧急联系人姓名:</label> + <input id="emergencyContact" value="${item.emergencyContact}" type="text" style="height: 30px" required> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >紧急联系人电话:</label> + <input id="emergencyPhone" value="${item.emergencyPhone}" type="number" style="height: 30px" required> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <label class="control-label" >邀约人姓名:</label> + <input id="inviterName" value="${item.inviterName}" type="text" style="height: 30px"> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <label class="control-label" >邀约人电话:</label> + <input id="inviterPhone" value="${item.inviterPhone}" type="number" style="height: 30px"> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >服务区域:</label> + <input id="area" value="${item.area}" onclick="TDriver.area()" name="area" placeholder="请选择" style="height: 30px" readonly required> + </div> + </div> + </div> + + <hr/> + <div class="initialLevel col-sm-12 control-label form-group" > + <div style="background-color: gray;height: 35px;line-height: 35px"> + <label style="color: #0C0C0C;text-align:right">认证资料</label> + </div> + </div> + <hr/> + + <div class="col-sm-12"> + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >身份证号码:</label> + <input id="idcard" value="${item.idcard}" type="text" style="height: 30px" required> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >身份证正面照:</label> + <#uploadImg id="idcardFront" fileImg="${item.idcardFront}"/> + </div> + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >身份证背面照:</label> + <#uploadImg id="idcardBack" fileImg="${item.idcardBack}"/> + </div> + </div> + + <div class="initialLevel col-sm-12 control-label form-group" > + <div class="initialLevel col-sm-3 control-label form-group" > + <span style="color:red">*</span> + <label class="control-label" >驾驶证:</label> + <#uploadImg id="driverLicense" fileImg="${item.driverLicense}"/> + </div> + </div> + </div> + </div> + </div> + + <div class="row btn-group-m-t"> + <div class="col-sm-10" style="text-align: center"> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TDriverInfoDlg.close()"/> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TDriverInfoDlg.editSubmit()"/> + </div> + </div> + </div> + </div> + </div> +</div> +<!--<div class="ibox float-e-margins"> <div class="ibox-content"> <div class="form-horizontal"> @@ -48,6 +164,27 @@ </div> </div> -</div> +</div>--> <script src="${ctxPath}/static/modular/system/tDriver/tDriver_info.js"></script> +<script src="${ctxPath}/static/modular/system/tDriver/tDriver.js"></script> +<script type="text/javascript"> + $(function () { + if('' == $("#inviterName").val()){ + $("#inviterName").val('') + } + if('' == $("#inviterPhone").val()){ + $("#inviterPhone").val('') + } + + var idCardPositive = new $WebUpload("idcardFront"); + idCardPositive.setUploadBarId("progressBar"); + idCardPositive.init(); + var idCardPositive = new $WebUpload("idcardBack"); + idCardPositive.setUploadBarId("progressBar"); + idCardPositive.init(); + var idCardPositive = new $WebUpload("driverLicense"); + idCardPositive.setUploadBarId("progressBar"); + idCardPositive.init(); + }); +</script> @} diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUser.js b/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUser.js index 5722d7d..2c50279 100644 --- a/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUser.js +++ b/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUser.js @@ -28,7 +28,11 @@ } } }, - {title: '头像', field: 'avatar', visible: true, align: 'center', valign: 'middle'}, + {title: '头像', field: 'avatar', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row) { + return '<img src="'+row.avatar+'" style="height: 60px;width: 60px"/>' + } + }, {title: '微信openid', field: 'openid', visible: true, align: 'center', valign: 'middle'}, {title: '微信unionid', field: 'unionid', visible: true, align: 'center', valign: 'middle'}, {title: '紧急联系人', field: 'emergencyContact', visible: true, align: 'center', valign: 'middle'}, diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUserException.js b/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUserException.js index 6676c27..f607262 100644 --- a/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUserException.js +++ b/management/guns-admin/src/main/webapp/static/modular/system/tAppUser/tAppUserException.js @@ -18,10 +18,10 @@ {title: '用户ID', field: 'id', visible: true, align: 'center', valign: 'middle'}, {title: '用户昵称', field: 'nickname', visible: true, align: 'center', valign: 'middle'}, {title: '手机号', field: 'phone', visible: true, align: 'center', valign: 'middle'}, - {title: '剩余优惠券', field: 'sex', visible: true, align: 'center', valign: 'middle'}, - {title: '优惠券总数', field: 'avatar', visible: true, align: 'center', valign: 'middle'}, - {title: '消费次数', field: 'openid', visible: true, align: 'center', valign: 'middle'}, - {title: '历史消费', field: 'unionid', visible: true, align: 'center', valign: 'middle'}, + {title: '剩余优惠券', field: 'notUsedCount', visible: true, align: 'center', valign: 'middle'}, + {title: '优惠券总数', field: 'couponSum', visible: true, align: 'center', valign: 'middle'}, + {title: '消费次数', field: 'consumeSum', visible: true, align: 'center', valign: 'middle'}, + {title: '历史消费', field: 'consumePrice', visible: true, align: 'center', valign: 'middle'}, {title: '最后一次消费时间', field: 'emergencyContact', visible: true, align: 'center', valign: 'middle'}, {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle'}, {title: '操作', visible: true, align: 'center', valign: 'middle',width:150, diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js index 4a3d3a5..84ef40e 100644 --- a/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js +++ b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js @@ -102,7 +102,7 @@ var index = layer.open({ type: 2, title: '添加', - area: ['800px', '420px'], //宽高 + area: ['100%', '100%'], //宽高 fix: false, //不固定 maxmin: true, content: Feng.ctxPath + '/tDriver/tDriver_add' @@ -118,7 +118,7 @@ var index = layer.open({ type: 2, title: '详情', - area: ['800px', '420px'], //宽高 + area: ['100%', '100%'], //宽高 fix: false, //不固定 maxmin: true, content: Feng.ctxPath + '/tDriver/tDriver_update/' + TDriver.seItem.id @@ -302,6 +302,106 @@ }; /** + * 打开区域选择页面 + */ +TDriver.area = function () { + + var area = $("#area").val(); + var areaId = $("#areaId").val(); + + var index = layer.open({ + type: 2, + title: '区域选择', + area: ['1000px', '270px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDriver/areaPage?area='+area+'&areaId='+areaId + }); + this.layerIndex = index; +} + +/** + * 查询市 + */ +TDriver.areaCity = function () { + var province = document.getElementById('province'); + var index= province.selectedIndex ; + var id = province.options[index].id; + var ajax = new $ax(Feng.ctxPath + "/tDriver/areaCity?parentId="+id, function (data) { + var opts=document.getElementById('city').options; + opts.length=0;// 这一句是清空原有列表项 + for(var i=0,n=data.length;i<n;i++){ + var data1=data[i]; + var opt=new Option(data1.name,data1.id,true,true); + opts.add(opt); + } + }, function (data) { + Feng.error("查询失败!" + data.responseJSON.message + "!"); + }); + ajax.start(); +} + +/** + * 查询区 + */ +TDriver.areaDistrict = function () { + var city = document.getElementById('city'); + var cityIndex= city.selectedIndex ; + var id = city.options[cityIndex].value; + var ajax = new $ax(Feng.ctxPath + "/tDriver/areaCity?parentId="+id, function (data) { + var opts=document.getElementById('district').options; + opts.length=0;// 这一句是清空原有列表项 + for(var i=0,n=data.length;i<n;i++){ + var data1=data[i]; + var opt=new Option(data1.name,data1.id,true,true); + opts.add(opt); + } + }, function (data) { + Feng.error("查询失败!" + data.responseJSON.message + "!"); + }); + ajax.start(); +} + +/** + * 选择省市 + */ +TDriver.submitArea = function () { + var province = document.getElementById('province'); + var provinceIndex= province.selectedIndex ; + var provinceName = province.options[provinceIndex].value; + var provinceId = province.options[provinceIndex].id; + + var city = document.getElementById('city'); + var cityIndex= city.selectedIndex ; + var cityId = city.options[cityIndex].value; + var cityName = city.options[cityIndex].innerText; + + var district = document.getElementById('district'); + var districtIndex= district.selectedIndex ; + var districtId = district.options[districtIndex].value; + var districtName = district.options[districtIndex].innerText; + + parent.$("#area").val(provinceName+'/'+cityName+'/'+districtName) + parent.$("#areaId").val(provinceId+'/'+cityId+'/'+districtId) + TDriverInfoDlg.close(); +} + +/** + * 打开编辑页面 + */ +TDriver.updateInfo = function (id) { + var index = layer.open({ + type: 2, + title: '编辑', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDriver/tDriver_update?tDriverId='+id + }); + this.layerIndex = index; +} + +/** * 查询列表 */ TDriver.search = function () { diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriverCommission.js b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriverCommission.js new file mode 100644 index 0000000..ac01992 --- /dev/null +++ b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriverCommission.js @@ -0,0 +1,227 @@ +/** + * 管理初始化 + */ +var TDriverCommission = { + id: "TDriverCommissionTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; + +/** + * 初始化表格的列 + */ +TDriverCommission.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: '主键', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '姓名', field: 'name', visible: true, align: 'center', valign: 'middle'}, + {title: '手机号', field: 'phone', visible: true, align: 'center', valign: 'middle'}, + {title: '所属代理商', field: 'agentName', visible: true, align: 'center', valign: 'middle'}, + {title: '性别', field: 'sex', visible: false, align: 'center', valign: 'middle', + formatter: function (value, row) { + if (row.sex === 1){ + return '<span>男</span>' + }else if (row.sex === 2){ + return '<span>女</span>' + }else { + return '<span>未知</span>' + } + }}, + {title: '推广人数', field: 'cumulativeOrderCount', visible: true, align: 'center', valign: 'middle'}, + {title: '关联人数', field: 'cumulativeOrderCount', visible: true, align: 'center', valign: 'middle'}, + {title: '累计获得佣金', field: 'cumulativeOrderCount', visible: true, align: 'center', valign: 'middle'}, + {title: '可提现佣金', field: 'monthOrderCount', visible: true, align: 'center', valign: 'middle'}, + {title: '已提现金额', field: 'integral', visible: true, align: 'center', valign: 'middle'}, + {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row) { + if (row.status === 1){ + return '<span>正常</span>' + }else if (row.status === 2){ + return '<span>冻结</span>' + }else if (row.status === 3){ + return '<span>已删除</span>' + } + }}, + {title: '操作', visible: true, align: 'center', valign: 'middle',width:150, + formatter: function (value, row) { + if (row.status === 1){ + return '<a href="#" onclick="TDriverCommission.searchTDriverDetail('+row.id+')" style="color:green">详情</a>' + }else if (row.status === 2){ + return '<a href="#" onclick="TDriverCommission.searchTDriverDetail('+row.id+')" style="color:green">详情</a>' + } + } + } + ]; +}; + +/** + * 检查是否选中 + */ +TDriverCommission.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TDriverCommission.seItem = selected[0]; + return true; + } +}; + +/** + * 点击添加 + */ +TDriverCommission.openAddTDriver = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDriver/tDriver_add' + }); + this.layerIndex = index; +}; + +/** + * 打开查看详情 + */ +TDriverCommission.openTDriverDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: '详情', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDriver/tDriver_update/' + TDriver.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 打开查看详情(使用中) + */ +TDriverCommission.searchTDriverDetail = function (id) { + var index = layer.open({ + type: 2, + title: '详情', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDriver/driverDetail?tDriverId=' + id + }); + this.layerIndex = index; +}; + +/** + * 删除 + */ +TDriverCommission.delete = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tDriver/delete", function (data) { + Feng.success("删除成功!"); + TDriverCommission.table.refresh(); + }, function (data) { + Feng.error("删除失败!" + data.responseJSON.message + "!"); + }); + ajax.set("tDriverId",this.seItem.id); + ajax.start(); + } +}; + +/** + * 停用页面 + */ +TDriverCommission.stop = function (id) { + var index = layer.open({ + type: 2, + title: '停用', + area: ['45%', '50%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDriver/tDriver_start_and_stop?id='+id + }); + this.layerIndex = index; +}; + +/** + * 启动页面 + */ +TDriverCommission.start = function (id) { + var index = layer.open({ + type: 2, + title: '启用', + area: ['45%', '50%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDriver/tDriver_start_and_stop?id='+id + }); + this.layerIndex = index; +}; + +/** + * 提交启用冻结 + */ +TDriverCommission.updateStatus = function () { + var ajax = new $ax(Feng.ctxPath + "/tDriver/update-status", function (data) { + Feng.success("修改成功!"); + TDriverInfoDlg.close(); + parent.TDriverCommission.table.refresh(); + }, function (data) { + Feng.error("修改失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",$("#id").val()); + ajax.set("status",$("#status").val()); + if($("#status").val() == 1){ + ajax.set("remark",$("#stopRemark").val()); + } + if($("#status").val() == 2){ + ajax.set("remark",$("#startRemark").val()); + } + ajax.start(); +}; + +/** + * 司机信息导出 + */ +TDriverCommission.export=function(){ + var createTime=$("#name").val() + var phone=$("#phone").val() + var status=$("#status").val() + window.location.href=Feng.ctxPath + "/tDriver/export?name="+name + +"&status="+status + +"&phone="+phone + ; +} + + +/** + * 查询列表 + */ +TDriverCommission.search = function () { + var queryData = {}; + queryData['name'] = $("#name").val(); + queryData['phone'] = $("#phone").val(); + queryData['status'] = $("#status").val(); + TDriverCommission.table.refresh({query: queryData}); +}; + +/** + * 重置 + */ +TDriverCommission.resetSearch = function (){ + $("#name").val(''); + $("#phone").val(''); + $("#status").val(''); + TDriverCommission.search(); +} + +$(function () { + var defaultColunms = TDriverCommission.initColumn(); + var table = new BSTable(TDriverCommission.id, "/tDriver/commission/list", defaultColunms); + table.setPaginationType("client"); + TDriverCommission.table = table.init(); +}); diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js index f7c9bf5..00f7f6c 100644 --- a/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js +++ b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js @@ -76,6 +76,8 @@ .set('serverStatus') .set('integral') .set('status') + .set('area') + .set('areaId') .set('createTime'); } diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tOrderRefusal.js b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tOrderRefusal.js new file mode 100644 index 0000000..aaff1ae --- /dev/null +++ b/management/guns-admin/src/main/webapp/static/modular/system/tDriver/tOrderRefusal.js @@ -0,0 +1,101 @@ +/** + * 管理初始化 + */ +var TOrderRefusal = { + id: "TOrderRefusalTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; + +/** + * 初始化表格的列 + */ +TOrderRefusal.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: '主键', field: 'id', visible: true, align: 'center', valign: 'middle'}, + {title: '拒单时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'}, + {title: '订单编号', field: 'code', visible: true, align: 'center', valign: 'middle'}, + {title: '起点地址', field: 'startAddress', visible: true, align: 'center', valign: 'middle'}, + {title: '终点地址', field: 'endAddress', visible: true, align: 'center', valign: 'middle'} + ]; +}; + +/** + * 检查是否选中 + */ +TOrderRefusal.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TOrderRefusal.seItem = selected[0]; + return true; + } +}; + +/** + * 点击添加 + */ +TOrderRefusal.openAddTOrderRefusal = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['800px', '420px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tOrderRefusal/tOrderRefusal_add' + }); + this.layerIndex = index; +}; + +/** + * 打开查看详情 + */ +TOrderRefusal.openTOrderRefusalDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: '详情', + area: ['800px', '420px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tOrderRefusal/tOrderRefusal_update/' + TOrderRefusal.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 删除 + */ +TOrderRefusal.delete = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tOrderRefusal/delete", function (data) { + Feng.success("删除成功!"); + TOrderRefusal.table.refresh(); + }, function (data) { + Feng.error("删除失败!" + data.responseJSON.message + "!"); + }); + ajax.set("tOrderRefusalId",this.seItem.id); + ajax.start(); + } +}; + +/** + * 查询列表 + */ +// TOrderRefusal.search = function () { +// var queryData = {}; +// queryData['condition'] = $("#condition").val(); +// TOrderRefusal.table.refresh({query: queryData}); +// }; + +$(function () { + var defaultColunms = TOrderRefusal.initColumn(); + var table = new BSTable(TOrderRefusal.id, "/tOrderRefusal/list", defaultColunms); + table.setPaginationType("client"); + TOrderRefusal.table = table.init(); +}); -- Gitblit v1.7.1