From 77094dd01f0c6ff59b4fb4fa1105addf34b2398c Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 16 六月 2026 18:49:03 +0800
Subject: [PATCH] 新增智能电表、空调管理
---
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 207 +++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 181 insertions(+), 26 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 ad6f19c..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,10 +45,12 @@
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;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
@@ -73,6 +75,7 @@
* @date 2023/11/30 15:33
*/
@Service
+@Slf4j
public class MemberServiceImpl implements MemberService {
@Autowired
@@ -124,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})
@@ -340,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})
@@ -1014,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()
@@ -1762,6 +1778,67 @@
+ /**
+ * 寰俊鎺堟潈鎺ュ彛
+ * @param code
+ * @return
+ */
+ @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();
+ String getTokenUrl = WXConstant.GET_USER_INFO_URL.replace("CODE", code)
+ .replace("APPID", appId).replace("SECRET", appSecret);
+ log.error("=========================getTokenUrl=====================" + getTokenUrl);
+ JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
+ log.error("=========================tokenJson=====================" + tokenJson);
+ String openId = "";
+ if(Objects.nonNull(tokenJson)&&!Objects.isNull(tokenJson.get("access_token"))){
+ openId = tokenJson.getString("openid");
+ }else{
+ if(StringUtils.isBlank(openId)){
+ return new WxAuthorizeVO();
+ }
+ }
+ return buildYwWxAuthorizeVO(openId, userType);
+ }
+
+ private WxAuthorizeVO buildYwWxAuthorizeVO(String openId, Integer userType) {
+ WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
+ wxAuthorizeVO.setOpenid(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)
+ .last(" limit 1 "));
+ if(!Objects.isNull(user)){
+ String token = systemLoginService.loginByUserId(user.getId());
+ wxAuthorizeVO.setToken(token);
+ }
+ return wxAuthorizeVO;
+ }
+
+
+
+
+
@Override
public List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO){
List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
@@ -2118,9 +2195,6 @@
){
throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
- if(StringUtils.isNotBlank(member.getEmail())&&!Constants.validEmail(member.getEmail())){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇峰~鍐欐纭殑email");
- }
LoginUserInfo loginUserInfo = member.getLoginUserInfo();
member.setCreator(loginUserInfo.getId());
member.setCreateDate(new Date());
@@ -2129,6 +2203,7 @@
member.setIsdeleted(Constants.ZERO);
member.setStatus(Constants.ZERO);
this.checkYwMember(member);
+ applyYwMemberIdcard(member);
memberMapper.insert(member);
return member;
}
@@ -2145,52 +2220,120 @@
){
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()));
+ }
}
@Override
public List<Member> ywList(Member member) {
List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>()
- .lambda().eq(Member::getIsdeleted,Constants.ZERO)
+ .lambda()
+ .eq(Member::getIsdeleted,Constants.ZERO)
.eq(Member::getStatus,Constants.ZERO)
+ .eq(Objects.nonNull(member.getCustomerId()),Member::getCustomerId,member.getCustomerId())
.eq(Member::getType,Constants.memberType.customer)
);
return memberList;
}
- 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;
}
@@ -2209,9 +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