Compare commits
5 Commits
8a93752fbc
...
1c0376f60c
Author | SHA1 | Date |
---|---|---|
Jruome | 1c0376f60c | |
Jruome | f7da38634b | |
tangqian | 877e40d7a0 | |
tangqian | 6194189803 | |
tangqian | 6b3c96c8f9 |
|
@ -0,0 +1,35 @@
|
||||||
|
package cn.iocoder.yudao.module.shop.controller.admin.recharge.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title:PromoterAnalysisExcelVo
|
||||||
|
* @Description: TODO
|
||||||
|
* @author: tangqian
|
||||||
|
* @date: 2023/6/25 10:04
|
||||||
|
* @version: V1.0.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PromoterAnalysisExcelVo {
|
||||||
|
|
||||||
|
@ExcelProperty("租户名称")
|
||||||
|
private String tenantName;
|
||||||
|
@ExcelProperty("推广员名称")
|
||||||
|
private String promoterName;
|
||||||
|
@ExcelProperty("总销售金额")
|
||||||
|
private BigDecimal totalMoney;
|
||||||
|
@ExcelProperty("总订单数量")
|
||||||
|
private Integer totalNum;
|
||||||
|
@ExcelProperty("总退款金额")
|
||||||
|
private BigDecimal totalWithdrawMoney;
|
||||||
|
@ExcelProperty("240档订单数量")
|
||||||
|
private Integer threeTotalNum;
|
||||||
|
@ExcelProperty("400档订单数量")
|
||||||
|
private Integer twoTotalNum;
|
||||||
|
@ExcelProperty("640档订单数量")
|
||||||
|
private Integer oneTotalNum;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package cn.iocoder.yudao.module.shop.controller.admin.recharge.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title:RefundAnalysisReqVo
|
||||||
|
* @Description: TODO
|
||||||
|
* @author: tangqian
|
||||||
|
* @date: 2023/6/25 11:08
|
||||||
|
* @version: V1.0.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RefundAnalysisReqVo implements Serializable {
|
||||||
|
private static final long serialVersionUID = -7750537307362666158L;
|
||||||
|
@Schema(description = "退款类型")
|
||||||
|
private String refundType;
|
||||||
|
@Schema(description = "退款类型中文解释")
|
||||||
|
private String refundName;
|
||||||
|
@Schema(description = "数量")
|
||||||
|
private Integer totalNum;
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package cn.iocoder.yudao.module.shop.controller.admin.recharge.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title:RefundOrderAnalysisReqVO
|
||||||
|
* @Description: TODO
|
||||||
|
* @author: tangqian
|
||||||
|
* @date: 2023/6/25 11:58
|
||||||
|
* @version: V1.0.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RefundOrderAnalysisReqVO implements Serializable {
|
||||||
|
@Schema(description = "已退款数量")
|
||||||
|
private Integer alreadyTotalNum;
|
||||||
|
@Schema(description = "未退款数量")
|
||||||
|
private Integer notTotalNum;
|
||||||
|
}
|
|
@ -120,6 +120,39 @@ public class DataAnalysisController {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 销售(推广员维度) 导出
|
// 销售(推广员维度) 导出
|
||||||
|
@Operation(summary = "销售(推广员维度)-导出")
|
||||||
|
@RequestMapping(value = "/promoterAnalysis-excel", method = RequestMethod.GET)
|
||||||
|
@PreAuthenticated
|
||||||
|
@TenantIgnore
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void promoterAnalysisExcel(@Validated DataAnalysisRequest request
|
||||||
|
, HttpServletResponse response) throws IOException {
|
||||||
|
PageResult<PromoterAnalysisReqVO> promoterAnalysisReqVOPageResult = storeOrderService.promoterAnalysis(request);
|
||||||
|
List<PromoterAnalysisExcelVo> list = new ArrayList<>();
|
||||||
|
if (null != promoterAnalysisReqVOPageResult && !CollectionUtils.isEmpty(promoterAnalysisReqVOPageResult.getList())) {
|
||||||
|
promoterAnalysisReqVOPageResult.getList().forEach(e -> {
|
||||||
|
PromoterAnalysisExcelVo vo = new PromoterAnalysisExcelVo();
|
||||||
|
BeanUtils.copyProperties(e, vo);
|
||||||
|
list.add(vo);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ExcelUtils.write(response, "销售(推广员维度).xls", "数据", PromoterAnalysisExcelVo.class, list);
|
||||||
|
}
|
||||||
// 退款原因分析
|
// 退款原因分析
|
||||||
|
|
||||||
|
@Operation(summary = "退款分析(退款类型)")
|
||||||
|
@RequestMapping(value = "/refundAnalysis", method = RequestMethod.GET)
|
||||||
|
@PreAuthenticated
|
||||||
|
@TenantIgnore
|
||||||
|
public CommonResult<List<RefundAnalysisReqVo>> refundAnalysis(@Validated DataAnalysisRequest request) {
|
||||||
|
return CommonResult.success(storeOrderService.refundAnalysis(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "退款分析(订单量)")
|
||||||
|
@RequestMapping(value = "/refundOrderAnalysis", method = RequestMethod.GET)
|
||||||
|
@PreAuthenticated
|
||||||
|
@TenantIgnore
|
||||||
|
public CommonResult<RefundOrderAnalysisReqVO> refundOrderAnalysis(@Validated DataAnalysisRequest request) {
|
||||||
|
return CommonResult.success(storeOrderService.refundOrderAnalysis(request));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
package cn.iocoder.yudao.module.shop.dal.mysql.order;
|
package cn.iocoder.yudao.module.shop.dal.mysql.order;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.StatementAllReqDataVo;
|
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.*;
|
||||||
import cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.StatisticsPageVo;
|
|
||||||
import cn.iocoder.yudao.module.shop.dal.dataobject.order.StoreOrder;
|
import cn.iocoder.yudao.module.shop.dal.dataobject.order.StoreOrder;
|
||||||
import cn.iocoder.yudao.module.shop.request.order.DataAnalysisRequest;
|
import cn.iocoder.yudao.module.shop.request.order.DataAnalysisRequest;
|
||||||
import cn.iocoder.yudao.module.shop.request.order.StoreOrderStaticsticsRequest;
|
import cn.iocoder.yudao.module.shop.request.order.StoreOrderStaticsticsRequest;
|
||||||
|
@ -11,6 +10,7 @@ import cn.iocoder.yudao.module.shop.response.order.StoreOrderStatisticsChartItem
|
||||||
import cn.iocoder.yudao.module.shop.vo.order.StoreDateRangeSqlPram;
|
import cn.iocoder.yudao.module.shop.vo.order.StoreDateRangeSqlPram;
|
||||||
import cn.iocoder.yudao.module.shop.vo.order.StoreStaffDetail;
|
import cn.iocoder.yudao.module.shop.vo.order.StoreStaffDetail;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
@ -85,4 +85,10 @@ public interface StoreOrderMapper extends BaseMapperX<StoreOrder> {
|
||||||
List<StatementAllReqDataVo> statisticsAll(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("tenantId") Long tenantId);
|
List<StatementAllReqDataVo> statisticsAll(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("tenantId") Long tenantId);
|
||||||
|
|
||||||
IPage<StatisticsPageVo> statisticsAnalysis(IPage<StatisticsPageVo> page, @Param("data")DataAnalysisRequest request);
|
IPage<StatisticsPageVo> statisticsAnalysis(IPage<StatisticsPageVo> page, @Param("data")DataAnalysisRequest request);
|
||||||
|
|
||||||
|
IPage<PromoterAnalysisReqVO> promoterAnalysis(Page<PromoterAnalysisReqVO> page, @Param("data")DataAnalysisRequest request);
|
||||||
|
|
||||||
|
List<RefundAnalysisReqVo> refundAnalysis(@Param("data")DataAnalysisRequest request);
|
||||||
|
|
||||||
|
RefundOrderAnalysisReqVO refundOrderAnalysis(@Param("data")DataAnalysisRequest request);
|
||||||
}
|
}
|
||||||
|
|
|
@ -421,4 +421,8 @@ public interface StoreOrderService extends IService<StoreOrder> {
|
||||||
PageResult<StatisticsPageVo> statisticsAnalysis(DataAnalysisRequest request);
|
PageResult<StatisticsPageVo> statisticsAnalysis(DataAnalysisRequest request);
|
||||||
|
|
||||||
PageResult<PromoterAnalysisReqVO> promoterAnalysis(DataAnalysisRequest request);
|
PageResult<PromoterAnalysisReqVO> promoterAnalysis(DataAnalysisRequest request);
|
||||||
|
|
||||||
|
List<RefundAnalysisReqVo> refundAnalysis(DataAnalysisRequest request);
|
||||||
|
|
||||||
|
RefundOrderAnalysisReqVO refundOrderAnalysis(DataAnalysisRequest request);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1532,11 +1532,17 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DimensionalityAnalysisReqVO dimensionalityAnalysis(DataAnalysisRequest request) {
|
public DimensionalityAnalysisReqVO dimensionalityAnalysis(DataAnalysisRequest request) {
|
||||||
|
if (!Objects.nonNull(request.getTenantId())) {
|
||||||
|
request.setTenantId(TenantContextHolder.getTenantId());
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AffiliationAnalysisReqVO> affiliation(DataAnalysisRequest request) {
|
public List<AffiliationAnalysisReqVO> affiliation(DataAnalysisRequest request) {
|
||||||
|
if (!Objects.nonNull(request.getTenantId())) {
|
||||||
|
request.setTenantId(TenantContextHolder.getTenantId());
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1544,14 +1550,38 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
||||||
public PageResult<StatisticsPageVo> statisticsAnalysis(DataAnalysisRequest request) {
|
public PageResult<StatisticsPageVo> statisticsAnalysis(DataAnalysisRequest request) {
|
||||||
com.baomidou.mybatisplus.extension.plugins.pagination.Page<StatisticsPageVo> page =
|
com.baomidou.mybatisplus.extension.plugins.pagination.Page<StatisticsPageVo> page =
|
||||||
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(request.getPageNo(), request.getPageSize());
|
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(request.getPageNo(), request.getPageSize());
|
||||||
|
if (!Objects.nonNull(request.getTenantId())) {
|
||||||
|
request.setTenantId(TenantContextHolder.getTenantId());
|
||||||
|
}
|
||||||
mapper.statisticsAnalysis(page, request);
|
mapper.statisticsAnalysis(page, request);
|
||||||
return new PageResult<>(page.getRecords(), page.getTotal());
|
return new PageResult<>(page.getRecords(), page.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<PromoterAnalysisReqVO> promoterAnalysis(DataAnalysisRequest request) {
|
public PageResult<PromoterAnalysisReqVO> promoterAnalysis(DataAnalysisRequest request) {
|
||||||
|
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PromoterAnalysisReqVO> page =
|
||||||
|
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(request.getPageNo(), request.getPageSize());
|
||||||
|
if (!Objects.nonNull(request.getTenantId())) {
|
||||||
|
request.setTenantId(TenantContextHolder.getTenantId());
|
||||||
|
}
|
||||||
|
mapper.promoterAnalysis(page, request);
|
||||||
|
return new PageResult<>(page.getRecords(), page.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
@Override
|
||||||
|
public List<RefundAnalysisReqVo> refundAnalysis(DataAnalysisRequest request) {
|
||||||
|
if (!Objects.nonNull(request.getTenantId())) {
|
||||||
|
request.setTenantId(TenantContextHolder.getTenantId());
|
||||||
|
}
|
||||||
|
return mapper.refundAnalysis(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RefundOrderAnalysisReqVO refundOrderAnalysis(DataAnalysisRequest request) {
|
||||||
|
if (!Objects.nonNull(request.getTenantId())) {
|
||||||
|
request.setTenantId(TenantContextHolder.getTenantId());
|
||||||
|
}
|
||||||
|
return mapper.refundOrderAnalysis(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
private RechargeOrderDO initializeOrder(OrderContentRequest request, String code, MemberUserRespDTO user, PromoterDTO promoterDTO) {
|
private RechargeOrderDO initializeOrder(OrderContentRequest request, String code, MemberUserRespDTO user, PromoterDTO promoterDTO) {
|
||||||
|
|
|
@ -131,6 +131,9 @@
|
||||||
<if test="null != data.endTime">
|
<if test="null != data.endTime">
|
||||||
and t1.create_time < #{endTime}
|
and t1.create_time < #{endTime}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="data.tenantId !=null and data.tenantId!=1">
|
||||||
|
and t1.tenant_id =#{data.tenantId}
|
||||||
|
</if>
|
||||||
GROUP BY
|
GROUP BY
|
||||||
t1.tenant_id
|
t1.tenant_id
|
||||||
<choose>
|
<choose>
|
||||||
|
@ -142,4 +145,92 @@
|
||||||
</otherwise>
|
</otherwise>
|
||||||
</choose>
|
</choose>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="promoterAnalysis"
|
||||||
|
resultType="cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.PromoterAnalysisReqVO">
|
||||||
|
SELECT
|
||||||
|
t4.`name` AS tenantName,
|
||||||
|
t2.nickname AS promoterName,
|
||||||
|
SUM(t6.price) AS totalMoney,
|
||||||
|
count(t6.id) AS totalNum,
|
||||||
|
SUM(IF(t5.refund_status=2,t6.price,0)) AS totalWithdrawMoney,
|
||||||
|
sum(t6.price = 240) AS threeTotalNum,
|
||||||
|
sum(t6.price = 400) AS twoTotalNum,
|
||||||
|
sum(t6.price = 640) AS oneTotalNum
|
||||||
|
FROM
|
||||||
|
member_promoter t1
|
||||||
|
JOIN member_user t2 ON t1.user_id = t2.id
|
||||||
|
LEFT JOIN system_dept t3 ON t1.dept_id = t3.id
|
||||||
|
LEFT JOIN system_tenant t4 ON t1.tenant_id = t4.id
|
||||||
|
LEFT JOIN cy_recharge_order t5 ON t1.user_id = t5.promoter_id
|
||||||
|
LEFT JOIN cy_recharge_order_info t6 ON t5.id = t6.recharge_order_id
|
||||||
|
WHERE t5.paid != 0
|
||||||
|
<if test="null != data.startTime">
|
||||||
|
and t1.create_time >= #{startTime}
|
||||||
|
</if>
|
||||||
|
<if test="null != data.endTime">
|
||||||
|
and t1.create_time < #{endTime}
|
||||||
|
</if>
|
||||||
|
<if test="data.tenantId !=null and data.tenantId!=1">
|
||||||
|
and t1.tenant_id =#{data.tenantId}
|
||||||
|
</if>
|
||||||
|
GROUP BY
|
||||||
|
t1.user_id, t4.`name`
|
||||||
|
|
||||||
|
<choose>
|
||||||
|
<when test="data.sortMoney !=null and data.sortMoney=1">
|
||||||
|
ORDER BY totalMoney DESC,totalNum DESC
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
ORDER BY totalMoney ASC,totalNum ASC
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
</select>
|
||||||
|
<select id="refundAnalysis"
|
||||||
|
resultType="cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.RefundAnalysisReqVo">
|
||||||
|
SELECT
|
||||||
|
refund_type,
|
||||||
|
refund_name,
|
||||||
|
count( refund_type ) AS totalNum
|
||||||
|
FROM
|
||||||
|
cy_recharge_order
|
||||||
|
WHERE
|
||||||
|
paid = 2
|
||||||
|
AND refund_status = 2
|
||||||
|
AND refund_type IS NOT NULL
|
||||||
|
<if test="null != data.startTime">
|
||||||
|
and t1.create_time >= #{startTime}
|
||||||
|
</if>
|
||||||
|
<if test="null != data.endTime">
|
||||||
|
and t1.create_time < #{endTime}
|
||||||
|
</if>
|
||||||
|
<if test="data.tenantId !=null and data.tenantId!=1">
|
||||||
|
and t1.tenant_id =#{data.tenantId}
|
||||||
|
</if>
|
||||||
|
GROUP BY
|
||||||
|
refund_type,refund_name
|
||||||
|
|
||||||
|
|
||||||
|
</select>
|
||||||
|
<select id="refundOrderAnalysis"
|
||||||
|
resultType="cn.iocoder.yudao.module.shop.controller.admin.recharge.vo.RefundOrderAnalysisReqVO">
|
||||||
|
SELECT
|
||||||
|
COUNT(CASE WHEN refund_status = 2 THEN 1 END) AS alreadyTotalNum,
|
||||||
|
COUNT(CASE WHEN refund_status != 2 THEN 1 END) AS notTotalNum
|
||||||
|
|
||||||
|
FROM
|
||||||
|
cy_recharge_order
|
||||||
|
WHERE
|
||||||
|
paid = 1
|
||||||
|
<if test="null != data.startTime">
|
||||||
|
and t1.create_time >= #{startTime}
|
||||||
|
</if>
|
||||||
|
<if test="null != data.endTime">
|
||||||
|
and t1.create_time < #{endTime}
|
||||||
|
</if>
|
||||||
|
<if test="data.tenantId !=null and data.tenantId!=1">
|
||||||
|
and t1.tenant_id =#{data.tenantId}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
@ -160,6 +160,7 @@ import {DICT_TYPE, getDictDatas} from "@/utils/dict";
|
||||||
import ElementForm from "@/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue";
|
import ElementForm from "@/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue";
|
||||||
import Treeselect from "@riophae/vue-treeselect";
|
import Treeselect from "@riophae/vue-treeselect";
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
|
||||||
|
import {deletePhoneRecord} from "@/api/shop/phoneRecord";
|
||||||
export default {
|
export default {
|
||||||
name: "RechargeOrder",
|
name: "RechargeOrder",
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -283,10 +284,14 @@ export default {
|
||||||
return false; //禁用
|
return false; //禁用
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async handleGoods(){
|
handleGoods(){
|
||||||
if(this.multipleSelection.length){
|
if(this.multipleSelection.length){
|
||||||
await updateByIds({ids:this.multipleSelection,status:true})
|
this.$modal.confirm('是否更改勾选订单发货状态?').then(()=> {
|
||||||
this.getList();
|
return updateByIds({ids:this.multipleSelection,status:true})
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
}).catch(() => {});
|
||||||
}else {
|
}else {
|
||||||
this.$modal.msgWarning("请勾选需要更改发货状态的订单")
|
this.$modal.msgWarning("请勾选需要更改发货状态的订单")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue