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.
274 lines
11 KiB
274 lines
11 KiB
package com.hai.service.impl;
|
|
|
|
import com.hai.common.exception.ErrorCode;
|
|
import com.hai.common.exception.ErrorHelp;
|
|
import com.hai.common.exception.SysCode;
|
|
import com.hai.common.security.AESEncodeUtil;
|
|
import com.hai.common.security.UserCenter;
|
|
import com.hai.common.utils.BankNumberUtil;
|
|
import com.hai.dao.HighOilCardMapper;
|
|
import com.hai.entity.*;
|
|
import com.hai.enum_type.OilCardBindStatusEnum;
|
|
import com.hai.enum_type.OilCardRecordTypeEnum;
|
|
import com.hai.enum_type.OilCardStatusEnum;
|
|
import com.hai.model.UserInfoModel;
|
|
import com.hai.service.*;
|
|
import org.apache.commons.collections4.MapUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
|
|
@Service("oilCardService")
|
|
public class HighOilCardServiceImpl implements HighOilCardService {
|
|
|
|
@Resource
|
|
private HighOilCardMapper oilCardMapper;
|
|
|
|
@Resource
|
|
private HighOilCardContactRecordService oilCardContactRecordService;
|
|
|
|
@Resource
|
|
private HighOilCardRecordService oilCardRecordService;
|
|
|
|
@Resource
|
|
private BsOrganizationService organizationService;
|
|
|
|
@Resource
|
|
private BsCompanyService companyService;
|
|
|
|
@Resource
|
|
private HighCompanyAccountService companyAccountService;
|
|
|
|
@Resource
|
|
private UserCenter userCenter;
|
|
|
|
@Override
|
|
public void editData(HighOilCard oilCard) {
|
|
if (oilCard.getId() == null) {
|
|
oilCard.setCreateTime(new Date());
|
|
oilCard.setUpdateTime(new Date());
|
|
oilCard.setStatus(OilCardStatusEnum.status1.getStatus());
|
|
oilCard.setBindStatus(OilCardBindStatusEnum.status0.getStatus());
|
|
oilCardMapper.insert(oilCard);
|
|
} else {
|
|
oilCard.setUpdateTime(new Date());
|
|
oilCardMapper.updateByPrimaryKey(oilCard);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
@Transactional(rollbackFor=Exception.class,isolation = Isolation.SERIALIZABLE,propagation= Propagation.REQUIRES_NEW)
|
|
public synchronized void recharge(String cardNo, BigDecimal price, Long orgId) {
|
|
HighOilCard oilCard = getOilCardByCardNo(cardNo);
|
|
if (oilCard == null) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到部门");
|
|
}
|
|
if (!oilCard.getStatus().equals(OilCardStatusEnum.status1.getStatus())) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "油卡不处于正常状态");
|
|
}
|
|
// 账户扣款
|
|
Map<String, Object> consumeType = new HashMap<>();
|
|
consumeType.put("sourceType", "2");
|
|
consumeType.put("sourceId", oilCard.getId());
|
|
consumeType.put("sourceContent", "油卡:"+oilCard.getCardNo()+",充值:"+price.toString());
|
|
companyAccountService.consume(orgId, price, consumeType);
|
|
|
|
// 变更前金额
|
|
BigDecimal beforeAmount = oilCard.getAmount();
|
|
// 计算金额
|
|
oilCard.setAmount(oilCard.getAmount().add(price));
|
|
editData(oilCard);
|
|
// 变更后金额
|
|
BigDecimal afterAmount = oilCard.getAmount();
|
|
|
|
HighOilCardRecord record = new HighOilCardRecord();
|
|
record.setOilCardId(oilCard.getId());
|
|
record.setType(OilCardRecordTypeEnum.type1.getType());
|
|
record.setAmount(price);
|
|
record.setBeforeAmount(beforeAmount);
|
|
record.setAfterAmount(afterAmount);
|
|
record.setSourceContent("充值油卡金额:" + record.getAmount());
|
|
oilCardRecordService.insertRecord(record);
|
|
}
|
|
|
|
@Override
|
|
@Transactional(propagation= Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
|
|
public void generateCard(Long orgId, Integer generateNum) {
|
|
UserInfoModel userInfoModel = userCenter.getSessionModel(UserInfoModel.class);
|
|
// 查询部门信息
|
|
BsOrganization organization = organizationService.findById(orgId);
|
|
if (organization == null) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到部门");
|
|
}
|
|
BsCompany company = companyService.getCompanyById(organization.getCompanyId());
|
|
|
|
List<HighOilCard> oilCardList = new ArrayList<>();
|
|
|
|
HighOilCard oilCard;
|
|
for (int i = 0; i < generateNum; i++) {
|
|
oilCard = new HighOilCard();
|
|
oilCard.setCompanyId(organization.getCompanyId());
|
|
oilCard.setCompanyName(company.getName());
|
|
oilCard.setOrgId(organization.getId());
|
|
oilCard.setOrgName(organization.getName());
|
|
oilCard.setAmount(new BigDecimal("0"));
|
|
oilCard.setCardNo(BankNumberUtil.getBrankNumber("8"));
|
|
oilCard.setOpUserId(userInfoModel.getSecUser().getId());
|
|
oilCard.setOpUserName(userInfoModel.getSecUser().getUserName());
|
|
oilCard.setCreateTime(new Date());
|
|
oilCard.setUpdateTime(new Date());
|
|
oilCard.setStatus(OilCardStatusEnum.status1.getStatus());
|
|
oilCard.setBindStatus(OilCardBindStatusEnum.status0.getStatus());
|
|
oilCardList.add(oilCard);
|
|
}
|
|
oilCardMapper.insertList(oilCardList);
|
|
}
|
|
|
|
@Override
|
|
@Transactional(propagation= Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
|
|
public void setContact(String cardNo, String contactName, String contactPhone) {
|
|
// 查询油卡
|
|
HighOilCard oilCard = getOilCardByCardNo(cardNo);
|
|
if (oilCard == null) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油卡");
|
|
}
|
|
// 查询手机号是否绑定油卡
|
|
HighOilCard phone = getOilCardByPhone(contactPhone);
|
|
if (phone != null && !phone.getId().equals(oilCard.getId())) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "联系电话已绑定其他油卡");
|
|
}
|
|
oilCard.setContactName(contactName);
|
|
oilCard.setContactPhone(contactPhone);
|
|
editData(oilCard);
|
|
|
|
// 绑定状态 0:未绑定 1:已绑定
|
|
if (oilCard.getBindStatus() == 1) {
|
|
oilCardContactRecordService.insert(oilCard.getId(), "新设置:联系人【"+oilCard.getContactName()+"】,联系电话【"+oilCard.getContactPhone()+"】");
|
|
} else {
|
|
oilCardContactRecordService.insert(oilCard.getId(), "联系信息变更:原来联系人【"+oilCard.getContactName()+"】,联系电话【"+oilCard.getContactPhone()+"】。" +
|
|
"变跟后联系人【"+oilCard.getContactName()+ "】,联系电话【"+oilCard.getContactPhone()+"】");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void disabled(String cardNo) {
|
|
// 查询油卡
|
|
HighOilCard oilCard = getOilCardByCardNo(cardNo);
|
|
if (oilCard == null) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油卡");
|
|
}
|
|
if (!oilCard.getStatus().equals(OilCardStatusEnum.status1.getStatus())) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "油卡状态错误");
|
|
}
|
|
oilCard.setStatus(OilCardStatusEnum.status2.getStatus());
|
|
editData(oilCard);
|
|
|
|
oilCardContactRecordService.insert(oilCard.getId(), "禁用油卡");
|
|
}
|
|
|
|
@Override
|
|
public void enable(String cardNo) {
|
|
// 查询油卡
|
|
HighOilCard oilCard = getOilCardByCardNo(cardNo);
|
|
if (oilCard == null) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到油卡");
|
|
}
|
|
if (!oilCard.getStatus().equals(OilCardStatusEnum.status2.getStatus())) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "油卡状态错误");
|
|
}
|
|
oilCard.setStatus(OilCardStatusEnum.status1.getStatus());
|
|
editData(oilCard);
|
|
|
|
oilCardContactRecordService.insert(oilCard.getId(), "启用油卡");
|
|
}
|
|
|
|
@Override
|
|
public HighOilCard getOilCardByPhone(String phone) {
|
|
HighOilCardExample example = new HighOilCardExample();
|
|
example.createCriteria().andStatusNotEqualTo(0).andContactPhoneEqualTo(phone);
|
|
List<HighOilCard> list = oilCardMapper.selectByExample(example);
|
|
if (list.size() > 0) {
|
|
return list.get(0);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public HighOilCard getOilCardByCardNo(String cardNo) {
|
|
HighOilCardExample example = new HighOilCardExample();
|
|
example.createCriteria().andStatusNotEqualTo(0).andCardNoEqualTo(cardNo);
|
|
List<HighOilCard> list = oilCardMapper.selectByExample(example);
|
|
if (list.size() > 0) {
|
|
return list.get(0);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public List<HighOilCard> getOilCardList(Map<String, Object> param) {
|
|
HighOilCardExample example = new HighOilCardExample();
|
|
HighOilCardExample.Criteria criteria = example.createCriteria().andStatusNotEqualTo(0);
|
|
|
|
if (MapUtils.getLong(param, "companyId") != null) {
|
|
criteria.andCompanyIdEqualTo(MapUtils.getLong(param, "companyId"));
|
|
}
|
|
|
|
if (MapUtils.getLong(param, "orgId") != null) {
|
|
criteria.andOrgIdEqualTo(MapUtils.getLong(param, "orgId"));
|
|
}
|
|
|
|
if (StringUtils.isNotBlank(MapUtils.getString(param, "cardNo"))) {
|
|
criteria.andCardNoLike("%" + MapUtils.getString(param, "cardNo") + "%");
|
|
}
|
|
|
|
if (StringUtils.isNotBlank(MapUtils.getString(param, "contactName"))) {
|
|
criteria.andContactNameLike("%" + MapUtils.getString(param, "contactName") + "%");
|
|
}
|
|
|
|
if (StringUtils.isNotBlank(MapUtils.getString(param, "contactPhone"))) {
|
|
criteria.andContactPhoneLike("%" + MapUtils.getString(param, "contactPhone") + "%");
|
|
}
|
|
|
|
if (MapUtils.getLong(param, "createTimeS") != null) {
|
|
criteria.andCreateTimeGreaterThanOrEqualTo(new Date(MapUtils.getLong(param, "createTimeS")));
|
|
}
|
|
|
|
if (MapUtils.getLong(param, "createTimeE") != null) {
|
|
criteria.andCreateTimeLessThanOrEqualTo(new Date(MapUtils.getLong(param, "createTimeE")));
|
|
}
|
|
|
|
if (MapUtils.getLong(param, "bindTimeS") != null) {
|
|
criteria.andBindTimeGreaterThanOrEqualTo(new Date(MapUtils.getLong(param, "bindTimeS")));
|
|
}
|
|
|
|
if (MapUtils.getLong(param, "bindTimeE") != null) {
|
|
criteria.andBindTimeLessThanOrEqualTo(new Date(MapUtils.getLong(param, "bindTimeE")));
|
|
}
|
|
|
|
if (MapUtils.getBoolean(param, "isConfigContact") != null) {
|
|
if (MapUtils.getBoolean(param, "isConfigContact") == true) {
|
|
criteria.andContactPhoneIsNotNull();
|
|
}
|
|
if (MapUtils.getBoolean(param, "isConfigContact") == false) {
|
|
criteria.andContactPhoneIsNull();
|
|
}
|
|
}
|
|
|
|
if (MapUtils.getInteger(param, "status") != null) {
|
|
criteria.andStatusEqualTo(MapUtils.getInteger(param, "status"));
|
|
}
|
|
|
|
if (MapUtils.getInteger(param, "bindStatus") != null) {
|
|
criteria.andBindStatusEqualTo(MapUtils.getInteger(param, "bindStatus"));
|
|
}
|
|
|
|
example.setOrderByClause("create_time desc");
|
|
return oilCardMapper.selectByExample(example);
|
|
}
|
|
}
|
|
|