From ea689dd91eaa72425dc01759042c3b4eb2186512 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 17 六月 2026 10:14:44 +0800
Subject: [PATCH] 新增智能电表、空调管理
---
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 160 +++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 135 insertions(+), 25 deletions(-)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index fb15ce1..563d197 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -45,6 +45,7 @@
import com.doumee.dao.web.response.WxAuthorizeVO;
import com.doumee.service.business.MemberService;
import com.doumee.service.business.SmsEmailService;
+import com.doumee.service.business.YwCustomerH5AuthService;
import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
import com.doumee.service.system.SystemLoginService;
@@ -126,12 +127,22 @@
private SmsEmailService smsEmailService;
@Autowired
- private SystemLoginService systemLoginService;
+ private SystemLoginService systemLoginService;
+
+ @Autowired
+ private YwCustomerH5AuthService ywCustomerH5AuthService;
@Value("${debug_model}")
private Boolean isDebug;
+ @Value("${h5.wechat.mock-enabled:false}")
+ private boolean h5WechatMockEnabled;
+ @Value("${h5.wechat.mock-openid:}")
+ private String h5WechatMockOpenid;
+
+ @Value("${h5.wechat.mock-code:DEV_MOCK}")
+ private String h5WechatMockCode;
@Override
@Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -342,6 +353,7 @@
if (StringUtils.isNotBlank(member.getIdcardNo()) && !IdcardUtil.isValidCard(member.getIdcardNo())){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"韬唤璇佸彿鏍煎紡鏈夎");
}
+ // 鍐呴儴鍛樺伐/鍙告満锛氫粎鍦� type=0,2 鑼冨洿鍐呭幓閲嶏紝涓嶄笌鍟嗘埛浜哄憳(type=3)浜掓枼
if(StringUtils.isNotBlank(member.getIdcardNo())){
if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
.in(Member::getType,new Integer[]{Constants.ZERO,Constants.TWO})
@@ -1016,6 +1028,8 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝浜哄憳淇℃伅涓嶅瓨鍦紒");
}
if(model.getCompanyId()!=null) {
+ member.setEditor(member.getLoginUserInfo().getId());
+ member.setEditDate(new Date());
if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){
//濡傛灉鏄彇娑堜富绠�
companyMapper.update(null,new UpdateWrapper<Company>().lambda()
@@ -1771,8 +1785,16 @@
*/
@Override
public WxAuthorizeVO ywWxAuthorize(String code){
+ return ywWxAuthorize(code, LoginUserInfo.H5_USER_OPS);
+ }
+
+ @Override
+ public WxAuthorizeVO ywWxAuthorize(String code, Integer userType){
if(StringUtils.isBlank(code)){
throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ if (h5WechatMockEnabled && StringUtils.equals(code, h5WechatMockCode)) {
+ return buildYwWxAuthorizeVO(StringUtils.trimToEmpty(h5WechatMockOpenid), userType);
}
String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode();
String appSecret = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode();
@@ -1782,16 +1804,26 @@
JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
log.error("=========================tokenJson=====================" + tokenJson);
String openId = "";
- WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
if(Objects.nonNull(tokenJson)&&!Objects.isNull(tokenJson.get("access_token"))){
openId = tokenJson.getString("openid");
}else{
if(StringUtils.isBlank(openId)){
- return wxAuthorizeVO;
+ return new WxAuthorizeVO();
}
}
+ return buildYwWxAuthorizeVO(openId, userType);
+ }
+
+ private WxAuthorizeVO buildYwWxAuthorizeVO(String openId, Integer userType) {
+ WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
wxAuthorizeVO.setOpenid(openId);
- //鏍规嵁openId 鏌ヨ鐢ㄦ埛淇℃伅
+ if(Constants.equalsInteger(userType, LoginUserInfo.H5_USER_CUSTOMER)){
+ String token = ywCustomerH5AuthService.loginByOpenId(openId);
+ if(StringUtils.isNotBlank(token)){
+ wxAuthorizeVO.setToken(token);
+ }
+ return wxAuthorizeVO;
+ }
SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
.eq(SystemUser::getOpenid,openId)
.eq(SystemUser::getDeleted,Boolean.FALSE)
@@ -2171,6 +2203,7 @@
member.setIsdeleted(Constants.ZERO);
member.setStatus(Constants.ZERO);
this.checkYwMember(member);
+ applyYwMemberIdcard(member);
memberMapper.insert(member);
return member;
}
@@ -2187,17 +2220,69 @@
){
throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
+ Member existing = memberMapper.selectById(member.getId());
+ if (existing == null || Constants.equalsInteger(existing.getIsdeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "浜哄憳淇℃伅涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯");
+ }
LoginUserInfo loginUserInfo = member.getLoginUserInfo();
member.setEditor(loginUserInfo.getId());
member.setCustomerId(null);
member.setEditDate(new Date());
member.setType(Constants.memberType.customer);
- member.setStatus(Constants.ZERO);
- member.setIsdeleted(Constants.ZERO);
- member.setStatus(Constants.ZERO);
this.checkYwMember(member);
+ if (StringUtils.isNotBlank(member.getIdcardNoNew())) {
+ applyYwMemberIdcardChange(member, existing);
+ } else {
+ member.setIdcardNo(existing.getIdcardNo());
+ member.setIdcardDecode(existing.getIdcardDecode());
+ }
+ member.setIdcardNoNew(null);
memberMapper.updateById(member);
return member;
+ }
+
+ /** 鏂板缓锛氭槑鏂囪瘉浠跺彿鍐欏叆 idcard_no(鍔犲瘑) + idcard_decode(鑴辨晱) */
+ private void applyYwMemberIdcard(Member member) {
+ if (StringUtils.isBlank(member.getIdcardNo())) {
+ return;
+ }
+ String plain = member.getIdcardNo().trim();
+ if (Constants.equalsInteger(member.getIdcardType(), Constants.ZERO)) {
+ member.setSex(Constants.getSexByCardNo(plain));
+ member.setBirthday(DateUtil.fromStringToDate("yyyyMMdd", IdcardUtil.getBirthByIdCard(plain)));
+ }
+ member.setIdcardDecode(Constants.getTuominStr(plain));
+ member.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, plain));
+ }
+
+ /** 缂栬緫锛氶�氳繃 idcardNoNew 鍙樻洿璇佷欢鍙� */
+ private void applyYwMemberIdcardChange(Member member, Member existing) {
+ String plain = member.getIdcardNoNew().trim();
+ String encrypted = DESUtil.encrypt(Constants.EDS_PWD, plain);
+ if (StringUtils.equals(existing.getIdcardNo(), encrypted)) {
+ return;
+ }
+ if (Constants.equalsInteger(member.getIdcardType(), Constants.ZERO)) {
+ member.setSex(Constants.getSexByCardNo(plain));
+ member.setBirthday(DateUtil.fromStringToDate("yyyyMMdd", IdcardUtil.getBirthByIdCard(plain)));
+ }
+ member.setIdcardDecode(Constants.getTuominStr(plain));
+ member.setIdcardNo(encrypted);
+ }
+
+ /** 鍒楄〃灞曠ず锛氳ˉ鍏� idcard_decode */
+ private void fillMemberIdcardDecode(Member member) {
+ if (StringUtils.isNotBlank(member.getIdcardDecode()) || StringUtils.isBlank(member.getIdcardNo())) {
+ return;
+ }
+ try {
+ String plain = DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo());
+ if (StringUtils.isNotBlank(plain)) {
+ member.setIdcardDecode(Constants.getTuominStr(plain));
+ }
+ } catch (Exception e) {
+ member.setIdcardDecode(Constants.getTuominStr(member.getIdcardNo()));
+ }
}
@@ -2214,27 +2299,41 @@
}
- public void checkYwMember(Member member){
- if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){
- throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢佃瘽鍙风爜鏍煎紡鏈夎");
+ public void checkYwMember(Member member) {
+ if (StringUtils.isBlank(member.getPhone()) || !PhoneUtil.isPhone(member.getPhone())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢佃瘽鍙风爜鏍煎紡鏈夎");
}
- if (StringUtils.isNotBlank(member.getIdcardNo()) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO) && !IdcardUtil.isValidCard(member.getIdcardNo())){
- throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"韬唤璇佸彿鏍煎紡鏈夎");
+ if (memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+ .ne(Objects.nonNull(member.getId()), Member::getId, member.getId())
+ .eq(Member::getPhone, member.getPhone())
+ .eq(Member::getType, Constants.memberType.customer)
+ .eq(Member::getIsdeleted, Constants.ZERO)) > Constants.ZERO) {
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��" + member.getPhone() + "銆戝凡琚娇鐢紝涓嶈兘閲嶅");
}
- if(StringUtils.isNotBlank(member.getIdcardNo() ) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO) ){
- if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
- .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
- .eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, member.getIdcardNo()))
- .eq(Member::getIsdeleted,Constants.ZERO)) >0){
- throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "韬唤璇佸彿銆�"+member.getIdcardNo()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+ String plainIdcard = resolveYwPlainIdcard(member);
+ if (StringUtils.isNotBlank(plainIdcard)) {
+ if (Constants.equalsInteger(member.getIdcardType(), Constants.ZERO) && !IdcardUtil.isValidCard(plainIdcard)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "韬唤璇佸彿鏍煎紡鏈夎");
+ }
+ String encrypted = DESUtil.encrypt(Constants.EDS_PWD, plainIdcard);
+ if (memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+ .ne(Objects.nonNull(member.getId()), Member::getId, member.getId())
+ .eq(Member::getType, Constants.memberType.customer)
+ .eq(Member::getIsdeleted, Constants.ZERO)
+ .eq(Member::getIdcardNo, encrypted)) > Constants.ZERO) {
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "璇佷欢鍙枫��" + plainIdcard + "銆戝凡琚娇鐢紝涓嶈兘閲嶅");
}
}
- if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
- .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
- .eq(Member::getPhone, member.getPhone())
- .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
- throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+ }
+
+ private String resolveYwPlainIdcard(Member member) {
+ if (StringUtils.isNotBlank(member.getIdcardNoNew())) {
+ return member.getIdcardNoNew().trim();
}
+ if (member.getId() == null && StringUtils.isNotBlank(member.getIdcardNo())) {
+ return member.getIdcardNo().trim();
+ }
+ return null;
}
@@ -2253,10 +2352,21 @@
.eq(Objects.nonNull(model)&&Objects.nonNull(model.getCustomerId()),Member::getCustomerId,model.getCustomerId())
.and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(Member::getName,model.getName()).or().like(
Member::getPhone,model.getName()
- ))
+ ).or().like(Member::getIdcardDecode, model.getName()))
+ .and(Objects.nonNull(model) && StringUtils.isNotBlank(model.getIdcardNo()), w -> {
+ String idcard = model.getIdcardNo().trim();
+ w.eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, idcard))
+ .or().like(Member::getIdcardDecode, idcard);
+ })
.orderByDesc(Member::getCreateDate)
);
- return PageData.from(iPage);
+ PageData<Member> pageData = PageData.from(iPage);
+ if (pageData.getRecords() != null) {
+ for (Member item : pageData.getRecords()) {
+ fillMemberIdcardDecode(item);
+ }
+ }
+ return pageData;
}
}
--
Gitblit v1.9.3