Commit ea8c28c2 authored by hanfeng's avatar hanfeng

总业绩统计

parent 81b711ed
...@@ -157,5 +157,15 @@ public interface UserFeign { ...@@ -157,5 +157,15 @@ public interface UserFeign {
public ObjectRestResponse<Void> withDrawprocess(@RequestParam(value = "orderNo") String orderNo, public ObjectRestResponse<Void> withDrawprocess(@RequestParam(value = "orderNo") String orderNo,
@RequestParam(value = "cono",required = false) String cono, @RequestParam(value = "cono",required = false) String cono,
@RequestParam(value = "reason",required = false) String reason, @RequestParam(value = "reason",required = false) String reason,
@RequestParam(value = "isSuccess") Boolean isSuccess); @RequestParam(value = "isSuccess") Boolean isSuccess);
/**
* 通过公司id,获取员工的下级用户id
* @param parentCompanyId
* @return
*/
@GetMapping("/postion/admin/userid")
List<Integer> getUserIdByParentCompany(@RequestParam("parentCompanyId") List<Integer> parentCompanyId);
} }
...@@ -345,4 +345,7 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A ...@@ -345,4 +345,7 @@ public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, A
} }
public List<Integer> getUserIdByParentCompany(List<Integer> parentCompanyId) {
return mapper.getUserIdByParentCompany(parentCompanyId);
}
} }
...@@ -3,8 +3,12 @@ package com.github.wxiaoqi.security.admin.mapper; ...@@ -3,8 +3,12 @@ package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserPositionTemp; import com.github.wxiaoqi.security.admin.entity.AppUserPositionTemp;
import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/** /**
* 用户身份职位表 * 用户身份职位表
* *
...@@ -17,4 +21,6 @@ public interface AppUserPositionTempMapper extends Mapper<AppUserPositionTemp> { ...@@ -17,4 +21,6 @@ public interface AppUserPositionTempMapper extends Mapper<AppUserPositionTemp> {
@Insert("INSERT IGNORE INTO `app_user_position_temp`(`user_id`,`phone`,`name`,`position_id`,`crt_time`)VALUES(#{userId},#{phone},#{name},#{positionId},#{crtTime})") @Insert("INSERT IGNORE INTO `app_user_position_temp`(`user_id`,`phone`,`name`,`position_id`,`crt_time`)VALUES(#{userId},#{phone},#{name},#{positionId},#{crtTime})")
void insertWithIgnoreRepeat(AppUserPositionTemp appUserPositionTemp); void insertWithIgnoreRepeat(AppUserPositionTemp appUserPositionTemp);
List<Integer> getUserIdByParentCompany(@Param("parentCompanyId") List<Integer> parentCompanyId);
} }
...@@ -107,4 +107,10 @@ public class AppUserPositionController { ...@@ -107,4 +107,10 @@ public class AppUserPositionController {
return ObjectRestResponse.succ(dataVO); return ObjectRestResponse.succ(dataVO);
} }
@GetMapping("/userid")
public List<Integer> getUserIdByParentCompany(@RequestParam("parentCompanyId") List<Integer> parentCompanyId){
return appUserPositionTempBiz.getUserIdByParentCompany(parentCompanyId);
}
} }
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.github.wxiaoqi.security.admin.mapper.AppUserPositionTempMapper">
<select id="getUserIdByParentCompany" resultType="Integer">
SELECT
r.uid
FROM
app_user_position_temp pt
LEFT JOIN app_user_detail d ON pt.user_id = d.userid
LEFT JOIN (
SELECT
parent_id AS pid,
user_id AS uid
FROM
app_user_relation
WHERE
is_del = 0
) r ON d.userid = r.pid
WHERE
pt.is_del = 0
<if test="parentCompanyId != null and parentCompanyId.size() !=0">
AND pt.company_id IN
<foreach collection="parentCompanyId" index="index" item="pid" open="(" separator="," close=")">
#{pid}
</foreach>
</if>
</select>
</mapper>
\ No newline at end of file
package com.xxfc.platform.order.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data
@ApiModel("订单业绩明细表")
public class Achievement {
@ApiModelProperty(value = "下单用户真实姓名")
private String realname;
@ApiModelProperty(value = "用户手机号")
private String username;
@ApiModelProperty(value = "上级姓名")
private String parentRealname;
@ApiModelProperty(value = "上级职位")
private String positionName;
@ApiModelProperty(value = "上级手机号")
private String parentUsername;
@ApiModelProperty(value = "订单所属公司id")
private Integer companyId;
@ApiModelProperty(value = "订单所属公司名")
private String companyName;
@ApiModelProperty(value = "优惠价格")
private BigDecimal favorablePrice;
@ApiModelProperty(value = "创建时间", hidden = true )
@Column(name = "crt_time")
private String crtTime;
@ApiModelProperty(value = "订单号")
private String no;
@ApiModelProperty(value = "订单类型")
private Integer type;
@Column(name = "order_amount")
@ApiModelProperty("订单总额")
private BigDecimal orderAmount=BigDecimal.ZERO;
@ApiModelProperty(value = "实际订单额")
@Column(name = "real_amount")
private BigDecimal realAmount=BigDecimal.ZERO;
@Column(name = "pay_way")
@ApiModelProperty(value = "支付方式")
private Integer payWay;
public void setCrtTime(Date crtTime) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
this.crtTime = dateFormat.format(crtTime);
}
}
...@@ -7,6 +7,7 @@ import lombok.Data; ...@@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 总业绩查询条件 * 总业绩查询条件
...@@ -33,7 +34,13 @@ public class QueryCriteria { ...@@ -33,7 +34,13 @@ public class QueryCriteria {
@ApiModelProperty(value = "支付方式: 1-微信支付 2-支付宝支付 3-银联支付 null-全部") @ApiModelProperty(value = "支付方式: 1-微信支付 2-支付宝支付 3-银联支付 null-全部")
private Integer paymentMethod; private Integer paymentMethod;
@ApiModelProperty(value = "账目类型: 0-入账 1-出账") @ApiModelProperty(value = "账目类型: 0-页面展示 1-下载报表")
private Integer type = 0; private Integer type = 0;
}
@ApiModelProperty("用户id")
private List<Integer> userId;
@ApiModelProperty("权限公司id")
private List<Integer> jurisdiction;
}
package com.xxfc.platform.order.pojo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* 总业绩报表类
*
* @author Administrator
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TotalPerformanceStatement {
@ApiModelProperty(value = "总订单数")
private Integer orderSum;
@ApiModelProperty(value = "应收总额")
private BigDecimal totalReceivables=BigDecimal.ZERO;
@ApiModelProperty(value = "优惠金额")
private BigDecimal discount=BigDecimal.ZERO;
@ApiModelProperty(value = "实收金额")
private BigDecimal actual=BigDecimal.ZERO;
@ApiModelProperty(value = "数据明细")
private List<Achievement> achievements;
}
...@@ -25,6 +25,7 @@ import com.xxfc.platform.order.biz.inner.OrderMsgBiz; ...@@ -25,6 +25,7 @@ import com.xxfc.platform.order.biz.inner.OrderMsgBiz;
import com.xxfc.platform.order.contant.enumerate.*; import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.mapper.BaseOrderMapper; import com.xxfc.platform.order.mapper.BaseOrderMapper;
import com.xxfc.platform.order.pojo.Achievement;
import com.xxfc.platform.order.pojo.DedDetailDTO; import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.QueryCriteria; import com.xxfc.platform.order.pojo.QueryCriteria;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail; import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
...@@ -911,8 +912,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -911,8 +912,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
return Lists.newArrayList(); return Lists.newArrayList();
} }
public void selectTotalStatistical(QueryCriteria queryCriteria) {
mapper.selectTotalStatistical(queryCriteria); public List<Achievement> selectTotalStatistical(QueryCriteria queryCriteria) {
return mapper.selectTotalStatistical(queryCriteria);
} }
} }
\ No newline at end of file
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import cn.hutool.core.collection.CollectionUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.pojo.Achievement;
import com.xxfc.platform.order.pojo.QueryCriteria; import com.xxfc.platform.order.pojo.QueryCriteria;
import com.xxfc.platform.order.pojo.TotalPerformanceStatement;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
/** /**
* 总业绩报表service层 * 总业绩报表service层
* *
...@@ -15,9 +26,48 @@ import org.springframework.stereotype.Service; ...@@ -15,9 +26,48 @@ import org.springframework.stereotype.Service;
public class TotalPerformanceBiz { public class TotalPerformanceBiz {
private final BaseOrderBiz baseOrderBiz; private final BaseOrderBiz baseOrderBiz;
private final OrderAccountBiz accountBiz; private final OrderAccountBiz accountBiz;
private final UserFeign userFeign;
/**
*
* @param queryCriteria 查询条件
* @param userDTO 当前后台账号信息
*
*/
public TotalPerformanceStatement statisticalData(QueryCriteria queryCriteria, UserDTO userDTO) {
Integer orderType = queryCriteria.getOrderType();
List<Achievement> achievements = baseOrderBiz.selectTotalStatistical(queryCriteria);
if (CollectionUtil.isEmpty(achievements)) {
return new TotalPerformanceStatement();
}
return incomeDataProcessing(achievements);
}
/**
* 核算收益
* @return
* @param achievements
*/
private TotalPerformanceStatement incomeDataProcessing(List<Achievement> achievements) {
//应收总额
BigDecimal totalReceivables = BigDecimal.ZERO;
//优惠总额
BigDecimal discount=BigDecimal.ZERO;
//实收总额
BigDecimal actual =BigDecimal.ZERO;
for (Achievement achievement : achievements) {
totalReceivables=totalReceivables.add(achievement.getOrderAmount());
actual=actual.add(achievement.getRealAmount());
discount=discount.add(achievement.getOrderAmount().subtract(achievement.getRealAmount()));
}
return TotalPerformanceStatement
.builder()
.orderSum(achievements.size())
.totalReceivables(totalReceivables)
.discount(discount)
.actual(actual)
.build();
public void statisticalData(QueryCriteria queryCriteria) {
baseOrderBiz.selectTotalStatistical(queryCriteria);
} }
} }
package com.xxfc.platform.order.mapper; package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.pojo.Achievement;
import com.xxfc.platform.order.pojo.QueryCriteria; import com.xxfc.platform.order.pojo.QueryCriteria;
import com.xxfc.platform.order.pojo.bg.BgOrderListVo; import com.xxfc.platform.order.pojo.bg.BgOrderListVo;
import com.xxfc.platform.order.pojo.dto.MemberOrderBo; import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO; import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO;
import com.xxfc.platform.order.pojo.order.OrderListVo; import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List; import java.util.List;
...@@ -40,5 +42,6 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> { ...@@ -40,5 +42,6 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> {
public List<BgOrderListVo> getAllOrderList(Map<String, Object> paramMap); public List<BgOrderListVo> getAllOrderList(Map<String, Object> paramMap);
void selectTotalStatistical(QueryCriteria queryCriteria); List<Achievement> selectTotalStatistical(QueryCriteria queryCriteria);
} }
package com.xxfc.platform.order.rest.background; package com.xxfc.platform.order.rest.background;
import com.alibaba.druid.sql.visitor.functions.If;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController; import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.biz.TotalPerformanceBiz; import com.xxfc.platform.order.biz.TotalPerformanceBiz;
import com.xxfc.platform.order.pojo.QueryCriteria; import com.xxfc.platform.order.pojo.QueryCriteria;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* 总业绩报表 * 总业绩报表
*
* @author Administrator * @author Administrator
*/ */
...@@ -18,10 +34,43 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -18,10 +34,43 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/reportForm") @RequestMapping("/reportForm")
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TotalPerformanceStatementController extends CommonBaseController { public class TotalPerformanceStatementController extends CommonBaseController {
private final TotalPerformanceBiz totalPerformanceBiz; private final TotalPerformanceBiz totalPerformanceBiz;
private final HttpServletRequest request;
private final UserAuthConfig userAuthConfig;
private final UserFeign userFeign;
private final VehicleFeign vehicleFeign;
private final Integer HIGHEST_AUTHORITY = 1;
@RequestMapping() @RequestMapping()
public ObjectRestResponse statisticalData(QueryCriteria queryCriteria){ public ObjectRestResponse statisticalData(QueryCriteria queryCriteria) throws Exception {
totalPerformanceBiz.statisticalData(queryCriteria);
UserDTO userDTO = userFeign.userinfoByToken(userAuthConfig.getToken(request)).getData();
//获取用户权限
List<Integer> Jurisdiction = null;
//判断是按选中的公司查询
Integer companyId = queryCriteria.getCompanyId();
if (companyId != null) {
//判断查询的公司,是否在该后台用户的权限内
if (Jurisdiction.contains(companyId)) {
Jurisdiction = Lists.newArrayList(companyId);
}
}
//是否有查询所有数据的权限
if (!HIGHEST_AUTHORITY.equals(userDTO.getDataAll())) {
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.parallelStream().map(BranchCompany::getId).collect(Collectors.toList());
if (companyId == null) {
Jurisdiction=companyIds;
}else {
if (!companyIds.contains(companyId)) {
return null;
}
}
}
queryCriteria.setJurisdiction(Jurisdiction);
totalPerformanceBiz.statisticalData(queryCriteria, userDTO);
return null;
} }
} }
...@@ -116,14 +116,14 @@ ...@@ -116,14 +116,14 @@
<select id="listOrder" parameterType="Map" resultMap="orderListMap"> <select id="listOrder" parameterType="Map" resultMap="orderListMap">
select b.* select b.*
<if test="type==1"> <if test="type==1">
,i.detail as carArticlesJson ,i.detail as carArticlesJson
</if> </if>
from base_order b from base_order b
LEFT JOIN order_rent_vehicle_detail r on r.order_id = b.id LEFT JOIN order_rent_vehicle_detail r on r.order_id = b.id
LEFT JOIN order_tour_detail t on t.order_id = b.id LEFT JOIN order_tour_detail t on t.order_id = b.id
LEFT JOIN order_member_detail m on m.order_id = b.id LEFT JOIN order_member_detail m on m.order_id = b.id
<if test="type==1"> <if test="type==1">
LEFT JOIN (select * from order_item where type = 104) i on b.id = i.order_id LEFT JOIN (select * from order_item where type = 104) i on b.id = i.order_id
</if> </if>
<where> <where>
<if test="crtUser != null"> <if test="crtUser != null">
...@@ -349,7 +349,7 @@ ...@@ -349,7 +349,7 @@
</select> </select>
<select id="findMemberOrders" resultType="com.xxfc.platform.order.pojo.dto.MemberOrderBo"> <select id="findMemberOrders" resultType="com.xxfc.platform.order.pojo.dto.MemberOrderBo">
select bo.*,omd.member_level AS `memberLevel` from ( select bo.*,omd.member_level AS `memberLevel` from (
SELECT SELECT
`id`, `id`,
`no` AS `orderNo`, `no` AS `orderNo`,
...@@ -403,36 +403,40 @@ ...@@ -403,36 +403,40 @@
</foreach> </foreach>
</if> </if>
) AS `bo` ) AS `bo`
INNER JOIN (select * from `order_member_detail` where 1=1 INNER JOIN (select * from `order_member_detail` where 1=1
<if test="level!=null"> <if test="level!=null">
and `member_level`=#{level} and `member_level`=#{level}
</if> </if>
) AS `omd` ON omd.order_id=bo.id ) AS `omd` ON omd.order_id=bo.id
ORDER BY bo.`creatTime` DESC ORDER BY bo.`creatTime` DESC
</select> </select>
@ApiModelProperty(value ="开始时间" )
private Date startDate;
@ApiModelProperty(value = "结束时间")
private Date endDate;
@ApiModelProperty(value = "订单类型:1-租车 2-旅游 3-会员 null-全部") <select id="selectTotalStatistical" parameterType="com.xxfc.platform.order.pojo.QueryCriteria" resultType="com.xxfc.platform.order.pojo.Achievement">
private Integer orderType; select crt_time,no,type,order_amount,real_amount,realname,username,parentRealname,positionName,parentUsername,companyName,pay_way,company_id from order_user_position_company
<where>
@ApiModelProperty(value = "业绩所属公司") <if test="startDate != null">
private Integer companyId; crt_time <![CDATA[>=]]> #{startDate}
</if>
@ApiModelProperty(value = "支付方式: 1-微信支付 2-支付宝支付 3-银联支付 null-全部") <if test="endDate != null">
private Integer paymentMethod; crt_time <![CDATA[<=]]> #{endDate}
</if>
@ApiModelProperty(value = "账目类型: 0-入账 1-出账") <if test="paymentMethod !=null" >
private Integer type = 0; pay_way = #{paymentMethod}
</if>
<select id="selectTotalStatistical" parameterType="com.xxfc.platform.order.pojo.QueryCriteria" resultType=""> <if test="jurisdiction != null and jurisdiction.size() !=0 ">
select * from base_order company_id in
<where> <foreach collection="jurisdiction" index="index" item="companyId" open="(" separator="," close=")">
#{companyId}
</foreach>
</if>
</where> <if test="orderType != null">
type = #{orderType}
</if>
order by crt_time DESC
</where>
</select> </select>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment