|
|
@@ -1,18 +1,20 @@
|
|
|
package shop.alien.store.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
-import shop.alien.entity.store.StoreAliPayLog;
|
|
|
-import shop.alien.entity.store.StoreCashOutRecord;
|
|
|
-import shop.alien.entity.store.StoreIncomeDetailsRecord;
|
|
|
-import shop.alien.entity.store.StoreUser;
|
|
|
+import shop.alien.entity.result.R;
|
|
|
+import shop.alien.entity.store.*;
|
|
|
import shop.alien.entity.store.vo.StoreIncomeDetailsRecordVo;
|
|
|
import shop.alien.mapper.StoreCashOutRecordMapper;
|
|
|
import shop.alien.mapper.StoreIncomeDetailsRecordMapper;
|
|
|
@@ -21,11 +23,15 @@ import shop.alien.store.service.StoreIncomeDetailsRecordService;
|
|
|
import shop.alien.store.service.StoreUserService;
|
|
|
import shop.alien.store.util.ali.AliApi;
|
|
|
import shop.alien.util.common.DateUtils;
|
|
|
+import shop.alien.util.common.ListToPage;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -55,13 +61,14 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
|
|
|
*
|
|
|
* @param storeId 门店id
|
|
|
* @param payPassword 支付密码
|
|
|
+ * @param withdrawalMoney 提现金额
|
|
|
* @return 是否成功
|
|
|
*/
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public String cashOut(Integer storeId, String payPassword) {
|
|
|
+ public R cashOut(Integer storeId, String payPassword, Integer withdrawalMoney) {
|
|
|
StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, storeId).eq(StoreUser::getPayPassword, payPassword));
|
|
|
- if (storeUser != null) {
|
|
|
+ /*if (storeUser != null) {
|
|
|
//查询可用账单(大于创建时间3天)
|
|
|
LambdaQueryWrapper<StoreIncomeDetailsRecord> wrapper = new LambdaQueryWrapper<>();
|
|
|
//当前时间-3天大于创建时间
|
|
|
@@ -114,8 +121,37 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
|
|
|
return "支付宝转账失败";
|
|
|
}
|
|
|
return "账单未到可提现时间";
|
|
|
+ }*/
|
|
|
+ if ( null != storeUser){
|
|
|
+ if( storeUser.getMoney() >= withdrawalMoney){
|
|
|
+ //调用支付宝转账
|
|
|
+ BigDecimal decimal = new BigDecimal(withdrawalMoney);
|
|
|
+ BigDecimal divide = decimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
+ if (Double.parseDouble(divide.toString()) < 0.10) {
|
|
|
+ return R.fail("金额不能小于0.1元");
|
|
|
+ }
|
|
|
+ //增加提现记录
|
|
|
+ StoreCashOutRecord storeCashOutRecord = new StoreCashOutRecord();
|
|
|
+ storeCashOutRecord.setStoreId(storeId);
|
|
|
+// storeCashOutRecord.setOrderNo(pay.getOutBizNo());
|
|
|
+ storeCashOutRecord.setMoney(withdrawalMoney);
|
|
|
+ // 手续费不是减过了吗
|
|
|
+// storeCashOutRecord.setCommission(commission);
|
|
|
+ storeCashOutRecord.setCashOutType(0);
|
|
|
+// storeCashOutRecord.setAliOrderNo(pay.getOrderId());
|
|
|
+ storeCashOutRecord.setPaymentDate(new Date());
|
|
|
+ storeCashOutRecord.setPaymentStatus(0);
|
|
|
+ storeCashOutRecord.setDeleteFlag(0);
|
|
|
+// storeCashOutRecord.setIncomeStartTime(startDate);
|
|
|
+// storeCashOutRecord.setIncomeEndTime(endDate);
|
|
|
+ storeCashOutRecordMapper.insert(storeCashOutRecord);
|
|
|
+ //减少账户余额
|
|
|
+ storeUserMapper.updateById(new StoreUser(storeUser.getId(), storeUser.getMoney() - withdrawalMoney));
|
|
|
+ return R.data(storeCashOutRecord);
|
|
|
+ }
|
|
|
+ return R.fail("余额不足");
|
|
|
}
|
|
|
- return "支付密码错误";
|
|
|
+ return R.fail("支付密码错误");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -146,17 +182,19 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
|
|
|
* @return 未到账期
|
|
|
*/
|
|
|
@Override
|
|
|
- public JSONObject noYetPayment(Integer storeId, Integer incomeType, Integer paymentType) {
|
|
|
+ public JSONObject noYetPayment(Integer storeId, Integer incomeType, Integer paymentType, String startTime, String endTime, int page, int size) {
|
|
|
LambdaQueryWrapper<StoreIncomeDetailsRecord> wrapper = new LambdaQueryWrapper<>();
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
Date now = new Date();
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
if (paymentType == 0) {
|
|
|
+ wrapper.isNull(StoreIncomeDetailsRecord::getCashOutId);
|
|
|
//未到账期, 当前时间-3天大于创建时间
|
|
|
wrapper.gt(StoreIncomeDetailsRecord::getCreatedTime, DateUtils.calcDays(new Date(), -3));
|
|
|
Date startDate = DateUtils.calcDays(now, -3);
|
|
|
jsonObject.put("date", df.format(startDate) + " ~ " + df.format(now));
|
|
|
} else {
|
|
|
+ wrapper.isNotNull(StoreIncomeDetailsRecord::getCashOutId);
|
|
|
//已到账期, 当前时间-4~27天大于创建时间
|
|
|
wrapper.between(StoreIncomeDetailsRecord::getCreatedTime, DateUtils.calcDays(new Date(), -27), DateUtils.calcDays(new Date(), -4));
|
|
|
Date startDate = DateUtils.calcDays(now, -27);
|
|
|
@@ -164,23 +202,56 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
|
|
|
jsonObject.put("date", df.format(startDate) + " ~ " + df.format(endDate));
|
|
|
}
|
|
|
//未绑定提现记录的
|
|
|
- wrapper.isNull(StoreIncomeDetailsRecord::getCashOutId)
|
|
|
- .eq(null != incomeType, StoreIncomeDetailsRecord::getIncomeType, incomeType)
|
|
|
+ LocalDate startDate = LocalDate.parse(startTime);
|
|
|
+ LocalDate endDate = LocalDate.parse(endTime);
|
|
|
+ // 创建当天的开始和结束时间点
|
|
|
+ LocalDateTime startOfDay = startDate.atStartOfDay();
|
|
|
+ LocalDateTime endOfDay = endDate.atTime(LocalTime.MAX);
|
|
|
+ wrapper.between(StoreIncomeDetailsRecord::getCreatedTime,startOfDay,endOfDay)
|
|
|
.orderByDesc(StoreIncomeDetailsRecord::getCreatedTime);
|
|
|
+ if(null != incomeType) {
|
|
|
+ if (0 == incomeType) {
|
|
|
+ wrapper.in(StoreIncomeDetailsRecord::getIncomeType, "2", "3");
|
|
|
+ } else {
|
|
|
+ wrapper.eq(StoreIncomeDetailsRecord::getIncomeType, incomeType);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 计算总钱数
|
|
|
List<StoreIncomeDetailsRecord> list = this.list(wrapper);
|
|
|
- Map<String, Integer> groupedByCreatedTime = list.stream().collect(
|
|
|
+/* Map<String, Integer> groupedByCreatedTime = list.stream().collect(
|
|
|
Collectors.groupingBy(
|
|
|
item -> item.getCreatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().toString(),
|
|
|
Collectors.summingInt(StoreIncomeDetailsRecord::getMoney)));
|
|
|
-
|
|
|
+ // 分别计算日期下优惠券和团购的钱数
|
|
|
+ Map<String, Integer> groupedByCreatedTimeAndType = list.stream().collect(
|
|
|
+ Collectors.groupingBy(
|
|
|
+ item -> item.getCreatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().toString().concat("-").concat(item.getIncomeType().toString()),
|
|
|
+ Collectors.summingInt(StoreIncomeDetailsRecord::getMoney)));
|
|
|
List<StoreIncomeDetailsRecordVo> resultList = new ArrayList<>();
|
|
|
groupedByCreatedTime.forEach((key, value) -> {
|
|
|
StoreIncomeDetailsRecordVo vo = new StoreIncomeDetailsRecordVo();
|
|
|
+ // 手动拼接key判断
|
|
|
+ if( groupedByCreatedTimeAndType.containsKey(key.concat("-2")) ){
|
|
|
+ vo.setCouponMoney(new BigDecimal(groupedByCreatedTimeAndType.get(key.concat("-2"))).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
+ }
|
|
|
+ if( groupedByCreatedTimeAndType.containsKey(key.concat("-3")) ){
|
|
|
+ vo.setGroupMoney(new BigDecimal(groupedByCreatedTimeAndType.get(key.concat("-3"))).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
+ }
|
|
|
+
|
|
|
vo.setMoneyStr(new BigDecimal(value).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
vo.setDate(key);
|
|
|
resultList.add(vo);
|
|
|
- });
|
|
|
- jsonObject.put("data", resultList);
|
|
|
+ });*/
|
|
|
+ List<StoreIncomeDetailsRecordVo> resultList = new ArrayList<>();
|
|
|
+ for (StoreIncomeDetailsRecord storeIncomeDetailsRecord : list) {
|
|
|
+ StoreIncomeDetailsRecordVo vo = new StoreIncomeDetailsRecordVo();
|
|
|
+ BeanUtils.copyProperties(storeIncomeDetailsRecord, vo);
|
|
|
+ vo.setMoneyStr(new BigDecimal(vo.getMoney()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
+ String format = df.format(vo.getCreatedTime());
|
|
|
+ vo.setDate(format);
|
|
|
+ resultList.add(vo);
|
|
|
+ }
|
|
|
+ jsonObject.put("data", ListToPage.setPage(resultList, page, size));
|
|
|
jsonObject.put("money", new BigDecimal(list.stream().mapToInt(StoreIncomeDetailsRecord::getMoney).sum()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
return jsonObject;
|
|
|
}
|
|
|
@@ -207,8 +278,10 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
|
|
|
List<StoreIncomeDetailsRecord> list = this.list(wrapper);
|
|
|
int cashOutMoney = 0;
|
|
|
cashOutMoney += list.stream().mapToInt(StoreIncomeDetailsRecord::getMoney).sum();
|
|
|
+ List<StoreCashOutRecord> storeCashOutRecords = storeCashOutRecordMapper.selectList(new QueryWrapper<StoreCashOutRecord>().eq("store_id", storeId).ne("payment_status", "2").eq("delete_flag", "0"));
|
|
|
+ int totalAmount = storeCashOutRecords.stream().collect(Collectors.summingInt(StoreCashOutRecord::getMoney));
|
|
|
//可提现金额 4~27天
|
|
|
- map.put("cashOutMoney", new BigDecimal(cashOutMoney).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
+ map.put("cashOutMoney", new BigDecimal(cashOutMoney).subtract(BigDecimal.valueOf(totalAmount)).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
@@ -221,13 +294,18 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
|
|
|
* @return 团购收益
|
|
|
*/
|
|
|
@Override
|
|
|
- public StoreIncomeDetailsRecordVo groupIncome(Integer storeId, String date, Integer incomeType) {
|
|
|
+ public StoreIncomeDetailsRecordVo groupIncome(Integer storeId, String date, Integer incomeType, Integer page, Integer size) {
|
|
|
LambdaQueryWrapper<StoreIncomeDetailsRecord> wrapper = new LambdaQueryWrapper<>();
|
|
|
//当前时间-3天大于创建时间
|
|
|
wrapper.between(StoreIncomeDetailsRecord::getCreatedTime, date + " 00:00:00", date + " 23:59:59")
|
|
|
//未绑定提现记录的
|
|
|
- .isNull(StoreIncomeDetailsRecord::getCashOutId)
|
|
|
- .eq(null != incomeType, StoreIncomeDetailsRecord::getIncomeType, incomeType);
|
|
|
+ .isNull(StoreIncomeDetailsRecord::getCashOutId);
|
|
|
+ if(null != incomeType && 0 == incomeType){
|
|
|
+ wrapper.in(StoreIncomeDetailsRecord::getIncomeType, "2","3");
|
|
|
+ } else {
|
|
|
+ wrapper.eq(StoreIncomeDetailsRecord::getIncomeType, incomeType);
|
|
|
+ }
|
|
|
+
|
|
|
List<StoreIncomeDetailsRecord> list = this.list(wrapper);
|
|
|
Integer allIncome = 0;
|
|
|
Integer commission = 0;
|
|
|
@@ -263,10 +341,31 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
|
|
|
.eq("income.store_id", storeId)
|
|
|
.between("income.created_time", date + " 00:00:00", date + " 23:59:59")
|
|
|
.orderByDesc("income.created_time");
|
|
|
- incomeWrapper.eq(null != incomeType, "income.income_type", incomeType);
|
|
|
+ if(null != incomeType) {
|
|
|
+ if (0 == incomeType) {
|
|
|
+ incomeWrapper.in("income_type", "2", "3");
|
|
|
+ } else {
|
|
|
+ incomeWrapper.eq("income_type", incomeType);
|
|
|
+ }
|
|
|
+ }
|
|
|
List<StoreIncomeDetailsRecordVo> incomeDetailsRecordVoList = storeIncomeDetailsRecordMapper.getIncomeList(incomeWrapper);
|
|
|
- vo.setIncomeDetailsRecordVoList(incomeDetailsRecordVoList);
|
|
|
+ Map<String, List<StoreIncomeDetailsRecordVo>> collect = incomeDetailsRecordVoList.stream().collect(Collectors.groupingBy(x -> x.getRefundType()));
|
|
|
|
|
|
+ vo.setIncomeDetailsRecordVoList(new ArrayList<>());
|
|
|
+ vo.setRefundMoney(new BigDecimal(0));
|
|
|
+ vo.setCouponCount(0);
|
|
|
+ if ( collect.containsKey("false")){
|
|
|
+ vo.setIncomeDetailsRecordVoList(ListToPage.setPage(incomeDetailsRecordVoList,page,size).getRecords());
|
|
|
+// ListToPage.setPage(
|
|
|
+// collect.get("false")
|
|
|
+// .stream()
|
|
|
+// .sorted(Comparator.comparing(StoreIncomeDetailsRecordVo::getCheckTime)
|
|
|
+// .reversed()).collect(Collectors.toList()), page, size).getRecords());
|
|
|
+ vo.setCouponCount( collect.get("false").size() - (collect.containsKey("true") ? collect.get("true").size() : 0));
|
|
|
+ }
|
|
|
+ if( collect.containsKey("true") ){
|
|
|
+ vo.setRefundMoney(new BigDecimal(collect.get("true").stream().mapToInt(StoreIncomeDetailsRecordVo::getMoney).sum()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
return vo;
|
|
|
}
|
|
|
}
|