commit 9275c7950ea1c72edb028135695d993beae45240 Author: RuicyWu <1063154311@qq.com> Date: Thu May 21 16:37:40 2026 +0800 代码上传 diff --git a/seeyon/WEB-INF/assetsmap/pluginCfg.xml b/seeyon/WEB-INF/assetsmap/pluginCfg.xml new file mode 100644 index 0000000..304a069 --- /dev/null +++ b/seeyon/WEB-INF/assetsmap/pluginCfg.xml @@ -0,0 +1,6 @@ + + + assetsmap + 租赁资产地图 + 20260411 + diff --git a/seeyon/WEB-INF/assetsmap/spring/spring.xml b/seeyon/WEB-INF/assetsmap/spring/spring.xml new file mode 100644 index 0000000..b3b8c1c --- /dev/null +++ b/seeyon/WEB-INF/assetsmap/spring/spring.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetsmap/AssetsMapPlugin.java b/src/main/java/com/seeyon/apps/assetsmap/AssetsMapPlugin.java new file mode 100644 index 0000000..745e8bd --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetsmap/AssetsMapPlugin.java @@ -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; + } + +} diff --git a/src/main/java/com/seeyon/apps/assetsmap/config/AssetsMapConfigProvider.java b/src/main/java/com/seeyon/apps/assetsmap/config/AssetsMapConfigProvider.java new file mode 100644 index 0000000..ea387a3 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetsmap/config/AssetsMapConfigProvider.java @@ -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()); + } +} diff --git a/src/main/java/com/seeyon/apps/assetsmap/constants/AssetsMapConstans.java b/src/main/java/com/seeyon/apps/assetsmap/constants/AssetsMapConstans.java new file mode 100644 index 0000000..8f476bb --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetsmap/constants/AssetsMapConstans.java @@ -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; + } +} diff --git a/src/main/java/com/seeyon/apps/assetsmap/service/AssetsQueryService.java b/src/main/java/com/seeyon/apps/assetsmap/service/AssetsQueryService.java new file mode 100644 index 0000000..c1b577a --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetsmap/service/AssetsQueryService.java @@ -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 queryAllZoneAssets() throws Exception { + System.out.println("表单编码为:" + getFormNo()); + TableContext tableContext = FormTableExecutor.master(getFormNo()); + List formColumns = FormTableExecutor.query(tableContext,null, null, true); + List regionVos = new ArrayList<>(); + System.out.println("查询出的数据条数:" + formColumns.size()); + for (FormColumn formColumn : formColumns) { + Map fieldsMap = formColumn.getFieldsMap(); + if(fieldsMap == null) { + continue; + } + upsertRegionVos(regionVos,fieldsMap); + } + return regionVos; + } + + public void upsertRegionVos(List regionVos, Map 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 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 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 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 conditions = new ArrayList(); + 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 formColumns = FormTableExecutor.query(tableContext,null, conditions, true); + return formColumns.size(); + } + + public List queryAssetsByKeyword(String keyword) throws BusinessException { + List conditions = new ArrayList(); + if(StringUtils.isNotBlank(keyword)){ + conditions.add(FormWhereCondition.build().display("位置详情").value(keyword).concatFactor(ClauseFactor.OR).clauseFactor(ClauseFactor.LIKE)); + } + TableContext tableContext = FormTableExecutor.master(getFormNo()); + List formColumns = FormTableExecutor.pageQuery(tableContext,null, conditions, 1,10,true); + List assetsItems = new ArrayList(); + for (FormColumn formColumn : formColumns) { + AssetsItem assetsItem = buildAssetsItem(formColumn.getFieldsMap()); + assetsItems.add(assetsItem); + } + return assetsItems; + } + +} diff --git a/src/main/java/com/seeyon/apps/assetsmap/vo/AssetsItem.java b/src/main/java/com/seeyon/apps/assetsmap/vo/AssetsItem.java new file mode 100644 index 0000000..72246f7 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetsmap/vo/AssetsItem.java @@ -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; + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetsmap/vo/RegionVo.java b/src/main/java/com/seeyon/apps/assetsmap/vo/RegionVo.java new file mode 100644 index 0000000..ec50d42 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetsmap/vo/RegionVo.java @@ -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 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 getAssets() { + return assets; + } + + public void setAssets(List assets) { + this.assets = assets; + } + + public String getManager() { + return manager; + } + + public void setManager(String manager) { + this.manager = manager; + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetsmap/AssetsRegionResources.java b/src/main/java/com/seeyon/ctp/rest/resources/assetsmap/AssetsRegionResources.java new file mode 100644 index 0000000..55165a6 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetsmap/AssetsRegionResources.java @@ -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()); + } + } +} diff --git a/src/test/Test.java b/src/test/Test.java new file mode 100644 index 0000000..47e5e35 --- /dev/null +++ b/src/test/Test.java @@ -0,0 +1,7 @@ +import com.seeyon.apps.assetsmap.AssetsMapPlugin; + +public class Test { + public static void main(String[] args) { + AssetsMapPlugin assetsMapPlugin = new AssetsMapPlugin(); + } +}