微信登录功能优化 app端接口迁移至新项目

master
LI-CCONG\李聪聪 8 months ago
parent 3ea21f73b4
commit 6f8c99ef86

@ -238,7 +238,8 @@ export function login(data) {
// 微信手机号登录 // 微信手机号登录
export function loginWxMinAPI(data) { export function loginWxMinAPI(data) {
return request({ return request({
url: '/api/scm/wx/hsyGetPhone', // url: '/api/scm/wx/hsyGetPhone',
url: '/common/login',
method: 'post', method: 'post',
data data
}) })

@ -1,13 +1,12 @@
{ {
"name": "jnpf-app-next",
"version": "1.0.0", "version": "1.0.0",
"lockfileVersion": 2, "lockfileVersion": 1,
"requires": true, "requires": true,
"packages": { "dependencies": {
"": { "crypto-js": {
"name": "jnpf-app-next", "version": "4.2.0",
"version": "1.0.0", "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
"license": "ISC" "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
} }
} }
} }

@ -15,4 +15,4 @@
"extensions": { "extensions": {
"uni-cloud-push": {} "uni-cloud-push": {}
} }
} }

@ -2,7 +2,7 @@
/*JAVA app.java.jnpfsoft.com NET dotnet.jnpfsoft.com*/ /*JAVA app.java.jnpfsoft.com NET dotnet.jnpfsoft.com*/
// #ifndef MP // #ifndef MP
const baseURL = process.env.NODE_ENV === "production" ? const baseURL = process.env.NODE_ENV === "production" ?
"https://app.java.jnpfsoft.com" : "http://192.168.0.96:30000" // 接口前缀 "https://app.java.jnpfsoft.com" : "http://localhost:30000" // 接口前缀
const define = { const define = {
copyright: "©2020-2025 上海长江电气设备集团有限公司", copyright: "©2020-2025 上海长江电气设备集团有限公司",
sysVersion: "V3.5", sysVersion: "V3.5",
@ -16,7 +16,7 @@ const define = {
// #endif // #endif
// #ifdef MP // #ifdef MP
const baseURL = "http://192.168.0.96:30000" // "https://app.java.jnpfsoft.com" const baseURL = "http://localhost:8808" // "https://app.java.jnpfsoft.com"
const define = { const define = {
copyright: "©2020-2025 上海长江电气设备集团有限公司", copyright: "©2020-2025 上海长江电气设备集团有限公司",
sysVersion: "V3.5", sysVersion: "V3.5",

@ -70,9 +70,11 @@ spring:
# redis单机模式 # redis单机模式
redis: redis:
database: 0 #缓存库编号 database: 0 #缓存库编号
host: 222.71.165.188 # host: 222.71.165.188
host: 127.0.0.1
port: 6379 port: 6379
password: qweasd,.123 # 密码为空时,请将本行注释 # password: qweasd,.123 # 密码为空时,请将本行注释
password: 123456 # 密码为空时,请将本行注释
timeout: 3000 #超时时间(单位:秒) timeout: 3000 #超时时间(单位:秒)
lettuce: #Lettuce为Redis的Java驱动包 lettuce: #Lettuce为Redis的Java驱动包
pool: pool:
@ -233,8 +235,6 @@ xxl:
# ===================== 微信小程序配置 ===================== # ===================== 微信小程序配置 =====================
wx: wx:
code2Session: https://api.weixin.qq.com/sns/jscode2session
checkSession: https://api.weixin.qq.com/wxa/checksession
# 回收员端 # 回收员端
huishouyuan: huishouyuan:
appid: wxf82bcc798891a29d appid: wxf82bcc798891a29d

@ -104,6 +104,9 @@ gateway:
# 放行接口(不记录日志) # 放行接口(不记录日志)
- /api/scm/wx/hsyLogin - /api/scm/wx/hsyLogin
- /api/scm/wx/hsyGetPhone - /api/scm/wx/hsyGetPhone
- /api/scm/login/hsyLogin
- /api/scm/login/test
- /api/scm/Client/test
exclude-url: exclude-url:
# # 配置示例 # # 配置示例
#- /api/message/Notice #- /api/message/Notice

@ -43,6 +43,7 @@ import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -471,6 +472,23 @@ public class UserServiceImpl extends SuperServiceImpl<UserMapper, UserEntity> im
return true; return true;
} }
@Override
@Transactional
public void insert(UserEntity entity) throws Exception {
entity.setPassword("123456");
if (StringUtil.isEmpty(entity.getAccount())) {
throw new DataException("账号不能为空");
}
entity.setSecretkey(RandomUtil.uuId());
entity.setPassword(Md5Util.getStringMd5(entity.getPassword().toLowerCase() + entity.getSecretkey().toLowerCase()));
entity.setIsAdministrator(0);
entity.setCreatorUserId("349057407209541"); // 创建者: admin
entity.setOrganizeId("532165739403018373"); // 组织: app移动端
entity.setRoleId("532181982466015365"); // 角色: app前台专用
saveOrUpdateCommon(entity.getId(), entity);
this.save(entity);
}
@Override @Override
@DSTransactional @DSTransactional
public Boolean update(String userId, UserEntity entity) throws Exception { public Boolean update(String userId, UserEntity entity) throws Exception {

@ -168,6 +168,14 @@ public interface UserService extends SuperService<UserEntity> {
*/ */
Boolean create(UserEntity entity) throws Exception; Boolean create(UserEntity entity) throws Exception;
/**
*
*
* @param entity
*/
void insert(UserEntity entity) throws Exception;
/** /**
* *
* *

@ -0,0 +1,16 @@
package jnpf.mapper;
import jnpf.entity.UserBindEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* nx_user_bind
* V3.5
* https://www.jnpfsoft.com
* JNPF
* 2024-02-27
*/
public interface UserBindMapper extends BaseMapper<UserBindEntity> {
}

@ -5,6 +5,7 @@ import jnpf.entity.*;
import java.util.*; import java.util.*;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jnpf.permission.entity.UserEntity;
/** /**
* RecycleStationStaff * RecycleStationStaff
@ -20,6 +21,8 @@ public interface RecycleStationStaffService extends IService<RecycleStationStaff
RecycleStationStaffEntity getInfo(String id); RecycleStationStaffEntity getInfo(String id);
RecycleStationStaffEntity getInfoByOpenId(String openId);
void delete(RecycleStationStaffEntity entity); void delete(RecycleStationStaffEntity entity);
void create(RecycleStationStaffEntity entity); void create(RecycleStationStaffEntity entity);
@ -32,4 +35,6 @@ public interface RecycleStationStaffService extends IService<RecycleStationStaff
void saveOrUpdate(RecycleStationStaffForm recycleStationStaffForm,String id, boolean isSave) throws Exception; void saveOrUpdate(RecycleStationStaffForm recycleStationStaffForm,String id, boolean isSave) throws Exception;
// 注册回收员
UserEntity registerUser(RecycleStationStaffEntity hsyUserInfo) throws Exception;
} }

@ -0,0 +1,37 @@
package jnpf.service;
import jnpf.model.userbind.*;
import jnpf.entity.*;
import java.util.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
/**
* nx_user_bind
* V3.5
* https://www.jnpfsoft.com
* JNPF
* 2024-02-27
*/
public interface UserBindService extends IService<UserBindEntity> {
List<UserBindEntity> getList(UserBindPagination userBindPagination);
List<UserBindEntity> getTypeList(UserBindPagination userBindPagination,String dataType);
UserBindEntity getInfo(String id);
UserBindEntity getInfoByOpenId(String openId);
void delete(UserBindEntity entity);
void create(UserBindEntity entity);
boolean update(String id, UserBindEntity entity);
//子表方法
//副表数据方法
String checkForm(UserBindForm form,int i);
void saveOrUpdate(UserBindForm userBindForm,String id, boolean isSave) throws Exception;
}

@ -2,6 +2,7 @@ package jnpf.service.impl;
import jnpf.entity.*; import jnpf.entity.*;
import jnpf.mapper.RecycleStationStaffMapper; import jnpf.mapper.RecycleStationStaffMapper;
import jnpf.permission.service.UserService;
import jnpf.service.*; import jnpf.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.model.recyclestationstaff.*; import jnpf.model.recyclestationstaff.*;
@ -30,6 +31,9 @@ import jnpf.util.*;
import java.util.*; import java.util.*;
import jnpf.base.UserInfo; import jnpf.base.UserInfo;
import jnpf.permission.entity.UserEntity; import jnpf.permission.entity.UserEntity;
import javax.annotation.Resource;
/** /**
* *
* RecycleStationStaff * RecycleStationStaff
@ -46,6 +50,15 @@ public class RecycleStationStaffServiceImpl extends ServiceImpl<RecycleStationSt
@Autowired @Autowired
private UserProvider userProvider; private UserProvider userProvider;
@Resource
private RecycleStationStaffService hsyUserService;
@Resource
private UserService userService;
@Resource
private UserBindService userBindService;
@Override @Override
public List<RecycleStationStaffEntity> getList(RecycleStationStaffPagination recycleStationStaffPagination){ public List<RecycleStationStaffEntity> getList(RecycleStationStaffPagination recycleStationStaffPagination){
return getTypeList(recycleStationStaffPagination,recycleStationStaffPagination.getDataType()); return getTypeList(recycleStationStaffPagination,recycleStationStaffPagination.getDataType());
@ -248,12 +261,21 @@ public class RecycleStationStaffServiceImpl extends ServiceImpl<RecycleStationSt
return this.list(recycleStationStaffQueryWrapper); return this.list(recycleStationStaffQueryWrapper);
} }
} }
@Override @Override
public RecycleStationStaffEntity getInfo(String id){ public RecycleStationStaffEntity getInfo(String id){
QueryWrapper<RecycleStationStaffEntity> queryWrapper=new QueryWrapper<>(); QueryWrapper<RecycleStationStaffEntity> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(RecycleStationStaffEntity::getId,id); queryWrapper.lambda().eq(RecycleStationStaffEntity::getId,id);
return this.getOne(queryWrapper); return this.getOne(queryWrapper);
} }
@Override
public RecycleStationStaffEntity getInfoByOpenId(String openId){
QueryWrapper<RecycleStationStaffEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(RecycleStationStaffEntity::getOpenid,openId);
return this.getOne(queryWrapper);
}
@Override @Override
public void create(RecycleStationStaffEntity entity){ public void create(RecycleStationStaffEntity entity){
this.save(entity); this.save(entity);
@ -309,4 +331,32 @@ public class RecycleStationStaffServiceImpl extends ServiceImpl<RecycleStationSt
this.saveOrUpdate(entity); this.saveOrUpdate(entity);
} }
/**
*
* @param hsyUserInfo
*/
@Override
@Transactional(rollbackFor = Exception.class)
public UserEntity registerUser(RecycleStationStaffEntity hsyUserInfo) throws Exception {
// 添加回收员
hsyUserService.create(hsyUserInfo);
String hsyId = hsyUserInfo.getId();
String adminId = RandomUtil.uuId();
String phoneNumber = hsyUserInfo.getMobilePhone();
// 添加后台用户
UserEntity userEntity = new UserEntity();
userEntity.setId(adminId);
userEntity.setAccount(phoneNumber);
userEntity.setMobilePhone(phoneNumber);
userService.insert(userEntity);
// 添加前后台数据绑定关系
UserBindEntity userBindEntity = new UserBindEntity();
userBindEntity.setUserId(hsyId);
userBindEntity.setAdminId(adminId);
userBindEntity.setOpenId(hsyUserInfo.getOpenid());
userBindEntity.setUserType(1); // 回收员
userBindService.create(userBindEntity);
return userEntity;
}
} }

@ -0,0 +1,314 @@
package jnpf.service.impl;
import jnpf.entity.*;
import jnpf.mapper.UserBindMapper;
import jnpf.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.model.userbind.*;
import java.math.BigDecimal;
import cn.hutool.core.util.ObjectUtil;
import jnpf.permission.model.authorize.AuthorizeConditionModel;
import jnpf.util.GeneraterSwapUtil;
import jnpf.database.model.superQuery.SuperQueryJsonModel;
import jnpf.database.model.superQuery.ConditionJsonModel;
import jnpf.database.model.superQuery.SuperQueryConditionModel;
import java.lang.reflect.Field;
import com.baomidou.mybatisplus.annotation.TableField;
import java.util.regex.Pattern;
import jnpf.model.QueryModel;
import java.util.stream.Collectors;
import jnpf.base.model.ColumnDataModel;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jnpf.database.model.superQuery.SuperJsonModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.text.SimpleDateFormat;
import jnpf.util.*;
import java.util.*;
import jnpf.base.UserInfo;
import jnpf.permission.entity.UserEntity;
/**
*
* nx_user_bind
* V3.5
* https://www.jnpfsoft.com
* JNPF
* 2024-02-27
*/
@Service
public class UserBindServiceImpl extends ServiceImpl<UserBindMapper, UserBindEntity> implements UserBindService{
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@Autowired
private UserProvider userProvider;
@Override
public List<UserBindEntity> getList(UserBindPagination userBindPagination){
return getTypeList(userBindPagination,userBindPagination.getDataType());
}
/** 列表查询 */
@Override
public List<UserBindEntity> getTypeList(UserBindPagination userBindPagination,String dataType){
String userId=userProvider.get().getUserId();
List<String> AllIdList =new ArrayList();
List<List<String>> intersectionList =new ArrayList<>();
boolean isPc = ServletUtil.getHeader("jnpf-origin").equals("pc");
String columnData = !isPc ? UserBindConstant.getAppColumnData() : UserBindConstant.getColumnData();
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(columnData, ColumnDataModel.class);
String ruleJson = !isPc ? JsonUtil.getObjectToString(columnDataModel.getRuleListApp()) : JsonUtil.getObjectToString(columnDataModel.getRuleList());
int total=0;
int userBindNum =0;
QueryWrapper<UserBindEntity> userBindQueryWrapper=new QueryWrapper<>();
List<String> allSuperIDlist = new ArrayList<>();
String superOp ="";
if (ObjectUtil.isNotEmpty(userBindPagination.getSuperQueryJson())){
List<String> allSuperList = new ArrayList<>();
List<List<String>> intersectionSuperList = new ArrayList<>();
String queryJson = userBindPagination.getSuperQueryJson();
SuperJsonModel superJsonModel = JsonUtil.getJsonToBean(queryJson, SuperJsonModel.class);
int superNum = 0;
QueryWrapper<UserBindEntity> userBindSuperWrapper = new QueryWrapper<>();
userBindSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(userBindSuperWrapper,UserBindEntity.class,queryJson,"0"));
int userBindNum1 = userBindSuperWrapper.getExpression().getNormal().size();
if (userBindNum1>0){
List<String> userBindList =this.list(userBindSuperWrapper).stream().map(UserBindEntity::getId).collect(Collectors.toList());
allSuperList.addAll(userBindList);
intersectionSuperList.add(userBindList);
superNum++;
}
superOp = superNum > 0 ? superJsonModel.getMatchLogic() : "";
//and or
if(superOp.equalsIgnoreCase("and")){
allSuperIDlist = generaterSwapUtil.getIntersection(intersectionSuperList);
}else{
allSuperIDlist = allSuperList;
}
}
List<String> allRuleIDlist = new ArrayList<>();
String ruleOp ="";
if (ObjectUtil.isNotEmpty(ruleJson)){
List<String> allRuleList = new ArrayList<>();
List<List<String>> intersectionRuleList = new ArrayList<>();
SuperJsonModel ruleJsonModel = JsonUtil.getJsonToBean(ruleJson, SuperJsonModel.class);
int ruleNum = 0;
QueryWrapper<UserBindEntity> userBindSuperWrapper = new QueryWrapper<>();
userBindSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(userBindSuperWrapper,UserBindEntity.class,ruleJson,"0"));
int userBindNum1 = userBindSuperWrapper.getExpression().getNormal().size();
if (userBindNum1>0){
List<String> userBindList =this.list(userBindSuperWrapper).stream().map(UserBindEntity::getId).collect(Collectors.toList());
allRuleList.addAll(userBindList);
intersectionRuleList.add(userBindList);
ruleNum++;
}
ruleOp = ruleNum > 0 ? ruleJsonModel.getMatchLogic() : "";
//and or
if(ruleOp.equalsIgnoreCase("and")){
allRuleIDlist = generaterSwapUtil.getIntersection(intersectionRuleList);
}else{
allRuleIDlist = allRuleList;
}
}
boolean pcPermission = false;
boolean appPermission = false;
if(isPc && pcPermission){
if (!userProvider.get().getIsAdministrator()){
Object userBindObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(userBindQueryWrapper,UserBindEntity.class,userBindPagination.getMenuId(),"0"));
if (ObjectUtil.isEmpty(userBindObj)){
return new ArrayList<>();
} else {
userBindQueryWrapper = (QueryWrapper<UserBindEntity>)userBindObj;
if( userBindQueryWrapper.getExpression().getNormal().size()>0){
userBindNum++;
}
}
}
}
if(!isPc && appPermission){
if (!userProvider.get().getIsAdministrator()){
Object userBindObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(userBindQueryWrapper,UserBindEntity.class,userBindPagination.getMenuId(),"0"));
if (ObjectUtil.isEmpty(userBindObj)){
return new ArrayList<>();
} else {
userBindQueryWrapper = (QueryWrapper<UserBindEntity>)userBindObj;
if( userBindQueryWrapper.getExpression().getNormal().size()>0){
userBindNum++;
}
}
}
}
if(isPc){
if(ObjectUtil.isNotEmpty(userBindPagination.getAdminId())){
userBindNum++;
String value = userBindPagination.getAdminId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getAdminId()) :
String.valueOf(userBindPagination.getAdminId());
userBindQueryWrapper.lambda().like(UserBindEntity::getAdminId,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getOpenId())){
userBindNum++;
String value = userBindPagination.getOpenId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getOpenId()) :
String.valueOf(userBindPagination.getOpenId());
userBindQueryWrapper.lambda().like(UserBindEntity::getOpenId,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getCreatorUserId())){
userBindNum++;
String value = userBindPagination.getCreatorUserId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getCreatorUserId()) :
String.valueOf(userBindPagination.getCreatorUserId());
userBindQueryWrapper.lambda().like(UserBindEntity::getCreatorUserId,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getCreatorTime())){
userBindNum++;
String value = userBindPagination.getCreatorTime() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getCreatorTime()) :
String.valueOf(userBindPagination.getCreatorTime());
userBindQueryWrapper.lambda().like(UserBindEntity::getCreatorTime,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getUserId())){
userBindNum++;
String value = userBindPagination.getUserId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getUserId()) :
String.valueOf(userBindPagination.getUserId());
userBindQueryWrapper.lambda().like(UserBindEntity::getUserId,value);
}
}
List<String> intersection = generaterSwapUtil.getIntersection(intersectionList);
if (total>0){
if (intersection.size()==0){
intersection.add("jnpfNullList");
}
userBindQueryWrapper.lambda().in(UserBindEntity::getId, intersection);
}
//是否有高级查询
if (StringUtil.isNotEmpty(superOp)){
if (allSuperIDlist.size()==0){
allSuperIDlist.add("jnpfNullList");
}
List<String> finalAllSuperIDlist = allSuperIDlist;
userBindQueryWrapper.lambda().and(t->t.in(UserBindEntity::getId, finalAllSuperIDlist));
}
//是否有数据过滤查询
if (StringUtil.isNotEmpty(ruleOp)){
if (allRuleIDlist.size()==0){
allRuleIDlist.add("jnpfNullList");
}
List<String> finalAllRuleIDlist = allRuleIDlist;
userBindQueryWrapper.lambda().and(t->t.in(UserBindEntity::getId, finalAllRuleIDlist));
}
//排序
if(StringUtil.isEmpty(userBindPagination.getSidx())){
userBindQueryWrapper.lambda().orderByDesc(UserBindEntity::getId);
}else{
try {
String sidx = userBindPagination.getSidx();
String[] strs= sidx.split("_name");
UserBindEntity userBindEntity = new UserBindEntity();
Field declaredField = userBindEntity.getClass().getDeclaredField(strs[0]);
declaredField.setAccessible(true);
String value = declaredField.getAnnotation(TableField.class).value();
userBindQueryWrapper="asc".equals(userBindPagination.getSort().toLowerCase())?userBindQueryWrapper.orderByAsc(value):userBindQueryWrapper.orderByDesc(value);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
if("0".equals(dataType)){
if((total>0 && AllIdList.size()>0) || total==0){
Page<UserBindEntity> page=new Page<>(userBindPagination.getCurrentPage(), userBindPagination.getPageSize());
IPage<UserBindEntity> userIPage=this.page(page, userBindQueryWrapper);
return userBindPagination.setData(userIPage.getRecords(),userIPage.getTotal());
}else{
List<UserBindEntity> list = new ArrayList();
return userBindPagination.setData(list, list.size());
}
}else{
return this.list(userBindQueryWrapper);
}
}
@Override
public UserBindEntity getInfo(String id){
QueryWrapper<UserBindEntity> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(UserBindEntity::getId,id);
return this.getOne(queryWrapper);
}
@Override
public UserBindEntity getInfoByOpenId(String openId){
QueryWrapper<UserBindEntity> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(UserBindEntity::getOpenId,openId);
return this.getOne(queryWrapper);
}
@Override
public void create(UserBindEntity entity){
this.save(entity);
}
@Override
public boolean update(String id, UserBindEntity entity){
return this.updateById(entity);
}
@Override
public void delete(UserBindEntity entity){
if(entity!=null){
this.removeById(entity.getId());
}
}
/** 验证表单唯一字段,正则,非空 i-0新增-1修改*/
@Override
public String checkForm(UserBindForm form,int i) {
boolean isUp =StringUtil.isNotEmpty(form.getId()) && !form.getId().equals("0");
String id="";
String countRecover = "";
if (isUp){
id = form.getId();
}
//主表字段验证
return countRecover;
}
/**
* ()
* @param id
* @param userBindForm
* @return
*/
@Override
@Transactional
public void saveOrUpdate(UserBindForm userBindForm,String id, boolean isSave) throws Exception{
UserInfo userInfo=userProvider.get();
UserEntity userEntity = generaterSwapUtil.getUser(userInfo.getUserId());
userBindForm = JsonUtil.getJsonToBean(
generaterSwapUtil.swapDatetime(UserBindConstant.getFormData(),userBindForm),UserBindForm.class);
UserBindEntity entity = JsonUtil.getJsonToBean(userBindForm, UserBindEntity.class);
if(isSave){
String mainId = RandomUtil.uuId() ;
entity.setId(mainId);
}else{
}
this.saveOrUpdate(entity);
}
}

@ -0,0 +1,17 @@
package jnpf.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
*
*/
@Data
@Component
@ConfigurationProperties(prefix = "wx.huishouyuan")
public class WxHsyProperties {
private String appId;
private String appSecret;
}

@ -0,0 +1,118 @@
package jnpf.controller;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jnpf.base.ActionResult;
import jnpf.config.WxHsyProperties;
import jnpf.entity.RecycleStationStaffEntity;
import jnpf.entity.UserBindEntity;
import jnpf.exception.LoginException;
import jnpf.model.LoginVO;
import jnpf.model.weixin.SimpleUserInfoVO;
import jnpf.model.weixin.WxLoginParam;
import jnpf.permission.entity.UserEntity;
import jnpf.permission.service.UserService;
import jnpf.service.AuthService;
import jnpf.service.RecycleStationStaffService;
import jnpf.service.UserBindService;
import jnpf.util.wxutil.HttpUtil;
import jnpf.utils.WeChatUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@RestController
@Tag(name = "Login" , description = "小程序登录业务")
@RequestMapping("/api/scm/login")
public class AppLoginController {
@Resource
private WxHsyProperties wxHsyProperties;
private final String code2SessionUrl = "https://api.weixin.qq.com/sns/jscode2session";
private final String checkSessionUrl = "https://api.weixin.qq.com/wxa/checksession";
@Resource
private RecycleStationStaffService hsyUserService;
@Resource
private UserService userService;
@Resource
private UserBindService userBindService;
@Resource
private AuthService authService;
@Operation(summary = "小程序登录/注册-回收员端")
@PostMapping("/hsyLogin")
public ActionResult hsyLogin(@RequestBody WxLoginParam params) throws Exception {
log.info("login request body{}", params);
String url = code2SessionUrl +"?appid=" + wxHsyProperties.getAppId() +
"&secret="+ wxHsyProperties.getAppSecret() +
"&js_code=" + params.getCode() +
"&grant_type=authorization_code";
String loginResult = HttpUtil.sendHttpGet(url);
log.info("wx code2Session return {}", loginResult);
JSONObject loginResultObject = JSONObject.parseObject(loginResult);
if (loginResultObject == null) {
throw new LoginException("微信认证接口请求失败");
}
if (StringUtils.contains(loginResult, "errcode")) {
return ActionResult.fail("code认证码无效");
}
String openId = loginResultObject.getString("openid");
String sessionKey = loginResultObject.getString("session_key");
// String unionId = loginResultObject.getString("unionid");
// 根据openId查找回收员
RecycleStationStaffEntity hsyUserInfo = hsyUserService.getInfoByOpenId(openId);
UserEntity userEntity;
if (hsyUserInfo == null) {
// 回收员不存在则进行解密得到用户信息,则注册
String userInfo = WeChatUtil.decryptData(params.getEncryptedData(), sessionKey, params.getIv());
if (StringUtils.isEmpty(userInfo)) {
throw new LoginException("解密用户信息错误");
}
JSONObject userObject = JSONObject.parseObject(userInfo);
String phoneNumber = userObject.getString("phoneNumber");
hsyUserInfo = new RecycleStationStaffEntity();
hsyUserInfo.setMobilePhone(phoneNumber);
hsyUserInfo.setStaffsName(phoneNumber);
hsyUserInfo.setOpenid(openId);
userEntity = hsyUserService.registerUser(hsyUserInfo);
} else {
UserBindEntity userBindEntity = userBindService.getInfoByOpenId(hsyUserInfo.getOpenid());
if (ObjectUtil.isEmpty(userBindEntity)) {
throw new LoginException("openid未绑定");
}
userEntity = userService.getInfo(userBindEntity.getAdminId());
if (ObjectUtil.isEmpty(userEntity)) {
throw new LoginException("用户绑定信息不存在");
}
}
// 执行登录逻辑
Map<String, String> map = new HashMap<>();
map.put("account", userEntity.getAccount());
map.put("password", "123456");
map.put("grant_type", "password");
String token = "";
try {
ActionResult<LoginVO> loginVOActionResult = authService.login(map);
token = loginVOActionResult.getData().getToken();
} catch (LoginException e) {
throw new RuntimeException("登录失败,请联系管理员");
}
SimpleUserInfoVO userInfoVO = new SimpleUserInfoVO();
userInfoVO.setToken(token);
userInfoVO.setHsyUserInfo(hsyUserInfo);
return ActionResult.success(userInfoVO);
}
}

@ -52,7 +52,6 @@ public class ClientController {
private ClientService clientService; private ClientService clientService;
/** /**
* *
* *

@ -12,11 +12,11 @@ import jnpf.entity.RecycleStationStaffEntity;
import jnpf.exception.LoginException; import jnpf.exception.LoginException;
import jnpf.model.LoginVO; import jnpf.model.LoginVO;
import jnpf.model.wx.AuthUserDto; import jnpf.model.wx.AuthUserDto;
import jnpf.model.wx.WeChatUtil;
import jnpf.model.wx.WxCheckSession; import jnpf.model.wx.WxCheckSession;
import jnpf.service.AuthService; import jnpf.service.AuthService;
import jnpf.service.RecycleStationStaffService; import jnpf.service.RecycleStationStaffService;
import jnpf.util.wxutil.HttpUtil; import jnpf.util.wxutil.HttpUtil;
import jnpf.utils.WeChatUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -35,8 +35,8 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
@RestController //@RestController
@Tag(name = "Wexin" , description = "scm") @Tag(name = "Weixin" , description = "scm")
@RequestMapping("/api/scm/wx") @RequestMapping("/api/scm/wx")
public class WxController { public class WxController {
@ -48,9 +48,9 @@ public class WxController {
private String code2Session; private String code2Session;
@Value("${wx.checkSession}") @Value("${wx.checkSession}")
private String checkSession; private String checkSession;
@Autowired // @Autowired
private RecycleStationStaffService recycleStationStaffService; private RecycleStationStaffService recycleStationStaffService;
@Autowired // @Autowired
private AuthService authService; private AuthService authService;
@Operation(summary = "小程序登录-回收员端") @Operation(summary = "小程序登录-回收员端")
@ -63,7 +63,7 @@ public class WxController {
@Operation(summary = "小程序获取绑定的手机号-回收员端") @Operation(summary = "小程序获取绑定的手机号-回收员端")
@PostMapping(value = "/hsyGetPhone") @PostMapping(value = "/hsyGetPhone")
public ActionResult login(@RequestBody AuthUserDto authUserDto, HttpServletRequest request) { public ActionResult bindPhone(@RequestBody AuthUserDto authUserDto, HttpServletRequest request) {
//String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + appsecret + "&js_code=" + authUserDto.getCode() + "&grant_type=authorization_code"; //String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + appsecret + "&js_code=" + authUserDto.getCode() + "&grant_type=authorization_code";
String url = code2Session+"?appid="+appid+"&secret="+appsecret+"&js_code="+authUserDto.getCode()+"&grant_type=authorization_code"; String url = code2Session+"?appid="+appid+"&secret="+appsecret+"&js_code="+authUserDto.getCode()+"&grant_type=authorization_code";
String loginResult = HttpUtil.sendHttpGet(url); String loginResult = HttpUtil.sendHttpGet(url);

@ -1,8 +1,9 @@
package jnpf.model.wx; package jnpf.utils;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;

@ -0,0 +1,33 @@
package jnpf.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
/**
*
*
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-02-27
*/
@Data
@TableName("nx_user_bind")
public class UserBindEntity {
@TableId(value ="ID")
private String id;
@TableField(value = "USER_ID" , updateStrategy = FieldStrategy.IGNORED)
private String userId;
@TableField(value = "ADMIN_ID" , updateStrategy = FieldStrategy.IGNORED)
private String adminId;
@TableField(value = "OPEN_ID" , updateStrategy = FieldStrategy.IGNORED)
private String openId;
@TableField(value = "USER_TYPE" , updateStrategy = FieldStrategy.IGNORED)
private Integer userType;
@TableField(value = "CREATOR_USER_ID" , updateStrategy = FieldStrategy.IGNORED)
private String creatorUserId;
@TableField(value = "CREATOR_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date creatorTime;
@TableField("TENANT_ID")
private String tenantId;
}

@ -0,0 +1,35 @@
package jnpf.model.userbind;
import lombok.Data;
import java.util.List;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* nx_user_bind
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-02-27
*/
@Data
public class UserBindForm {
/** 主键 */
private String id;
/** 前台用户id **/
@JsonProperty("userId")
private String userId;
/** 后台用户id **/
@JsonProperty("adminId")
private String adminId;
/** openid **/
@JsonProperty("openId")
private String openId;
/** 创建人 **/
@JsonProperty("creatorUserId")
private String creatorUserId;
/** 创建时间 **/
@JsonProperty("creatorTime")
private String creatorTime;
}

@ -0,0 +1,45 @@
package jnpf.model.userbind;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import jnpf.base.Pagination;
import java.util.List;
/**
*
* nx_user_bind
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-02-27
*/
@Data
public class UserBindPagination extends Pagination {
/** 查询key */
private String[] selectKey;
/** json */
private String json;
/** 数据类型 0-当前页1-全部数据 */
private String dataType;
/** 高级查询 */
private String superQueryJson;
/** 功能id */
private String moduleId;
/** 菜单id */
private String menuId;
/** 后台用户id */
@JsonProperty("adminId")
private Object adminId;
/** openid */
@JsonProperty("openId")
private Object openId;
/** 创建人 */
@JsonProperty("creatorUserId")
private Object creatorUserId;
/** 创建时间 */
@JsonProperty("creatorTime")
private Object creatorTime;
/** 前台用户id */
@JsonProperty("userId")
private Object userId;
}

@ -0,0 +1,19 @@
package jnpf.model.weixin;
import jnpf.entity.RecycleStationStaffEntity;
import lombok.Data;
@Data
public class SimpleUserInfoVO {
/**
* :jwt token
*/
private String token;
/**
* userNameopenId
*/
private RecycleStationStaffEntity hsyUserInfo;
}

@ -0,0 +1,96 @@
package jnpf.model.weixin;
import jnpf.entity.RecycleStationStaffEntity;
import lombok.Data;
@Data
public class UserProfileVO {
/**
* 0--WEB 1--
*/
private Integer authType;
/**
*
*/
private String userName;
/**
*
*/
private String password;
/**
*
*/
private String code;
/**
* id
*/
private String uuid = "";
//**********************************
//以下为微信类传输字段
/**
* openId
*/
private String openId;
/**
* :
*/
private String rawData;
/**
* :
*/
private String signature;
/**
* :
*/
private String encryptedData;
/**
* :
*/
private String iv;
/**
*
*/
private String sessionKey;
/**
*
*/
private String unionId;
//以上为微信类传输字段
//**********************************
/**
* :jwt token
*/
private String token;
/**
* userNameopenId
*/
private RecycleStationStaffEntity userInfo;
@Override
public String toString() {
return "AuthUser{" +
"userName='" + userName + '\'' +
", password='" + "*********" + '\'' +
", code='" + code + '\'' +
", uuid='" + uuid + '\'' +
", openId='" + openId + '\'' +
", token='" + token + '\'' +
", userInfo=" + userInfo +
'}';
}
}

@ -0,0 +1,10 @@
package jnpf.model.weixin;
import lombok.Data;
@Data
public class WxLoginParam {
private String code;
private String encryptedData;
private String iv;
}

@ -45,6 +45,12 @@
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<repositories>
<repository>
<id>jnpf-releases</id>
<name>maven-releases</name>
<url>https://repository.jnpfsoft.com/repository/maven-public/</url>
</repository>
</repositories>
</project> </project>

@ -0,0 +1,16 @@
package jnpf.mapper;
import jnpf.entity.UserBindEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* nx_user_bind
* V3.5
* https://www.jnpfsoft.com
* JNPF
* 2024-02-27
*/
public interface UserBindMapper extends BaseMapper<UserBindEntity> {
}

@ -0,0 +1,35 @@
package jnpf.service;
import jnpf.model.userbind.*;
import jnpf.entity.*;
import java.util.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
/**
* nx_user_bind
* V3.5
* https://www.jnpfsoft.com
* JNPF
* 2024-02-27
*/
public interface UserBindService extends IService<UserBindEntity> {
List<UserBindEntity> getList(UserBindPagination userBindPagination);
List<UserBindEntity> getTypeList(UserBindPagination userBindPagination,String dataType);
UserBindEntity getInfo(String id);
void delete(UserBindEntity entity);
void create(UserBindEntity entity);
boolean update(String id, UserBindEntity entity);
//子表方法
//副表数据方法
String checkForm(UserBindForm form,int i);
void saveOrUpdate(UserBindForm userBindForm,String id, boolean isSave) throws Exception;
}

@ -0,0 +1,307 @@
package jnpf.service.impl;
import jnpf.entity.*;
import jnpf.mapper.UserBindMapper;
import jnpf.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.model.userbind.*;
import java.math.BigDecimal;
import cn.hutool.core.util.ObjectUtil;
import jnpf.permission.model.authorize.AuthorizeConditionModel;
import jnpf.util.GeneraterSwapUtil;
import jnpf.database.model.superQuery.SuperQueryJsonModel;
import jnpf.database.model.superQuery.ConditionJsonModel;
import jnpf.database.model.superQuery.SuperQueryConditionModel;
import java.lang.reflect.Field;
import com.baomidou.mybatisplus.annotation.TableField;
import java.util.regex.Pattern;
import jnpf.model.QueryModel;
import java.util.stream.Collectors;
import jnpf.base.model.ColumnDataModel;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jnpf.database.model.superQuery.SuperJsonModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.text.SimpleDateFormat;
import jnpf.util.*;
import java.util.*;
import jnpf.base.UserInfo;
import jnpf.permission.entity.UserEntity;
/**
*
* nx_user_bind
* V3.5
* https://www.jnpfsoft.com
* JNPF
* 2024-02-27
*/
@Service
public class UserBindServiceImpl extends ServiceImpl<UserBindMapper, UserBindEntity> implements UserBindService{
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@Autowired
private UserProvider userProvider;
@Override
public List<UserBindEntity> getList(UserBindPagination userBindPagination){
return getTypeList(userBindPagination,userBindPagination.getDataType());
}
/** 列表查询 */
@Override
public List<UserBindEntity> getTypeList(UserBindPagination userBindPagination,String dataType){
String userId=userProvider.get().getUserId();
List<String> AllIdList =new ArrayList();
List<List<String>> intersectionList =new ArrayList<>();
boolean isPc = ServletUtil.getHeader("jnpf-origin").equals("pc");
String columnData = !isPc ? UserBindConstant.getAppColumnData() : UserBindConstant.getColumnData();
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(columnData, ColumnDataModel.class);
String ruleJson = !isPc ? JsonUtil.getObjectToString(columnDataModel.getRuleListApp()) : JsonUtil.getObjectToString(columnDataModel.getRuleList());
int total=0;
int userBindNum =0;
QueryWrapper<UserBindEntity> userBindQueryWrapper=new QueryWrapper<>();
List<String> allSuperIDlist = new ArrayList<>();
String superOp ="";
if (ObjectUtil.isNotEmpty(userBindPagination.getSuperQueryJson())){
List<String> allSuperList = new ArrayList<>();
List<List<String>> intersectionSuperList = new ArrayList<>();
String queryJson = userBindPagination.getSuperQueryJson();
SuperJsonModel superJsonModel = JsonUtil.getJsonToBean(queryJson, SuperJsonModel.class);
int superNum = 0;
QueryWrapper<UserBindEntity> userBindSuperWrapper = new QueryWrapper<>();
userBindSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(userBindSuperWrapper,UserBindEntity.class,queryJson,"0"));
int userBindNum1 = userBindSuperWrapper.getExpression().getNormal().size();
if (userBindNum1>0){
List<String> userBindList =this.list(userBindSuperWrapper).stream().map(UserBindEntity::getId).collect(Collectors.toList());
allSuperList.addAll(userBindList);
intersectionSuperList.add(userBindList);
superNum++;
}
superOp = superNum > 0 ? superJsonModel.getMatchLogic() : "";
//and or
if(superOp.equalsIgnoreCase("and")){
allSuperIDlist = generaterSwapUtil.getIntersection(intersectionSuperList);
}else{
allSuperIDlist = allSuperList;
}
}
List<String> allRuleIDlist = new ArrayList<>();
String ruleOp ="";
if (ObjectUtil.isNotEmpty(ruleJson)){
List<String> allRuleList = new ArrayList<>();
List<List<String>> intersectionRuleList = new ArrayList<>();
SuperJsonModel ruleJsonModel = JsonUtil.getJsonToBean(ruleJson, SuperJsonModel.class);
int ruleNum = 0;
QueryWrapper<UserBindEntity> userBindSuperWrapper = new QueryWrapper<>();
userBindSuperWrapper = generaterSwapUtil.getCondition(new QueryModel(userBindSuperWrapper,UserBindEntity.class,ruleJson,"0"));
int userBindNum1 = userBindSuperWrapper.getExpression().getNormal().size();
if (userBindNum1>0){
List<String> userBindList =this.list(userBindSuperWrapper).stream().map(UserBindEntity::getId).collect(Collectors.toList());
allRuleList.addAll(userBindList);
intersectionRuleList.add(userBindList);
ruleNum++;
}
ruleOp = ruleNum > 0 ? ruleJsonModel.getMatchLogic() : "";
//and or
if(ruleOp.equalsIgnoreCase("and")){
allRuleIDlist = generaterSwapUtil.getIntersection(intersectionRuleList);
}else{
allRuleIDlist = allRuleList;
}
}
boolean pcPermission = false;
boolean appPermission = false;
if(isPc && pcPermission){
if (!userProvider.get().getIsAdministrator()){
Object userBindObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(userBindQueryWrapper,UserBindEntity.class,userBindPagination.getMenuId(),"0"));
if (ObjectUtil.isEmpty(userBindObj)){
return new ArrayList<>();
} else {
userBindQueryWrapper = (QueryWrapper<UserBindEntity>)userBindObj;
if( userBindQueryWrapper.getExpression().getNormal().size()>0){
userBindNum++;
}
}
}
}
if(!isPc && appPermission){
if (!userProvider.get().getIsAdministrator()){
Object userBindObj=generaterSwapUtil.getAuthorizeCondition(new QueryModel(userBindQueryWrapper,UserBindEntity.class,userBindPagination.getMenuId(),"0"));
if (ObjectUtil.isEmpty(userBindObj)){
return new ArrayList<>();
} else {
userBindQueryWrapper = (QueryWrapper<UserBindEntity>)userBindObj;
if( userBindQueryWrapper.getExpression().getNormal().size()>0){
userBindNum++;
}
}
}
}
if(isPc){
if(ObjectUtil.isNotEmpty(userBindPagination.getAdminId())){
userBindNum++;
String value = userBindPagination.getAdminId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getAdminId()) :
String.valueOf(userBindPagination.getAdminId());
userBindQueryWrapper.lambda().like(UserBindEntity::getAdminId,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getOpenId())){
userBindNum++;
String value = userBindPagination.getOpenId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getOpenId()) :
String.valueOf(userBindPagination.getOpenId());
userBindQueryWrapper.lambda().like(UserBindEntity::getOpenId,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getCreatorUserId())){
userBindNum++;
String value = userBindPagination.getCreatorUserId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getCreatorUserId()) :
String.valueOf(userBindPagination.getCreatorUserId());
userBindQueryWrapper.lambda().like(UserBindEntity::getCreatorUserId,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getCreatorTime())){
userBindNum++;
String value = userBindPagination.getCreatorTime() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getCreatorTime()) :
String.valueOf(userBindPagination.getCreatorTime());
userBindQueryWrapper.lambda().like(UserBindEntity::getCreatorTime,value);
}
if(ObjectUtil.isNotEmpty(userBindPagination.getUserId())){
userBindNum++;
String value = userBindPagination.getUserId() instanceof List ?
JsonUtil.getObjectToString(userBindPagination.getUserId()) :
String.valueOf(userBindPagination.getUserId());
userBindQueryWrapper.lambda().like(UserBindEntity::getUserId,value);
}
}
List<String> intersection = generaterSwapUtil.getIntersection(intersectionList);
if (total>0){
if (intersection.size()==0){
intersection.add("jnpfNullList");
}
userBindQueryWrapper.lambda().in(UserBindEntity::getId, intersection);
}
//是否有高级查询
if (StringUtil.isNotEmpty(superOp)){
if (allSuperIDlist.size()==0){
allSuperIDlist.add("jnpfNullList");
}
List<String> finalAllSuperIDlist = allSuperIDlist;
userBindQueryWrapper.lambda().and(t->t.in(UserBindEntity::getId, finalAllSuperIDlist));
}
//是否有数据过滤查询
if (StringUtil.isNotEmpty(ruleOp)){
if (allRuleIDlist.size()==0){
allRuleIDlist.add("jnpfNullList");
}
List<String> finalAllRuleIDlist = allRuleIDlist;
userBindQueryWrapper.lambda().and(t->t.in(UserBindEntity::getId, finalAllRuleIDlist));
}
//排序
if(StringUtil.isEmpty(userBindPagination.getSidx())){
userBindQueryWrapper.lambda().orderByDesc(UserBindEntity::getId);
}else{
try {
String sidx = userBindPagination.getSidx();
String[] strs= sidx.split("_name");
UserBindEntity userBindEntity = new UserBindEntity();
Field declaredField = userBindEntity.getClass().getDeclaredField(strs[0]);
declaredField.setAccessible(true);
String value = declaredField.getAnnotation(TableField.class).value();
userBindQueryWrapper="asc".equals(userBindPagination.getSort().toLowerCase())?userBindQueryWrapper.orderByAsc(value):userBindQueryWrapper.orderByDesc(value);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
if("0".equals(dataType)){
if((total>0 && AllIdList.size()>0) || total==0){
Page<UserBindEntity> page=new Page<>(userBindPagination.getCurrentPage(), userBindPagination.getPageSize());
IPage<UserBindEntity> userIPage=this.page(page, userBindQueryWrapper);
return userBindPagination.setData(userIPage.getRecords(),userIPage.getTotal());
}else{
List<UserBindEntity> list = new ArrayList();
return userBindPagination.setData(list, list.size());
}
}else{
return this.list(userBindQueryWrapper);
}
}
@Override
public UserBindEntity getInfo(String id){
QueryWrapper<UserBindEntity> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(UserBindEntity::getId,id);
return this.getOne(queryWrapper);
}
@Override
public void create(UserBindEntity entity){
this.save(entity);
}
@Override
public boolean update(String id, UserBindEntity entity){
return this.updateById(entity);
}
@Override
public void delete(UserBindEntity entity){
if(entity!=null){
this.removeById(entity.getId());
}
}
/** 验证表单唯一字段,正则,非空 i-0新增-1修改*/
@Override
public String checkForm(UserBindForm form,int i) {
boolean isUp =StringUtil.isNotEmpty(form.getId()) && !form.getId().equals("0");
String id="";
String countRecover = "";
if (isUp){
id = form.getId();
}
//主表字段验证
return countRecover;
}
/**
* ()
* @param id
* @param userBindForm
* @return
*/
@Override
@Transactional
public void saveOrUpdate(UserBindForm userBindForm,String id, boolean isSave) throws Exception{
UserInfo userInfo=userProvider.get();
UserEntity userEntity = generaterSwapUtil.getUser(userInfo.getUserId());
userBindForm = JsonUtil.getJsonToBean(
generaterSwapUtil.swapDatetime(UserBindConstant.getFormData(),userBindForm),UserBindForm.class);
UserBindEntity entity = JsonUtil.getJsonToBean(userBindForm, UserBindEntity.class);
if(isSave){
String mainId = RandomUtil.uuId() ;
entity.setId(mainId);
}else{
}
this.saveOrUpdate(entity);
}
}

@ -0,0 +1,190 @@
package jnpf.controller;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jnpf.base.ActionResult;
import jnpf.base.UserInfo;
import jnpf.exception.DataException;
import jnpf.permission.entity.UserEntity;
import jnpf.service.*;
import jnpf.entity.*;
import jnpf.util.*;
import jnpf.model.userbind.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.*;
import jnpf.annotation.JnpfField;
import jnpf.base.vo.PageListVO;
import jnpf.base.vo.PaginationVO;
import jnpf.base.vo.DownloadVO;
import jnpf.config.ConfigValueUtil;
import jnpf.base.entity.ProvinceEntity;
import java.io.IOException;
import java.util.stream.Collectors;
import jnpf.engine.entity.FlowTaskEntity;
import jnpf.exception.WorkFlowException;
import org.springframework.transaction.annotation.Transactional;
/**
* nx_user_bind
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-02-27
*/
@Slf4j
@RestController
@Tag(name = "nx_user_bind" , description = "scm")
@RequestMapping("/api/scm/UserBind")
public class UserBindController {
@Autowired
private GeneraterSwapUtil generaterSwapUtil;
@Autowired
private UserProvider userProvider;
@Autowired
private UserBindService userBindService;
/**
*
*
* @param userBindPagination
* @return
*/
@Operation(summary = "获取列表")
@PostMapping("/getList")
public ActionResult list(@RequestBody UserBindPagination userBindPagination)throws IOException{
List<UserBindEntity> list= userBindService.getList(userBindPagination);
List<Map<String, Object>> realList=new ArrayList<>();
for (UserBindEntity entity : list) {
Map<String, Object> userBindMap=JsonUtil.entityToMap(entity);
userBindMap.put("id", userBindMap.get("id"));
//副表数据
//子表数据
realList.add(userBindMap);
}
//数据转换
realList = generaterSwapUtil.swapDataList(realList, UserBindConstant.getFormData(), UserBindConstant.getColumnData(), userBindPagination.getModuleId(),false);
//返回对象
PageListVO vo = new PageListVO();
vo.setList(realList);
PaginationVO page = JsonUtil.getJsonToBean(userBindPagination, PaginationVO.class);
vo.setPagination(page);
return ActionResult.success(vo);
}
/**
*
*
* @param userBindForm
* @return
*/
@PostMapping()
@Operation(summary = "创建")
public ActionResult create(@RequestBody @Valid UserBindForm userBindForm) {
String b = userBindService.checkForm(userBindForm,0);
if (StringUtil.isNotEmpty(b)){
return ActionResult.fail(b );
}
try{
userBindService.saveOrUpdate(userBindForm, null ,true);
}catch(Exception e){
return ActionResult.fail("新增数据失败");
}
return ActionResult.success("创建成功");
}
/**
*
* @param id
* @param userBindForm
* @return
*/
@PutMapping("/{id}")
@Operation(summary = "更新")
public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid UserBindForm userBindForm,
@RequestParam(value = "isImport", required = false) boolean isImport){
userBindForm.setId(id);
if (!isImport) {
String b = userBindService.checkForm(userBindForm,1);
if (StringUtil.isNotEmpty(b)){
return ActionResult.fail(b );
}
}
UserBindEntity entity= userBindService.getInfo(id);
if(entity!=null){
try{
userBindService.saveOrUpdate(userBindForm,id,false);
}catch(Exception e){
return ActionResult.fail("修改数据失败");
}
return ActionResult.success("更新成功");
}else{
return ActionResult.fail("更新失败,数据不存在");
}
}
/**
*
* @param id
* @return
*/
@Operation(summary = "删除")
@DeleteMapping("/{id}")
@Transactional
public ActionResult delete(@PathVariable("id") String id){
UserBindEntity entity= userBindService.getInfo(id);
if(entity!=null){
//主表数据删除
userBindService.delete(entity);
}
return ActionResult.success("删除成功");
}
/**
* ()
* 使-
* @param id
* @return
*/
@Operation(summary = "表单信息(详情页)")
@GetMapping("/detail/{id}")
public ActionResult detailInfo(@PathVariable("id") String id){
UserBindEntity entity= userBindService.getInfo(id);
if(entity==null){
return ActionResult.fail("表单数据不存在!");
}
Map<String, Object> userBindMap=JsonUtil.entityToMap(entity);
userBindMap.put("id", userBindMap.get("id"));
//副表数据
//子表数据
userBindMap = generaterSwapUtil.swapDataDetail(userBindMap,UserBindConstant.getFormData(),"532119669822193669",false);
return ActionResult.success(userBindMap);
}
/**
* ()
* 使-
* @param id
* @return
*/
@Operation(summary = "信息")
@GetMapping("/{id}")
public ActionResult info(@PathVariable("id") String id){
UserBindEntity entity= userBindService.getInfo(id);
if(entity==null){
return ActionResult.fail("表单数据不存在!");
}
Map<String, Object> userBindMap=JsonUtil.entityToMap(entity);
userBindMap.put("id", userBindMap.get("id"));
//副表数据
//子表数据
userBindMap = generaterSwapUtil.swapDataForm(userBindMap,UserBindConstant.getFormData(),UserBindConstant.TABLEFIELDKEY,UserBindConstant.TABLERENAMES);
return ActionResult.success(userBindMap);
}
}

@ -0,0 +1,33 @@
package jnpf.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
/**
*
*
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-02-27
*/
@Data
@TableName("nx_user_bind")
public class UserBindEntity {
@TableId(value ="ID" )
private String id;
@TableField(value = "USER_ID" , updateStrategy = FieldStrategy.IGNORED)
private String userId;
@TableField(value = "ADMIN_ID" , updateStrategy = FieldStrategy.IGNORED)
private String adminId;
@TableField(value = "OPEN_ID" , updateStrategy = FieldStrategy.IGNORED)
private String openId;
@TableField("TENANT_ID")
private String tenantId;
@TableField(value = "CREATOR_USER_ID" , updateStrategy = FieldStrategy.IGNORED)
private String creatorUserId;
@TableField(value = "CREATOR_TIME" , updateStrategy = FieldStrategy.IGNORED)
private Date creatorTime;
@TableField("F_FLOW_ID")
private String flowId;
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,35 @@
package jnpf.model.jnpf;
import lombok.Data;
import java.util.List;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* nx_user_bind
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-02-27
*/
@Data
public class UserBindForm {
/** 主键 */
private String id;
/** 前台用户id **/
@JsonProperty("userId")
private String userId;
/** 后台用户id **/
@JsonProperty("adminId")
private String adminId;
/** openid **/
@JsonProperty("openId")
private String openId;
/** 创建人 **/
@JsonProperty("creatorUserId")
private String creatorUserId;
/** 创建时间 **/
@JsonProperty("creatorTime")
private String creatorTime;
}

@ -0,0 +1,45 @@
package jnpf.model.userbind;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import jnpf.base.Pagination;
import java.util.List;
/**
*
* nx_user_bind
* @ V3.5
* @ https://www.jnpfsoft.com
* @ JNPF
* @ 2024-02-27
*/
@Data
public class UserBindPagination extends Pagination {
/** 查询key */
private String[] selectKey;
/** json */
private String json;
/** 数据类型 0-当前页1-全部数据 */
private String dataType;
/** 高级查询 */
private String superQueryJson;
/** 功能id */
private String moduleId;
/** 菜单id */
private String menuId;
/** 后台用户id */
@JsonProperty("adminId")
private Object adminId;
/** openid */
@JsonProperty("openId")
private Object openId;
/** 创建人 */
@JsonProperty("creatorUserId")
private Object creatorUserId;
/** 创建时间 */
@JsonProperty("creatorTime")
private Object creatorTime;
/** 前台用户id */
@JsonProperty("userId")
private Object userId;
}
Loading…
Cancel
Save