代码上传

This commit is contained in:
2026-05-21 16:37:40 +08:00
commit 9275c7950e
10 changed files with 544 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<id>assetsmap</id>
<name>租赁资产地图</name>
<category>20260411</category>
</plugin>

View 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>

View 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;
}
}

View File

@@ -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());
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View 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;
}
}

View 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;
}
}

View File

@@ -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
View File

@@ -0,0 +1,7 @@
import com.seeyon.apps.assetsmap.AssetsMapPlugin;
public class Test {
public static void main(String[] args) {
AssetsMapPlugin assetsMapPlugin = new AssetsMapPlugin();
}
}