Commit d25ae9df by wukaiqiang

Merge branch 'develop' of gitlab.beecode.cn:kunlun/xyst_dinas/xyst_dinas_backend into develop

parents 3e2abfdf 33f4b2b3
package com.beecode.inz.authmgr.internal.service; package com.beecode.inz.authmgr.internal.service;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -14,6 +18,7 @@ import javax.transaction.Transactional; ...@@ -14,6 +18,7 @@ import javax.transaction.Transactional;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.util.Assert; import org.springframework.util.Assert;
...@@ -27,15 +32,24 @@ import com.beecode.bap.staff.service.StaffService; ...@@ -27,15 +32,24 @@ import com.beecode.bap.staff.service.StaffService;
import com.beecode.bap2.common.license.LicenseProperty; import com.beecode.bap2.common.license.LicenseProperty;
import com.beecode.bap2.common.license.service.LicensePropertyService; import com.beecode.bap2.common.license.service.LicensePropertyService;
import com.beecode.bcp.User; import com.beecode.bcp.User;
import com.beecode.bcp.authz.AuthzConstants;
import com.beecode.bcp.authz.AuthzType; import com.beecode.bcp.authz.AuthzType;
import com.beecode.bcp.authz.Identity; import com.beecode.bcp.authz.Identity;
import com.beecode.bcp.authz.Privilege; import com.beecode.bcp.authz.Privilege;
import com.beecode.bcp.authz.PrivilegeParam;
import com.beecode.bcp.authz.Role; import com.beecode.bcp.authz.Role;
import com.beecode.bcp.authz.RuleContent;
import com.beecode.bcp.authz.dao.PrivilegeDao;
import com.beecode.bcp.authz.internal.Authorization;
import com.beecode.bcp.authz.internal.InternalAuthzConstants; import com.beecode.bcp.authz.internal.InternalAuthzConstants;
import com.beecode.bcp.authz.internal.ObjectAuthorization;
import com.beecode.bcp.authz.internal.RuleAuthorization;
import com.beecode.bcp.authz.internal.TokenAuthorization;
import com.beecode.bcp.authz.service.IdentityService; import com.beecode.bcp.authz.service.IdentityService;
import com.beecode.bcp.authz.service.PrivilegeMetaService; import com.beecode.bcp.authz.service.PrivilegeMetaService;
import com.beecode.bcp.authz.service.PrivilegeService; import com.beecode.bcp.authz.service.PrivilegeService;
import com.beecode.bcp.authz.service.RoleService; import com.beecode.bcp.authz.service.RoleService;
import com.beecode.bcp.authz.service.SysIdentityService;
import com.beecode.bcp.group.service.GroupService; import com.beecode.bcp.group.service.GroupService;
import com.beecode.bcp.type.KClass; import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
...@@ -87,6 +101,14 @@ public class AuthManagerServiceImpl implements AuthManagerService,ApplicationEve ...@@ -87,6 +101,14 @@ public class AuthManagerServiceImpl implements AuthManagerService,ApplicationEve
private ApplicationEventPublisher applicationEventPublisher; private ApplicationEventPublisher applicationEventPublisher;
@Autowired
@Qualifier(AuthzConstants.BEAN_PRIVILEGE_DAO)
private PrivilegeDao privilegeDao;
@Autowired
@Qualifier(AuthzConstants.BEAN_SYSIDENTITY_SERVICE)
private SysIdentityService sysIdentityService;
@Override @Override
@Transactional @Transactional
public void grantRole(UUID roleId, List<UUID> staffIds) { public void grantRole(UUID roleId, List<UUID> staffIds) {
...@@ -446,4 +468,109 @@ public class AuthManagerServiceImpl implements AuthManagerService,ApplicationEve ...@@ -446,4 +468,109 @@ public class AuthManagerServiceImpl implements AuthManagerService,ApplicationEve
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher; this.applicationEventPublisher = applicationEventPublisher;
} }
@Override
@Transactional
public void grantDelegate() {
List<PrivilegeInfo> privilegeList = getAllPrivilegeInfo().stream()
.filter(privilegeInfo -> !InternalAuthzConstants.ADMIN_PRIVILEGE_ID.equals(privilegeInfo.getId()))
.sorted(Comparator.comparing(PrivilegeInfo::getOrderIndex)).collect(Collectors.toList());
Optional<Role> role = roleService.getByName("xystBizManagerRole");
if(role.isPresent()) {
UUID roleId = role.get().getId();
for (PrivilegeInfo info : privilegeList) {
Privilege privilege = getPrivilege(info.getId());
Authorization authorization = createAuthorization(privilege, roleId, null, EnumSet.of(AuthzType.DELEGATE));
Authorization current = getCurrent(authorization);
if (current == null || current.isCanDelegate()) {
privilegeDao.grant(authorization);
}
if (info.getId().equals(InternalAuthzConstants.ADMIN_PRIVILEGE_ID))
sysIdentityService.refresh();
}
}
}
private Privilege getPrivilege(UUID privilegeId) {
return privilegeMetaService.getPrivilege(privilegeId);
}
private Authorization createAuthorization(Privilege privilege, UUID granteeId, PrivilegeParam<?> param, EnumSet<AuthzType> authzTypes) {
Assert.notNull(privilege, "'privilege' must not be null");
Assert.notNull(granteeId, "'granteeId' must not be null");
Assert.notNull(authzTypes, "'authzTypes' must not be null");
verifyParamType(privilege.getType(), param);
Authorization authorization = null;
switch (privilege.getType()) {
case TOKEN:
authorization = new TokenAuthorization();
break;
case OBJECT:
ObjectAuthorization oa = new ObjectAuthorization();
oa.setObjId((UUID) param.getParam());
authorization = oa;
break;
case RULE:
RuleAuthorization ra = new RuleAuthorization();
RuleContent rule = (RuleContent) param.getParam();
ra.setRule(rule.rule);
ra.setDescription(rule.description);
authorization = ra;
break;
default:
throw new IllegalArgumentException("illegal privilege type: " + privilege.getType());
}
Instant now = Instant.now();
UUID grantor = getCurrentIdentityId();
authorization.setPrivilegeId(privilege.getId());
authorization.setGranteeId(granteeId);
if (authzTypes.contains(AuthzType.ACCESS)) {
authorization.setCanAccess(true);
authorization.setAccessGrantor(grantor);
authorization.setAccessGrantTime(now);
}
if (authzTypes.contains(AuthzType.DELEGATE)) {
authorization.setCanDelegate(true);
authorization.setDelegateGrantor(grantor);
authorization.setDelegateGrantTime(now);
}
return authorization;
}
private void verifyParamType(Privilege.Type privilegeType, PrivilegeParam<?> param) {
Assert.notNull(privilegeType, "'privilegeType' must not be null");
switch (privilegeType) {
case TOKEN:
if (param != null && param != PrivilegeParam.TOKEN_PRIVILEGE_PARAM)
throw new IllegalArgumentException("should use PrivilegeParam.TOKEN_PRIVILEGE_PARAM constant for token privilege");
break;
default:
Assert.notNull(param, "'param' must not be null");
Object paramData = param.getParam();
Assert.notNull(paramData, "'paramData' must not be null");
if (!(privilegeType.getDataClass() == paramData.getClass()))
throw new IllegalArgumentException(String.format("should use param type '%s', but '%s' founded",
privilegeType.getDataClass().getSimpleName(), paramData.getClass().getSimpleName()));
break;
}
}
private UUID getCurrentIdentityId() {
return identityService.getCurrentIdentityId();
}
private Authorization getCurrent(Authorization auth) {
if (auth instanceof TokenAuthorization) {
return privilegeDao.getTokenAuthorization(auth.getPrivilegeId(), auth.getGranteeId());
}
if (auth instanceof ObjectAuthorization) {
return privilegeDao.getObjectAuthorization(auth.getPrivilegeId(), auth.getGranteeId(), ((ObjectAuthorization) auth).getObjId());
}
if (auth instanceof RuleAuthorization) {
return privilegeDao.getRuleAuthorization(auth.getPrivilegeId(), auth.getGranteeId());
}
throw new IllegalArgumentException("illegal authorization: " + auth);
}
} }
...@@ -36,4 +36,6 @@ public interface AuthManagerService { ...@@ -36,4 +36,6 @@ public interface AuthManagerService {
Page<StaffInfo> findStaffInfo(UUID roleId, UUID deptId, String searchStr, Integer pageNo, Integer pageSize, Page<StaffInfo> findStaffInfo(UUID roleId, UUID deptId, String searchStr, Integer pageNo, Integer pageSize,
Integer locked, Boolean enabled); Integer locked, Boolean enabled);
void grantDelegate();
} }
...@@ -436,4 +436,9 @@ public class AuthMgrController { ...@@ -436,4 +436,9 @@ public class AuthMgrController {
} }
throw new AuthDataMissingException("无法获取普通分组的根分组!"); throw new AuthDataMissingException("无法获取普通分组的根分组!");
} }
@RequestMapping(value="roles/xystBizRoleManage/grantDelegate" , method = RequestMethod.POST)
public void grantDelegate(){
authManagerService.grantDelegate();
}
} }
...@@ -56,7 +56,7 @@ public class SysAuthMgrController { ...@@ -56,7 +56,7 @@ public class SysAuthMgrController {
Iterator<Role> iter = roles.iterator(); Iterator<Role> iter = roles.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
Role role = iter.next(); Role role = iter.next();
if(role.getName().equals("customManageRole") || role.getName().equals("observerRole")) { if(role.getName().equals("customManageRole") || role.getName().equals("observerRole") || role.getName().equals("bizManagerRole")) {
iter.remove(); iter.remove();
// break; // break;
} }
......
...@@ -89,6 +89,7 @@ ...@@ -89,6 +89,7 @@
<dependency>com.xyst.dinas.biz.auth.SandMiningAreaCheckList</dependency> <dependency>com.xyst.dinas.biz.auth.SandMiningAreaCheckList</dependency>
<dependency>com.xyst.dinas.camera.auth.CameraInfoList</dependency> <dependency>com.xyst.dinas.camera.auth.CameraInfoList</dependency>
<dependency>com.xyst.dinas.fileshared.auth.FilesharedList</dependency> <dependency>com.xyst.dinas.fileshared.auth.FilesharedList</dependency>
<dependency>com.xyst.dinas.biz.auth.Notification</dependency>
<content> <content>
<m:function-tree> <m:function-tree>
<m:parent></m:parent> <m:parent></m:parent>
...@@ -110,7 +111,7 @@ ...@@ -110,7 +111,7 @@
<m:title>待办</m:title> <m:title>待办</m:title>
<m:index>1050</m:index> <m:index>1050</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege>com.xyst.dinas.biz.auth.Notification</m:privilege>
<m:function-definition> <m:function-definition>
<m:view>functions</m:view> <m:view>functions</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1549,7 +1550,7 @@ ...@@ -1549,7 +1550,7 @@
<m:index>4000</m:index> <m:index>4000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>xystBizManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-org-list</m:view> <m:view>function-org-list</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1563,7 +1564,7 @@ ...@@ -1563,7 +1564,7 @@
<m:index>1000</m:index> <m:index>1000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>xystBizManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-userMgr</m:view> <m:view>function-userMgr</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1591,7 +1592,7 @@ ...@@ -1591,7 +1592,7 @@
<m:index>2000</m:index> <m:index>2000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>xystBizManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-funcauth</m:view> <m:view>function-funcauth</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1605,7 +1606,7 @@ ...@@ -1605,7 +1606,7 @@
<m:index>7000</m:index> <m:index>7000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>xystBizManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-post-manage</m:view> <m:view>function-post-manage</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1619,7 +1620,7 @@ ...@@ -1619,7 +1620,7 @@
<m:index>3000</m:index> <m:index>3000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>xystBizManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-dictMgr</m:view> <m:view>function-dictMgr</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1633,7 +1634,7 @@ ...@@ -1633,7 +1634,7 @@
<m:index>4000</m:index> <m:index>4000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>xystBizManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-workflowDefinition</m:view> <m:view>function-workflowDefinition</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1647,7 +1648,7 @@ ...@@ -1647,7 +1648,7 @@
<m:index>8000</m:index> <m:index>8000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>systemManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-enterpriseSettings</m:view> <m:view>function-enterpriseSettings</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
...@@ -1661,7 +1662,7 @@ ...@@ -1661,7 +1662,7 @@
<m:index>9000</m:index> <m:index>9000</m:index>
<m:license></m:license> <m:license></m:license>
<m:privilege></m:privilege> <m:privilege></m:privilege>
<m:role>bizManagerRole</m:role> <m:role>xystBizManagerRole</m:role>
<m:function-definition> <m:function-definition>
<m:view>function-bill-manage</m:view> <m:view>function-bill-manage</m:view>
<m:view-config></m:view-config> <m:view-config></m:view-config>
......
...@@ -25,5 +25,11 @@ ...@@ -25,5 +25,11 @@
"title":"定制管理员", "title":"定制管理员",
"description":"拥有定制权限", "description":"拥有定制权限",
"privilegeNames":[] "privilegeNames":[]
},
{
"name":"xystBizManagerRole",
"title":"业务管理员",
"description":"管理系统当中的组织机构、部门人员、权限、数据字典、工作流等功能。",
"privilegeNames":[]
} }
] ]
\ No newline at end of file
...@@ -24,4 +24,10 @@ public interface ShipInfoDao extends BaseDao { ...@@ -24,4 +24,10 @@ public interface ShipInfoDao extends BaseDao {
List<KObject> getByCode(String code, UUID id); List<KObject> getByCode(String code, UUID id);
List<KObject> getAllShipByRegionalCompanyIds(List<UUID> uuidList); List<KObject> getAllShipByRegionalCompanyIds(List<UUID> uuidList);
List<KObject> getShipViolationById(UUID id);
List<KObject> getSandMiningByShipId(UUID id);
List<KObject> getDischargingByShipId(UUID id);
} }
...@@ -27,4 +27,5 @@ public interface StationDao extends BaseDao { ...@@ -27,4 +27,5 @@ public interface StationDao extends BaseDao {
List<KObject> queryStationByRegionalCompany(UUID uuid); List<KObject> queryStationByRegionalCompany(UUID uuid);
List<KObject> getStationCameraById(UUID id1);
} }
...@@ -14,6 +14,7 @@ import com.xyst.dinas.biz.enumeration.OrganizationTypeEnum; ...@@ -14,6 +14,7 @@ import com.xyst.dinas.biz.enumeration.OrganizationTypeEnum;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Order; import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -130,6 +131,35 @@ public class ShipInfoDaoImpl extends AbstractBaseDao implements ShipInfoDao, Shi ...@@ -130,6 +131,35 @@ public class ShipInfoDaoImpl extends AbstractBaseDao implements ShipInfoDao, Shi
return (List<KObject>) template.findByCriteria(detachedCriteria); return (List<KObject>) template.findByCriteria(detachedCriteria);
} }
@Override
public List<KObject> getShipViolationById(UUID id) {
KClass bean = Amino.getStaticMetadataContext().getBean("com.xyst.dinas.safe.datamodel.ShipViolation", KClass.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName());
detachedCriteria.add(Restrictions.eq("del", false));
detachedCriteria.add(Restrictions.eq("shipInfo.id", id));
detachedCriteria.add(Restrictions.eq(BaseConstants.DISCARD, false));
return (List<KObject>) template.findByCriteria(detachedCriteria);
}
@Override
public List<KObject> getSandMiningByShipId(UUID id) {
KClass bean = Amino.getStaticMetadataContext().getBean("com.xyst.dinas.production.datamodel.SandMining", KClass.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName());
detachedCriteria.add(Restrictions.eq("del", false));
detachedCriteria.add(Restrictions.eq("ship.id", id));
return (List<KObject>) template.findByCriteria(detachedCriteria);
}
@Override
public List<KObject> getDischargingByShipId(UUID id) {
KClass bean = Amino.getStaticMetadataContext().getBean("com.xyst.dinas.production.datamodel.Discharging", KClass.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName());
LogicalExpression or = Restrictions.or(Restrictions.eq("sandMiningShip.id", id), Restrictions.eq("transportShip.id", id));
detachedCriteria.add(or);
detachedCriteria.add(Restrictions.eq("del", false));
return (List<KObject>) template.findByCriteria(detachedCriteria);
}
@Override @Override
public UUID create(KObject kObject) { public UUID create(KObject kObject) {
......
...@@ -187,11 +187,21 @@ public class StationDaoImpl extends AbstractBaseDao implements StationDao, Stat ...@@ -187,11 +187,21 @@ public class StationDaoImpl extends AbstractBaseDao implements StationDao, Stat
@Override @Override
public List<KObject> queryStationByRegionalCompany(UUID id) { public List<KObject> queryStationByRegionalCompany(UUID id) {
return template.execute(session -> { return template.execute(session -> {
Query<KObject> query = session.createQuery(" from " + StationConstant.ENTITY + " where regionalCompany.id=:id and del=:del", KObject.class); Query<KObject> query = session.createQuery(" from " + StationConstant.ENTITY + " where regionalCompany.id=:id and del=:del and stationStatus=1", KObject.class);
query.setParameter("id", id); query.setParameter("id", id);
query.setParameter("del", false); query.setParameter("del", false);
return query.getResultList(); return query.getResultList();
}); });
} }
@Override
public List<KObject> getStationCameraById(UUID id1) {
return template.execute(session -> {
Query<KObject> query = session.createQuery(" from com.xyst.dinas.camera.datamodel.CameraInfo where regionalStation.id=:id and del=:del", KObject.class);
query.setParameter("id", id1);
query.setParameter("del", false);
return query.getResultList();
});
}
} }
...@@ -56,6 +56,7 @@ public class ShipInfoServiceImpl implements ShipInfoService { ...@@ -56,6 +56,7 @@ public class ShipInfoServiceImpl implements ShipInfoService {
@Override @Override
public void deleteById(UUID id) { public void deleteById(UUID id) {
shipInfoDao.deleteById(id); shipInfoDao.deleteById(id);
//同时删除许可证上的许可证预警设置
} }
@Override @Override
...@@ -109,4 +110,20 @@ public class ShipInfoServiceImpl implements ShipInfoService { ...@@ -109,4 +110,20 @@ public class ShipInfoServiceImpl implements ShipInfoService {
} }
return GpsOOUtil.history(account, accountPassword, imei, null, startTime, endTime, null); return GpsOOUtil.history(account, accountPassword, imei, null, startTime, endTime, null);
} }
@Override
public List<KObject> getShipViolationById(UUID id) {
return shipInfoDao.getShipViolationById(id);
}
@Override
public List<KObject> getSandMiningByShipId(UUID id) {
return shipInfoDao.getSandMiningByShipId(id);
}
@Override
public List<KObject> getDischargingByShipId(UUID id) {
return shipInfoDao.getDischargingByShipId(id);
}
} }
...@@ -86,5 +86,11 @@ public class StationServiceImpl implements StationService { ...@@ -86,5 +86,11 @@ public class StationServiceImpl implements StationService {
return list; return list;
} }
@Override
public List<KObject> getStationCameraById(UUID id1) {
return stationDao.getStationCameraById(id1);
}
} }
...@@ -39,7 +39,7 @@ public class RetailInfoBuyAmountWarningCalculate implements IWarningCalculator{ ...@@ -39,7 +39,7 @@ public class RetailInfoBuyAmountWarningCalculate implements IWarningCalculator{
return false; return false;
} }
//业务数据与设置的阀值做比较,计算是否预警 //业务数据与设置的阀值做比较,计算是否预警
if (buyAmount >= Integer.parseInt(max)) { if (buyAmount >= Double.parseDouble(max)) {
warnMessage = "["+target+"]"+retailInfoName+":"+idCard+"购买总量:"+buyAmount+",超出预警值"+max; warnMessage = "["+target+"]"+retailInfoName+":"+idCard+"购买总量:"+buyAmount+",超出预警值"+max;
return true; return true;
} }
......
...@@ -29,4 +29,10 @@ public interface ShipInfoService { ...@@ -29,4 +29,10 @@ public interface ShipInfoService {
List<Map<String, Object>> getShipsTracking(List<KObject> allShipByRegionalCompanyIds) throws Exception; List<Map<String, Object>> getShipsTracking(List<KObject> allShipByRegionalCompanyIds) throws Exception;
List<Object> getShipHistoryById(UUID uuid, Long startTime, Long endTime) throws Exception; List<Object> getShipHistoryById(UUID uuid, Long startTime, Long endTime) throws Exception;
List<KObject> getShipViolationById(UUID id);
List<KObject> getSandMiningByShipId(UUID id);
List<KObject> getDischargingByShipId(UUID id);
} }
...@@ -25,4 +25,6 @@ public interface StationService { ...@@ -25,4 +25,6 @@ public interface StationService {
void deleteById(UUID id); void deleteById(UUID id);
List<KObject> queryStationByRegionalCompany(); List<KObject> queryStationByRegionalCompany();
List<KObject> getStationCameraById(UUID id1);
} }
...@@ -13,6 +13,7 @@ import com.xyst.dinas.biz.service.ShipInfoService; ...@@ -13,6 +13,7 @@ import com.xyst.dinas.biz.service.ShipInfoService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.UUID; import java.util.UUID;
@RestController() @RestController()
...@@ -90,6 +91,22 @@ public class ShipInfoController { ...@@ -90,6 +91,22 @@ public class ShipInfoController {
if(id == null){ if(id == null){
return ResponseObj.error(400,"'id' must be not null!"); return ResponseObj.error(400,"'id' must be not null!");
} }
//查询船只有没有船舶违规记录
List<KObject> violationById = shipInfoService.getShipViolationById(id);
if(violationById.size()>0){
return ResponseObj.error(500,"该船只下有船舶违规记录,暂不支持删除操作!");
}
//查询船只有没有采砂许可证数据
List<KObject> sandMiningByShipId = shipInfoService.getSandMiningByShipId(id);
if(sandMiningByShipId.size()>0){
return ResponseObj.error(500,"该船只下有采砂许可证数据,暂不支持删除操作");
}
//查询船只有没有接驳数据
List<KObject> discharging = shipInfoService.getDischargingByShipId(id);
if(discharging.size()>0){
return ResponseObj.error(500,"该船只下有采砂许可证数据,暂不支持删除操作");
}
shipInfoService.deleteById(id); shipInfoService.deleteById(id);
return ResponseObj.success("删除成功"); return ResponseObj.success("删除成功");
} }
......
...@@ -2,6 +2,7 @@ package com.xyst.dinas.biz.web; ...@@ -2,6 +2,7 @@ package com.xyst.dinas.biz.web;
import com.beecode.amino.core.Amino; import com.beecode.amino.core.Amino;
import com.beecode.bap.attachment.common.Page; import com.beecode.bap.attachment.common.Page;
import com.beecode.bap.log.LogConstants;
import com.beecode.bcp.type.KClass; import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils; import com.beecode.bcp.type.json.JSONObjectUtils;
...@@ -104,9 +105,25 @@ public class StationController { ...@@ -104,9 +105,25 @@ public class StationController {
if(StringUtils.isEmpty(kobject.getString("telephone"))){ if(StringUtils.isEmpty(kobject.getString("telephone"))){
return ResponseObj.error(400,"联系人电话不能为空"); return ResponseObj.error(400,"联系人电话不能为空");
} }
if(kobject.getUuid("id") == null){ UUID id1 = kobject.getUuid("id");
if(id1== null){
return ResponseObj.error(400,"'id' must be not null!"); return ResponseObj.error(400,"'id' must be not null!");
} }
//判断场站状态
if(0==kobject.getInt("stationStatus")){
//查询场站下是否有未禁用的用户
List<KObject> id = warehouseUserService.getAllByStationId(id1);
if(id.size()>0){
return ResponseObj.error(500,"当前场站下有人员账号,请在清空账号后修改场站状态!");
}
//查询场站下是否有未删除的摄像头
List<KObject> cameras= stationService.getStationCameraById(id1);
if(cameras.size()>0){
return ResponseObj.error(500,"当前场站下有摄像头信息,请在清空摄像头信息后修改场站状态!");
}
}
stationService.update(kobject); stationService.update(kobject);
return ResponseObj.success("修改成功"); return ResponseObj.success("修改成功");
} }
...@@ -166,7 +183,7 @@ public class StationController { ...@@ -166,7 +183,7 @@ public class StationController {
/** /**
* 根据当前登录人所在区域公司查询场站 * 根据当前登录人所在区域公司查询场站
* @param id * @param
* @return * @return
*/ */
@GetMapping("/queryStationByRegionalCompany") @GetMapping("/queryStationByRegionalCompany")
......
<model>
<header>
<type>bcp.authz.Privilege</type>
<package>com.xyst.dinas.biz.auth</package>
<name>Notification</name>
<title>查看</title>
<tags></tags>
<description></description>
</header>
<content>
<privilege type='TOKEN' target-type='' id='b6c605f4-cfbd-471e-b914-99582091a37b' category='其他/待办(区域公司)' seq='0'></privilege>
</content>
</model>
\ No newline at end of file
...@@ -8,6 +8,6 @@ ...@@ -8,6 +8,6 @@
<description></description> <description></description>
</header> </header>
<content> <content>
<privilege type='TOKEN' target-type='' id='a30f84c4-9d68-4653-86de-42d906eff7c4' category='业务管理/流域区域设置(集团)' seq='0'></privilege> <privilege type='TOKEN' target-type='' id='a30f84c4-9d68-4653-86de-42d906eff7c4' category='业务管理/流域区域设置(区域公司)' seq='0'></privilege>
</content> </content>
</model> </model>
...@@ -8,6 +8,6 @@ ...@@ -8,6 +8,6 @@
<description></description> <description></description>
</header> </header>
<content> <content>
<privilege type='TOKEN' target-type='' id='a3a1c920-a3ff-496d-89f1-241b4192b14c' category='业务管理/流域区域设置' seq='0'></privilege> <privilege type='TOKEN' target-type='' id='a3a1c920-a3ff-496d-89f1-241b4192b14c' category='业务管理/流域区域设置(区域公司)' seq='0'></privilege>
</content> </content>
</model> </model>
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://www.beecode.cn/schema/amino-metadata" xmlns:m="http://www.beecode.cn/schema/bcp-privilege">
<specification>1.0</specification>
<id>b6c605f4-cfbd-471e-b914-99582091a37b</id>
<name>com.xyst.dinas.biz.auth.Notification</name>
<title>查看</title>
<define>bcp.authz.privilege</define>
<define-version>1.0.0</define-version>
<content>
<m:privilege>
<m:type>TOKEN</m:type>
<m:category>其他/待办(区域公司)</m:category>
<m:seq>0</m:seq>
</m:privilege>
</content>
</metadata>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<content> <content>
<m:privilege> <m:privilege>
<m:type>TOKEN</m:type> <m:type>TOKEN</m:type>
<m:category>业务管理/流域区域审核(集团</m:category> <m:category>业务管理/流域区域审核(区域公司</m:category>
<m:seq>0</m:seq> <m:seq>0</m:seq>
</m:privilege> </m:privilege>
</content> </content>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<content> <content>
<m:privilege> <m:privilege>
<m:type>TOKEN</m:type> <m:type>TOKEN</m:type>
<m:category>业务管理/流域区域设置(集团</m:category> <m:category>业务管理/流域区域设置(区域公司</m:category>
<m:seq>0</m:seq> <m:seq>0</m:seq>
</m:privilege> </m:privilege>
</content> </content>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<content> <content>
<m:privilege> <m:privilege>
<m:type>TOKEN</m:type> <m:type>TOKEN</m:type>
<m:category>业务管理/流域区域设置</m:category> <m:category>业务管理/流域区域设置(区域公司)</m:category>
<m:seq>0</m:seq> <m:seq>0</m:seq>
</m:privilege> </m:privilege>
</content> </content>
......
...@@ -46,6 +46,16 @@ ...@@ -46,6 +46,16 @@
<m:desc></m:desc> <m:desc></m:desc>
</m:field> </m:field>
<m:field> <m:field>
<m:name>station.stationStatus</m:name>
<m:title>场站状态</m:title>
<m:type>int</m:type>
<m:ref>
<m:name>com.xyst.dinas.biz.datamodel.Station</m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>station.regionalCompany.id</m:name> <m:name>station.regionalCompany.id</m:name>
<m:title>区域公司</m:title> <m:title>区域公司</m:title>
<m:type>uuid</m:type> <m:type>uuid</m:type>
......
...@@ -216,8 +216,8 @@ public class ContractDao { ...@@ -216,8 +216,8 @@ public class ContractDao {
if(contractState!=null) hql.append("and contractState =:contractState "); if(contractState!=null) hql.append("and contractState =:contractState ");
if(projectId!=null) hql.append("and project.id =:projectId "); if(projectId!=null) hql.append("and project.id =:projectId ");
if(purchaseSandUnitId!=null) hql.append("and purchaseSandUnit.id =:purchaseSandUnitId "); if(purchaseSandUnitId!=null) hql.append("and purchaseSandUnit.id =:purchaseSandUnitId ");
if(signDateStart!=null) hql.append("and signDateStart >=:signDateStart "); if(signDateStart!=null) hql.append("and signDate >=:signDateStart ");
if(signDateEnd!=null) hql.append("and signDateEnd <=:signDateEnd "); if(signDateEnd!=null) hql.append("and signDate <=:signDateEnd ");
if(approveState!=null) hql.append("and approveState <=:approveState "); if(approveState!=null) hql.append("and approveState <=:approveState ");
return template.execute(session -> { return template.execute(session -> {
...@@ -316,4 +316,20 @@ public class ContractDao { ...@@ -316,4 +316,20 @@ public class ContractDao {
return flag; return flag;
} }
public KObject queryContractByProjectId(UUID projectId) {
return (KObject)template.execute(new HibernateCallback<KObject>() {
@Override
public KObject doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + ContractConstant.ENTITY_CONTRACT_INFO + " where (discard is null or discard = 0) and project.id =:projectId ", KObject.class);
query.setParameter("projectId", projectId);
//query.setParameter("contractState", ContractStateEnum.EXECUTING.name());
List<KObject> resultList = query.getResultList();
if (resultList.size() > 0) {
return resultList.get(0);
}
return null;
}
});
}
} }
...@@ -36,6 +36,8 @@ import com.beecode.inz.message.enumeration.ParterType; ...@@ -36,6 +36,8 @@ import com.beecode.inz.message.enumeration.ParterType;
import com.beecode.inz.message.service.RemindService; import com.beecode.inz.message.service.RemindService;
import com.beecode.inz.workflow.service.InzWorkflowService; import com.beecode.inz.workflow.service.InzWorkflowService;
import com.xyst.dinas.biz.dao.DinasOrganizationDao; import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.warn.BaseBusinessWarn;
import com.xyst.dinas.biz.warn.WarnSettingConstant;
import com.xyst.dinas.biz.warn.WarnSettingEntity; import com.xyst.dinas.biz.warn.WarnSettingEntity;
import com.xyst.dinas.biz.warn.WarnTargetTypeEnum; import com.xyst.dinas.biz.warn.WarnTargetTypeEnum;
import com.xyst.dinas.biz.warn.dao.WarnSettingDao; import com.xyst.dinas.biz.warn.dao.WarnSettingDao;
...@@ -45,7 +47,9 @@ import com.xyst.dinas.contract.enumeration.ContractStateEnum; ...@@ -45,7 +47,9 @@ import com.xyst.dinas.contract.enumeration.ContractStateEnum;
import com.xyst.dinas.contract.internal.dao.ContractDao; import com.xyst.dinas.contract.internal.dao.ContractDao;
import com.xyst.dinas.contract.internal.dao.ContractInfoDao; import com.xyst.dinas.contract.internal.dao.ContractInfoDao;
import com.xyst.dinas.contract.service.ContractService; import com.xyst.dinas.contract.service.ContractService;
import com.xyst.dinas.contract.warn.ContractExpireWarningCalculator;
import com.xyst.dinas.contract.warn.ContractWarnConst; import com.xyst.dinas.contract.warn.ContractWarnConst;
import com.xyst.dinas.contract.warn.DinasCountWarningCalculate;
import com.xyst.dinas.project.dao.ProjectFiledDao; import com.xyst.dinas.project.dao.ProjectFiledDao;
import com.xyst.dinas.project.dao.PurchaseSandCompanyDao; import com.xyst.dinas.project.dao.PurchaseSandCompanyDao;
...@@ -87,6 +91,9 @@ public class ContractServiceImpl implements ContractService { ...@@ -87,6 +91,9 @@ public class ContractServiceImpl implements ContractService {
@Autowired @Autowired
private RemindService remindService; private RemindService remindService;
@Autowired
private WarningService warningService;
@Override @Override
@Transactional @Transactional
...@@ -304,7 +311,7 @@ public class ContractServiceImpl implements ContractService { ...@@ -304,7 +311,7 @@ public class ContractServiceImpl implements ContractService {
@Override @Override
public void afterApprovedForUpdate(KObject contract) { public void afterApprovedForUpdate(KObject contract) {
List<KObject> executingContracts = contractDao.getExecutingContractByContractInfoId(contract.getUuid("contractId")); List<KObject> executingContracts = contractDao.getExecutingContractByContractInfoId(contract.getUuid(ContractConstant.CONTRACT_ID));
if(executingContracts.size() != 1){ if(executingContracts.size() != 1){
//不该出现的情况,需要查明 //不该出现的情况,需要查明
logger.error("不该出现的情况,需要查明:合同["+contract.getUuid("id").toString()+"]是变更审批,审批完成后发现原合同没有执行中的"); logger.error("不该出现的情况,需要查明:合同["+contract.getUuid("id").toString()+"]是变更审批,审批完成后发现原合同没有执行中的");
...@@ -313,7 +320,7 @@ public class ContractServiceImpl implements ContractService { ...@@ -313,7 +320,7 @@ public class ContractServiceImpl implements ContractService {
oldContract.set(ContractConstant.CONTRACT_STATE,ContractStateEnum.MODIFIED.name()); oldContract.set(ContractConstant.CONTRACT_STATE,ContractStateEnum.MODIFIED.name());
contractInfoDao.update(oldContract); contractInfoDao.update(oldContract);
List<KObject> contracts = contractDao.getContractsByContractInfoIdOrderDesc(contract.getUuid("contractId")); List<KObject> contracts = contractDao.getContractsByContractInfoIdOrderDesc(contract.getUuid(ContractConstant.CONTRACT_ID));
int contractVersion = contracts.size()-1; int contractVersion = contracts.size()-1;
contract.set(ContractConstant.CONTRACT_STATE,ContractStateEnum.EXECUTING.name()); contract.set(ContractConstant.CONTRACT_STATE,ContractStateEnum.EXECUTING.name());
contract.set("contractVersion",contractVersion); contract.set("contractVersion",contractVersion);
...@@ -321,10 +328,32 @@ public class ContractServiceImpl implements ContractService { ...@@ -321,10 +328,32 @@ public class ContractServiceImpl implements ContractService {
contractInfoDao.update(contract); contractInfoDao.update(contract);
KObject contractInfo = contractInfoDao.load(contract.getUuid("contractId")); KObject contractInfo = contractInfoDao.load(contract.getUuid(ContractConstant.CONTRACT_ID));
contractInfo.set(ContractConstant.CURRENT_VERSION,contractVersion); contractInfo.set(ContractConstant.CURRENT_VERSION,contractVersion);
contractInfoDao.update(contractInfo); contractInfoDao.update(contractInfo);
//变更有可能修改砂石量,造成砂石余量变化,所以要重新触发预警
List<KObject> detials = contract.get("contractDetails").toList();
for (KObject detail : detials) {
String dinasTypeName = detail.get("dinasType").getString("dinasTypeName");
BaseBusinessWarn warn = warningService.createWarn("合同", contract.getUuid(ContractConstant.CONTRACT_ID), dinasTypeName);
warn.setWarningCalculate(new DinasCountWarningCalculate(detail.getBigDecimal(ContractConstant.DINAS_AMOUNT).doubleValue()));
warn.warn();
}
//变更有可能修改合同结束时间,所以要重新触发预警
BaseBusinessWarn warn = warningService.createWarn("合同", contract.getUuid(ContractConstant.CONTRACT_ID), ContractWarnConst.warningTarget2);
warn.setWarningCalculate(new ContractExpireWarningCalculator());
warn.warn();
List<KObject>wss = warningService.queryWarnSettings(ContractWarnConst.billType, contract.getUuid(ContractConstant.CONTRACT_ID), null);
for(KObject ws : wss){
String memo = ws.getString(WarnSettingConstant.memo);
memo = memo.replaceAll(oldContract.getUuid(CommonConstants.ID).toString(),contract.getUuid(CommonConstants.ID).toString());
ws.set(WarnSettingConstant.memo,memo);
contractInfoDao.update(ws);
}
//合同审批通过后,自动新增砂石余量预警设置---变更需要新旧对比,原有的不动,少了的种类废弃预警设置(按理说不可能有),多了的种类新建设置 //合同审批通过后,自动新增砂石余量预警设置---变更需要新旧对比,原有的不动,少了的种类废弃预警设置(按理说不可能有),多了的种类新建设置
//TODO //TODO
...@@ -523,4 +552,10 @@ public class ContractServiceImpl implements ContractService { ...@@ -523,4 +552,10 @@ public class ContractServiceImpl implements ContractService {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
@Override
public KObject queryContractByProjectId(UUID projectId) {
KObject obj = contractDao.queryContractByProjectId(projectId);
return obj;
}
} }
...@@ -122,4 +122,6 @@ public interface ContractService { ...@@ -122,4 +122,6 @@ public interface ContractService {
* @param KObject contract 对应的合同 * @param KObject contract 对应的合同
*/ */
void remindToCreatorApproved(String result,KObject contract); void remindToCreatorApproved(String result,KObject contract);
KObject queryContractByProjectId(UUID fromString);
} }
...@@ -2,6 +2,7 @@ package com.xyst.dinas.contract.warn; ...@@ -2,6 +2,7 @@ package com.xyst.dinas.contract.warn;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.amino.core.Amino;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.warn.IWarningCalculator; import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting; import com.xyst.dinas.biz.warn.WarnSetting;
...@@ -39,6 +40,7 @@ public class DinasCountWarningCalculate implements IWarningCalculator{ ...@@ -39,6 +40,7 @@ public class DinasCountWarningCalculate implements IWarningCalculator{
String target = warnSetting.getTarget(); String target = warnSetting.getTarget();
if(min==null || min.trim().length()==0) return false; if(min==null || min.trim().length()==0) return false;
contractService = Amino.getApplicationContext().getBean(ContractService.class);
KObject contractInfo = contractService.queryContractInfo(warnSetting.getBillId()); KObject contractInfo = contractService.queryContractInfo(warnSetting.getBillId());
KObject contract = contractService.getExecutingContractByContractInfoId(contractInfo.getUuid("id")); KObject contract = contractService.getExecutingContractByContractInfoId(contractInfo.getUuid("id"));
String purchaseSandUnitName = contract.get("purchaseSandUnit").getString("name"); String purchaseSandUnitName = contract.get("purchaseSandUnit").getString("name");
......
...@@ -17,6 +17,10 @@ import org.springframework.web.bind.annotation.GetMapping; ...@@ -17,6 +17,10 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; 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 org.springframework.web.bind.annotation.RestController;
import com.beecode.amino.core.Amino; import com.beecode.amino.core.Amino;
...@@ -226,14 +230,19 @@ public class ContractController { ...@@ -226,14 +230,19 @@ public class ContractController {
} }
/** /**
* 合同更改状态 * 根据项目id查询合同
* @param contractId * @param projectId
* @return * @param contract
*/ * @return
@PostMapping("/contract/updateContractState") */
public Object updateContractState(@RequestBody String contractState) { @ResponseBody
JSONObject jsonObject = new JSONObject(contractState); @RequestMapping(value = "/contract/queryContractByProjectId", method = RequestMethod.GET)
return contractService.updateContractState(jsonObject); public Object queryContractByProjectId(@RequestParam("projectId") String projectId) {
} KObject kObject = contractService.queryContractByProjectId(UUID.fromString(projectId));
if (kObject != null) {
return ResponseObj.success("success", kObject.getUuid("id"));
}
return ResponseObj.success("success", null);
}
} }
\ No newline at end of file
...@@ -69,6 +69,15 @@ public class FileSharedSettingServiceImpl implements FileSharedSettingService { ...@@ -69,6 +69,15 @@ public class FileSharedSettingServiceImpl implements FileSharedSettingService {
Stream<LevelValuesReq> levelValuesReqStream = levelValuesList.stream().filter(a -> a.getValue() != null); Stream<LevelValuesReq> levelValuesReqStream = levelValuesList.stream().filter(a -> a.getValue() != null);
KObject load = fileSharedSettingDao.load(settingId.toString()); KObject load = fileSharedSettingDao.load(settingId.toString());
String folderInfo = load.getString("folderGroup"); String folderInfo = load.getString("folderGroup");
if(StringUtils.isEmpty(folderInfo)){
FolderInfo folderInfo1 = new FolderInfo();
folderInfo1.setName("全部");
folderInfo1.setLevel(1);
folderInfo1.setNextLevel(null);
folderInfo1.setPreviousLevel(0);
folderInfo1.setShowName("全部");
folderInfo1.setType("string");
}
List<LevelValues> folderLevelValueSettingDateBase = JsonUtil.jsonToList(folderInfo, LevelValues.class); List<LevelValues> folderLevelValueSettingDateBase = JsonUtil.jsonToList(folderInfo, LevelValues.class);
LevelValues nowLevelValue = null; LevelValues nowLevelValue = null;
//排除掉传null的value //排除掉传null的value
......
...@@ -8,6 +8,6 @@ ...@@ -8,6 +8,6 @@
<description></description> <description></description>
</header> </header>
<content> <content>
<privilege type='TOKEN' target-type='' id='ae29a89f-29ec-442f-b60c-0c3ed0332609' category='资金/银行充值明细' seq='0'></privilege> <privilege type='TOKEN' target-type='' id='4e4e7fe6-d903-43b4-9e3f-b947534dce9b' category='资金/银行充值明细' seq='0'></privilege>
</content> </content>
</model> </model>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://www.beecode.cn/schema/amino-metadata" xmlns:m="http://www.beecode.cn/schema/bcp-privilege"> <metadata xmlns="http://www.beecode.cn/schema/amino-metadata" xmlns:m="http://www.beecode.cn/schema/bcp-privilege">
<specification>1.0</specification> <specification>1.0</specification>
<id>ae29a89f-29ec-442f-b60c-0c3ed0332609</id> <id>4e4e7fe6-d903-43b4-9e3f-b947534dce9b</id>
<name>com.xyst.dinas.finance.auth.BankRechargeDetailList</name> <name>com.xyst.dinas.finance.auth.BankRechargeDetailList</name>
<title>列表</title> <title>列表</title>
<define>bcp.authz.privilege</define> <define>bcp.authz.privilege</define>
......
...@@ -105,7 +105,9 @@ public class PriceAdjustmentDaoImpl extends AbstractBaseDao implements PriceAdju ...@@ -105,7 +105,9 @@ public class PriceAdjustmentDaoImpl extends AbstractBaseDao implements PriceAdju
KClass bean = Amino.getStaticMetadataContext().getBean(PriceAdjustmentConstant.ENTITY, KClass.class); KClass bean = Amino.getStaticMetadataContext().getBean(PriceAdjustmentConstant.ENTITY, KClass.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName()); DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName());
detachedCriteria.add(Restrictions.eq(BaseConstants.DEL, false)); detachedCriteria.add(Restrictions.eq(BaseConstants.DEL, false));
detachedCriteria.createAlias("station","station");
detachedCriteria.add(Restrictions.eq("applyStatus", BizProcessState.DONE_WITH_AGREE.getValue())); detachedCriteria.add(Restrictions.eq("applyStatus", BizProcessState.DONE_WITH_AGREE.getValue()));
detachedCriteria.add(Restrictions.eq("station.stationStatus", 1));
detachedCriteria.add(Restrictions.eq("adjustmentStatus", PriceAdjustmentAdjustmentStatusEnum.PROCESSING.getValue())); detachedCriteria.add(Restrictions.eq("adjustmentStatus", PriceAdjustmentAdjustmentStatusEnum.PROCESSING.getValue()));
detachedCriteria.addOrder(Order.desc("adjustmentDate")); detachedCriteria.addOrder(Order.desc("adjustmentDate"));
return detachedCriteria; return detachedCriteria;
......
...@@ -104,6 +104,7 @@ public class DischargingDaoImpl extends AbstractBaseDao implements DischargingDa ...@@ -104,6 +104,7 @@ public class DischargingDaoImpl extends AbstractBaseDao implements DischargingDa
if (null != endDate) { if (null != endDate) {
detachedCriteria.add(Restrictions.le("dischargingTime", endDate)); detachedCriteria.add(Restrictions.le("dischargingTime", endDate));
} }
detachedCriteria.add(Restrictions.eq("type", 0));
detachedCriteria.addOrder(Order.desc("createTime")); detachedCriteria.addOrder(Order.desc("createTime"));
int offset = page.getPageSize() * (page.getPageNo() - 1); int offset = page.getPageSize() * (page.getPageNo() - 1);
page.setTotal(template.findByCriteria(detachedCriteria).size()); page.setTotal(template.findByCriteria(detachedCriteria).size());
......
...@@ -24,6 +24,16 @@ ...@@ -24,6 +24,16 @@
name='mappingType' value='many-to-one'> name='mappingType' value='many-to-one'>
</annotation> </annotation>
</attribute> </attribute>
<attribute id='55d6b108-a847-47fe-8342-c8f2104fe512' name='station' columnName='station_id'
title='所属场站' type='com.xyst.dinas.biz.datamodel.Station' default='' precision=''
isArray='false'>
<annotation id='d73d9dbd-f330-4723-835c-1d12d932bc34' attributeId='1f63101d-953e-4014-83e0-b171bd519524'
name='length' value='undefined'>
</annotation>
<annotation id='045cfeb7-b77f-4620-996c-04662a180ca8' attributeId='0e6063b6-b838-4ac6-b2fd-e9110643fea9'
name='mappingType' value='many-to-one'>
</annotation>
</attribute>
<attribute id='e8c32a2f-a280-452c-9f39-853cd8f8443d' name='checkDate' columnName='check_date' <attribute id='e8c32a2f-a280-452c-9f39-853cd8f8443d' name='checkDate' columnName='check_date'
title='检查日期' type='datetime' default='' precision='' isArray='false'> title='检查日期' type='datetime' default='' precision='' isArray='false'>
......
...@@ -45,6 +45,26 @@ ...@@ -45,6 +45,26 @@
</ref> </ref>
<desc></desc> <desc></desc>
</field> </field>
<field>
<name>station.id</name>
<title>场站(检查区域)</title>
<type>uuid</type>
<ref>
<name>com.xyst.dinas.biz.datamodel.Station</name>
<type></type>
</ref>
<desc></desc>
</field>
<field>
<name>station.stationName</name>
<title>场站(检查区域)</title>
<type>string</type>
<ref>
<name>com.xyst.dinas.biz.datamodel.Station</name>
<type></type>
</ref>
<desc></desc>
</field>
<field title='id'> <field title='id'>
<name>id</name> <name>id</name>
<type>uuid</type> <type>uuid</type>
......
...@@ -7,7 +7,7 @@ import com.beecode.bcp.type.KObject; ...@@ -7,7 +7,7 @@ import com.beecode.bcp.type.KObject;
public interface InventoryDao { public interface InventoryDao {
List<KObject> listAllByRegionalCompany(UUID regionalCompany, boolean includeDiscard); List<KObject> listAllByRegionalCompany(UUID regionalCompany, boolean includeDiscard, boolean includeStopBusiness);
void update(KObject kobj); void update(KObject kobj);
......
...@@ -20,18 +20,30 @@ public class InventoryDaoImpl implements InventoryDao { ...@@ -20,18 +20,30 @@ public class InventoryDaoImpl implements InventoryDao {
private HibernateOperations template; private HibernateOperations template;
@Override @Override
public List<KObject> listAllByRegionalCompany(UUID regionalCompany, boolean includeDiscard) { public List<KObject> listAllByRegionalCompany(UUID regionalCompany, boolean includeDiscard, boolean includeStopBusiness) {
return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() { return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() {
@Override @Override
public List<KObject> doInHibernate(Session session) throws HibernateException { public List<KObject> doInHibernate(Session session) throws HibernateException {
if(includeDiscard) { if(includeDiscard) {
Query<KObject> query = session.createQuery("from " + InventoryConstant.INVENTORY_ENTITY + " where regionalCompany.id =:regionalCompany", KObject.class); if(includeStopBusiness) {
query.setParameter("regionalCompany", regionalCompany); Query<KObject> query = session.createQuery("from " + InventoryConstant.INVENTORY_ENTITY + " where regionalCompany.id =:regionalCompany", KObject.class);
return query.getResultList(); query.setParameter("regionalCompany", regionalCompany);
return query.getResultList();
} else {
Query<KObject> query = session.createQuery("from " + InventoryConstant.INVENTORY_ENTITY + " where regionalCompany.id =:regionalCompany and station.stationStatus = 1", KObject.class);
query.setParameter("regionalCompany", regionalCompany);
return query.getResultList();
}
} else { } else {
Query<KObject> query = session.createQuery("from " + InventoryConstant.INVENTORY_ENTITY + " where (discard is null or discard = 0) and regionalCompany.id =:regionalCompany", KObject.class); if(includeStopBusiness) {
query.setParameter("regionalCompany", regionalCompany); Query<KObject> query = session.createQuery("from " + InventoryConstant.INVENTORY_ENTITY + " where (discard is null or discard = 0) and regionalCompany.id =:regionalCompany", KObject.class);
return query.getResultList(); query.setParameter("regionalCompany", regionalCompany);
return query.getResultList();
} else {
Query<KObject> query = session.createQuery("from " + InventoryConstant.INVENTORY_ENTITY + " where (discard is null or discard = 0) and regionalCompany.id =:regionalCompany and station.stationStatus = 1", KObject.class);
query.setParameter("regionalCompany", regionalCompany);
return query.getResultList();
}
} }
} }
}); });
......
...@@ -76,7 +76,7 @@ public class InventoryServiceImpl implements InventoryService { ...@@ -76,7 +76,7 @@ public class InventoryServiceImpl implements InventoryService {
@Transactional @Transactional
public List<StationDinasTypeRelation> getInventoryByRegionalCompany(UUID regionalCompany) { public List<StationDinasTypeRelation> getInventoryByRegionalCompany(UUID regionalCompany) {
updateInventoryBaseInfo(regionalCompany); updateInventoryBaseInfo(regionalCompany);
List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, false); List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, false, false);
List<StationDinasTypeRelation> result = new ArrayList<StationDinasTypeRelation>(); List<StationDinasTypeRelation> result = new ArrayList<StationDinasTypeRelation>();
for(KObject item : inventory) { for(KObject item : inventory) {
StationDinasTypeRelation r = new StationDinasTypeRelation(); StationDinasTypeRelation r = new StationDinasTypeRelation();
...@@ -160,7 +160,7 @@ public class InventoryServiceImpl implements InventoryService { ...@@ -160,7 +160,7 @@ public class InventoryServiceImpl implements InventoryService {
public void updateInventoryBaseInfo(UUID regionalCompany) { public void updateInventoryBaseInfo(UUID regionalCompany) {
List<StationDinasTypeRelation> relation = getStationAndDinasTypeRel(regionalCompany); List<StationDinasTypeRelation> relation = getStationAndDinasTypeRel(regionalCompany);
//根据最新的区域公司与砂石对应关系,更新库中的数据。添加新的砂石类型,废弃没用的砂石类型 //根据最新的区域公司与砂石对应关系,更新库中的数据。添加新的砂石类型,废弃没用的砂石类型
List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, true); List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, true, true);
for(StationDinasTypeRelation r : relation) { for(StationDinasTypeRelation r : relation) {
UUID stationId = r.getStationId(); UUID stationId = r.getStationId();
UUID dinasTypeId = r.getDinasTypeId(); UUID dinasTypeId = r.getDinasTypeId();
...@@ -243,7 +243,7 @@ public class InventoryServiceImpl implements InventoryService { ...@@ -243,7 +243,7 @@ public class InventoryServiceImpl implements InventoryService {
public List<InventoryLog> queryLog(UUID regionalCompany) { public List<InventoryLog> queryLog(UUID regionalCompany) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<InventoryLog> result = new ArrayList<InventoryLog>(); List<InventoryLog> result = new ArrayList<InventoryLog>();
List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, false); List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, false, true);
List<String> businessObjectId = new ArrayList<String>(); List<String> businessObjectId = new ArrayList<String>();
for(KObject i : inventory) { for(KObject i : inventory) {
businessObjectId.add(i.getUuid("id").toString()); businessObjectId.add(i.getUuid("id").toString());
......
...@@ -12,6 +12,8 @@ import java.util.stream.Collectors; ...@@ -12,6 +12,8 @@ import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.constant.PlanningCycleConstant;
import com.xyst.dinas.biz.service.PlanningCycleService;
import com.xyst.dinas.contract.service.ContractService; import com.xyst.dinas.contract.service.ContractService;
import com.xyst.dinas.sales.dao.NeedPlanDao; import com.xyst.dinas.sales.dao.NeedPlanDao;
import com.xyst.dinas.sales.dao.SalesPlanDao; import com.xyst.dinas.sales.dao.SalesPlanDao;
...@@ -29,6 +31,9 @@ public class NeedPlanServiceImpl implements NeedPlanService { ...@@ -29,6 +31,9 @@ public class NeedPlanServiceImpl implements NeedPlanService {
@Autowired @Autowired
private ContractService contractService; private ContractService contractService;
@Autowired
private PlanningCycleService planningCycleService;
@Override @Override
public KObject queryNeedPlanAmountByDinasType(UUID planningCycleId,UUID contractId, UUID dinasTypeId) { public KObject queryNeedPlanAmountByDinasType(UUID planningCycleId,UUID contractId, UUID dinasTypeId) {
...@@ -169,4 +174,16 @@ public class NeedPlanServiceImpl implements NeedPlanService { ...@@ -169,4 +174,16 @@ public class NeedPlanServiceImpl implements NeedPlanService {
return planList; return planList;
} }
@Override
public KObject querySalePlanByCycleId(UUID planningCycleId) {
//获取计划周期
KObject planningCycle = planningCycleService.load(planningCycleId); //计划周期
Date startTime = planningCycle.getDate(PlanningCycleConstant.startTime);
Date endTime = planningCycle.getDate(PlanningCycleConstant.endTime);
//根据开始时间和结束时间查询销售计划
KObject salesPlanByTimeKObject = salesPlanDao.querySalesPlanByTime(startTime, endTime);
return salesPlanByTimeKObject;
}
} }
...@@ -28,4 +28,6 @@ public interface NeedPlanService { ...@@ -28,4 +28,6 @@ public interface NeedPlanService {
List<KObject> getProjectByNowPlanningCycle(UUID purchaseSandUnitId, UUID planningCycleId); List<KObject> getProjectByNowPlanningCycle(UUID purchaseSandUnitId, UUID planningCycleId);
Object queryNeedPlanAmountByCycleId(UUID fromString, UUID fromString2); Object queryNeedPlanAmountByCycleId(UUID fromString, UUID fromString2);
KObject querySalePlanByCycleId(UUID fromString);
} }
...@@ -71,5 +71,21 @@ public class NeedPlanController { ...@@ -71,5 +71,21 @@ public class NeedPlanController {
Object object = needPlanService.queryNeedPlanAmountByCycleId(UUID.fromString(planningCycleId), UUID.fromString(projectId)); Object object = needPlanService.queryNeedPlanAmountByCycleId(UUID.fromString(planningCycleId), UUID.fromString(projectId));
return ResponseObj.success("success", object); return ResponseObj.success("success", object);
} }
/**
* 根据计划周期和项目查询本期分配量和实际销售量
* @param planningCycleId
* @param projectId
* @return
*/
@ResponseBody
@RequestMapping(value = "/sand/user/needplan/querySalePlanByCycleId", method = RequestMethod.GET)
public Object querySalePlanByCycleId(@RequestParam("planningCycleId") String planningCycleId) {
KObject kObject = needPlanService.querySalePlanByCycleId(UUID.fromString(planningCycleId));
if (kObject != null) {
return ResponseObj.success("success", kObject.getUuid("id"));
}
return ResponseObj.success("success", null);
}
} }
...@@ -49,7 +49,8 @@ ...@@ -49,7 +49,8 @@
} }
], ],
"table": { "table": {
"expand": false, "selectType": "MULTI",
"serialNumber": "series",
"pageSize": 10, "pageSize": 10,
"columns": [ "columns": [
{ {
......
...@@ -49,7 +49,8 @@ ...@@ -49,7 +49,8 @@
} }
], ],
"table": { "table": {
"expand": false, "selectType": "MULTI",
"serialNumber": "series",
"pageSize": 10, "pageSize": 10,
"columns": [ "columns": [
{ {
......
...@@ -93,6 +93,8 @@ ...@@ -93,6 +93,8 @@
"type": "VALUE", "type": "VALUE",
"title": "购砂单位", "title": "购砂单位",
"key": "companyName", "key": "companyName",
"width": 250,
"tooltip": true,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -104,6 +106,8 @@ ...@@ -104,6 +106,8 @@
"type": "VALUE", "type": "VALUE",
"title": "项目名称", "title": "项目名称",
"key": "projectName", "key": "projectName",
"width": 250,
"tooltip": true,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -115,6 +119,7 @@ ...@@ -115,6 +119,7 @@
"type": "VALUE", "type": "VALUE",
"title": "项目类型", "title": "项目类型",
"key": "projectTypeTitle", "key": "projectTypeTitle",
"width": 100,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -150,6 +155,7 @@ ...@@ -150,6 +155,7 @@
"type": "VALUE", "type": "VALUE",
"title": "合同量(吨)", "title": "合同量(吨)",
"key": "dinasAmount", "key": "dinasAmount",
"width": 130,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -161,7 +167,7 @@ ...@@ -161,7 +167,7 @@
"type": "VALUE", "type": "VALUE",
"title": "需用总量(吨)", "title": "需用总量(吨)",
"key": "needPlanTotalAmount", "key": "needPlanTotalAmount",
"width": 150, "width": 135,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -173,7 +179,7 @@ ...@@ -173,7 +179,7 @@
"type": "VALUE", "type": "VALUE",
"title": "销售总量(吨)", "title": "销售总量(吨)",
"key": "saleDinasAmount", "key": "saleDinasAmount",
"width": 150, "width": 135,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -185,6 +191,7 @@ ...@@ -185,6 +191,7 @@
"type": "VALUE", "type": "VALUE",
"title": "剩余量(吨)", "title": "剩余量(吨)",
"key": "surplusAmount", "key": "surplusAmount",
"width": 130,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
......
...@@ -93,6 +93,8 @@ ...@@ -93,6 +93,8 @@
"type": "VALUE", "type": "VALUE",
"title": "购砂单位", "title": "购砂单位",
"key": "companyName", "key": "companyName",
"width": 250,
"tooltip": true,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -104,6 +106,8 @@ ...@@ -104,6 +106,8 @@
"type": "VALUE", "type": "VALUE",
"title": "项目名称", "title": "项目名称",
"key": "projectName", "key": "projectName",
"width": 250,
"tooltip": true,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -115,6 +119,7 @@ ...@@ -115,6 +119,7 @@
"type": "VALUE", "type": "VALUE",
"title": "项目类型", "title": "项目类型",
"key": "projectTypeTitle", "key": "projectTypeTitle",
"width": 100,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -150,6 +155,7 @@ ...@@ -150,6 +155,7 @@
"type": "VALUE", "type": "VALUE",
"title": "合同量(吨)", "title": "合同量(吨)",
"key": "dinasAmount", "key": "dinasAmount",
"width": 130,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -161,7 +167,7 @@ ...@@ -161,7 +167,7 @@
"type": "VALUE", "type": "VALUE",
"title": "需用总量(吨)", "title": "需用总量(吨)",
"key": "needPlanTotalAmount", "key": "needPlanTotalAmount",
"width": 150, "width": 135,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -173,7 +179,7 @@ ...@@ -173,7 +179,7 @@
"type": "VALUE", "type": "VALUE",
"title": "销售总量(吨)", "title": "销售总量(吨)",
"key": "saleDinasAmount", "key": "saleDinasAmount",
"width": 150, "width": 135,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
...@@ -185,6 +191,7 @@ ...@@ -185,6 +191,7 @@
"type": "VALUE", "type": "VALUE",
"title": "剩余量(吨)", "title": "剩余量(吨)",
"key": "surplusAmount", "key": "surplusAmount",
"width": 130,
"columnType": { "columnType": {
"name": "select", "name": "select",
"data": { "data": {
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
AND bsi.del = 0 AND bsi.del = 0
and dpd.type = 0 and dpd.type = 0
AND psm.STATUS = 1 AND psm.STATUS = 1
and psm.sandMiningAreaType in (1,3,4)
GROUP BY GROUP BY
psm.id psm.id
</sql> </sql>
......
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