惠支付服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gratia-pay-parent/service/src/main/java/com/hfkj/service/impl/BsMerServiceImpl.java

573 lines
24 KiB

package com.hfkj.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hfkj.channel.lakala.config.LaKaLaConfig;
import com.hfkj.channel.weixin.WeiXinMerService;
import com.hfkj.channel.weixin.utils.WeiXinUploadUtil;
import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode;
import com.hfkj.channel.weixin.utils.MD5Util;
import com.hfkj.common.utils.DateUtil;
import com.hfkj.common.utils.IDGenerator;
import com.hfkj.common.utils.ImageUtils;
import com.hfkj.config.CommonSysConst;
import com.hfkj.dao.BsMerMapper;
import com.hfkj.entity.*;
import com.hfkj.model.MerAccountModel;
import com.hfkj.model.MerBasisModel;
import com.hfkj.model.StoreModel;
import com.hfkj.obs.HuaWeiYunObs;
import com.hfkj.service.*;
import com.hfkj.sysenum.*;
import com.hfkj.sysenum.lakala.UploadFileTypeEnum;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service("merService")
public class BsMerServiceImpl implements BsMerService {
@Resource
private BsSalesmanService salesmanService;
@Resource
private BsMerMapper merMapper;
@Resource
private SecUserService userService;
@Resource
private BsMerIndustryService merIndustryService;
@Resource
private BsMerContractService merContractService;
@Resource
private BsMerRegionService merRegionService;
@Resource
private BsMerSettleAcctService merSettleAcctService;
@Resource
private BsStoreService storeService;
@Resource
private BsMerPlatformNoService merPlatformNoService;
@Resource
private BsMerPlatformNoRateService merPlatformNoRateService;
@Resource
private BsMerContractRecordMsgService merContractRecordMsgService;
@Resource
private BsMerRateService merRateService;
@Resource
private BsMerAttachService merAttachService;
@Resource
private BsMerPlatformTermService merPlatformTermService;
@Resource
private CommonService commonService;
@Override
public void editMer(BsMer mer) {
if (mer.getId() == null) {
mer.setCreateTime(new Date());
mer.setUpdateTime(new Date());
merMapper.insert(mer);
} else {
mer.setUpdateTime(new Date());
merMapper.updateByPrimaryKey(mer);
}
}
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW,rollbackFor= {RuntimeException.class})
public Long configMerAccount(MerAccountModel merAccount) {
if (userService.findByLoginName(merAccount.getLoginName()) != null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "账户已存在,请更换");
}
// 查询业务员信息
BsSalesman salesman = salesmanService.getSalesman(merAccount.getSalesmanId());
if (salesman == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的业务员");
}
// 生成商户号
Long merNo = Long.parseLong(DateUtil.format(new Date(), DateUtil.YMDHMS) + IDGenerator.nextId(5));
BsMer mer = new BsMer();
mer.setCompanyId(salesman.getCompanyId());
mer.setCompanyName(salesman.getCompanyName());
mer.setAgentId(salesman.getAgentId());
mer.setSalesmanId(salesman.getId());
mer.setRegName(merAccount.getName());
mer.setRegPhone(merAccount.getPhone());
mer.setRegEmail(merAccount.getEmail());
mer.setMerNo(String.valueOf(merNo));
mer.setCompleteStatus(MerCompleteStatusEnum.status2.getNumber());
mer.setMerStatus(MerStatusEnum.status2.getNumber());
editMer(mer);
SecUser user = new SecUser();
user.setUserName(merAccount.getName());
user.setTelephone(merAccount.getPhone());
user.setLoginName(merAccount.getLoginName());
user.setPassword(MD5Util.MD5Encode("123456", "utf-8").toUpperCase());
user.setAdminFlag(1);
user.setRoleId(SecUserRoleIdEnum.roleId5.getRoleId());
user.setObjectType(SecUserTypeEnum.type4.getNumber());
user.setObjectId(mer.getId());
user.setStatus(1);
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
userService.addUser(user);
return mer.getId();
}
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW,rollbackFor= {RuntimeException.class})
public void configMerBasis(BsMer mer, BsMerIndustry merIndustry, BsMerRegion merRegion) throws IOException {
editMer(mer);
// 行业
BsMerIndustry industry = merIndustryService.getMerIndustryByMerId(mer.getId());
if (industry != null) {
merIndustry.setId(industry.getId());
merIndustry.setCreateTime(industry.getCreateTime());
merIndustry.setStatus(industry.getStatus());
}
merIndustry.setMerId(mer.getId());
merIndustryService.editMerIndustry(merIndustry);
// 区域
BsMerRegion region = merRegionService.getMerRegionByMerId(mer.getId());
if (region != null) {
merRegion.setId(region.getId());
merRegion.setCreateTime(region.getCreateTime());
merRegion.setStatus(region.getStatus());
}
merRegion.setMerId(mer.getId());
merRegionService.editMerRegion(merRegion);
BsMerAttach attach;
/******* 营业执照 *******/
List<BsMerAttach> blisUrl = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type1.getNumber());
if (blisUrl.size() > 0) {
for (BsMerAttach merAttach : blisUrl) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
if (StringUtils.isNotBlank(mer.getBlisUrl())) {
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type1.getNumber());
attach.setFileUrl(mer.getBlisUrl());
merAttachService.editMerAttach(attach);
}
/******* 营业执照 *******/
/******* 法人身份证正面 *******/
// 处理法人身份证正面
List<BsMerAttach> larIdCardPortraitImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type2.getNumber());
if (larIdCardPortraitImg.size() > 0) {
for (BsMerAttach merAttach : larIdCardPortraitImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type2.getNumber());
attach.setFileUrl(mer.getLarIdCardPortraitImg());
merAttachService.editMerAttach(attach);
/******* 法人身份证正面 *******/
/******* 法人身份证反面 *******/
// 处理法人身份证反面
List<BsMerAttach> larIdCardNationalEmblemImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type3.getNumber());
if (larIdCardNationalEmblemImg.size() > 0) {
for (BsMerAttach merAttach : larIdCardNationalEmblemImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type3.getNumber());
attach.setFileUrl(mer.getLarIdCardNationalEmblemImg());
merAttachService.editMerAttach(attach);
/******* 法人身份证反面 *******/
}
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW,rollbackFor= {RuntimeException.class})
public void configMerSettlement(BsMerSettleAcct merSettleAcct) {
// 查询商户
BsMer mer = getMer(merSettleAcct.getMerId());
if (mer == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到商户");
}
mer.setCompleteStatus(MerCompleteStatusEnum.status4.getNumber());
editMer(mer);
for (BsMerRate merRate : merSettleAcct.getMerRateList()) {
if (merRate.getRateTypeCode() == null || merRate.getRatePct() == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
// 查询费率
BsMerRate rate = merRateService.getDetail(mer.getId(), merRate.getRateTypeCode());
if (rate != null) {
rate.setRatePct(merRate.getRatePct());
merRateService.editMerRate(rate);
} else {
merRate.setMerId(mer.getId());
merRate.setMerNo(mer.getMerNo());
SecDictionary platformNoRate = commonService.mappingSysCode("MER_PLATFORM_NO_RATE", merRate.getRateTypeCode().toString());
merRate.setRateTypeName(platformNoRate.getCodeName());
merRate.setRateSaasTypeCode(platformNoRate.getExt2());
merRateService.editMerRate(merRate);
}
}
// 查询商户结算信息
BsMerSettleAcct settle = merSettleAcctService.getMerSettleByMerId(merSettleAcct.getMerId());
if (settle != null) {
merSettleAcct.setId(settle.getId());
merSettleAcct.setStatus(settle.getStatus());
merSettleAcct.setCreateTime(settle.getCreateTime());
}
BsMerAttach attach;
/******* 银行卡照片 *******/
// 处理法人身份证正面
List<BsMerAttach> bankCardImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type7.getNumber());
if (bankCardImg.size() > 0) {
for (BsMerAttach merAttach : bankCardImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
if (StringUtils.isNotBlank(merSettleAcct.getBankCardImg())){
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type7.getNumber());
attach.setFileUrl(merSettleAcct.getBankCardImg());
merAttachService.editMerAttach(attach);
}
/******* 银行卡照片 *******/
/******* 开户许可证照片 *******/
// 处理法人身份证正面
List<BsMerAttach> openningBankLicense = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type8.getNumber());
if (openningBankLicense.size() > 0) {
for (BsMerAttach merAttach : openningBankLicense) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
if (StringUtils.isNotBlank(merSettleAcct.getOpenningBankLicenseUrl())){
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type8.getNumber());
attach.setFileUrl(merSettleAcct.getOpenningBankLicenseUrl());
merAttachService.editMerAttach(attach);
}
/******* 开户许可证照片 *******/
/******* 结算人身份证人像面 *******/
// 处理法人身份证正面
List<BsMerAttach> larIdCardPortraitImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type9.getNumber());
if (larIdCardPortraitImg.size() > 0) {
for (BsMerAttach merAttach : larIdCardPortraitImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type9.getNumber());
attach.setFileUrl(merSettleAcct.getSettleIdCardPortraitImg());
merAttachService.editMerAttach(attach);
/******* 结算人身份证人像面 *******/
/******* 结算人身份证国徽面 *******/
// 处理法人身份证反面
List<BsMerAttach> larIdCardNationalEmblemImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type10.getNumber());
if (larIdCardNationalEmblemImg.size() > 0) {
for (BsMerAttach merAttach : larIdCardNationalEmblemImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type10.getNumber());
attach.setFileUrl(merSettleAcct.getSettleIdCardNationalEmblemImg());
merAttachService.editMerAttach(attach);
/******* 结算人身份证国徽面 *******/
merSettleAcctService.editMerSettleAcct(merSettleAcct);
}
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW,rollbackFor= {RuntimeException.class})
public void configMerStore(StoreModel storeModel) throws Exception {
BsMer mer = getMer(storeModel.getMerId());
if (mer == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到商户信息");
}
mer.setCompleteStatus(MerCompleteStatusEnum.status1.getNumber());
mer.setMerStatus(MerStatusEnum.status3.getNumber());
editMer(mer);
storeModel.setAloneSettle(false);
storeModel.setStatus(StoreStatusEnum.status3.getNumber());
storeService.configStore(storeModel);
BsMerAttach attach;
/**** 场所门头照片 ****/
List<BsMerAttach> doorHeadImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type4.getNumber());
if (doorHeadImg.size() > 0) {
for (BsMerAttach merAttach : doorHeadImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type4.getNumber());
attach.setFileUrl(storeModel.getDoorHeadImg());
merAttachService.editMerAttach(attach);
/**** 场所门头照片 ****/
/**** 场所内部照片 ****/
List<BsMerAttach> internalImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type5.getNumber());
if (internalImg.size() > 0) {
for (BsMerAttach merAttach : internalImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type5.getNumber());
attach.setFileUrl(storeModel.getInternalImg());
merAttachService.editMerAttach(attach);
/**** 场所内部照片 ****/
/**** 场所收银台照片 ****/
List<BsMerAttach> cashRegisterImg = merAttachService.getAttachListByMer(mer.getId(), PlatformTypeEnum.type0, MerAttachType.type6.getNumber());
if (cashRegisterImg.size() > 0) {
for (BsMerAttach merAttach : cashRegisterImg) {
merAttach.setStatus(0);
merAttachService.editMerAttach(merAttach);
}
}
attach = new BsMerAttach();
attach.setMerId(mer.getId());
attach.setPlatformType(PlatformTypeEnum.type0.getNumber());
attach.setType(MerAttachType.type6.getNumber());
attach.setFileUrl(storeModel.getCashRegisterImg());
merAttachService.editMerAttach(attach);
/**** 场所收银台照片 ****/
// 进件
merContractService.addMerContract(mer.getId());
}
@Override
public BsMer getMer(Long merId) {
return merMapper.selectByPrimaryKey(merId);
}
@Override
public List<BsMer> getMerList(Map<String, Object> param) {
BsMerExample example = new BsMerExample();
BsMerExample.Criteria criteria = example.createCriteria().andMerStatusNotEqualTo(MerStatusEnum.status0.getNumber());
if (MapUtils.getLong(param, "agentId") != null) {
criteria.andAgentIdEqualTo(MapUtils.getLong(param, "agentId"));
}
if (MapUtils.getLong(param, "salesmanId") != null) {
criteria.andSalesmanIdEqualTo(MapUtils.getLong(param, "salesmanId"));
}
if (MapUtils.getInteger(param, "merStatus") != null) {
criteria.andMerStatusEqualTo(MapUtils.getInteger(param, "merStatus"));
}
if (MapUtils.getInteger(param, "merType") != null) {
criteria.andMerTypeEqualTo(MapUtils.getInteger(param, "merType"));
}
if (StringUtils.isNotBlank(MapUtils.getString(param, "merName"))) {
criteria.andMerNameLike("%"+MapUtils.getString(param, "merName")+"%");
}
if (StringUtils.isNotBlank(MapUtils.getString(param, "merNo"))) {
criteria.andMerNoEqualTo(MapUtils.getString(param, "merNo"));
}
if (StringUtils.isNotBlank(MapUtils.getString(param, "regName"))) {
criteria.andRegNameLike("%"+MapUtils.getString(param, "regName")+"%");
}
if (StringUtils.isNotBlank(MapUtils.getString(param, "regPhone"))) {
criteria.andRegPhoneEqualTo(MapUtils.getString(param, "regPhone"));
}
example.setOrderByClause("create_time desc");
return merMapper.selectByExample(example);
}
@Override
public MerBasisModel getMerDetail(Long merId) {
BsMer bsMer = getMer(merId);
if (bsMer == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到商户");
}
MerBasisModel basisModel = new MerBasisModel();
BeanUtils.copyProperties(bsMer, basisModel);
// 查询账户
SecUser account = userService.getMainAccount(SecUserTypeEnum.type4.getNumber(), bsMer.getId());
if (account != null) {
account.setPassword(null);
basisModel.setAccount(account);
}
basisModel.setMerRegion(merRegionService.getMerRegionByMerId(merId));
basisModel.setMerIndustry(merIndustryService.getMerIndustryByMerId(merId));
// 结算信息
BsMerSettleAcct settle = merSettleAcctService.getMerSettleByMerId(merId);
if (settle != null) {
settle.setMerRateList(merRateService.getRateListByMerId(merId));
basisModel.setMerSettleAcct(settle);
}
// 查询门店
List<BsStore> store = storeService.getStoreByMerId(merId, StoreCreateTypeEnum.type1);
if (store.size() > 0) {
basisModel.setStoreModel(storeService.getStoreDetail(store.get(0).getId()));
}
// 查询错误消息
if (basisModel.getMerStatus().equals(MerStatusEnum.status4.getNumber())) {
Map<String, Object> recordMsg = merContractRecordMsgService.getMerContractRecordMsg(bsMer.getId());
recordMsg.put("response_msg", recordMsg.get("response_msg"));
basisModel.setMerContractFailMsg(recordMsg);
}
return basisModel;
}
@Override
public void laKaLaMerContractNotify(Long merId, MerStatusEnum merStatus, JSONObject data) {
// 查询商户
BsMer mer = getMer(merId);
if (mer != null) {
mer.setMerStatus(merStatus.getNumber());
mer.setCompleteStatus(MerCompleteStatusEnum.status1.getNumber());
List<BsStore> storeList = storeService.getStoreByMerId(mer.getId(), StoreCreateTypeEnum.type1);
// 审核通过
if (merStatus.getNumber().equals(MerStatusEnum.status1.getNumber())) {
// 查询平台
BsMerPlatformNo merPlatformNo = merPlatformNoService.getPlatformNo(merId, PlatformTypeEnum.type1);
if (merPlatformNo != null) {
merPlatformNo.setPlatformNo(data.getString("merInnerNo"));
merPlatformNo.setCupNo(data.getString("merCupNo"));
merPlatformNoService.editMerPlatformNo(merPlatformNo);
// 平台费率
List<BsMerPlatformNoRate> rateList = merPlatformNoRateService.getMerPlatformNoRateList(merId, PlatformTypeEnum.type1.getNumber());
for (BsMerPlatformNoRate rate : rateList) {
rate.setPlatformNo(merPlatformNo.getPlatformNo());
rate.setCupNo(merPlatformNo.getCupNo());
merPlatformNoRateService.editRate(rate);
}
}
// 终端号
JSONArray termDatas = data.getJSONArray("termDatas");
if (termDatas != null && termDatas.size() > 0) {
for (Object termObject : termDatas) {
JSONObject term = (JSONObject) termObject;
BsMerPlatformTerm merPlatformTerm = new BsMerPlatformTerm();
merPlatformTerm.setMerPlatformNoId(merPlatformNo.getId());
merPlatformTerm.setMerId(merPlatformNo.getMerId());
merPlatformTerm.setActiveNo(term.getString("activeNo"));
merPlatformTerm.setBusiTypeCode(term.getString("busiTypeCode"));
merPlatformTerm.setBusiTypeName(term.getString("busiTypeName"));
merPlatformTerm.setProductCode(term.getString("productCode"));
merPlatformTerm.setProductName(term.getString("productName"));
merPlatformTerm.setShopId(term.getString("shopId"));
merPlatformTerm.setTermId(term.getString("termId"));
merPlatformTerm.setTermNo(term.getString("termNo"));
merPlatformTermService.editMerPlatformTerm(merPlatformTerm);
}
}
}
if (merStatus.getNumber().equals(MerStatusEnum.status4.getNumber())) {
mer.setCompleteStatus(MerCompleteStatusEnum.status2.getNumber());
}
editMer(mer);
}
}
@Override
public long countMerSum(Map<String, Object> param) {
BsMerExample example = new BsMerExample();
BsMerExample.Criteria criteria = example.createCriteria();
if (MapUtils.getLong(param, "salesmanId") != null) {
criteria.andSalesmanIdEqualTo(MapUtils.getLong(param, "salesmanId"));
}
if (MapUtils.getInteger(param, "completeStatus") != null) {
criteria.andCompleteStatusEqualTo(MapUtils.getInteger(param, "completeStatus"));
}
if (MapUtils.getInteger(param, "merStatus") != null) {
criteria.andMerStatusEqualTo(MapUtils.getInteger(param, "merStatus"));
}
return merMapper.countByExample(example);
}
}