Commit 375c6c9d by shiwenbo

增加查询区域公司列表接口,增加权限过滤默认场景

parent 558387a0
......@@ -408,6 +408,7 @@ public class SecurityConfig {
.antMatchers("/crm/load/publicity/byAssetPackage/**").permitAll()
.antMatchers("/workflow/api/**").permitAll()
.antMatchers("/dnaserver/**").permitAll()
.antMatchers("/dinasBiz/organization/queryOrganizationByUserName").permitAll()
.anyRequest().authenticated();//listAll,modifySelfPassword,loadAuctionByAsset临时开放
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
InzWebAuthenticationFilter filter = new InzWebAuthenticationFilter();
......
package com.xyst.dinas.biz.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.beecode.inz.basis.init.AuthDataInitializer;
import com.beecode.inz.basis.init.DictDataInitializer;
import com.beecode.inz.basis.init.EnterpriseDataInitializer;
import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.init.OrganizationDataInitializer;
import com.xyst.dinas.biz.internal.dao.DinasOrganizationDaoImpl;
import com.xyst.dinas.biz.internal.service.DinasOrganizationServiceImpl;
import com.xyst.dinas.biz.service.DinasOrganizationService;
import com.xyst.dinas.biz.web.DinasOrganizationController;
@Configuration
public class DinasOrganizationConfig {
@Bean
public DinasOrganizationService dinasOrganizationService(){
return new DinasOrganizationServiceImpl();
}
@Bean
public DinasOrganizationDao dinasOrganizationDao(){
return new DinasOrganizationDaoImpl();
}
@Bean
public DinasOrganizationController DinasOrganizationController() {
return new DinasOrganizationController();
}
}
package com.xyst.dinas.biz.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.xyst.dinas.biz.internal.scene.XystDinasCommonAllScene;
@Configuration
public class SceneConfiguration {
@Bean("com.xyst.dinas.biz.scene.XystDinasCommonAllScene")
public XystDinasCommonAllScene createXystDinasCommonAllScene(){
return new XystDinasCommonAllScene();
}
}
package com.xyst.dinas.biz.constant;
public interface DinasOrganizationConstant {
String ORGANIZATION_ENTITY = "com.xyst.dinas.biz.datamodel.Organization";
String ORGANIZATION_FOLLOWER_ENTITY = "com.xyst.dinas.biz.follower.datamodel.OrganizationFollower";
}
package com.xyst.dinas.biz.dao;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import com.beecode.bcp.type.KObject;
public interface DinasOrganizationDao {
KObject queryOrganizationByName(String name);
void save(KObject kObject);
List<Map<String, Object>> queryOrganizationByStaffId(UUID uuid);
}
......@@ -9,7 +9,7 @@ public enum OrganizationTypeEnum{
/**
* 区域公司
*/
REGINAL_COMPANY(1);
REGIONAL_COMPANY(1);
int value;
......
package com.xyst.dinas.biz.init;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.Map.Entry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import com.beecode.amino.core.Amino;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.init.DataInitializer;
import com.beecode.inz.basis.init.exception.DataInitException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xyst.dinas.biz.service.DinasOrganizationService;
public class OrganizationDataInitializer implements DataInitializer {
@Autowired
private DinasOrganizationService dinasOrganizationService;
private ObjectMapper objectMapper = new ObjectMapper();
@Value(value="classpath*:/com/beecode/inz/basis/organization/groupData.json")
private Resource organizationData;
@Override
public void init() {
OrganizationDataInfo dictDataInfo = objectMapper.convertValue(load(organizationData), OrganizationDataInfo.class);
try {
KClass organizationKClass = Amino.getApplicationMetadataContext().getBean(dictDataInfo.getName(), KClass.class);
KObject organization = organizationKClass.newInstance();
HashMap<String, String> data = dictDataInfo.getData();
KObject kObject = toKObject(organization, data);
if (dinasOrganizationService.queryOrganizationByName(kObject.getString("name")) == null) {
//新增集团
kObject.set("createTime", new Date());
dinasOrganizationService.save(kObject);
}
}catch(Exception e) {
e.printStackTrace();
}
}
private KObject toKObject(KObject kObject, Map<String, String> data) {
for(Entry<String, String> attr : data.entrySet()){
kObject.set(attr.getKey(), attr.getValue());
}
return kObject;
}
private JsonNode load(Resource resource){
try {
return objectMapper.readTree(resource.getInputStream());
} catch (Exception e) {
throw new DataInitException("json解析出错了!", e);
}
}
static class OrganizationDataInfo{
private String name;
private HashMap<String, String> data;
public String getName() {
return name;
}
public void setDictName(String name) {
this.name = name;
}
public HashMap<String, String> getData() {
return data;
}
public void setData(HashMap<String, String> data) {
this.data = data;
}
}
}
package com.xyst.dinas.biz.internal.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.persistence.Tuple;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.orm.hibernate5.HibernateTemplate;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.constant.DinasOrganizationConstant;
import com.xyst.dinas.biz.constant.PositionConstant;
import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.dao.PositionDao;
public class DinasOrganizationDaoImpl implements DinasOrganizationDao, DinasOrganizationConstant {
@Autowired
private HibernateTemplate template;
@Override
public KObject queryOrganizationByName(String name) {
return template.execute(session -> getByName(session, ORGANIZATION_ENTITY, name));
}
@Override
public void save(KObject kObject) {
template.save(kObject);
}
@SuppressWarnings("unchecked")
private KObject getByName(Session session, String className, String nameValue) {
String hql = "from " + className + " where name = :name";
Query<KObject> query = session.createQuery(hql);
query.setParameter("name", nameValue);
List<KObject> list = query.getResultList();
if (list.size() < 1) {
return null;
}
return list.get(0);
}
@Override
public List<Map<String, Object>> queryOrganizationByStaffId(UUID id) {
// return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() {
// @SuppressWarnings("unchecked")
// @Override
// public List<KObject> doInHibernate(Session session) throws HibernateException {
// Query<KObject> query = session.createQuery("select f.following.id, f.following.name, f.following.code, f.following.address, f.following.type from " + ORGANIZATION_FOLLOWER_ENTITY + " as f where f.member.id =:id", KObject.class);
//
// query.setParameter("id", id);
// return query.getResultList();
// }
// });
return template.execute(session -> {
List<Map<String, Object>> result = new ArrayList<>();
String hql = "select f.following.id, f.following.name, f.following.code, f.following.address, f.following.type from " + ORGANIZATION_FOLLOWER_ENTITY + " as f where f.member.id =:id" ;
Query<Tuple> query = session.createQuery(hql, Tuple.class);
query.setParameter("id", id);
List<Tuple> list = query.list();
for (int i = 0; i < list.size(); i++) {
Tuple tuple = list.get(i);
UUID fid = tuple.get(0, UUID.class);
String name = tuple.get(1, String.class);
String code = tuple.get(2, String.class);
String address = tuple.get(3, String.class);
String type = tuple.get(4, String.class);
Map<String, Object> map = new HashMap<>();
map.put("id", fid);
map.put("name", name);
map.put("code", code);
map.put("address", address);
map.put("type", type);
result.add(map);
}
return result;
});
}
}
package com.xyst.dinas.biz.internal.scene;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.beecode.amino.core.Amino;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.common.internal.scene.FollowerQueryScene;
import com.beecode.inz.query.exception.SceneExecuteException;
import com.beecode.inz.query.scene.SceneExecuteContext;
public class XystDinasCommonAllScene extends FollowerQueryScene {
@Override
public void execute(SceneExecuteContext context) throws SceneExecuteException {
KObject currentRegionalCompany = this.getCurrentLoginRegionalCompany();
if(null == currentRegionalCompany || currentRegionalCompany.isNull()){
throw new SceneExecuteException("无法获取当前登录区域公司");
}
CriteriaBuilder builder = context.getCriteriaBuilder();
Predicate p0 = addCurrentRegionalCompanyQuery(context, builder);
if(currentRegionalCompany.getString("type").equals("REGIONAL_COMPANY")) {
context.getCriteriaQuery().and(p0);
}
}
protected Predicate addCurrentRegionalCompanyQuery(SceneExecuteContext context, CriteriaBuilder builder) {
return builder.equal(context.getRoot().get("regionalCompany").get("id"), getCurrentLoginRegionalCompany().getUuid("id"));
}
/**
* 获取当前登录的区域公司
* @return
*/
public KObject getCurrentLoginRegionalCompany() {
String currentRegionalCompany = (String) ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest().getSession().getAttribute("currentRegionalCompany");
if (null == currentRegionalCompany || currentRegionalCompany.trim().length() == 0 ) {
throw new RuntimeException("从session中获取区域公司失败");
}
KClass kClass = Amino.getApplicationMetadataContext().getBean("com.xyst.dinas.biz.datamodel.Organization",
KClass.class);
KObject regionalCompany = JSONObjectUtils.toObject(currentRegionalCompany, kClass);
return regionalCompany;
}
}
package com.xyst.dinas.biz.internal.service;
import java.util.List;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import com.beecode.bap.staff.dao.StaffDAO;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.service.DinasOrganizationService;
public class DinasOrganizationServiceImpl implements DinasOrganizationService {
@Autowired
private DinasOrganizationDao dinasOrganizationDao;
@Autowired
private StaffDAO staffDAO;
@Override
public KObject queryOrganizationByName(String name) {
return dinasOrganizationDao.queryOrganizationByName(name);
}
@Override
public void save(KObject kObject) {
dinasOrganizationDao.save(kObject);
}
@Override
public Object queryOrganizationByUserName(String name) {
List<KObject> staffByUsername = staffDAO.listStaffByUsername(name);
KObject staff = staffByUsername.get(0);
//查询团队成员中关联的区域公司
List<Map<String, Object>> organizations = dinasOrganizationDao.queryOrganizationByStaffId(staff.getUuid("id"));
return ResponseObj.success("查询成功", organizations);
}
}
package com.xyst.dinas.biz.service;
import com.beecode.bcp.type.KObject;
public interface DinasOrganizationService {
KObject queryOrganizationByName(String name);
void save(KObject kObject);
Object queryOrganizationByUserName(String name);
}
package com.xyst.dinas.biz.web;
import java.util.UUID;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.inz.common.exception.BusinessException;
import com.xyst.dinas.biz.enumeration.BizErrorCodeEnum;
import com.xyst.dinas.biz.service.DinasOrganizationService;
import com.xyst.dinas.biz.service.PositionService;
@RestController
public class DinasOrganizationController {
@Autowired
private DinasOrganizationService dinasOrganizationService;
/**
* @Description: 根据用户名查询区域公司
* @param name
* @return return_type
* @throws
*/
@ResponseBody
@RequestMapping(value = "/dinasBiz/organization/queryOrganizationByUserName", method = RequestMethod.POST, consumes = "application/json")
public Object queryOrganizationByUserName(@RequestBody String body) {
String userName = new JSONObject(body).getString("userName");
return dinasOrganizationService.queryOrganizationByUserName(userName);
}
}
......@@ -3,4 +3,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xyst.dinas.biz.config.StationConfiguration,\
com.xyst.dinas.biz.config.DinasTypeConfiguration,\
com.xyst.dinas.biz.config.ShipConfiguration,\
com.xyst.dinas.biz.config.CameraConfiguration
\ No newline at end of file
com.xyst.dinas.biz.config.CameraConfiguration,\
com.xyst.dinas.biz.config.SceneConfiguration,\
com.xyst.dinas.biz.config.DinasOrganizationConfig
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment