From c12019a820f2b06cf7aae214e1e5dd70f623d1ac Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 10 三月 2023 18:15:21 +0800 Subject: [PATCH] 财务管理 --- management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java | 4 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordUserResp.java | 29 + management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITRechargeRecordService.java | 24 + management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TRechargeRecordController.java | 152 ++++++++++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRechargeRecordMapper.xml | 46 +++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TRechargeRecord.java | 17 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java | 8 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TRechargeRecordMapper.java | 21 + management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordAgentResp.java | 83 +++++ management/guns-admin/src/main/webapp/WEB-INF/view/system/tRechargeRecord/tRechargeRecordUser.html | 60 ++++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java | 44 ++ management/guns-admin/src/main/webapp/WEB-INF/view/system/tRechargeRecord/tRechargeRecordAgent.html | 57 +++ management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordAgent.js | 153 ++++++++++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java | 4 management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordUser.js | 155 ++++++++++ 15 files changed, 842 insertions(+), 15 deletions(-) diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TRechargeRecordController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TRechargeRecordController.java index ad74cff..48b3b67 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TRechargeRecordController.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TRechargeRecordController.java @@ -1,6 +1,16 @@ package com.stylefeng.guns.modular.system.controller.general; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.base.controller.BaseController; +import com.stylefeng.guns.modular.system.controller.resp.TDriverCommissionResp; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordAgentResp; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordUserResp; +import com.stylefeng.guns.modular.system.controller.util.ExcelUtil; +import com.stylefeng.guns.modular.system.model.TDriver; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -11,6 +21,15 @@ import org.springframework.web.bind.annotation.RequestParam; import com.stylefeng.guns.modular.system.model.TRechargeRecord; import com.stylefeng.guns.modular.system.service.ITRechargeRecordService; + +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Objects; /** * 控制器 @@ -52,6 +71,40 @@ model.addAttribute("item",tRechargeRecord); LogObjectHolder.me().set(tRechargeRecord); return PREFIX + "tRechargeRecord_edit.html"; + } + + /** + * 跳转到用户充值列表 + */ + @RequestMapping("/userRecharge") + public String userRecharge() { + return PREFIX + "tRechargeRecordUser.html"; + } + + /** + * 跳转到代理商充值列表 + */ + @RequestMapping("/agentRecharge") + public String agentRecharge() { + return PREFIX + "tRechargeRecordAgent.html"; + } + + /** + * 获取用户充值列表 + */ + @RequestMapping(value = "/userRechargeList") + @ResponseBody + public Object userRechargeList(String userName,String userPhone,String code,String createTime) { + return tRechargeRecordService.userRecharge(userName,userPhone,code,createTime); + } + + /** + * 获取代理商充值列表 + */ + @RequestMapping(value = "/agentRechargeList") + @ResponseBody + public Object agentRechargeList(String driverName,String driverPhone,String createTime) { + return tRechargeRecordService.agentRechargeList(driverName,driverPhone,createTime); } /** @@ -101,4 +154,103 @@ public Object detail(@PathVariable("tRechargeRecordId") Integer tRechargeRecordId) { return tRechargeRecordService.selectById(tRechargeRecordId); } + + @ApiOperation(value = "导出用户充值列表",notes="导出用户充值列表") + @RequestMapping(value = "/exportUserRecharge") + @ResponseBody + public void exportUserRecharge(String userName,String userPhone,String code,String createTime, HttpServletResponse response) { + try { + Date date = new Date(); + DateFormat format = new SimpleDateFormat("yyyyMMdd"); + String time1 = format.format(date); + String fileName = "UserRechargeRecord"+time1+".xls"; + String[] title = new String[] {"充值时间","流水ID","用户姓名","用户手机号","充值金额", + "充值方式","状态"}; + List<TRechargeRecordUserResp> userRechargeList = tRechargeRecordService.userRecharge(userName,userPhone,code,createTime); + + String[][] values = new String[userRechargeList.size()][]; + for (int i = 0; i < userRechargeList.size(); i++) { + TRechargeRecordUserResp d = userRechargeList.get(i); + values[i] = new String[title.length]; + values[i][0] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d.getCreateTime()); + values[i][1] = d.getCode(); + values[i][2] = d.getUserName(); + values[i][3] = d.getUserPhone(); + values[i][4] = String.valueOf(Objects.nonNull(d.getAmount())?d.getAmount(): BigDecimal.ZERO); + Integer payType = d.getPayType(); + if(1 == payType){ + values[i][5] = "微信"; + }else if(2 == payType){ + values[i][5] = "系统充值"; + }else{ + values[i][5] = "其他"; + } + Integer status1 = d.getPayStatus(); + if(1 == status1){ + values[i][6] = "失败"; + }else if(2 == status1){ + values[i][6] = "成功"; + } + } + HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("Variance"+time1, title, values, null); + ExcelUtil.setResponseHeader(response, fileName); + OutputStream os = response.getOutputStream(); + wb.write(os); + os.flush(); + os.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @ApiOperation(value = "导出代理商充值列表",notes="导出代理商充值列表") + @RequestMapping(value = "/exportAgentRecharge") + @ResponseBody + public void exportAgentRecharge(String driverName,String driverPhone,String createTime, HttpServletResponse response) { + try { + Date date = new Date(); + DateFormat format = new SimpleDateFormat("yyyyMMdd"); + String time1 = format.format(date); + String fileName = "AgentRechargeRecord"+time1+".xls"; + String[] title = new String[] {"充值时间","代理商姓名","联系电话","代理区域","司机姓名","司机手机号","充值金额", + "充值方式","状态"}; + List<TRechargeRecordAgentResp> agentRechargeList = tRechargeRecordService.agentRechargeList(driverName,driverPhone,createTime); + + String[][] values = new String[agentRechargeList.size()][]; + for (int i = 0; i < agentRechargeList.size(); i++) { + TRechargeRecordAgentResp d = agentRechargeList.get(i); + values[i] = new String[title.length]; + values[i][0] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d.getCreateTime()); + values[i][1] = d.getPrincipal(); + values[i][2] = d.getPrincipalPhone(); + values[i][3] = d.getProvinceName()+d.getCityName(); + values[i][4] = d.getDriverName(); + values[i][5] = d.getDriverPhone(); + values[i][6] = String.valueOf(Objects.nonNull(d.getAmount())?d.getAmount(): BigDecimal.ZERO); + Integer payType = d.getPayType(); + if(1 == payType){ + values[i][7] = "微信"; + }else if(2 == payType){ + values[i][7] = "系统充值"; + }else{ + values[i][7] = "其他"; + } + Integer status1 = d.getPayStatus(); + if(1 == status1){ + values[i][8] = "失败"; + }else if(2 == status1){ + values[i][8] = "成功"; + } + } + HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("Variance"+time1, title, values, null); + ExcelUtil.setResponseHeader(response, fileName); + OutputStream os = response.getOutputStream(); + wb.write(os); + os.flush(); + os.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordAgentResp.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordAgentResp.java new file mode 100644 index 0000000..a978f28 --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordAgentResp.java @@ -0,0 +1,83 @@ +package com.stylefeng.guns.modular.system.controller.resp; + +import com.stylefeng.guns.modular.system.model.TRechargeRecord; +import io.swagger.annotations.ApiModelProperty; + +public class TRechargeRecordAgentResp extends TRechargeRecord { + + @ApiModelProperty(value = "司机姓名") + private String driverName; + + @ApiModelProperty(value = "司机手机号") + private String driverPhone; + + @ApiModelProperty(value = "代理商姓名") + private String principal; + + @ApiModelProperty(value = "联系电话") + private String principalPhone; + @ApiModelProperty(value = "省份") + private String provinceName; + + @ApiModelProperty(value = "市区") + private String cityName; + + @ApiModelProperty(value = "代理区域") + private String area; + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public String getProvinceName() { + return provinceName; + } + + public void setProvinceName(String provinceName) { + this.provinceName = provinceName; + } + + public String getDriverName() { + return driverName; + } + + public void setDriverName(String driverName) { + this.driverName = driverName; + } + + public String getDriverPhone() { + return driverPhone; + } + + public void setDriverPhone(String driverPhone) { + this.driverPhone = driverPhone; + } + + public String getPrincipal() { + return principal; + } + + public void setPrincipal(String principal) { + this.principal = principal; + } + + public String getPrincipalPhone() { + return principalPhone; + } + + public void setPrincipalPhone(String principalPhone) { + this.principalPhone = principalPhone; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordUserResp.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordUserResp.java new file mode 100644 index 0000000..adc6099 --- /dev/null +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/resp/TRechargeRecordUserResp.java @@ -0,0 +1,29 @@ +package com.stylefeng.guns.modular.system.controller.resp; + +import com.stylefeng.guns.modular.system.model.TRechargeRecord; +import io.swagger.annotations.ApiModelProperty; + +public class TRechargeRecordUserResp extends TRechargeRecord { + + @ApiModelProperty(value = "用户姓名") + private String userName; + + @ApiModelProperty(value = "用户手机号") + private String userPhone; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } +} diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TRechargeRecordMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TRechargeRecordMapper.java index 47d2618..72c639b 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TRechargeRecordMapper.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TRechargeRecordMapper.java @@ -1,8 +1,13 @@ package com.stylefeng.guns.modular.system.dao; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordAgentResp; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordUserResp; import com.stylefeng.guns.modular.system.model.TRechargeRecord; import com.baomidou.mybatisplus.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -10,9 +15,23 @@ * </p> * * @author stylefeng - * @since 2023-02-20 + * @since 2023-03-10 */ @Mapper public interface TRechargeRecordMapper extends BaseMapper<TRechargeRecord> { + /** + * 用户充值记录查询 + * @param userName 用户名 + * @param userPhone 用户手机号 + * @param code 流水号 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return List<TRechargeRecordUserResp> + */ + List<TRechargeRecordUserResp> userRecharge(@Param("startTime") String startTime, @Param("endTime")String endTime, @Param("userName")String userName, + @Param("userPhone")String userPhone, @Param("code")String code); + + List<TRechargeRecordAgentResp> agentRechargeList(@Param("startTime")String startTime, @Param("endTime")String endTime, @Param("driverName")String driverName, + @Param("driverPhone")String driverPhone, @Param("roleType")Integer roleType, @Param("objectId")Integer objectId); } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRechargeRecordMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRechargeRecordMapper.xml index 97e6cf3..5bd2456 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRechargeRecordMapper.xml +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TRechargeRecordMapper.xml @@ -18,7 +18,51 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, type, userId, code, amount, payType, payTime, payStatus, orderNumber, createTime + id, `type`, userId, code, amount, payType, payTime, payStatus, orderNumber, createTime </sql> + <select id="userRecharge" resultType="com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordUserResp"> + select rr.id, rr.`type`, rr.userId, rr.code, rr.amount, rr.payType, rr.payTime, rr.payStatus, rr.orderNumber, rr.createTime,au.nickname AS userName,au.phone AS userPhone + from t_recharge_record rr + left join t_app_user au on rr.userId = au.id + <where> + <if test="startTime != null and startTime != '' and endTime != null and endTime != ''"> + AND rr.createTime between #{startTime} and #{endTime} + </if> + <if test="userName != null and userName != ''"> + AND au.nickname LIKE concat('%',#{userName},'%') + </if> + <if test="userPhone != null and userPhone != ''"> + AND au.phone LIKE concat('%',#{userPhone},'%') + </if> + <if test="code != null and code != ''"> + AND rr.code LIKE concat('%',#{code},'%') + </if> + AND rr.`type` = 1 + </where> + ORDER BY rr.createTime DESC + </select> + <select id="agentRechargeList" resultType="com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordAgentResp"> + select rr.id, rr.`type`, rr.userId, rr.code, rr.amount, rr.payType, rr.payTime, rr.payStatus, rr.orderNumber, rr.createTime, + d.name AS driverName,d.phone AS driverPhone,a.principal,a.principalPhone,a.provinceName,a.cityName + from t_recharge_record rr + left join t_driver d on rr.userId = d.id + left join t_agent a on d.agentId = a.id + <where> + <if test="startTime != null and startTime != '' and endTime != null and endTime != ''"> + AND rr.createTime between #{startTime} and #{endTime} + </if> + <if test="driverName != null and driverName != ''"> + AND d.name LIKE concat('%',#{driverName},'%') + </if> + <if test="driverPhone != null and driverPhone != ''"> + AND d.phone LIKE concat('%',#{driverPhone},'%') + </if> + <if test="roleType != null and roleType == 3"> + AND a.id = #{objectId} + </if> + AND rr.`type` = 3 + </where> + ORDER BY rr.createTime DESC + </select> </mapper> diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TRechargeRecord.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TRechargeRecord.java index e39acc1..2e3ec9a 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TRechargeRecord.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TRechargeRecord.java @@ -14,7 +14,7 @@ * </p> * * @author stylefeng - * @since 2023-02-20 + * @since 2023-03-10 */ @TableName("t_recharge_record") public class TRechargeRecord extends Model<TRechargeRecord> { @@ -27,7 +27,7 @@ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** - * 数据类型(1=用户,2=司机) + * 数据类型(1=用户,2=司机,3 = 代理商) */ private Integer type; /** @@ -43,7 +43,7 @@ */ private BigDecimal amount; /** - * 支付方式(1=微信) + * 支付方式(1=微信 2 = 系统充值) */ private Integer payType; /** @@ -62,7 +62,18 @@ * 添加时间 */ private Date createTime; + /** + * 代理商id + */ + private Integer agentId; + public Integer getAgentId() { + return agentId; + } + + public void setAgentId(Integer agentId) { + this.agentId = agentId; + } public Integer getId() { return id; diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITRechargeRecordService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITRechargeRecordService.java index b65c02d..a795f19 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITRechargeRecordService.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITRechargeRecordService.java @@ -1,7 +1,11 @@ package com.stylefeng.guns.modular.system.service; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordAgentResp; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordUserResp; import com.stylefeng.guns.modular.system.model.TRechargeRecord; import com.baomidou.mybatisplus.service.IService; + +import java.util.List; /** * <p> @@ -9,8 +13,26 @@ * </p> * * @author stylefeng - * @since 2023-02-20 + * @since 2023-03-10 */ public interface ITRechargeRecordService extends IService<TRechargeRecord> { + /** + * 用户充值记录查询 + * @param userName 用户名 + * @param userPhone 用户手机号 + * @param code 流水号 + * @param createTime 充值时间 + * @return List<TRechargeRecordUserResp> + */ + List<TRechargeRecordUserResp> userRecharge(String userName, String userPhone, String code, String createTime); + + /** + * + * @param driverName 司机姓名 + * @param driverPhone 司机手机号 + * @param createTime 充值时间 + * @return List<TRechargeRecordAgentResp> + */ + List<TRechargeRecordAgentResp> agentRechargeList(String driverName, String driverPhone, String createTime); } 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 79bbc1d..ae176d4 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 @@ -148,15 +148,15 @@ if(!CollectionUtils.isEmpty(tOrders)){ // 订单总量 - List<TOrder> orderList = tOrders.stream().filter(order -> order.getAgentId().equals(tAgent.getId())).collect(Collectors.toList()); + List<TOrder> orderList = tOrders.stream().filter(order -> tAgent.getId().equals(order.getAgentId())).collect(Collectors.toList()); tAgentResp.setOrderSum(orderList.size()); // 过滤已完成和待评价订单,且支付金额在14元以上 List<TOrder> orders = tOrders.stream().filter(order -> (order.getState().equals(OrderStateEnum.FINISH.getCode()) || order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode())) - && 0 < order.getPayMoney().compareTo(new BigDecimal("14")) && order.getAgentId().equals(tAgent.getId())).collect(Collectors.toList()); + && 0 < order.getPayMoney().compareTo(new BigDecimal("14")) && tAgent.getId().equals(order.getAgentId())).collect(Collectors.toList()); tAgentResp.setValidOrder(orders.size()); // 过滤已使用优惠券 List<TOrder> usedCoupon = tOrders.stream().filter(order -> (order.getState().equals(OrderStateEnum.FINISH.getCode()) || order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode())) - && Objects.nonNull(order.getCouponId()) && order.getAgentId().equals(tAgent.getId())).collect(Collectors.toList()); + && Objects.nonNull(order.getCouponId()) && tAgent.getId().equals(order.getAgentId())).collect(Collectors.toList()); tAgentResp.setUsedCoupon(usedCoupon.size()); // 已使用优惠券金额求和,已使用优惠券id List<Integer> usedCouponId = usedCoupon.stream().map(TOrder::getCouponId).collect(Collectors.toList()); @@ -167,7 +167,7 @@ if(!CollectionUtils.isEmpty(tCoupons)){ // 过滤代理商发放的优惠券 - List<TCoupon> coupons = tCoupons.stream().filter(coupon -> coupon.getAgentId().equals(tAgent.getId())).collect(Collectors.toList()); + List<TCoupon> coupons = tCoupons.stream().filter(coupon -> tAgent.getId().equals(coupon.getAgentId())).collect(Collectors.toList()); tAgentResp.setIssuedCoupon(coupons.size()); } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java index cfa89e7..dc3122b 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java @@ -152,13 +152,13 @@ for (TBranchOfficeResp tBranchOfficeResp : tBranchOfficeRespList) { - List<TOrder> orderList = orders.stream().filter(t -> t.getBranchOfficeId().equals(tBranchOfficeResp.getId())).collect(Collectors.toList()); + List<TOrder> orderList = orders.stream().filter(t -> tBranchOfficeResp.getId().equals(t.getBranchOfficeId())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(orderList)){ // 订单数据 tBranchOfficeResp.setOrderCount(orderList.size());// 订单数量 - List<TOrder> effectiveOrder = orderList.stream().filter(order -> order.getPayMoney().compareTo(new BigDecimal("15")) > 0).collect(Collectors.toList()); + List<TOrder> effectiveOrder = orderList.stream().filter(order -> Objects.nonNull(order.getPayMoney()) && order.getPayMoney().compareTo(new BigDecimal("15")) > 0).collect(Collectors.toList()); tBranchOfficeResp.setEffectiveOrderCount(effectiveOrder.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 b580ea6..ad9e895 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 @@ -125,11 +125,11 @@ tDriverResp.setBranchName(tBranchOffice.getPrincipal()); } //累计订单量 - List<TOrder> cumulativeOrderCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) + List<TOrder> cumulativeOrderCount = tOrders.stream().filter(order -> tDriver.getId().equals(order.getDriverId()) && order.getState().equals(OrderStateEnum.WAIT_EVALUATED.getCode()) && order.getState().equals(OrderStateEnum.FINISH.getCode())).collect(Collectors.toList()); tDriverResp.setCumulativeOrderCount(cumulativeOrderCount.size()); //当月订单量 - List<TOrder> monthOrderCount = tOrders.stream().filter(order -> order.getDriverId().equals(tDriver.getId()) + List<TOrder> monthOrderCount = tOrders.stream().filter(order -> tDriver.getId().equals(order.getDriverId()) && 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()); diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java index f765eb2..09aff6d 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java @@ -1,10 +1,18 @@ package com.stylefeng.guns.modular.system.service.impl; +import com.stylefeng.guns.core.shiro.ShiroKit; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordAgentResp; +import com.stylefeng.guns.modular.system.controller.resp.TRechargeRecordUserResp; import com.stylefeng.guns.modular.system.model.TRechargeRecord; import com.stylefeng.guns.modular.system.dao.TRechargeRecordMapper; import com.stylefeng.guns.modular.system.service.ITRechargeRecordService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Objects; /** * <p> @@ -12,9 +20,43 @@ * </p> * * @author stylefeng - * @since 2023-02-20 + * @since 2023-03-10 */ @Service public class TRechargeRecordServiceImpl extends ServiceImpl<TRechargeRecordMapper, TRechargeRecord> implements ITRechargeRecordService { + @Autowired + private TRechargeRecordMapper tRechargeRecordMapper; + + @Override + public List<TRechargeRecordUserResp> userRecharge(String userName, String userPhone, String code, String createTime) { + String startTime = null; + String endTime = null; + // 开始,结束时间 + if(StringUtils.hasLength(createTime)){ + String[] split = createTime.split(" - "); + startTime = split[0]; + endTime = split[1]; + } + return tRechargeRecordMapper.userRecharge(startTime,endTime,userName,userPhone,code); + } + + @Override + public List<TRechargeRecordAgentResp> agentRechargeList(String driverName, String driverPhone, String createTime) { + String startTime = null; + String endTime = null; + // 开始,结束时间 + if(StringUtils.hasLength(createTime)){ + String[] split = createTime.split(" - "); + startTime = split[0]; + endTime = split[1]; + } + Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType(); + Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId(); + List<TRechargeRecordAgentResp> tRechargeRecordAgentRespList = tRechargeRecordMapper.agentRechargeList(startTime, endTime, driverName, driverPhone, roleType, objectId); + for (TRechargeRecordAgentResp tRechargeRecordAgentResp : tRechargeRecordAgentRespList) { + tRechargeRecordAgentResp.setArea(tRechargeRecordAgentResp.getProvinceName()+tRechargeRecordAgentResp.getCityName()); + } + return tRechargeRecordAgentRespList; + } } diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tRechargeRecord/tRechargeRecordAgent.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tRechargeRecord/tRechargeRecordAgent.html new file mode 100644 index 0000000..20a852f --- /dev/null +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tRechargeRecord/tRechargeRecordAgent.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-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-2"> + <#NameCon id="driverName" name="司机姓名" /> + </div> + <div class="col-sm-2"> + <#NameCon id="driverPhone" name="司机手机号" /> + </div> + <div class="col-sm-2"> + <#TimeCon id="createTime" name="充值时间" /> + </div> + <div class="col-sm-2"> + <#button name="搜索" icon="fa-search" clickFun="TRechargeRecordAgent.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TRechargeRecordAgent.resetSearch()" space="true"/> + </div> + <div class="col-sm-12"> + <button type="button" class="btn btn-primary " onclick="TRechargeRecordAgent.export()" id="export"> + <i class="fa "></i> 导出 + </button> + </div> + </div> + <!--<div class="hidden-xs" id="TRechargeRecordTableToolbar" role="group"> + @if(shiro.hasPermission("/tRechargeRecord/add")){ + <#button name="添加" icon="fa-plus" clickFun="TRechargeRecord.openAddTRechargeRecord()"/> + @} + @if(shiro.hasPermission("/tRechargeRecord/update")){ + <#button name="修改" icon="fa-edit" clickFun="TRechargeRecord.openTRechargeRecordDetail()" space="true"/> + @} + @if(shiro.hasPermission("/tRechargeRecord/delete")){ + <#button name="删除" icon="fa-remove" clickFun="TRechargeRecord.delete()" space="true"/> + @} + </div>--> + <#table id="TRechargeRecordAgentTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/static/modular/system/tRechargeRecord/tRechargeRecordAgent.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/tRechargeRecord/tRechargeRecordUser.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tRechargeRecord/tRechargeRecordUser.html new file mode 100644 index 0000000..b438d4d --- /dev/null +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tRechargeRecord/tRechargeRecordUser.html @@ -0,0 +1,60 @@ +@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-2"> + <#NameCon id="userName" name="用户姓名" /> + </div> + <div class="col-sm-2"> + <#NameCon id="userPhone" name="用户手机号" /> + </div> + <div class="col-sm-2"> + <#NameCon id="code" name="流水ID" /> + </div> + <div class="col-sm-2"> + <#TimeCon id="createTime" name="充值时间" /> + </div> + <div class="col-sm-2"> + <#button name="搜索" icon="fa-search" clickFun="TRechargeRecordUser.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TRechargeRecordUser.resetSearch()" space="true"/> + </div> + <div class="col-sm-12"> + <button type="button" class="btn btn-primary " onclick="TRechargeRecordUser.export()" id="export"> + <i class="fa "></i> 导出 + </button> + </div> + </div> + <div class="hidden-xs" id="TRechargeRecordTableToolbar" role="group"> + @if(shiro.hasPermission("/tRechargeRecord/add")){ + <#button name="添加" icon="fa-plus" clickFun="TRechargeRecord.openAddTRechargeRecord()"/> + @} + @if(shiro.hasPermission("/tRechargeRecord/update")){ + <#button name="修改" icon="fa-edit" clickFun="TRechargeRecord.openTRechargeRecordDetail()" space="true"/> + @} + @if(shiro.hasPermission("/tRechargeRecord/delete")){ + <#button name="删除" icon="fa-remove" clickFun="TRechargeRecord.delete()" space="true"/> + @} + </div> + <#table id="TRechargeRecordUserTable"/> + </div> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/static/modular/system/tRechargeRecord/tRechargeRecordUser.js"></script> +<script type="text/javascript"> + laydate.render({ + elem: '#createTime', + type: 'date', + range: true + }); +</script> +@} diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordAgent.js b/management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordAgent.js new file mode 100644 index 0000000..31ce1ed --- /dev/null +++ b/management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordAgent.js @@ -0,0 +1,153 @@ +/** + * 管理初始化 + */ +var TRechargeRecordAgent = { + id: "TRechargeRecordAgentTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; + +/** + * 初始化表格的列 + */ +TRechargeRecordAgent.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: '主键', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '完成支付时间', field: 'payTime', visible: false, align: 'center', valign: 'middle'}, + {title: '充值时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'}, + {title: '代理商姓名', field: 'principal', visible: true, align: 'center', valign: 'middle'}, + {title: '联系电话', field: 'principalPhone', visible: true, align: 'center', valign: 'middle'}, + {title: '代理区域', field: 'area', visible: true, align: 'center', valign: 'middle'}, + {title: '三方流水号', field: 'orderNumber', visible: false, align: 'center', valign: 'middle'}, + {title: '数据类型(1=用户,2=司机)', field: 'type', visible: false, align: 'center', valign: 'middle'}, + {title: '司机id', field: 'userId', visible: false, align: 'center', valign: 'middle'}, + {title: '司机姓名', field: 'driverName', visible: true, align: 'center', valign: 'middle'}, + {title: '司机手机号', field: 'driverPhone', visible: true, align: 'center', valign: 'middle'}, + {title: '充值金额', field: 'amount', visible: true, align: 'center', valign: 'middle'}, + {title: '充值方式', field: 'payType', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row) { + if (row.payType === 1){ + return '<span>微信</span>' + }else if (row.payType === 2){ + return '<span>系统充值</span>' + }else{ + return '<span>其他</span>' + } + } + }, + {title: '状态', field: 'payStatus', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row) { + if (row.payStatus === 1){ + return '<span>失败</span>' + }else if (row.payStatus === 2){ + return '<span>成功</span>' + } + } + } + ]; +}; + +/** + * 检查是否选中 + */ +TRechargeRecordAgent.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TRechargeRecordAgent.seItem = selected[0]; + return true; + } +}; + +/** + * 点击添加 + */ +TRechargeRecordAgent.openAddTRechargeRecord = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['800px', '420px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tRechargeRecord/tRechargeRecord_add' + }); + this.layerIndex = index; +}; + +/** + * 打开查看详情 + */ +TRechargeRecordAgent.openTRechargeRecordDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: '详情', + area: ['800px', '420px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tRechargeRecord/tRechargeRecord_update/' + TRechargeRecordAgent.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 删除 + */ +TRechargeRecordAgent.delete = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tRechargeRecord/delete", function (data) { + Feng.success("删除成功!"); + TRechargeRecordAgent.table.refresh(); + }, function (data) { + Feng.error("删除失败!" + data.responseJSON.message + "!"); + }); + ajax.set("tRechargeRecordId",this.seItem.id); + ajax.start(); + } +}; + +/** + * 司机信息导出 + */ +TRechargeRecordAgent.export=function(){ + var createTime=$("#createTime").val() + var driverName=$("#driverName").val() + var driverPhone=$("#driverPhone").val() + window.location.href=Feng.ctxPath + "/tRechargeRecord/exportAgentRecharge?createTime="+createTime + +"&driverName"+driverName + +"&driverPhone="+driverPhone + ; +} + +/** + * 查询列表 + */ +TRechargeRecordAgent.search = function () { + var queryData = {}; + queryData['driverName'] = $("#driverName").val(); + queryData['driverPhone'] = $("#driverPhone").val(); + queryData['createTime'] = $("#createTime").val(); + TRechargeRecordAgent.table.refresh({query: queryData}); +}; + +/** + * 重置 + */ +TRechargeRecordAgent.resetSearch = function (){ + $("#createTime").val(''); + $("#driverName").val(''); + $("#driverPhone").val(''); + TRechargeRecordAgent.search(); +} + +$(function () { + var defaultColunms = TRechargeRecordAgent.initColumn(); + var table = new BSTable(TRechargeRecordAgent.id, "/tRechargeRecord/agentRechargeList", defaultColunms); + table.setPaginationType("client"); + TRechargeRecordAgent.table = table.init(); +}); diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordUser.js b/management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordUser.js new file mode 100644 index 0000000..d41b5e3 --- /dev/null +++ b/management/guns-admin/src/main/webapp/static/modular/system/tRechargeRecord/tRechargeRecordUser.js @@ -0,0 +1,155 @@ +/** + * 管理初始化 + */ +var TRechargeRecordUser = { + id: "TRechargeRecordUserTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; + +/** + * 初始化表格的列 + */ +TRechargeRecordUser.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: '主键', field: 'id', visible: false, align: 'center', valign: 'middle'}, + {title: '完成支付时间', field: 'payTime', visible: false, align: 'center', valign: 'middle'}, + {title: '充值时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'}, + {title: '流水ID', field: 'code', visible: true, align: 'center', valign: 'middle'}, + {title: '三方流水号', field: 'orderNumber', visible: false, align: 'center', valign: 'middle'}, + {title: '数据类型(1=用户,2=司机)', field: 'type', visible: false, align: 'center', valign: 'middle'}, + {title: '用户id', field: 'userId', visible: false, align: 'center', valign: 'middle'}, + {title: '用户姓名', field: 'userName', visible: true, align: 'center', valign: 'middle'}, + {title: '用户手机号', field: 'userPhone', visible: true, align: 'center', valign: 'middle'}, + {title: '充值金额', field: 'amount', visible: true, align: 'center', valign: 'middle'}, + {title: '充值方式', field: 'payType', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row) { + if (row.payType === 1){ + return '<span>微信</span>' + }else if (row.payType === 2){ + return '<span>系统充值</span>' + }else{ + return '<span>其他</span>' + } + } + }, + {title: '状态', field: 'payStatus', visible: true, align: 'center', valign: 'middle', + formatter: function (value, row) { + if (row.payStatus === 1){ + return '<span>失败</span>' + }else if (row.payStatus === 2){ + return '<span>成功</span>' + } + } + } + ]; +}; + +/** + * 检查是否选中 + */ +TRechargeRecordUser.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TRechargeRecordUser.seItem = selected[0]; + return true; + } +}; + +/** + * 点击添加 + */ +TRechargeRecordUser.openAddTRechargeRecord = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['800px', '420px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tRechargeRecord/tRechargeRecord_add' + }); + this.layerIndex = index; +}; + +/** + * 打开查看详情 + */ +TRechargeRecordUser.openTRechargeRecordDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: '详情', + area: ['800px', '420px'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tRechargeRecord/tRechargeRecord_update/' + TRechargeRecordUser.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 删除 + */ +TRechargeRecordUser.delete = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tRechargeRecord/delete", function (data) { + Feng.success("删除成功!"); + TRechargeRecordUser.table.refresh(); + }, function (data) { + Feng.error("删除失败!" + data.responseJSON.message + "!"); + }); + ajax.set("tRechargeRecordId",this.seItem.id); + ajax.start(); + } +}; + +/** + * 司机信息导出 + */ +TRechargeRecordUser.export=function(){ + var createTime=$("#createTime").val() + var userName=$("#userName").val() + var userPhone=$("#userPhone").val() + var code=$("#code").val() + window.location.href=Feng.ctxPath + "/tRechargeRecord/exportUserRecharge?createTime="+createTime + +"&userName="+userName + +"&userPhone="+userPhone + +"&code="+code + ; +} + +/** + * 查询列表 + */ +TRechargeRecordUser.search = function () { + var queryData = {}; + queryData['userName'] = $("#userName").val(); + queryData['userPhone'] = $("#userPhone").val(); + queryData['code'] = $("#code").val(); + queryData['createTime'] = $("#createTime").val(); + TRechargeRecordUser.table.refresh({query: queryData}); +}; + +/** + * 重置 + */ +TRechargeRecordUser.resetSearch = function (){ + $("#createTime").val(''); + $("#userName").val(''); + $("#userPhone").val(''); + $("#code").val(''); + TRechargeRecordUser.search(); +} + +$(function () { + var defaultColunms = TRechargeRecordUser.initColumn(); + var table = new BSTable(TRechargeRecordUser.id, "/tRechargeRecord/userRechargeList", defaultColunms); + table.setPaginationType("client"); + TRechargeRecordUser.table = table.init(); +}); -- Gitblit v1.7.1