嗨森逛服务
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.
hai-server/hai-service/src/main/java/com/hai/service/impl/HighOilCardServiceImpl.java

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);
}
}