package com.ruoyi.system.service.impl;
|
|
import cn.hutool.crypto.SecureUtil;
|
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpResponse;
|
import cn.hutool.http.HttpUtil;
|
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSONArray;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.redis.RedisCache;
|
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.system.domain.*;
|
import com.ruoyi.system.mapper.*;
|
import com.ruoyi.system.pojo.dto.FinanceFlowsDTO;
|
import com.ruoyi.system.pojo.dto.OrderPageDTO;
|
import com.ruoyi.system.pojo.model.DailyStatistics;
|
import com.ruoyi.system.pojo.vo.*;
|
import com.ruoyi.system.service.CompanyTypeService;
|
import com.ruoyi.system.service.OrderService;
|
import com.ruoyi.system.wx.RefundCallbackResult;
|
import com.ruoyi.system.wx.WechatPayService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.security.provisioning.UserDetailsManager;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.concurrent.TimeUnit;
|
|
@Slf4j
|
@Service
|
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
|
|
@Resource
|
private PermitMapper permitMapper;
|
|
@Resource
|
private OpeningBankMapper openingBankMapper;
|
@Resource
|
private BuyerCompanyInfoMapper buyerCompanyInfoMapper;
|
@Resource
|
private ShareholderMapper shareholderMapper;
|
@Resource
|
private ScheduleMapper scheduleMapper;
|
@Resource
|
private CompanyMapper companyMapper;
|
|
@Autowired
|
private AppUserMapper appUserMapper;
|
|
@Resource
|
private RedisCache redisCache;
|
@Resource
|
private QichachaMapper qichachaMapper;
|
|
@Resource
|
private CompanyTypeService companyTypeService;
|
|
|
@Resource
|
private AccountDetailMapper accountDetailMapper;
|
|
|
@Override
|
public IPage<OrderPageVO> getOrderPage(OrderPageDTO dto) {
|
IPage<OrderPageVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
|
return this.baseMapper.getOrderPage(page,dto);
|
}
|
|
@Override
|
public OrderDetailVO detail(String id) {
|
OrderDetailVO vo = this.baseMapper.getDetailById(id);
|
if (null == vo) {
|
throw new ServiceException("该公司不存在");
|
}
|
//许可证集合
|
List<Permit> permits = permitMapper.selectList(new LambdaQueryWrapper<Permit>().eq(Permit::getCompanyId, id));
|
List<PermitVO> permitVOs = new ArrayList<>();
|
LocalDateTime now = LocalDateTime.now();
|
for (Permit permit : permits) {
|
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
LocalDate expireDate = LocalDate.parse(permit.getExpireTime(), dateFormatter);
|
|
// 如果需要转为 LocalDateTime(添加默认时间)
|
LocalDateTime expireTime = expireDate.atTime(23,59,59); // 默认00:00:00
|
if (now.isAfter(expireTime)) {
|
//过滤 未过期的
|
PermitVO permitVO = new PermitVO();
|
permitVO.setName(permit.getName());
|
permitVO.setLevel(permit.getLevel());
|
permitVOs.add(permitVO);
|
}
|
}
|
vo.setPermitVOList(permitVOs);
|
//开户行信息集合
|
List<OpeningBank> openingBanks = openingBankMapper.selectList(new LambdaQueryWrapper<OpeningBank>().eq(OpeningBank::getCompanyId, id));
|
List<OpeningBankVO> openingBankVOs = new ArrayList<>();
|
for (OpeningBank openingBank : openingBanks) {
|
OpeningBankVO openingBankVO = new OpeningBankVO();
|
BeanUtils.copyProperties(openingBank, openingBankVO);
|
openingBankVOs.add(openingBankVO);
|
}
|
vo.setOpeningBankVOList(openingBankVOs);
|
|
if (vo.getStatus() != 4 && vo.getStatus() != 5&& vo.getStatus() != 6) {
|
return vo;
|
}
|
|
//状态为办理中和已完成
|
//客户信息
|
BuyerCompanyInfo buyerCompanyInfo = buyerCompanyInfoMapper.selectOne(new LambdaQueryWrapper<BuyerCompanyInfo>().eq(BuyerCompanyInfo::getOrderId, vo.getOrderId()));
|
copyProperties(vo,buyerCompanyInfo);
|
//股东占比
|
List<Shareholder> shareholders = shareholderMapper.selectList(new LambdaQueryWrapper<Shareholder>().eq(Shareholder::getOrderId, vo.getOrderId()));
|
vo.setShareholderList(shareholders);
|
//进度汇报
|
List<Schedule> schedules = scheduleMapper.selectList(new LambdaQueryWrapper<Schedule>().eq(Schedule::getOrderId, vo.getOrderId()));
|
//构建进度汇报结构
|
List<Schedule> scheduleVOList = new ArrayList<>();
|
for (Schedule schedule : schedules) {
|
if (schedule.getParentId() == null) {
|
scheduleVOList.add(schedule);
|
}else {
|
//查找到父类的集合
|
for (Schedule schedule1 : scheduleVOList) {
|
if (schedule1.getId().equals(schedule.getParentId())) {
|
schedule1.setSchedule(schedule);
|
}
|
}
|
}
|
}
|
vo.setScheduleList(scheduleVOList);
|
return vo;
|
}
|
|
private static void copyProperties(OrderDetailVO vo,BuyerCompanyInfo info){
|
vo.setLegalPersonImg(info.getLegalPersonImg());
|
vo.setNewName(info.getNewName());
|
vo.setBackupsName(info.getBackupsName());
|
vo.setBackupsNameOne(info.getBackupsNameOne());
|
vo.setBackupsNameTwo(info.getBackupsNameTwo());
|
vo.setNewRegisteredCapital(info.getRegisteredCapital());
|
vo.setAccount(info.getAccount());
|
vo.setAddress(info.getAddress());
|
vo.setPassword(info.getPassword());
|
vo.setTenancyAgreement(info.getTenancyAgreement());
|
vo.setPropertyOwnershipCertificate(info.getPropertyOwnershipCertificate());
|
vo.setBusinessScope(info.getBusinessScope());
|
}
|
|
@Override
|
public BusinessVO business(String id) {
|
//先查询数据库中的
|
Company company = companyMapper.selectById(id);
|
if (null == company || company.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
BusinessVO vo = new BusinessVO();
|
// 先查企业工商信息 更新数据
|
JSONObject jsonObject = getQiChaChaBasicDetailsCompany(company.getCompanyName());
|
company.setOperName(jsonObject.getString("OperName"));
|
company.setBelongOrg(jsonObject.getString("BelongOrg"));
|
company.setRegistrationStatus(jsonObject.getString("Status"));
|
company.setRegisteredCapital(jsonObject.getString("RegisteredCapital"));
|
company.setPaidInFunds(jsonObject.getString("PaidUpCapital"));
|
companyMapper.updateById(company);
|
BeanUtils.copyProperties(company, vo);
|
vo.setNewRegisteredCapital(company.getRealRegisteredCapital());
|
vo.setPlace(company.getCity()+company.getProvince()+company.getArea());
|
|
JSONObject area = (JSONObject) jsonObject.get("Area");
|
vo.setPlace(area.getString("Province")+"-"+area.getString("City")+"-"+area.getString("County"));
|
vo.setCompanyCategoryName(jsonObject.getString("EconKind"));
|
|
String name = companyTypeService.getById(company.getCompanyCategory()).getName();
|
vo.setCompanyCategoryName(name);
|
return vo;
|
}
|
|
@Override
|
public R error(String id) {
|
ErrorVO errorVO = new ErrorVO();
|
Company company = companyMapper.selectById(id);
|
if (null == company || company.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
JSONObject result = getQiChaChaCompanyExceptionCheck(company.getCompanyName());
|
if("200".equals(result.get("Status"))){
|
//查询成功
|
JSONObject data = (JSONObject) result.get("Result");
|
Integer verifyResult = (Integer) data.get("VerifyResult");
|
errorVO.setVerifyResult(verifyResult);
|
if (verifyResult==1){
|
//该企业有异常数据
|
JSONArray list = (JSONArray) data.get("Data");
|
errorVO.setData(list);
|
}
|
return R.ok(errorVO);
|
}else {
|
//查询失败
|
return R.fail(result.get("Message"));
|
}
|
|
}
|
|
|
/**
|
* 查询工商信息
|
*/
|
public JSONObject getQiChaChaBasicDetailsCompany(String companyName){
|
Object cacheObject = redisCache.getCacheObject("qichacha_" +"basic_"+ companyName);
|
if(cacheObject != null){
|
JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString());
|
return jsonObject;
|
}
|
String url = "https://api.qichacha.com/ECIV4/GetBasicDetailsByName?key=642987ca3faf4a7daeac70463ae22695&keyword="+companyName;
|
HttpRequest get = HttpUtil.createGet(url);
|
String timeStr = String.valueOf(System.currentTimeMillis() / 1000);
|
get.header("Token", SecureUtil.md5("642987ca3faf4a7daeac70463ae22695"+timeStr+"AC776F2957291EAE3B4161702E89A9F3").toUpperCase());
|
get.header("Timespan", timeStr);
|
HttpResponse execute = get.execute();
|
String body = execute.body();
|
JSONObject jsonObject = JSONObject.parseObject(body);
|
if("200".equals(jsonObject.get("Status"))){
|
//查询成功
|
String string = jsonObject.toString();
|
redisCache.setCacheObject("qichacha_"+"basic_"+companyName,string,24, TimeUnit.HOURS);
|
//统计调用次数
|
Qichacha qichacha = new Qichacha();
|
qichacha.setTime(LocalDateTime.now());
|
qichacha.setType(1);//企业异常查询
|
qichachaMapper.insert(qichacha);
|
|
return jsonObject;
|
}
|
return jsonObject;
|
}
|
|
/**
|
* 经营异常核查
|
* @param companyName
|
* @return
|
* VerifyResult int 数据是否存在(1-存在,0-不存在)
|
* Data List<Object> 数据信息
|
* Data:[{
|
* AddReason 列入经营异常名录原因
|
* AddDate 列入日期
|
* RomoveReason 移出经营异常名录原因(保留字段)
|
* RemoveDate 移出日期(保留字段)
|
* DecisionOffice 作出决定机关
|
* RemoveDecisionOffice 移出决定机关(保留字段)
|
* }]
|
* Status
|
* Message
|
* OrderNumber
|
*/
|
public JSONObject getQiChaChaCompanyExceptionCheck(String companyName){
|
Object cacheObject = redisCache.getCacheObject("qichacha_" + companyName);
|
if(cacheObject != null){
|
JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString());
|
return jsonObject;
|
}
|
String url = "https://api.qichacha.com/ExceptionCheck/GetList?key=642987ca3faf4a7daeac70463ae22695&searchKey="+companyName;
|
HttpRequest get = HttpUtil.createGet(url);
|
String timeStr = String.valueOf(System.currentTimeMillis() / 1000);
|
get.header("Token", SecureUtil.md5("642987ca3faf4a7daeac70463ae22695"+timeStr+"AC776F2957291EAE3B4161702E89A9F3").toUpperCase());
|
get.header("Timespan", timeStr);
|
HttpResponse execute = get.execute();
|
String body = execute.body();
|
JSONObject jsonObject = JSONObject.parseObject(body);
|
if("200".equals(jsonObject.get("Status"))){
|
//查询成功
|
String string = jsonObject.toString();
|
redisCache.setCacheObject("qichacha_"+companyName,string,24, TimeUnit.HOURS);
|
//统计调用次数
|
Qichacha qichacha = new Qichacha();
|
qichacha.setTime(LocalDateTime.now());
|
qichacha.setType(2);//企业异常查询
|
qichachaMapper.insert(qichacha);
|
|
return jsonObject;
|
}
|
return jsonObject;
|
}
|
private JSONObject getReport(String sign){
|
Object cacheObject = redisCache.getCacheObject("shuimu_" + sign);
|
if(cacheObject != null){
|
JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString());
|
return jsonObject;
|
}
|
HttpRequest post = HttpUtil.createPost("https://shuimui.szsmjr.com/index/index/result");
|
HashMap<String, String> stringStringHashMap = new HashMap<>();
|
stringStringHashMap.put("Origin","https://shuimui.szsmjr.com");
|
post.addHeaders(stringStringHashMap);
|
post.body("{\"sn\":\""+sign+"\"}");
|
HttpResponse execute = post.execute();
|
String body = execute.body();
|
JSONObject jsonObject = JSONObject.parseObject(body);
|
if("1001".equals(jsonObject.get("code"))){
|
//查询成功
|
String string = jsonObject.toString();
|
redisCache.setCacheObject("shuimu_"+sign,string,1, TimeUnit.MINUTES);
|
return jsonObject;
|
}
|
return jsonObject;
|
}
|
@Override
|
public R change(String id) {
|
// System.err.println(getReport("ZZD20250508017232394218445"));
|
ChangeVO changeVO = new ChangeVO();
|
Company companyInfo = companyMapper.selectById(id);
|
if (null == companyInfo || companyInfo.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
JSONObject jsonObject=getReport(companyInfo.getLink().split("=")[1]);
|
// JSONObject jsonObject=getReport("ZZD20250508017232394218445");
|
if (!"1001".equals(jsonObject.getString("code"))){
|
return R.fail(jsonObject.get("msg"));
|
}
|
JSONObject data1 = (JSONObject) jsonObject.get("data");
|
JSONObject data2 = (JSONObject) data1.get("data");
|
JSONObject company = (JSONObject) data2.get("company");
|
// 银税互动
|
JSONArray bankAndTaxInteractive = (JSONArray) company.get("bankAndTaxInteractive");
|
changeVO.setBankAndTaxInteractive(bankAndTaxInteractive);
|
//股东明细
|
JSONArray sharesRatioList = (JSONArray) company.get("sharesRatioList");
|
changeVO.setSharesRatioList(sharesRatioList);
|
//法人/股东变更
|
JSONArray legalPersonGdChange = (JSONArray) company.get("legalPersonGdChange");
|
changeVO.setLegalPersonGdChange(legalPersonGdChange);
|
|
return R.ok(changeVO);
|
}
|
|
@Override
|
public R tax(String id) {
|
TaxVO taxVO = new TaxVO();
|
Company companyInfo = companyMapper.selectById(id);
|
if (null == companyInfo || companyInfo.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
JSONObject jsonObject=getReport(companyInfo.getLink().split("=")[1]);
|
// JSONObject jsonObject=getReport("ZZD20250508017232394218445");
|
if (!"1001".equals(jsonObject.getString("code"))){
|
return R.fail(jsonObject.get("msg"));
|
}
|
JSONObject data1 = (JSONObject) jsonObject.get("data");
|
JSONObject data2 = (JSONObject) data1.get("data");
|
JSONObject taxInfo = (JSONObject) data2.get("taxInfo");
|
//税务处罚
|
JSONObject enterprise = (JSONObject) data2.get("enterprise");
|
taxVO.setEnterprise(enterprise);
|
//滞纳金情况
|
JSONArray overdueFineDetailsList = (JSONArray) taxInfo.get("overdueFineDetailsList");
|
taxVO.setOverdueFineDetailsList(overdueFineDetailsList);
|
|
//近四年纳税信息完税表
|
JSONArray taxPrev4yearsTaxInfoDict = (JSONArray) taxInfo.get("taxPrev4yearsTaxInfoDict");
|
taxVO.setTaxPrev4yearsTaxInfoDict(taxPrev4yearsTaxInfoDict);
|
|
//纳税信用等级
|
String taxCreditRating = (String) taxInfo.get("taxCreditRating");
|
taxVO.setTaxCreditRating(taxCreditRating);
|
|
//纳税人种类
|
String taxpayerType = (String) taxInfo.get("taxpayerType");
|
taxVO.setTaxpayerType(taxpayerType);
|
|
//近12月增税销售额
|
JSONObject taxPrevMnMthsAllTaxDclrPrjInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsAllTaxDclrPrjInfoDict");
|
|
JSONObject taxPrev12mthsAllTaxDclrPrjInfoDict = (JSONObject) taxPrevMnMthsAllTaxDclrPrjInfoDict.get("taxPrev12mthsAllTaxDclrPrjInfoDict");
|
taxVO.setVatTaxShouldsaleAmt12((BigDecimal) taxPrev12mthsAllTaxDclrPrjInfoDict.get("vatTaxShouldsaleAmt"));
|
//近24月增税销售额
|
JSONObject taxPrev24mthsAllTaxDclrPrjInfoDict = (JSONObject) taxPrevMnMthsAllTaxDclrPrjInfoDict.get("taxPrev24mthsAllTaxDclrPrjInfoDict");
|
|
taxVO.setVatTaxShouldsaleAmt24( (BigDecimal) taxPrev24mthsAllTaxDclrPrjInfoDict.get("vatTaxShouldsaleAmt"));
|
JSONObject taxPrevMnMthsTaxInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsTaxInfoDict");
|
|
//近12月纳税总额(元)
|
JSONObject taxPrev12mthsTaxInfo = (JSONObject) taxPrevMnMthsTaxInfoDict.get("taxPrev12mthsTaxInfo");
|
taxVO.setTaxAmt12( (BigDecimal) taxPrev12mthsTaxInfo.get("taxAmt"));
|
|
//近24月纳税总额(元)
|
JSONObject taxPrev24mthsTaxInfo = (JSONObject) taxPrevMnMthsTaxInfoDict.get("taxPrev24mthsTaxInfo");
|
taxVO.setTaxAmt24( (BigDecimal) taxPrev24mthsTaxInfo.get("taxAmt"));
|
|
//近12月增税应纳额(元)
|
taxVO.setVatTaxShouldpay( (BigDecimal) taxPrev12mthsAllTaxDclrPrjInfoDict.get("vatTaxShouldpay"));
|
|
//近12个月滞纳金金额(元) 次数
|
JSONObject taxPrevMnMthsOverdueFineInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsOverdueFineInfoDict");
|
JSONObject taxPrev12mthsOverdueFineInfo = (JSONObject) taxPrevMnMthsOverdueFineInfoDict.get("taxPrev12mthsOverdueFineInfo");
|
taxVO.setOverdueFineInfoAmt12( (BigDecimal) taxPrev12mthsOverdueFineInfo.get("overdueFineInfoAmt"));
|
taxVO.setOverdueFineInfoCnt12( (Integer) taxPrev12mthsOverdueFineInfo.get("overdueFineInfoCnt"));
|
|
|
// 近3个月滞纳金金额(元)
|
JSONObject taxPrev3mthsOverdueFineInfo = (JSONObject) taxPrevMnMthsOverdueFineInfoDict.get("taxPrev3mthsOverdueFineInfo");
|
taxVO.setOverdueFineInfoCnt3( (Integer) taxPrev3mthsOverdueFineInfo.get("overdueFineInfoCnt"));
|
|
//近12月0申报月数(月数)
|
JSONObject taxPrevMnMthsAllTaxDclrInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsAllTaxDclrInfoDict");
|
JSONObject taxPrev12mthsAllTaxDclrInfoDict = (JSONObject) taxPrevMnMthsAllTaxDclrInfoDict.get("taxPrev12mthsAllTaxDclrInfoDict");
|
taxVO.setVatTax0dclrMonCnt( (Integer) taxPrev12mthsAllTaxDclrInfoDict.get("vatTax0dclrMonCnt"));
|
|
return R.ok(taxVO);
|
}
|
|
@Override
|
public R invoice(String id) {
|
InvoiceVO vo = new InvoiceVO();
|
Company companyInfo = companyMapper.selectById(id);
|
if (null == companyInfo || companyInfo.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
JSONObject jsonObject=getReport(companyInfo.getLink().split("=")[1]);
|
// JSONObject jsonObject=getReport("ZZD20250508017232394218445");
|
if (!"1001".equals(jsonObject.getString("code"))){
|
return R.fail(jsonObject.get("msg"));
|
}
|
JSONObject data1 = (JSONObject) jsonObject.get("data");
|
JSONObject data2 = (JSONObject) data1.get("data");
|
JSONObject invoiceInfo = (JSONObject) data2.get("invoiceInfo");
|
//近45日是否有开票记录
|
vo.setAnyPre45daysFpRcd((Boolean) invoiceInfo.get("anyPre45daysFpRcd"));
|
|
//近一个月开票金额(元)
|
JSONArray f4yPer1mDownFpInfoList = (JSONArray) invoiceInfo.get("f4yPer1mDownFpInfoList");
|
JSONObject f4yPer1mDownFpInfo1 = (JSONObject) f4yPer1mDownFpInfoList.get(1);
|
vo.setHjjeZc1( ObjectToBigDecimal(f4yPer1mDownFpInfo1.get("hjjeZc")) );
|
|
|
JSONObject fpPrevMnMthsDownFpInfoList = (JSONObject) invoiceInfo.get("fpPrevMnMthsDownFpInfoList");
|
JSONObject fpPrev3mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev3mthsDownFpInfoList");
|
//近3个月开票环比增长率
|
vo.setAvgMonJshjYxMomRate3( ObjectToBigDecimal(fpPrev3mthsDownFpInfoList.get("avgMonJshjYxMomRate")) );
|
//近3个月开票金额(元)
|
vo.setHjjeZc3( ObjectToBigDecimal( fpPrev3mthsDownFpInfoList.get("hjjeZc") ));
|
|
JSONObject fpPrev6mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev6mthsDownFpInfoList");
|
//近6个月开票环比增长率
|
vo.setAvgMonJshjYxMomRate6( ObjectToBigDecimal(fpPrev6mthsDownFpInfoList.get("avgMonJshjYxMomRate")) );
|
//近6月开票金额(元)
|
vo.setHjjeZc6( ObjectToBigDecimal(fpPrev6mthsDownFpInfoList.get("hjjeZc")) );
|
|
|
JSONObject fpPrev12mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev12mthsDownFpInfoList");
|
//近12个月开票环比增长率
|
vo.setAvgMonJshjYxMomRate12( ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("avgMonJshjYxMomRate")) );
|
//近12月开票金额(元)
|
vo.setHjjeZc12( ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("hjjeZc")) );
|
|
//近24个月开票金额(元)
|
JSONObject fpPrev24mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev24mthsDownFpInfoList");
|
vo.setHjjeZc24( ObjectToBigDecimal(fpPrev24mthsDownFpInfoList.get("hjjeZc") ));
|
|
//近12个月下游客户统计
|
vo.setDownCusCnt3( (Integer) fpPrev3mthsDownFpInfoList.get("downCusCnt"));
|
//近12个月下游客户统计
|
vo.setDownCusCnt12( (Integer) fpPrev12mthsDownFpInfoList.get("downCusCnt"));
|
|
//近12个月下游开票张数
|
vo.setKpslQb( (Integer) fpPrev12mthsDownFpInfoList.get("kpslQb"));
|
|
//近12月作废发票数量占比
|
vo.setKpslFpRatio(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("kpslFpRatio")));
|
|
//近12月月均开票金额增长率
|
vo.setAvgMonJshjYxYoyRate(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("avgMonJshjYxYoyRate")) );
|
|
//近12月红冲发票张数占比
|
vo.setKpslHpRatio(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("kpslHpRatio")));
|
|
//近12个月红冲金额占比
|
vo.setHjjeHpRatio(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("hjjeHpRatio")) );
|
|
//近12个月最大连续未开票间隔天数(销项)
|
vo.setNokpslYxMaxdayCnt((Integer) fpPrev12mthsDownFpInfoList.get("nokpslYxMaxdayCnt"));
|
|
//近三年开票信息报表(元)
|
vo.setF4yPer1mDownFpInfoList(f4yPer1mDownFpInfoList);
|
|
return R.ok(vo);
|
}
|
|
private BigDecimal ObjectToBigDecimal(Object o) {
|
// 处理不同类型的情况
|
if ( o instanceof BigDecimal) {
|
return (BigDecimal) o;
|
} else if (o instanceof Number) {
|
// 将其他数字类型(如 Integer、Double)转换为 BigDecimal
|
return BigDecimal.valueOf(((Number) o).doubleValue());
|
|
}
|
return BigDecimal.ZERO;
|
}
|
@Transactional
|
@Override
|
public void delete(String id) {
|
Company company = companyMapper.selectById(id);
|
if (null == company || company.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
if (company.getStatus().equals(3)){//已完成
|
throw new ServiceException("状态错误,已完成订单不能删除");
|
}
|
|
if (company.getStatus().equals(4)){//锁定中
|
//查看订单状态是否为待确认
|
Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
|
.eq(Order::getCompanyId, company.getId())
|
.eq(Order::getIsRefund,0)
|
.ne(Order::getStatus,-1));//取消的订单不要
|
if (null == order) {
|
throw new ServiceException("订单不存在");
|
}
|
if (!order.getStatus().equals(2)) {//不在待确认状态的
|
throw new ServiceException("状态错误,不能删除");
|
}
|
//删除订单
|
this.baseMapper.deleteById(order.getId());
|
}
|
//删除公司
|
company.setIsDelete(1);
|
companyMapper.updateById(company);
|
}
|
|
/**
|
* 上下架
|
*/
|
@Override
|
public void shelves(String id) {
|
Company company = companyMapper.selectById(id);
|
if (null == company || company.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
if (company.getStatus().equals(3)){//已完成
|
throw new ServiceException("状态错误,已完成订单不能修改");
|
}
|
|
if (company.getStatus().equals(4)){//锁定中
|
//查看订单状态是否为待确认
|
Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
|
.eq(Order::getCompanyId, company.getId())
|
.ne(Order::getStatus,-1)//取消的不要
|
);
|
if (null == order) {
|
throw new ServiceException("订单不存在");
|
}
|
if (!order.getStatus().equals(2)) {//不在待确认状态的
|
throw new ServiceException("状态错误,不能修改");
|
}
|
//删除订单
|
this.baseMapper.deleteById(order.getId());
|
}
|
//上下架
|
if (company.getStatus().equals(1)||company.getStatus().equals(4)){//1-上架中 4-锁定中(待确认)
|
company.setStatus(2);//2-下架中
|
}else if (company.getStatus().equals(2)){
|
company.setStatus(1);
|
}
|
companyMapper.updateById(company);
|
|
}
|
|
@Transactional
|
@Override
|
public void cancel(String id) {
|
Company company = companyMapper.selectById(id);
|
if (null == company || company.getIsDelete() != 0) {
|
throw new ServiceException("公司不存在");
|
}
|
if (!company.getStatus().equals(4)){// 4-锁定中
|
throw new ServiceException("订单状态错误,不能操作");
|
}
|
//查看订单
|
Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
|
.eq(Order::getCompanyId, company.getId())
|
.ne(Order::getStatus,-1));
|
if (null == order) {
|
throw new ServiceException("订单不存在");
|
}
|
//检查状态 3已确认(未付款) 4办理中 5卖家已完成
|
if (!order.getStatus().equals(3)&&!order.getStatus().equals(4)&&!order.getStatus().equals(5)) {
|
throw new ServiceException("订单状态错误,不能操作");
|
}
|
if (order.getStatus().equals(3)){
|
//未付款 直接取消订单
|
order.setStatus(-1);
|
this.baseMapper.updateById(order);
|
//将分佣次数加回
|
User user = appUserMapper.selectById(order.getUserId());
|
user.setInviteNum(user.getInviteNum()+1);
|
appUserMapper.updateById(user);
|
//商品状态修改
|
company.setStatus(1);
|
order.setIsRefund(1);
|
order.setRefundTime(LocalDateTime.now());
|
companyMapper.updateById(company);
|
}else{
|
// 判断是否能退
|
if(order.getShareUserId()!=null){
|
User user = appUserMapper.selectById(order.getShareUserId());
|
if(user.getBalance().doubleValue()<order.getCommissionPrice().doubleValue()){
|
throw new ServiceException("退款失败,卖家上级余额不足");
|
}
|
}
|
|
|
R r = refundPayMoney(order);//退款
|
if (200 == r.getCode()) {
|
//退款申请成功
|
log.info("退款申请成功,订单id:{}",order.getId());
|
}
|
}
|
}
|
|
@Override
|
public R refundPayMoneyCallback(String xmlData ) {
|
RefundCallbackResult result = wechatPayService.processRefundCallback(xmlData);
|
if (!result.isSuccess()) {
|
System.out.println("会员退费错误:"+result.getMsg());
|
return R.fail(result.getMsg());
|
}
|
Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, result.getOrderNo()));
|
if (null == order || order.getStatus() == -1) {
|
return R.ok();
|
}
|
order.setStatus(-1);
|
order.setIsRefund(1);
|
order.setRefundTime(LocalDateTime.now());
|
this.updateById(order);
|
//查找公司
|
Company company = companyMapper.selectById(order.getCompanyId());
|
|
//取消订单
|
order.setStatus(-1);
|
order.setIsRefund(1);
|
order.setRefundTime(LocalDateTime.now());
|
this.baseMapper.updateById(order);
|
//将分佣次数加回
|
User user = appUserMapper.selectById(order.getUserId());
|
User inviter = appUserMapper.selectById(user.getInviteId());
|
if (inviter!=null && inviter.getIsDelete()==0){
|
inviter.setInviteNum(inviter.getInviteNum()+1);
|
appUserMapper.updateById(inviter);
|
}
|
|
//商品状态修改
|
company.setStatus(1);
|
companyMapper.updateById(company);
|
|
return R.ok();
|
}
|
/**
|
* 返回订单支付金额
|
*/
|
@Autowired
|
private WechatPayService wechatPayService;
|
@Transactional
|
public R refundPayMoney(Order order) {
|
//开始退款
|
if (BigDecimal.ZERO.compareTo(order.getPrice()) < 0) {//支付的金额是否大于0
|
//微信退款
|
Map<String,String> map = wechatPayService.refund(order.getOrderNo(), order.getOrderNo(), order.getPrice().toString(), order.getPrice().toString(), "平台取消订单", "/system/order/refundPayMoneyCallback");
|
|
if (!"SUCCESS".equals(map.get("return_code"))) {
|
return R.fail(map.get("return_msg"));//退款失败
|
}
|
}
|
//查找公司
|
Company company = companyMapper.selectById(order.getCompanyId());
|
|
//取消订单
|
order.setStatus(-1);
|
order.setIsRefund(1);
|
order.setRefundTime(LocalDateTime.now());
|
this.baseMapper.updateById(order);
|
|
//将分佣次数加回
|
User inviter = appUserMapper.selectById(company.getUserId());
|
if (inviter!=null && inviter.getIsDelete()==0){
|
inviter.setInviteNum(inviter.getInviteNum()+1);
|
appUserMapper.updateById(inviter);
|
}
|
|
// 分佣退回
|
if(order.getShareUserId()!=null && order.getCommissionPrice().doubleValue()>0){
|
User user = appUserMapper.selectById(order.getShareUserId());
|
user.setBalance(user.getBalance().subtract(order.getCommissionPrice()));
|
appUserMapper.updateById(user);
|
AccountDetail accountDetail = new AccountDetail();
|
accountDetail.setUserId(order.getShareUserId());
|
accountDetail.setType(2);
|
accountDetail.setCategory(4);
|
accountDetail.setSourceId(order.getId());
|
accountDetail.setMoney(order.getCommissionPrice());
|
accountDetail.setRemark("订单取消分佣退回");
|
accountDetailMapper.insert(accountDetail);
|
}
|
|
//商品状态修改
|
company.setStatus(1);
|
companyMapper.updateById(company);
|
|
return R.ok();
|
}
|
|
|
@Override
|
public TodayStatisticsVO today() {
|
LocalDateTime startTime = LocalDate.now().atStartOfDay();
|
LocalDateTime endTime =LocalDate.now().atTime(23, 59, 59);
|
return this.baseMapper.today(startTime, endTime);
|
}
|
|
@Override
|
public IndexLineChartVO chart(LocalDate startDate, LocalDate endDate) {
|
// 查询数据库
|
List<DailyStatistics> statisticsList = this.baseMapper.getDailyStatistics(
|
startDate.atStartOfDay(),
|
endDate.atTime(23, 59, 59)
|
);
|
// 构建返回对象
|
IndexLineChartVO vo = new IndexLineChartVO();
|
vo.setDays(new ArrayList<>());
|
vo.setTotalList(new ArrayList<>());
|
vo.setProfitList(new ArrayList<>());
|
// 按日期顺序填充数据
|
LocalDate currentDate = startDate;
|
while (!currentDate.isAfter(endDate)) {
|
String dateStr = currentDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
vo.getDays().add(currentDate);
|
|
// 查找当天数据,若无则默认为0
|
Optional<DailyStatistics> statOptional = statisticsList.stream()
|
.filter(s -> s.getDate().equals(dateStr))
|
.findFirst();
|
|
DailyStatistics stat = statOptional.orElse(
|
new DailyStatistics(dateStr, BigDecimal.ZERO, BigDecimal.ZERO)
|
);
|
|
vo.getTotalList().add(stat.getTotalPrice());
|
vo.getProfitList().add(stat.getPlatformCommission());
|
|
currentDate = currentDate.plusDays(1);
|
}
|
return vo;
|
|
}
|
|
@Override
|
public FinanceFlowsTopVO financeTop(FinanceFlowsDTO dto) {
|
FinanceFlowsTopVO financeFlowsTopVO = this.baseMapper.financeTop(dto);
|
return financeFlowsTopVO;
|
}
|
|
@Override
|
public IPage<FinanceFlowsPageVO> flowsPage(FinanceFlowsDTO dto) {
|
IPage<FinanceFlowsPageVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
|
Long total = this.baseMapper.countFlowsPage(dto);
|
//分页处理
|
dto.setOffset((dto.getPageNum()-1)*dto.getPageSize());
|
IPage<FinanceFlowsPageVO> financeFlowsPageVOIPage = this.baseMapper.flowsPage(page, dto);
|
financeFlowsPageVOIPage.setTotal(total);
|
return financeFlowsPageVOIPage;
|
}
|
|
|
|
}
|