|
|
|
|
@ -0,0 +1,254 @@
|
|
|
|
|
package com.flossom.miniProgram.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.flossom.common.core.domain.entity.*;
|
|
|
|
|
import com.flossom.common.core.enums.BindingStatusEnums;
|
|
|
|
|
import com.flossom.common.core.enums.SerialValidStatusEnums;
|
|
|
|
|
import com.flossom.common.core.enums.Status;
|
|
|
|
|
import com.flossom.common.core.exception.ServiceException;
|
|
|
|
|
import com.flossom.common.core.exception.ServiceReturnCodeException;
|
|
|
|
|
import com.flossom.common.core.mapper.*;
|
|
|
|
|
import com.flossom.common.core.utils.DateUtils;
|
|
|
|
|
import com.flossom.common.core.utils.StringUtils;
|
|
|
|
|
import com.flossom.common.security.utils.SecurityUtils;
|
|
|
|
|
import com.flossom.miniProgram.service.IWxInstrumentService;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.time.Instant;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.time.ZoneId;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 仪器列Service业务层处理
|
|
|
|
|
*
|
|
|
|
|
* @author flossom
|
|
|
|
|
* @date 2024-01-06
|
|
|
|
|
*/
|
|
|
|
|
@Service
|
|
|
|
|
public class WxInstrumentServiceImpl implements IWxInstrumentService {
|
|
|
|
|
|
|
|
|
|
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private WxInstrumentMapper wxInstrumentMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private WxInstrumentSerialMapper wxInstrumentSerialMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private WxUserInstrumentMapper wxUserInstrumentMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private WxUserInstrumentLogMapper wxUserInstrumentLogMapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public WxInstrumentSerial getInstrumentInfoBySerial(String serial) {
|
|
|
|
|
WxInstrumentSerial query = new WxInstrumentSerial();
|
|
|
|
|
query.setSerial(serial);
|
|
|
|
|
query.setValidStatus(SerialValidStatusEnums.EFFECTIVE.getCode());
|
|
|
|
|
query.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
WxInstrumentSerial wxInstrumentSerial = wxInstrumentSerialMapper.selectEntityListBySerial(query);
|
|
|
|
|
// 序列号唯一
|
|
|
|
|
if (wxInstrumentSerial == null) {
|
|
|
|
|
logger.info("serial:{}, 没有对应的数据", serial);
|
|
|
|
|
throw new ServiceReturnCodeException("没有对应的序列号,跳转联系客服", 203);
|
|
|
|
|
}
|
|
|
|
|
return wxInstrumentSerial;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public void binding(String serial) {
|
|
|
|
|
WxUserMember wxUserMember = SecurityUtils.getLoginUser().getWxUserMember();
|
|
|
|
|
/* 1、获取序列号信息 */
|
|
|
|
|
WxInstrumentSerial wxInstrumentSerial = getInstrumentInfoBySerial(serial);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 2、判断当前用户是否绑定了序列号对应仪器的序列号
|
|
|
|
|
* 逻辑:查询‘当前用户’是否绑定了扫码序列号对应的仪器
|
|
|
|
|
* 绑定了:
|
|
|
|
|
* 1、序列号一致,直接获取仪器列表
|
|
|
|
|
* 2、序列号不一致,询问是否对该仪器进行换绑
|
|
|
|
|
* 没有绑定:
|
|
|
|
|
* 1、是否有其他用户绑定,如果没有,开启绑定流程
|
|
|
|
|
* 2、其他用户绑定了,返回联系客服
|
|
|
|
|
*/
|
|
|
|
|
// 获取用户绑定了对应仪器的序列号
|
|
|
|
|
WxUserInstrument userBindInstrumentQuery = new WxUserInstrument();
|
|
|
|
|
userBindInstrumentQuery.setUserId(wxUserMember.getId());
|
|
|
|
|
userBindInstrumentQuery.setInstrumentId(wxInstrumentSerial.getInstrumentId());
|
|
|
|
|
userBindInstrumentQuery.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
List<WxUserInstrument> wxUserInstrumentList = wxUserInstrumentMapper.selectListByUserIdAndInstrumentId(userBindInstrumentQuery);
|
|
|
|
|
// 2.1、当前用户绑定了序列号对应的仪器的序列号
|
|
|
|
|
if (wxUserInstrumentList != null) {
|
|
|
|
|
if (wxUserInstrumentList.size() != 1) {
|
|
|
|
|
logger.error("根据 用户id:{} 和 仪器id:{} 查询出来的数据为空或者数据量不止一条", wxUserMember.getId(), wxInstrumentSerial.getInstrumentId());
|
|
|
|
|
throw new ServiceException("绑定失败");
|
|
|
|
|
}
|
|
|
|
|
WxUserInstrument wxUserInstrument = wxUserInstrumentList.get(0);
|
|
|
|
|
/* 2.1.1、判断扫码获取的序列号和用户绑定的序列号是否一致 */
|
|
|
|
|
if (StringUtils.equals(wxUserInstrument.getSerial(), serial)) {
|
|
|
|
|
logger.info("相同序列号,页面重新发起查询用户拥有的仪器列表");
|
|
|
|
|
throw new ServiceReturnCodeException("扫码的序列号已被当前用户绑定,请查询仪器列表", 200);
|
|
|
|
|
} else {
|
|
|
|
|
/* 2.1.2、绑定过仪器,但不是同一个序列号,询问是否需要换绑 */
|
|
|
|
|
logger.info("绑定过该类型仪器,但当前扫码不是以前绑定的仪器,询问是否换绑仪器");
|
|
|
|
|
throw new ServiceReturnCodeException("绑定过该类型仪器,但当前扫码不是以前绑定的仪器,询问是否换绑仪器", 202);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 2.2、用户没有绑定过序列号对应的仪器
|
|
|
|
|
else {
|
|
|
|
|
/* 2.2.1、判断序列号是否被别人绑定了 */
|
|
|
|
|
WxUserInstrument query = new WxUserInstrument();
|
|
|
|
|
query.setUserId(wxUserMember.getId());
|
|
|
|
|
query.setInstrumentId(wxInstrumentSerial.getInstrumentId());
|
|
|
|
|
query.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
query.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
Integer num = wxUserInstrumentMapper.selectUiByInstrumentId(query);
|
|
|
|
|
if (num != null && num > 0) {
|
|
|
|
|
logger.info("被别人绑定了,页面跳转联系客服");
|
|
|
|
|
throw new ServiceReturnCodeException("当前序列码被别人绑定了,页面跳转联系客服", 203);
|
|
|
|
|
}
|
|
|
|
|
/* 2.2.2、绑定仪器 */
|
|
|
|
|
else {
|
|
|
|
|
WxInstrument wxInstrument = wxInstrumentMapper.selectWxInstrumentById(wxInstrumentSerial.getInstrumentId());
|
|
|
|
|
WxUserInstrument saveEntity = new WxUserInstrument();
|
|
|
|
|
saveEntity.setUserId(wxUserMember.getId());
|
|
|
|
|
saveEntity.setSerial(serial);
|
|
|
|
|
saveEntity.setInstrumentId(wxInstrumentSerial.getInstrumentId());
|
|
|
|
|
saveEntity.setInstrumentName(wxInstrumentSerial.getInstrumentName());
|
|
|
|
|
saveEntity.setGuarantee(wxInstrument.getGuarantee());
|
|
|
|
|
if (wxInstrument.getGuarantee() != null && wxInstrument.getGuarantee() >= 0) {
|
|
|
|
|
Instant instant = LocalDateTime.now().plusYears(wxInstrument.getGuarantee()).atZone(ZoneId.systemDefault()).toInstant();
|
|
|
|
|
saveEntity.setGuaranteeEndtime(Date.from(instant));
|
|
|
|
|
}
|
|
|
|
|
saveEntity.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
saveEntity.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
saveEntity.setCreateBy(wxUserMember.getNickname());
|
|
|
|
|
saveEntity.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
wxUserInstrumentMapper.insertWxUserInstrument(saveEntity);
|
|
|
|
|
|
|
|
|
|
// 更新仪器序列号绑定状态
|
|
|
|
|
WxInstrumentSerial saveSerial = new WxInstrumentSerial();
|
|
|
|
|
saveSerial.setId(wxInstrumentSerial.getId());
|
|
|
|
|
saveSerial.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
saveSerial.setUpdateBy(wxUserMember.getNickname());
|
|
|
|
|
saveSerial.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
wxInstrumentSerialMapper.updateWxInstrumentSerial(saveSerial);
|
|
|
|
|
|
|
|
|
|
// 保存绑定记录
|
|
|
|
|
WxUserInstrumentLog wxUserInstrumentLog = new WxUserInstrumentLog();
|
|
|
|
|
wxUserInstrumentLog.setUserInstrumentId(saveEntity.getId());
|
|
|
|
|
wxUserInstrumentLog.setUserId(wxUserMember.getId());
|
|
|
|
|
wxUserInstrumentLog.setSerial(serial);
|
|
|
|
|
wxUserInstrumentLog.setInstrumentId(wxInstrument.getId());
|
|
|
|
|
wxUserInstrumentLog.setInstrumentName(wxInstrument.getName());
|
|
|
|
|
wxUserInstrumentLog.setGuarantee(wxInstrument.getGuarantee());
|
|
|
|
|
wxUserInstrumentLog.setGuaranteeEndtime(saveEntity.getGuaranteeEndtime());
|
|
|
|
|
wxUserInstrumentLog.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
wxUserInstrumentLog.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
wxUserInstrumentLog.setCreateBy(wxUserMember.getNickname());
|
|
|
|
|
wxUserInstrumentLog.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
wxUserInstrumentLogMapper.insertWxUserInstrumentLog(wxUserInstrumentLog);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public void exchangeBinding(String serial) {
|
|
|
|
|
WxUserMember wxUserMember = SecurityUtils.getLoginUser().getWxUserMember();
|
|
|
|
|
/* 1、获取序列号信息 */
|
|
|
|
|
WxInstrumentSerial newInstrumentSerial = getInstrumentInfoBySerial(serial);
|
|
|
|
|
|
|
|
|
|
/* 2、判断序列号是否被别人绑定了 */
|
|
|
|
|
WxUserInstrument query = new WxUserInstrument();
|
|
|
|
|
query.setUserId(wxUserMember.getId());
|
|
|
|
|
query.setSerial(serial);
|
|
|
|
|
query.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
query.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
Integer num = wxUserInstrumentMapper.selectUiByInstrumentId(query);
|
|
|
|
|
if (num != null && num > 0) {
|
|
|
|
|
logger.info("被别人绑定了,页面跳转联系客服");
|
|
|
|
|
throw new ServiceReturnCodeException("当前序列码被别人绑定了,页面跳转联系客服", 203);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 3、换绑 */
|
|
|
|
|
// 3.1、查询原记录
|
|
|
|
|
WxUserInstrument userInstrumentQuery = new WxUserInstrument();
|
|
|
|
|
userInstrumentQuery.setUserId(wxUserMember.getId());
|
|
|
|
|
userInstrumentQuery.setInstrumentId(newInstrumentSerial.getInstrumentId());
|
|
|
|
|
userInstrumentQuery.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
List<WxUserInstrument> wxUserInstrumentList = wxUserInstrumentMapper.selectListByUserIdAndInstrumentId(userInstrumentQuery);
|
|
|
|
|
if (wxUserInstrumentList == null || wxUserInstrumentList.size() != 1) {
|
|
|
|
|
logger.error("根据 用户id:{} 和 仪器id:{} 查询出来的数据为空或者数据量不止一条", wxUserMember.getId(), newInstrumentSerial.getInstrumentId());
|
|
|
|
|
throw new ServiceException("换绑失败!");
|
|
|
|
|
}
|
|
|
|
|
WxUserInstrument wxUserInstrument = wxUserInstrumentList.get(0);
|
|
|
|
|
|
|
|
|
|
// 3.2、更新旧的序列号状态为已解绑
|
|
|
|
|
// 当后管解除了用户和仪器的绑定,状态变为已解绑,无需再次修改序列号的绑定状态
|
|
|
|
|
if (BindingStatusEnums.UN_BOUND.getCode() == wxUserInstrument.getBindingStatus()) {
|
|
|
|
|
WxInstrumentSerial oldUpdate = new WxInstrumentSerial();
|
|
|
|
|
oldUpdate.setBindingStatus(BindingStatusEnums.UN_BOUND.getCode());
|
|
|
|
|
oldUpdate.setSerial(wxUserInstrument.getSerial());
|
|
|
|
|
wxInstrumentSerialMapper.updateBySerial(oldUpdate);
|
|
|
|
|
}
|
|
|
|
|
// 3.3、更新新的序列号状态为已绑定
|
|
|
|
|
WxInstrumentSerial newUpdate = new WxInstrumentSerial();
|
|
|
|
|
newUpdate.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
newUpdate.setSerial(serial);
|
|
|
|
|
wxInstrumentSerialMapper.updateBySerial(newUpdate);
|
|
|
|
|
// 3.4、更新用户仪器关联表
|
|
|
|
|
WxUserInstrument updateEntity = new WxUserInstrument();
|
|
|
|
|
updateEntity.setId(wxUserInstrument.getId());
|
|
|
|
|
updateEntity.setSerial(serial);
|
|
|
|
|
if (wxUserInstrument.getGuarantee() != null && wxUserInstrument.getGuarantee() >= 0) {
|
|
|
|
|
Instant instant = LocalDateTime.now().plusYears(wxUserInstrument.getGuarantee()).atZone(ZoneId.systemDefault()).toInstant();
|
|
|
|
|
updateEntity.setGuaranteeEndtime(Date.from(instant));
|
|
|
|
|
}
|
|
|
|
|
// 当后管解除了用户和仪器的绑定,状态变为已解绑,此时就需改为绑定状态
|
|
|
|
|
updateEntity.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
updateEntity.setUpdateBy(wxUserMember.getNickname());
|
|
|
|
|
updateEntity.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
wxUserInstrumentMapper.updateWxUserInstrument(updateEntity);
|
|
|
|
|
// 3.5、用户仪器关联记录表
|
|
|
|
|
// 当后管解除了用户和仪器的绑定,操作记录已记录,无需再次记录
|
|
|
|
|
if (BindingStatusEnums.UN_BOUND.getCode() == wxUserInstrument.getBindingStatus()) {
|
|
|
|
|
WxUserInstrumentLog oldUserInstrumentLog = new WxUserInstrumentLog();
|
|
|
|
|
oldUserInstrumentLog.setUserInstrumentId(wxUserInstrument.getId());
|
|
|
|
|
oldUserInstrumentLog.setUserId(wxUserMember.getId());
|
|
|
|
|
oldUserInstrumentLog.setSerial(wxUserInstrument.getSerial());
|
|
|
|
|
oldUserInstrumentLog.setInstrumentId(wxUserInstrument.getInstrumentId());
|
|
|
|
|
oldUserInstrumentLog.setInstrumentName(wxUserInstrument.getInstrumentName());
|
|
|
|
|
oldUserInstrumentLog.setSerialImage(wxUserInstrument.getSerialImage());
|
|
|
|
|
oldUserInstrumentLog.setGuarantee(wxUserInstrument.getGuarantee());
|
|
|
|
|
oldUserInstrumentLog.setGuaranteeEndtime(wxUserInstrument.getGuaranteeEndtime());
|
|
|
|
|
oldUserInstrumentLog.setBindingStatus(BindingStatusEnums.UN_BOUND.getCode());
|
|
|
|
|
oldUserInstrumentLog.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
oldUserInstrumentLog.setCreateBy(wxUserMember.getNickname());
|
|
|
|
|
oldUserInstrumentLog.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
wxUserInstrumentLogMapper.insertWxUserInstrumentLog(oldUserInstrumentLog);
|
|
|
|
|
}
|
|
|
|
|
WxUserInstrumentLog newUserInstrumentLog = new WxUserInstrumentLog();
|
|
|
|
|
newUserInstrumentLog.setUserInstrumentId(wxUserInstrument.getId());
|
|
|
|
|
newUserInstrumentLog.setUserId(wxUserMember.getId());
|
|
|
|
|
newUserInstrumentLog.setSerial(serial);
|
|
|
|
|
newUserInstrumentLog.setInstrumentId(wxUserInstrument.getInstrumentId());
|
|
|
|
|
newUserInstrumentLog.setInstrumentName(wxUserInstrument.getInstrumentName());
|
|
|
|
|
newUserInstrumentLog.setSerialImage(wxUserInstrument.getSerialImage());
|
|
|
|
|
newUserInstrumentLog.setGuarantee(wxUserInstrument.getGuarantee());
|
|
|
|
|
newUserInstrumentLog.setGuaranteeEndtime(updateEntity.getGuaranteeEndtime());
|
|
|
|
|
newUserInstrumentLog.setBindingStatus(BindingStatusEnums.BINDED.getCode());
|
|
|
|
|
newUserInstrumentLog.setStatus(Status.OK.getCode().longValue());
|
|
|
|
|
newUserInstrumentLog.setCreateBy(wxUserMember.getNickname());
|
|
|
|
|
newUserInstrumentLog.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
wxUserInstrumentLogMapper.insertWxUserInstrumentLog(newUserInstrumentLog);
|
|
|
|
|
}
|
|
|
|
|
}
|