加上售中下单逻辑,修改账号渠道,进粉统计的渠道和下单时保持一致

This commit is contained in:
xiezhijun
2021-06-01 19:24:40 +08:00
parent 783fd6fe3b
commit 77a8668b5d
23 changed files with 474 additions and 70 deletions

View File

@ -39,4 +39,7 @@ public class SysImportFanWxAccount extends BaseEntity
//导粉日期
@JsonFormat(pattern = "yyyy-MM-dd")
private Date importFanDate;
//售前
private Long preSaleId;
}

View File

@ -84,6 +84,17 @@ public class SysOrder extends BaseEntity {
@Excel(name = "售前")
private String preSale;
/**
* 售前推送人(售中一开单才存在)
*/
//@Excel(name = "售前推送人")
private Long pushPreSaleId;
/**
* 售前推送人(售中一开单才存在)
*/
private String pushPreSale;
/** 售中ID */
private Long onSaleId;

View File

@ -45,6 +45,12 @@ public class SysWxSaleAccount extends BaseEntity
private Integer useCount;
//进粉渠道
private Integer channel;
//销售ID
private Long saleId;
//销售昵称
private String saleName;
}

View File

@ -76,5 +76,5 @@ public interface SysWxSaleAccountMapper
* 获取可接粉的微信号以及分配的销售昵称
* @return
*/
List<SysWxSaleAccount> getWxAccountAndSale();
List<SysWxSaleAccount> getWxAccountAndSale(SysWxSaleAccount sysWxSaleAccount);
}

View File

@ -77,5 +77,5 @@ public interface ISysWxSaleAccountService
* 获取可接粉的微信号以及分配的销售昵称
* @return
*/
List<SysWxSaleAccount> getWxAccountAndSale();
List<SysWxSaleAccount> getWxAccountAndSale(SysWxSaleAccount sysWxSaleAccount);
}

View File

@ -105,7 +105,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
row = sysOrderMapper.insertSysOrder(sysOrder);
//需要自动创建售后二开提成单
if(row > 0 && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
autoCreateSecondAfterSaleOrder(sysOrder);
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}else{
row = sysOrderMapper.insertSysOrder(sysOrder);
@ -143,7 +143,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
//二开,是否需要自动创建售后二开提成单
if(row > 0 && "1".equals(sysOrder.getOrderCountType()) && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
sysOrder.setAmount(amount);
autoCreateSecondAfterSaleOrder(sysOrder);
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}
//体验单
@ -155,6 +155,64 @@ public class SysOrderServiceImpl implements ISysOrderService {
sysOrder.setNutriAssisId(null);
row = sysOrderMapper.insertSysOrder(sysOrder);
}
//售中单
else if("3".equals(sysOrder.getOrderType())){
sysOrder.setPreSaleId(null);
//一开、二开
if("0".equals(sysOrder.getOrderCountType()) || "1".equals(sysOrder.getOrderCountType())){
sysOrder.setNutritionistId((sysOrder.getNutritionistIdList() != null && sysOrder.getNutritionistIdList().length > 0) ? sysOrder.getNutritionistIdList()[0] : null);
sysOrder.setMainOrderId(0L);
sysOrder.setAfterSaleCommissOrder(0);
if("0".equals(sysOrder.getOrderCountType())){
row = sysOrderMapper.insertSysOrder(sysOrder);
}else{
//二开单不存在售前推荐人
sysOrder.setPushPreSaleId(null);
row = sysOrderMapper.insertSysOrder(sysOrder);
//需要自动创建售后二开提成单
if(row > 0 && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}
}else{
sysOrder.setAfterSaleCommissOrder(0);
String rate = sysOrder.getNutritionistRate();
if(StringUtils.isEmpty(rate) || rate.indexOf(",") == -1 || "0,10".equals(rate) || sysOrder.getNutritionistIdList().length != 2){
return 0;
}
String[] rateArray = rate.split(",");
if(Integer.parseInt(rateArray[0]) + Integer.parseInt(rateArray[1]) != 10){
return 0;
}
BigDecimal amount = sysOrder.getAmount();
//获取主单的数组下标
int mainIndex = 0;
if(Integer.parseInt(rateArray[1]) > Integer.parseInt(rateArray[0])){
mainIndex = 1;
}
//添加主单
sysOrder.setNutritionistId(sysOrder.getNutritionistIdList()[mainIndex]);
sysOrder.setAmount(BigDecimal.valueOf(amount.doubleValue()*Integer.parseInt(rateArray[mainIndex])/10));
sysOrder.setMainOrderId(0L);
//拆分二开单
if("3".equals(sysOrder.getOrderCountType())){
//二开单不存在售前推荐人
sysOrder.setPushPreSaleId(null);
}
row = sysOrderMapper.insertSysOrder(sysOrder);
//添加副单
sysOrder.setMainOrderId(sysOrder.getOrderId());
sysOrder.setOrderId(sysOrder.getOrderId()+1);
sysOrder.setNutritionistId(sysOrder.getNutritionistIdList()[1-mainIndex]);
sysOrder.setAmount(BigDecimal.valueOf(amount.doubleValue()*Integer.parseInt(rateArray[1-mainIndex])/10));
row = sysOrderMapper.insertSysOrder(sysOrder);
//拆分二开单
if(row > 0 && "3".equals(sysOrder.getOrderCountType()) && sysOrder.getSecondAfterSaleFlag() != null && sysOrder.getSecondAfterSaleFlag().intValue() == 1){
sysOrder.setAmount(amount);
row = autoCreateSecondAfterSaleOrder(sysOrder);
}
}
}
return row;
}
@ -166,6 +224,8 @@ public class SysOrderServiceImpl implements ISysOrderService {
private int autoCreateSecondAfterSaleOrder(SysOrder sysOrder){
if(sysOrder != null){
sysOrder.setPreSaleId(sysOrder.getAfterSaleId());
sysOrder.setOnSaleId(null);
sysOrder.setPushPreSaleId(null);
sysOrder.setAfterSaleId(null);
sysOrder.setNutritionistId(null);
sysOrder.setNutriAssisId(null);
@ -173,6 +233,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
sysOrder.setPlannerAssisId(null);
sysOrder.setOperatorId(null);
sysOrder.setOperatorAssisId(null);
sysOrder.setMainOrderId(0L);
sysOrder.setAfterSaleCommissOrder(1);
sysOrder.setOrderId(sysOrder.getOrderId()+1);
return sysOrderMapper.insertSysOrder(sysOrder);
@ -208,6 +269,9 @@ public class SysOrderServiceImpl implements ISysOrderService {
sysOrder.setOperatorId(null);
sysOrder.setOperatorAssisId(null);
}
if("3".equals(sysOrder.getOrderType())){
sysOrder.setPreSaleId(null);
}
if(oldSysOrder.getStartTime() == null){//确保提成计算时间不为空
sysOrder.setCommissStartTime(sysOrder.getOrderTime());
}
@ -313,7 +377,7 @@ public class SysOrderServiceImpl implements ISysOrderService {
for (SysOrder sysOrder : orderList) {
LocalDate newStartTime = null;
//判断是否提成单,拆分单中的副单,体验单,定金单
if(sysOrder.getStartTime() == null || sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() != 0) ||
if(sysOrder.getStartTime() == null || sysOrder.getAfterSaleCommissOrder().intValue() == 1 || sysOrder.getMainOrderId().intValue() != 0 ||
"2".equals(sysOrder.getOrderType()) || "1".equals(sysOrder.getOrderMoneyType())){
continue;
}

View File

@ -170,7 +170,7 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService {
continue;
}
//判断是否提成单,拆分单中的副单,体验单,定金单
if (sysOrder.getAfterSaleCommissOrder().intValue() == 1 || ("1".equals(sysOrder.getOrderType()) && sysOrder.getMainOrderId().intValue() != 0) ||
if (sysOrder.getAfterSaleCommissOrder().intValue() == 1 || sysOrder.getMainOrderId().intValue() != 0 ||
// "2".equals(sysOrder.getOrderType()) || // 体验单也需要生成计划 2021.05.29
"1".equals(sysOrder.getOrderMoneyType()) || sysOrder.getCounted() == 1) {
System.out.println("---------------------" + sysOrder.getOrderId() + "不生成食谱------------------------");

View File

@ -136,7 +136,7 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService {
* @param sysWxSaleAccount
* @return
*/
public List<SysWxSaleAccount> getWxAccountAndSale(){
return sysWxSaleAccountMapper.getWxAccountAndSale();
public List<SysWxSaleAccount> getWxAccountAndSale(SysWxSaleAccount sysWxSaleAccount){
return sysWxSaleAccountMapper.getWxAccountAndSale(sysWxSaleAccount);
}
}

View File

@ -4,9 +4,9 @@ import com.stdiet.custom.domain.SysOrder;
public class OrderUtils {
private static final String[] orderTypeArray = {"普通单","比例拆分单","体验单"};
private static final String[] orderTypeArray = {"普通单","比例拆分单","体验单","售中单"};
private static final String[] orderCountTypeArray = {"一开单","二开单"};
private static final String[] orderCountTypeArray = {"一开单","二开单","一开单(拆分)","二开单(拆分)"};
private static final String[] orderMoneyTypeArray = {"全款单","定金单","尾款单"};
@ -27,7 +27,7 @@ public class OrderUtils {
orderTypeName += "/"+orderCountTypeArray[Integer.parseInt(sysOrder.getOrderCountType())];
orderTypeName += "/"+orderMoneyTypeArray[Integer.parseInt(sysOrder.getOrderMoneyType())];
//判断是不是二开提成单
if("1".equals(sysOrder.getOrderCountType()) && sysOrder.getAfterSaleCommissOrder().intValue() == 1){
if(sysOrder.getAfterSaleCommissOrder() != null && sysOrder.getAfterSaleCommissOrder().intValue() == 1){
orderTypeName += "/提成单";
}
return orderTypeName;

View File

@ -41,6 +41,7 @@
<result property="serverEndTime" column="server_end_time"/>
<result property="becomeFanTime" column="become_fan_time"/>
<result property="pushPreSaleId" column="push_pre_sale_id" />
<result property="onSaleId" column="on_sale_id"/>
<result property="orderType" column="order_type"/>
<result property="orderCountType" column="order_count_type"/>
@ -63,7 +64,7 @@
o.serve_time_id, o.pay_type_id, pay.dict_label as pay_type, o.pre_sale_id, o.create_by, o.create_time, o.after_sale_id, o.update_by, o.update_time,
o.nutritionist_id, o.remark, o.nutri_assis_id, o.account_id, acc.dict_label as account, o.planner_id, o.planner_assis_id, o.operator_id, o.operator_assis_id,
o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time,
o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order,o.commiss_start_time, o.counted
o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order,o.commiss_start_time, o.counted,o.push_pre_sale_id
from sys_order o
LEFT JOIN sys_customer sc ON sc.id = o.cus_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_pay_type') AS pay ON pay.dict_value = o.pay_type_id
@ -227,6 +228,7 @@
<if test="operatorId != null">operator_id,</if>
<if test="serveTimeId != null">serve_time_id,</if>
<if test="recommender != null">recommender,</if>
<if test="pushPreSaleId != null">push_pre_sale_id,</if>
<if test="amount != null">amount,</if>
<if test="orderTime != null">order_time,</if>
<if test="createBy != null">create_by,</if>
@ -270,6 +272,7 @@
<if test="operatorId != null">#{operatorId},</if>
<if test="serveTimeId != null">#{serveTimeId},</if>
<if test="recommender != null">#{recommender},</if>
<if test="pushPreSaleId != null">#{pushPreSaleId},</if>
<if test="amount != null">#{amount},</if>
<if test="orderTime != null">#{orderTime},</if>
<if test="createBy != null">#{createBy},</if>
@ -316,6 +319,7 @@
<if test="operatorId != null">operator_id = #{operatorId},</if>
<if test="serveTimeId != null">serve_time_id = #{serveTimeId},</if>
<if test="recommender != null">recommender = #{recommender},</if>
<if test="pushPreSaleId != null">push_pre_sale_id = #{pushPreSaleId},</if>
<if test="amount != null">amount = #{amount},</if>
<if test="orderTime != null">order_time = #{orderTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
@ -387,6 +391,7 @@
<result property="serverEndTime" column="server_end_time"/>
<result property="becomeFanTime" column="become_fan_time"/>
<result property="pushPreSaleId" column="push_pre_sale_id" />
<result property="onSaleId" column="on_sale_id"/>
<result property="orderType" column="order_type"/>
<result property="orderCountType" column="order_count_type"/>

View File

@ -35,7 +35,7 @@
FROM sys_wx_distribution AS swd
lEFT JOIN sys_wx_sale_account swsa ON swsa.id = swd.wechat_account and swsa.del_flag = 0
LEFT JOIN sys_user su ON su.user_id = swd.user_id AND su.del_flag = 0
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'fan_channel') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'sale_group') AS asg ON asg.dict_value = swd.sale_group_id
where swd.del_flag = 0
</sql>

View File

@ -37,7 +37,7 @@
left join sys_wx_sale_account swsa on swsa.id = swfs.wx_id and swsa.del_flag = 0
left join sys_wx_distribution swd on swd.wechat_account = swfs.wx_id and swd.del_flag = 0
left join sys_user su on su.user_id = swd.user_id and su.del_flag = 0
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'fan_channel') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = swd.account_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'sale_group') AS asg ON asg.dict_value = swd.sale_group_id
</sql>

View File

@ -145,6 +145,15 @@
left join sys_wx_distribution swd on wa.id = swd.wechat_account and swd.del_flag = 0
LEFT JOIN sys_user su ON su.user_id = swd.user_id AND su.del_flag = 0
where wa.del_flag = 0 and wa.status = 0
<if test="saleId != null">
and swd.user_id = #{saleId}
</if>
<if test="wxAccount != null and wxAccount != ''">
and wa.wx_account like concat('%',#{wxAccount},'%')
</if>
<if test="channel != null">
and swd.account_id = #{channel}
</if>
order by su.user_id asc
</select>