代码上传
This commit is contained in:
6
seeyon/WEB-INF/assetsmap/pluginCfg.xml
Normal file
6
seeyon/WEB-INF/assetsmap/pluginCfg.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plugin>
|
||||
<id>assetsmap</id>
|
||||
<name>租赁资产地图</name>
|
||||
<category>20260411</category>
|
||||
</plugin>
|
||||
7
seeyon/WEB-INF/assetsmap/spring/spring.xml
Normal file
7
seeyon/WEB-INF/assetsmap/spring/spring.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
<beans default-autowire="byName">
|
||||
<bean id="assetsMapPlugin" class="com.seeyon.apps.assetsmap.AssetsMapPlugin"/>
|
||||
<bean id="assetsMapConfigProvider" class="com.seeyon.apps.assetsmap.config.AssetsMapConfigProvider"/>
|
||||
<bean id="assetsQueryService" class="com.seeyon.apps.assetsmap.service.AssetsQueryService"/>
|
||||
</beans>
|
||||
41
src/main/java/com/seeyon/apps/assetsmap/AssetsMapPlugin.java
Normal file
41
src/main/java/com/seeyon/apps/assetsmap/AssetsMapPlugin.java
Normal file
@@ -0,0 +1,41 @@
|
||||
package com.seeyon.apps.assetsmap;
|
||||
|
||||
import com.seeyon.apps.assetsmap.constants.AssetsMapConstans;
|
||||
import com.seeyon.apps.common.plugin.api.APluginInfoApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
|
||||
public class AssetsMapPlugin extends APluginInfoApi {
|
||||
|
||||
public AssetsMapPlugin() {
|
||||
}
|
||||
|
||||
public String getPluginId() {
|
||||
return AssetsMapConstans.getPluginId();
|
||||
}
|
||||
|
||||
public String getCreateUser() {
|
||||
return "橙阳科技";
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return "租赁资产地图";
|
||||
}
|
||||
|
||||
public ConfigVo getDefaultConfig() {
|
||||
ConfigVo configVo = new ConfigVo();
|
||||
AssetsMapConstans[] var2 = AssetsMapConstans.values();
|
||||
int var3 = var2.length;
|
||||
|
||||
for(int var4 = 0; var4 < var3; ++var4) {
|
||||
AssetsMapConstans value = var2[var4];
|
||||
if (value != AssetsMapConstans.plugin) {
|
||||
configVo.getDevParams().put(value.name(), value.getDefaultValue());
|
||||
configVo.getProdParams().put(value.name(), value.getDefaultValue());
|
||||
configVo.getParamMap().put(value.name(), value.getDescription());
|
||||
}
|
||||
}
|
||||
|
||||
return configVo;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.seeyon.apps.assetsmap.config;
|
||||
|
||||
import com.seeyon.apps.assetsmap.constants.AssetsMapConstans;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
|
||||
|
||||
public class AssetsMapConfigProvider {
|
||||
|
||||
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
|
||||
|
||||
public String getBizConfigByKey(AssetsMapConstans key) {
|
||||
ConfigVo config = cstConfigApi.getConfig(AssetsMapConstans.getPluginId());
|
||||
return config.getParamVal(key.name());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.seeyon.apps.assetsmap.constants;
|
||||
|
||||
public enum AssetsMapConstans {
|
||||
plugin("assetsmap",""),
|
||||
ASSETSFORMNO("assetsformno","资产表单"),
|
||||
;
|
||||
|
||||
private String defaultValue;
|
||||
private String description;
|
||||
|
||||
AssetsMapConstans(String defaultValue,String description){
|
||||
this.defaultValue = defaultValue;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public static String getPluginId() {
|
||||
return plugin.defaultValue;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
package com.seeyon.apps.assetsmap.service;
|
||||
|
||||
import com.seeyon.apps.assetsmap.config.AssetsMapConfigProvider;
|
||||
import com.seeyon.apps.assetsmap.constants.AssetsMapConstans;
|
||||
import com.seeyon.apps.assetsmap.vo.AssetsItem;
|
||||
import com.seeyon.apps.assetsmap.vo.RegionVo;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.exceptions.BusinessException;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgDepartment;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import com.seeyon.utils.form.*;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class AssetsQueryService {
|
||||
|
||||
private AssetsMapConfigProvider configProvider = (AssetsMapConfigProvider) AppContext.getBean("assetsMapConfigProvider");
|
||||
private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager");
|
||||
|
||||
private String getFormNo(){
|
||||
return configProvider.getBizConfigByKey(AssetsMapConstans.ASSETSFORMNO);
|
||||
}
|
||||
|
||||
public List<RegionVo> queryAllZoneAssets() throws Exception {
|
||||
System.out.println("表单编码为:" + getFormNo());
|
||||
TableContext tableContext = FormTableExecutor.master(getFormNo());
|
||||
List<FormColumn> formColumns = FormTableExecutor.query(tableContext,null, null, true);
|
||||
List<RegionVo> regionVos = new ArrayList<>();
|
||||
System.out.println("查询出的数据条数:" + formColumns.size());
|
||||
for (FormColumn formColumn : formColumns) {
|
||||
Map<String, Object> fieldsMap = formColumn.getFieldsMap();
|
||||
if(fieldsMap == null) {
|
||||
continue;
|
||||
}
|
||||
upsertRegionVos(regionVos,fieldsMap);
|
||||
}
|
||||
return regionVos;
|
||||
}
|
||||
|
||||
public void upsertRegionVos(List<RegionVo> regionVos, Map<String, Object> fieldsMap) {
|
||||
|
||||
String latStr = (String) fieldsMap.get("纬度");
|
||||
String lngStr = (String) fieldsMap.get("经度");
|
||||
|
||||
// 1️⃣ 经纬度必须有
|
||||
if (StringUtils.isAnyBlank(latStr, lngStr)) {
|
||||
return;
|
||||
}
|
||||
|
||||
double lat = Double.parseDouble(latStr);
|
||||
double lng = Double.parseDouble(lngStr);
|
||||
|
||||
String address = (String) fieldsMap.get("位置详情");
|
||||
String owner = (String) fieldsMap.get("权属公司");
|
||||
|
||||
// 2️⃣ 地址 & 权属公司建议也做非空控制(关键!)
|
||||
if (StringUtils.isAnyBlank(address)) {
|
||||
return;
|
||||
}
|
||||
|
||||
String assetId = getStringValue(fieldsMap,"id");
|
||||
AssetsItem newAsset = buildAssetsItem(fieldsMap);
|
||||
Long managerId = fieldsMap.get("运营单位") == null ? null : Long.parseLong(fieldsMap.get("运营单位") + "");
|
||||
String deptName = getDeptName(managerId);
|
||||
// 3️⃣ 查找区域
|
||||
for (RegionVo regionVo : regionVos) {
|
||||
|
||||
// 3.1 经纬度必须存在
|
||||
if (regionVo.getLat() == null || regionVo.getLng() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean sameLocation =
|
||||
Double.compare(regionVo.getLat(), lat) == 0 &&
|
||||
Double.compare(regionVo.getLng(), lng) == 0;
|
||||
|
||||
// 3.2 地址 & 权属公司必须非空才参与匹配
|
||||
if (!sameLocation ||
|
||||
StringUtils.isAnyBlank(regionVo.getAddress())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean sameAddress = address.equals(regionVo.getAddress());
|
||||
|
||||
if (sameAddress) {
|
||||
|
||||
// 4️⃣ 判断资产是否存在
|
||||
boolean exists = regionVo.getAssets().stream()
|
||||
.anyMatch(a -> a.getId().equals(assetId) );
|
||||
|
||||
if (!exists) {
|
||||
regionVo.getAssets().add(newAsset);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 5️⃣ 新建区域(这里可以放心,因为关键字段都有值)
|
||||
RegionVo newRegion = new RegionVo();
|
||||
newRegion.setLat(lat);
|
||||
newRegion.setLng(lng);
|
||||
newRegion.setAddress(address);
|
||||
newRegion.setOwner(owner);
|
||||
newRegion.setManager(deptName);
|
||||
|
||||
List<AssetsItem> assets = new ArrayList<>();
|
||||
assets.add(newAsset);
|
||||
newRegion.setAssets(assets);
|
||||
|
||||
regionVos.add(newRegion);
|
||||
}
|
||||
|
||||
private String getDeptName(Long deptId) {
|
||||
if(deptId != null) {
|
||||
try {
|
||||
V3xOrgDepartment department = orgManager.getDepartmentById(deptId);
|
||||
if(department != null) {
|
||||
return department.getName();
|
||||
}
|
||||
}catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private AssetsItem buildAssetsItem(Map<String, Object> fieldsMap) {
|
||||
AssetsItem assetsItem = new AssetsItem();
|
||||
assetsItem.setId(getStringValue(fieldsMap,"id"));
|
||||
assetsItem.setArea(fieldsMap.get("资产面积") == null ? null : Double.parseDouble(fieldsMap.get("资产面积") + ""));
|
||||
assetsItem.setTenant(getStringValue(fieldsMap,"租户名称"));
|
||||
assetsItem.setPurpose(getStringValue(fieldsMap,"资产用途"));
|
||||
assetsItem.setRemark(getStringValue(fieldsMap,"备注"));
|
||||
assetsItem.setOwner(getStringValue(fieldsMap,"权属单位"));
|
||||
assetsItem.setAssetName(getStringValue(fieldsMap,"资产名称"));
|
||||
assetsItem.setAddress(getStringValue(fieldsMap,"位置详情"));
|
||||
String certNo = fieldsMap.get("权证号码") == null ? null : (String)fieldsMap.get("权证号码");
|
||||
// assetsItem.setManager(fieldsMap.get("运营单位") == null ? null : (String)fieldsMap.get("运营单位") + "");
|
||||
Long managerId = fieldsMap.get("运营单位") == null ? null : Long.parseLong(fieldsMap.get("运营单位") + "");
|
||||
assetsItem.setLat(getStringValue(fieldsMap,"纬度"));
|
||||
assetsItem.setLng(getStringValue(fieldsMap,"经度"));
|
||||
assetsItem.setManager(getDeptName(managerId));
|
||||
assetsItem.setCertNo(certNo);
|
||||
assetsItem.setStatus(getStringValue(fieldsMap,"资产状态"));
|
||||
return assetsItem;
|
||||
}
|
||||
|
||||
private String getStringValue(Map<String, Object> fieldsMap, String key) {
|
||||
return fieldsMap.get(key) == null ? null : (String)fieldsMap.get(key);
|
||||
}
|
||||
|
||||
public Integer countAssets(String type) throws BusinessException {
|
||||
TableContext tableContext = FormTableExecutor.master(getFormNo());
|
||||
List<FormWhereCondition> conditions = new ArrayList<FormWhereCondition>();
|
||||
if(type == null || "0".equals(type)) {
|
||||
conditions = null;
|
||||
}
|
||||
if("1".equals(type)) {
|
||||
conditions.add(FormWhereCondition.build().display("资产状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"资产状态","已租")));
|
||||
}
|
||||
if("2".equals(type)) {
|
||||
conditions.add(FormWhereCondition.build().display("资产状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"资产状态","待租")));
|
||||
}
|
||||
List<FormColumn> formColumns = FormTableExecutor.query(tableContext,null, conditions, true);
|
||||
return formColumns.size();
|
||||
}
|
||||
|
||||
public List<AssetsItem> queryAssetsByKeyword(String keyword) throws BusinessException {
|
||||
List<FormWhereCondition> conditions = new ArrayList<FormWhereCondition>();
|
||||
if(StringUtils.isNotBlank(keyword)){
|
||||
conditions.add(FormWhereCondition.build().display("位置详情").value(keyword).concatFactor(ClauseFactor.OR).clauseFactor(ClauseFactor.LIKE));
|
||||
}
|
||||
TableContext tableContext = FormTableExecutor.master(getFormNo());
|
||||
List<FormColumn> formColumns = FormTableExecutor.pageQuery(tableContext,null, conditions, 1,10,true);
|
||||
List<AssetsItem> assetsItems = new ArrayList<AssetsItem>();
|
||||
for (FormColumn formColumn : formColumns) {
|
||||
AssetsItem assetsItem = buildAssetsItem(formColumn.getFieldsMap());
|
||||
assetsItems.add(assetsItem);
|
||||
}
|
||||
return assetsItems;
|
||||
}
|
||||
|
||||
}
|
||||
130
src/main/java/com/seeyon/apps/assetsmap/vo/AssetsItem.java
Normal file
130
src/main/java/com/seeyon/apps/assetsmap/vo/AssetsItem.java
Normal file
@@ -0,0 +1,130 @@
|
||||
package com.seeyon.apps.assetsmap.vo;
|
||||
|
||||
public class AssetsItem {
|
||||
private String id;
|
||||
private String assetName;
|
||||
private Long regionId;
|
||||
private String purpose;
|
||||
private String tenant;
|
||||
private Double area;
|
||||
private String certNo;
|
||||
private String owner;
|
||||
private String remark;
|
||||
private String status;
|
||||
private String manager;
|
||||
private String lng;
|
||||
private String lat;
|
||||
private String address;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getRegionId() {
|
||||
return regionId;
|
||||
}
|
||||
|
||||
public void setRegionId(Long regionId) {
|
||||
this.regionId = regionId;
|
||||
}
|
||||
|
||||
public String getPurpose() {
|
||||
return purpose;
|
||||
}
|
||||
|
||||
public void setPurpose(String purpose) {
|
||||
this.purpose = purpose;
|
||||
}
|
||||
|
||||
public String getTenant() {
|
||||
return tenant;
|
||||
}
|
||||
|
||||
public void setTenant(String tenant) {
|
||||
this.tenant = tenant;
|
||||
}
|
||||
|
||||
public Double getArea() {
|
||||
return area;
|
||||
}
|
||||
|
||||
public void setArea(Double area) {
|
||||
this.area = area;
|
||||
}
|
||||
|
||||
public String getCertNo() {
|
||||
return certNo;
|
||||
}
|
||||
|
||||
public void setCertNo(String certNo) {
|
||||
this.certNo = certNo;
|
||||
}
|
||||
|
||||
public String getManager() {
|
||||
return manager;
|
||||
}
|
||||
|
||||
public void setManager(String manager) {
|
||||
this.manager = manager;
|
||||
}
|
||||
|
||||
public String getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public void setOwner(String owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public String getRemark() {
|
||||
return remark;
|
||||
}
|
||||
|
||||
public void setRemark(String remark) {
|
||||
this.remark = remark;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(String status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public void setLng(String lng) {
|
||||
this.lng = lng;
|
||||
}
|
||||
|
||||
public String getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public void setLat(String lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
public String getAssetName() {
|
||||
return assetName;
|
||||
}
|
||||
|
||||
public void setAssetName(String assetName) {
|
||||
this.assetName = assetName;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public void setAddress(String address) {
|
||||
this.address = address;
|
||||
}
|
||||
}
|
||||
60
src/main/java/com/seeyon/apps/assetsmap/vo/RegionVo.java
Normal file
60
src/main/java/com/seeyon/apps/assetsmap/vo/RegionVo.java
Normal file
@@ -0,0 +1,60 @@
|
||||
package com.seeyon.apps.assetsmap.vo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class RegionVo {
|
||||
private String address;
|
||||
private Double lat;
|
||||
private Double lng;
|
||||
private String owner;
|
||||
private String manager;
|
||||
private List<AssetsItem> assets;
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public void setAddress(String address) {
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
public Double getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public void setLat(Double lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
public Double getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public void setLng(Double lng) {
|
||||
this.lng = lng;
|
||||
}
|
||||
|
||||
public String getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public void setOwner(String owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public List<AssetsItem> getAssets() {
|
||||
return assets;
|
||||
}
|
||||
|
||||
public void setAssets(List<AssetsItem> assets) {
|
||||
this.assets = assets;
|
||||
}
|
||||
|
||||
public String getManager() {
|
||||
return manager;
|
||||
}
|
||||
|
||||
public void setManager(String manager) {
|
||||
this.manager = manager;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.seeyon.ctp.rest.resources.assetsmap;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.seeyon.apps.assetsmap.service.AssetsQueryService;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.rest.resources.BaseResource;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
@Path("/assetsRegion")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
public class AssetsRegionResources extends BaseResource {
|
||||
|
||||
private static final Log log = Log.get(AssetsRegionResources.class);
|
||||
private AssetsQueryService assetsQueryService = (AssetsQueryService) AppContext.getBean("assetsQueryService");
|
||||
|
||||
|
||||
@POST
|
||||
@Path("/getall")
|
||||
@Produces({"application/json"})
|
||||
@Consumes({"application/json"})
|
||||
public Response queryAllRegions(){
|
||||
try {
|
||||
return success(assetsQueryService.queryAllZoneAssets());
|
||||
}catch (Exception e) {
|
||||
log.error(e.getMessage(),e);
|
||||
e.printStackTrace();
|
||||
return fail("查询失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/search")
|
||||
@Produces({"application/json"})
|
||||
@Consumes({"application/json"})
|
||||
public Response search(JSONObject params) {
|
||||
try {
|
||||
return this.success(this.assetsQueryService.queryAssetsByKeyword(params.getString("keyword")));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), new Object[]{e});
|
||||
e.printStackTrace();
|
||||
return this.fail("查询失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Path("/countAssets")
|
||||
@GET
|
||||
@Produces({"application/json"})
|
||||
public Response countAssets(@Context HttpServletRequest request){
|
||||
try {
|
||||
String type = request.getParameter("type");
|
||||
return success(assetsQueryService.countAssets(type));
|
||||
}catch (Exception e) {
|
||||
log.error(e.getMessage(),e);
|
||||
e.printStackTrace();
|
||||
return fail("查询失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
7
src/test/Test.java
Normal file
7
src/test/Test.java
Normal file
@@ -0,0 +1,7 @@
|
||||
import com.seeyon.apps.assetsmap.AssetsMapPlugin;
|
||||
|
||||
public class Test {
|
||||
public static void main(String[] args) {
|
||||
AssetsMapPlugin assetsMapPlugin = new AssetsMapPlugin();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user