From 4bfd0a9d0f6f32078b46454a071e7a4ca9ede650 Mon Sep 17 00:00:00 2001 From: "382696293@qq.com" <382696293@qq.com> Date: Tue, 23 Jan 2024 14:44:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F-=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E4=BB=AA=E5=99=A8=E4=BC=98=E5=8C=96=E5=92=8C=E6=8D=A2=E7=BB=91?= =?UTF-8?q?=E4=BB=AA=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/mapper/WxInstrumentSerialMapper.java | 2 + .../mapper/WxInstrumentSerialMapper.xml | 16 +++ .../controller/WxInstrumenController.java | 18 --- .../controller/WxInstrumentController.java | 22 +++- .../service/IWxInstrumentService.java | 2 + .../service/impl/WxInstrumentServiceImpl.java | 122 +++++++++++++++--- 6 files changed, 143 insertions(+), 39 deletions(-) delete mode 100644 flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumenController.java diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentSerialMapper.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentSerialMapper.java index c2a18fd..41832a7 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentSerialMapper.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxInstrumentSerialMapper.java @@ -75,4 +75,6 @@ public interface WxInstrumentSerialMapper public int updateAll(WxInstrumentSerial wxInstrumentSerial); WxInstrumentSerial selectEntityListBySerial(WxInstrumentSerial wxInstrumentSerial); + + void updateBySerial(WxInstrumentSerial wxInstrumentSerial); } diff --git a/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentSerialMapper.xml b/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentSerialMapper.xml index 1ca595c..7d39cf5 100644 --- a/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentSerialMapper.xml +++ b/flossom-common/flossom-common-core/src/main/resources/mapper/WxInstrumentSerialMapper.xml @@ -107,6 +107,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + update wx_instrument_serial + + instrument_id = #{instrumentId}, + instrument_name = #{instrumentName}, + `source` = #{source}, + binding_status = #{bindingStatus}, + valid_status = #{validStatus}, + status = #{status}, + create_by = #{createBy}, + create_time = #{createTime}, + remark = #{remark}, + + where serial = #{serial} + + update wx_instrument_serial diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumenController.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumenController.java deleted file mode 100644 index 67a46fd..0000000 --- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumenController.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.flossom.miniProgram.controller; - -import com.flossom.common.core.web.controller.BaseController; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 仪器关联正品控产品名Controller - * - * @author flossom - * @date 2024-01-15 - */ -@RestController -@RequestMapping("/instrument") -public class WxInstrumenController extends BaseController { - - -} diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumentController.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumentController.java index ee68547..1677139 100644 --- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumentController.java +++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/controller/WxInstrumentController.java @@ -1,12 +1,16 @@ package com.flossom.miniProgram.controller; import com.flossom.common.core.domain.R; +import com.flossom.common.core.exception.ServiceException; +import com.flossom.common.core.utils.StringUtils; import com.flossom.common.core.web.controller.BaseController; import com.flossom.common.core.web.domain.AjaxResult; import com.flossom.miniProgram.service.IWxInstrumentService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import javax.validation.constraints.NotBlank; /** @@ -25,22 +29,30 @@ public class WxInstrumentController extends BaseController { /** * 根据序列号获取仪器信息 * - * @return 当返回 null 时,需要页面跳转到联系客服 + * @return 当返回 203 时,需要页面跳转到联系客服 */ @GetMapping(value = "/getInstrumentInfoBySerial") - public R getInstrumentInfoBySerial(@RequestParam("serial") @NotBlank(message = "序列号不能为空") String serial) { + public R getInstrumentInfoBySerial(@NotBlank(message = "序列号不能为空") @RequestParam("serial") String serial) { return R.ok(wxInstrumentService.getInstrumentInfoBySerial(serial)); } /** * 用户、序列号与仪器绑定 - * - * @return Boolean: ture 绑定成功,false 绑定失败 */ @GetMapping(value = "/binding") - public R binding(@RequestParam("serial") @NotBlank(message = "序列号不能为空") String serial) { + public R binding(@NotBlank(message = "序列号不能为空") @RequestParam("serial") String serial) { wxInstrumentService.binding(serial); return R.ok(); } + /** + * 换绑 + */ + @GetMapping(value = "/exchangeBinding") + public R exchangeBinding(@NotBlank(message = "序列号不能为空") @RequestParam("serial") String serial) { + wxInstrumentService.exchangeBinding(serial); + return R.ok(); + } + + } diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxInstrumentService.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxInstrumentService.java index b6e9747..2f25be1 100644 --- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxInstrumentService.java +++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/IWxInstrumentService.java @@ -12,4 +12,6 @@ public interface IWxInstrumentService { WxInstrumentSerial getInstrumentInfoBySerial(String serial); void binding(String serial); + + void exchangeBinding(String serial); } diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxInstrumentServiceImpl.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxInstrumentServiceImpl.java index 7432d71..6acfde5 100644 --- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxInstrumentServiceImpl.java +++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/service/impl/WxInstrumentServiceImpl.java @@ -4,6 +4,7 @@ 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; @@ -42,9 +43,6 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { @Autowired private WxUserInstrumentMapper wxUserInstrumentMapper; - @Autowired - private WxInstrumentSerialLogMapper wxInstrumentSerialLogMapper; - @Autowired private WxUserInstrumentLogMapper wxUserInstrumentLogMapper; @@ -58,7 +56,6 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { WxInstrumentSerial wxInstrumentSerial = wxInstrumentSerialMapper.selectEntityListBySerial(query); // 序列号唯一 if (wxInstrumentSerial == null) { - // 根据序列号没有找到对应的数据 logger.info("serial:{}, 没有对应的数据", serial); throw new ServiceReturnCodeException("没有对应的序列号,跳转联系客服", 203); } @@ -86,22 +83,24 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { WxUserInstrument userBindInstrumentQuery = new WxUserInstrument(); userBindInstrumentQuery.setUserId(wxUserMember.getId()); userBindInstrumentQuery.setInstrumentId(wxInstrumentSerial.getInstrumentId()); - userBindInstrumentQuery.setBindingStatus(BindingStatusEnums.BINDED.getCode()); userBindInstrumentQuery.setStatus(Status.OK.getCode().longValue()); List wxUserInstrumentList = wxUserInstrumentMapper.selectListByUserIdAndInstrumentId(userBindInstrumentQuery); // 2.1、当前用户绑定了序列号对应的仪器的序列号 - if (wxUserInstrumentList != null && wxUserInstrumentList.size() > 0) { + 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、判断扫码获取的序列号和用户绑定的序列号是否一致 */ - for (WxUserInstrument userInstrument : wxUserInstrumentList) { - if (StringUtils.equals(userInstrument.getSerial(), serial)) { - // 相同序列号,页面重新发起查询用户拥有的仪器列表 - logger.info("相同序列号,页面重新发起查询用户拥有的仪器列表"); - throw new ServiceReturnCodeException("扫码的序列号已被当前用户绑定,请查询仪器列表", 200); - } + if (StringUtils.equals(wxUserInstrument.getSerial(), serial)) { + logger.info("相同序列号,页面重新发起查询用户拥有的仪器列表"); + throw new ServiceReturnCodeException("扫码的序列号已被当前用户绑定,请查询仪器列表", 200); + } else { + /* 2.1.2、绑定过仪器,但不是同一个序列号,询问是否需要换绑 */ + logger.info("绑定过该类型仪器,但当前扫码不是以前绑定的仪器,询问是否换绑仪器"); + throw new ServiceReturnCodeException("绑定过该类型仪器,但当前扫码不是以前绑定的仪器,询问是否换绑仪器", 202); } - /* 2.1.2、绑定过仪器,但不是同一个序列号,询问是否需要换绑 */ - logger.info("绑定过该类型仪器,但当前扫码不是以前绑定的仪器,询问是否换绑仪器"); - throw new ServiceReturnCodeException("绑定过该类型仪器,但当前扫码不是以前绑定的仪器,询问是否换绑仪器", 202); } // 2.2、用户没有绑定过序列号对应的仪器 else { @@ -113,7 +112,6 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { query.setBindingStatus(BindingStatusEnums.BINDED.getCode()); Integer num = wxUserInstrumentMapper.selectUiByInstrumentId(query); if (num != null && num > 0) { - // 被别人绑定了,页面跳转联系客服 logger.info("被别人绑定了,页面跳转联系客服"); throw new ServiceReturnCodeException("当前序列码被别人绑定了,页面跳转联系客服", 203); } @@ -161,4 +159,96 @@ public class WxInstrumentServiceImpl implements IWxInstrumentService { } } } + + @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 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); + } }