Commit be4f2a5d authored by libin's avatar libin

Merge branch 'staff-statistics' into dev

# Conflicts:
#	xx-order/xx-order-server/src/test/java/ServiceTest.java
parents 2d935462 cec6f5ac
package com.github.wxiaoqi.security.admin.bo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 14:33
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDetailBo {
private Integer userId;
private String userName;
private String phone;
private Integer postionId;
private String postionName;
}
package com.xxfc.platform.order.entity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 12:19
*/
@Table(name = "staff_statistics")
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Api("员工业绩统计")
public class StaffStatistics implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "year")
@ApiModelProperty(value = "年份")
protected String year;
@Column(name = "month")
@ApiModelProperty(value = "月份----->201908")
protected String month;
@Column(name = "date")
@ApiModelProperty(value = "年月日")
protected Date date;
@Column(name = "week_of_year")
@ApiModelProperty(value = "1周年的第几周--->201922")
protected String weekOfYear;
@ApiModelProperty("员工所属公司id")
@Column(name = "compnay_id")
private Integer companyId;
@ApiModelProperty("公司名称")
@Column(name = "company_name")
private String companyName;
@ApiModelProperty("员工id")
@Column(name = "user_id")
private Integer userId;
@ApiModelProperty("员工身份id")
@Column(name = "user_postion_id")
private Integer userPostionId;
@ApiModelProperty("员工身份")
@Column(name = "postion_name")
private String postionName;
@ApiModelProperty("租车订单量")
@Column(name = "rent_vehicle_order_num")
private Integer rentVehicleOrderNum;
@ApiModelProperty("租车订单总额(不包含押金,不计免赔金额)")
@Column(name = "rent_vehicle_amount")
private BigDecimal rentVehicleAmount;
@ApiModelProperty("会员订单量")
@Column(name = "member_order_num")
private Integer memberOrderNum;
@ApiModelProperty("会员订单总额")
@Column(name = "member_amount")
private BigDecimal memberAmount;
@ApiModelProperty("旅游订单量")
@Column(name = "travel_order_num")
private Integer travelOrderNum;
@ApiModelProperty("旅游订单总额")
@Column(name = "travel_amount")
private BigDecimal travelAmount;
@ApiModelProperty("销售总额")
@Column(name = "sell_amount")
private BigDecimal sellAmount;
@ApiModelProperty("提成")
@Column(name = "royalty_amount")
private BigDecimal royaltyAmount;
}
package com.xxfc.platform.order.pojo.bo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 12:44
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StaffStatisticsTotalBo {
private Integer staffNum;
private BigDecimal totalSellAmount;
private BigDecimal totalRoyaltyAmount;
public Integer getStaffNum() {
return this.staffNum==null?0:staffNum;
}
public BigDecimal getTotalSellAmount() {
return this.totalSellAmount==null?BigDecimal.ZERO:totalSellAmount;
}
public BigDecimal getTotalRoyaltyAmount() {
return this.totalRoyaltyAmount==null?BigDecimal.ZERO:totalRoyaltyAmount;
}
}
package com.xxfc.platform.order.pojo.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 12:43
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StaffStatisticsFindDTO extends PageParam {
private Date startDate;
private Date endDate;
private String companyName;
private Integer userPostionId;
private List<String> companyIds;
}
package com.xxfc.platform.order.pojo.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 12:44
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class StaffStatisticsVo implements Serializable {
private static final long serialVersionUID = 1L;
private String name ;
private List<String> companyNames;
private List<String> postionNames;
private String phone;
private BigDecimal sellAmount = BigDecimal.ZERO;
private BigDecimal royaltyAmount = BigDecimal.ZERO;
private Integer memberOrderNum = 0;
private BigDecimal memberAmount = BigDecimal.ZERO;
private Integer rentVehicleOrderNum = 0;
private BigDecimal rentVehicleAmount = BigDecimal.ZERO;
private Integer travelOrderNum = 0;
private BigDecimal travelAmount = BigDecimal.ZERO;
}
package com.xxfc.platform.order.biz;
import cn.hutool.core.util.ObjectUtil;
import com.github.wxiaoqi.security.admin.bo.UserDetailBo;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.entity.StaffStatistics;
import com.xxfc.platform.order.mapper.StaffStatisticsMapper;
import com.xxfc.platform.order.pojo.dto.StaffStatisticsFindDTO;
import com.xxfc.platform.order.pojo.bo.StaffStatisticsTotalBo;
import com.xxfc.platform.order.pojo.vo.StaffStatisticsVo;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 12:36
*/
@Transactional(rollbackFor = Exception.class)
@Service
@RequiredArgsConstructor(onConstructor =@__(@Autowired))
public class StaffStatisticsBiz extends BaseBiz<StaffStatisticsMapper, StaffStatistics> {
private final UserFeign userFeign;
public StaffStatisticsTotalBo staffStatisticsWithTotal(StaffStatisticsFindDTO staffStatisticsFindDTO) {
return mapper.statistics(staffStatisticsFindDTO);
}
public PageDataVO<StaffStatisticsVo> staffStatisticsWithPage(StaffStatisticsFindDTO staffStatisticsFindDTO) {
PageDataVO<StaffStatisticsVo> pageDataVO = new PageDataVO<>();
PageDataVO<StaffStatistics> statisticsVoPageDataVO = PageDataVO.pageInfo(staffStatisticsFindDTO.getPage(),staffStatisticsFindDTO.getLimit(),()->mapper.selectStaffStatistics(staffStatisticsFindDTO));
List<StaffStatistics> data = statisticsVoPageDataVO.getData();
if (CollectionUtils.isEmpty(data)){
pageDataVO.setTotalCount(0L);
pageDataVO.setTotalPage(0);
pageDataVO.setPageNum(staffStatisticsFindDTO.getPage());
pageDataVO.setPageSize(staffStatisticsFindDTO.getLimit());
pageDataVO.setData(Collections.EMPTY_LIST);
return pageDataVO;
}
List<Integer> userIds = data.stream().map(StaffStatistics::getUserId).collect(Collectors.toList());
ObjectRestResponse<List<AppUserVo>> result = userFeign.getByUserIds(userIds);
List<AppUserVo> users = result.getData();
Map<Integer,AppUserVo> userVoMap = CollectionUtils.isEmpty(users) ? Collections.EMPTY_MAP : users.stream().filter(x->Objects.nonNull(x.getUserid())).collect(Collectors.toMap(AppUserVo::getUserid, Function.identity()));
Map<Integer, List<StaffStatistics>> statisticsMap = data.stream().collect(Collectors.groupingBy(StaffStatistics::getUserId, Collectors.toList()));
List<StaffStatisticsVo> staffStatisticsVos = new ArrayList<>(data.size());
StaffStatisticsVo staffStatisticsVo = new StaffStatisticsVo();
statisticsMap.forEach((K,V)->{
List<String> compnayNames = new ArrayList<>(V.size());
List<String> postionNames = new ArrayList<>(V.size());
StaffStatisticsVo staffStatisticsClone = ObjectUtil.cloneByStream(staffStatisticsVo);
for (StaffStatistics staffStatistics : V) {
staffStatisticsClone.setSellAmount(staffStatistics.getSellAmount().add(staffStatisticsClone.getSellAmount()));
staffStatisticsClone.setRoyaltyAmount(staffStatistics.getRoyaltyAmount().add(staffStatisticsClone.getRoyaltyAmount()));
staffStatisticsClone.setRentVehicleAmount(staffStatistics.getRentVehicleAmount().add(staffStatisticsClone.getRentVehicleAmount()));
staffStatisticsClone.setRentVehicleOrderNum(staffStatistics.getRentVehicleOrderNum()+staffStatisticsClone.getRentVehicleOrderNum());
staffStatisticsClone.setTravelAmount(staffStatistics.getTravelAmount().add(staffStatisticsClone.getTravelAmount()));
staffStatisticsClone.setTravelOrderNum(staffStatistics.getTravelOrderNum()+staffStatisticsClone.getTravelOrderNum());
staffStatisticsClone.setMemberAmount(staffStatistics.getMemberAmount().add(staffStatisticsClone.getMemberAmount()));
staffStatisticsClone.setMemberOrderNum(staffStatistics.getMemberOrderNum()+staffStatisticsClone.getMemberOrderNum());
compnayNames.add(staffStatistics.getCompanyName());
postionNames.add(staffStatistics.getPostionName());
}
AppUserVo appUserVo = userVoMap ==null?new AppUserVo():userVoMap.get(K)==null?new AppUserVo():userVoMap.get(K);
String name = StringUtils.hasText(appUserVo.getRealname())?appUserVo.getRealname():StringUtils.hasText(appUserVo.getNickname())?appUserVo.getNickname():"";
staffStatisticsClone.setName(name);
staffStatisticsClone.setPhone(appUserVo.getUsername());
staffStatisticsClone.setCompanyNames(compnayNames);
staffStatisticsClone.setPostionNames(postionNames);
staffStatisticsVos.add(staffStatisticsClone);
});
pageDataVO.setData(staffStatisticsVos);
pageDataVO.setPageSize(statisticsVoPageDataVO.getPageSize());
pageDataVO.setPageNum(statisticsVoPageDataVO.getPageNum());
pageDataVO.setTotalPage(statisticsVoPageDataVO.getTotalPage());
pageDataVO.setTotalCount(statisticsVoPageDataVO.getTotalCount());
return pageDataVO;
}
}
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.StaffStatistics;
import com.xxfc.platform.order.pojo.bo.StaffStatisticsTotalBo;
import com.xxfc.platform.order.pojo.dto.StaffStatisticsFindDTO;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 12:37
*/
public interface StaffStatisticsMapper extends Mapper<StaffStatistics>, InsertListMapper<StaffStatistics> {
StaffStatisticsTotalBo statistics(StaffStatisticsFindDTO staffStatisticsFindDTO);
List<StaffStatistics> selectStaffStatistics(StaffStatisticsFindDTO staffStatisticsFindDTO);
}
package com.xxfc.platform.order.rest.background;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.biz.StaffStatisticsBiz;
import com.xxfc.platform.order.pojo.dto.StaffStatisticsFindDTO;
import com.xxfc.platform.order.pojo.bo.StaffStatisticsTotalBo;
import com.xxfc.platform.order.pojo.vo.StaffStatisticsVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/25 12:39
*/
@RestController
@RequestMapping("/admin/staff_statistics")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class StaffStatisticsAdminController {
private final StaffStatisticsBiz staffStatisticsBiz;
@PostMapping("/total_statistics")
public ObjectRestResponse<StaffStatisticsTotalBo> staffStatisticsWithTotal(@RequestBody StaffStatisticsFindDTO staffStatisticsFindDTO) {
StaffStatisticsTotalBo staffStatisticsTotalVo = staffStatisticsBiz.staffStatisticsWithTotal(staffStatisticsFindDTO);
return ObjectRestResponse.succ(staffStatisticsTotalVo);
}
@PostMapping("/page")
public ObjectRestResponse<PageDataVO<StaffStatisticsVo>> staffStatisticsWithPage(@RequestBody StaffStatisticsFindDTO staffStatisticsFindDTO) {
PageDataVO<StaffStatisticsVo> pageDataVO = staffStatisticsBiz.staffStatisticsWithPage(staffStatisticsFindDTO);
return ObjectRestResponse.succ(pageDataVO);
}
}
<?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.xxfc.platform.order.mapper.StaffStatisticsMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.order.entity.StaffStatistics" id="staffstatisticsMap">
<result property="id" column="id"/>
<result property="year" column="year"/>
<result property="month" column="month"/>
<result property="date" column="date"/>
<result property="weekOfYear" column="week_of_year"/>
<result property="companyId" column="company_id"/>
<result property="companyName" column="company_name"/>
<result property="userId" column="user_id"/>
<result property="userPostionId" column="user_postion_id"/>
<result property="postionName" column="postion_name"/>
<result property="rentVehicleOrderNum" column="rent_vehicle_order_num"/>
<result property="rentVehicleAmount" column="rent_vehicle_amount"/>
<result property="travelOrderNum" column="travel_order_num"/>
<result property="travelAmount" column="travel_amount"/>
<result property="memberOrderNum" column="member_order_num"/>
<result property="memberAmount" column="member_amount"/>
<result property="sellAmount" column="sell_amount"/>
<result property="royaltyAmount" column="royalty_amount"/>
</resultMap>
<select id="statistics" resultType="com.xxfc.platform.order.pojo.bo.StaffStatisticsTotalBo">
select count(`user_id`) as `staffNum`,sum(`sell_amount`) as `totalSellAmount`,sum(`royalty_amount`) as `totalRoyaltyAmount` from `staff_statistics`
</select>
<select id="selectStaffStatistics" resultMap="staffstatisticsMap">
select * from `staff_statistics` where 1=1
<if test="userPostionId!=null">
and `user_postion_id`=#{userPostionId}
</if>
<if test="companyName!=null and companyName!=''">
and `company_name` like CONCAT('%',#{companyName},'%')
</if>
<if test="companyIds!=null and companyIds.size!=0">
and `company_id` IN
<foreach collection="companyIds" item="compnayId" separator="," open="(" close=")">
#{compnayId}
</foreach>
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >=#{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <=#{endDate}
]]>
</if>
</select>
</mapper>
\ No newline at end of file
import com.xxfc.platform.order.OrderApplication; import com.xxfc.platform.order.OrderApplication;
import com.xxfc.platform.order.biz.DailyOrderStatisticsBiz; import com.xxfc.platform.order.biz.DailyOrderStatisticsBiz;
import com.xxfc.platform.order.biz.OrderMemberReceivedStatisticsBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleReceivedStatisticsBiz;
import com.xxfc.platform.order.biz.OrderStatisticsBiz; import com.xxfc.platform.order.biz.OrderStatisticsBiz;
import com.xxfc.platform.order.jobhandler.BaseOrderStatisticsJobHandler; import com.xxfc.platform.order.jobhandler.BaseOrderStatisticsJobHandler;
import com.xxfc.platform.order.jobhandler.OrderReceivedStatisticsJobHandler;
import com.xxfc.platform.order.pojo.HomePageOrderData; import com.xxfc.platform.order.pojo.HomePageOrderData;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -37,20 +33,10 @@ public class ServiceTest { ...@@ -37,20 +33,10 @@ public class ServiceTest {
@Autowired @Autowired
private BaseOrderStatisticsJobHandler handler; private BaseOrderStatisticsJobHandler handler;
@Autowired
private OrderMemberReceivedStatisticsBiz orderMemberReceivedStatisticsBiz;
@Autowired
private OrderRentVehicleReceivedStatisticsBiz orderRentVehicleReceivedStatisticsBiz;
@Autowired
private OrderReceivedStatisticsJobHandler orderReceivedStatisticsJobHandler;
@Autowired
private VehicleFeign vehicleFeign;
@Test @Test
public void testSchedu(){ public void testSchedu(){
dailyOrderStatisticsBiz.statisticalOrder(1); dailyOrderStatisticsBiz.statisticalOrder(1);
} }
@Test @Test
...@@ -81,8 +67,8 @@ public class ServiceTest { ...@@ -81,8 +67,8 @@ public class ServiceTest {
@Test @Test
public void test4(){ public void test4(){
HomePageOrderData totalOrder = statisticsBiz.getTotalOrder(null,null); // HomePageOrderData totalOrder = statisticsBiz.getTotalOrder(null);
System.out.println(totalOrder); // System.out.println(totalOrder);
} }
......
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