Commit 539f3fa1 by 高晓磊

采区预警设置-非法开采预警设置

parent 8687e8ed
package com.xyst.dinas.biz.config;
import com.beecode.amino.metadata.runtime.MetadataMech;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.TypeConstants;
import com.xyst.dinas.biz.constant.RetailInfoConstant;
import com.xyst.dinas.biz.dao.RetailInfoDao;
import com.xyst.dinas.biz.internal.dao.RetailInfoDaoImpl;
import com.xyst.dinas.biz.internal.service.RetailInfoServiceImpl;
import com.xyst.dinas.biz.service.RetailInfoService;
import com.xyst.dinas.biz.web.RetailInfoController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
public class RetailInfoConfiguration {
@Autowired
@Qualifier(TypeConstants.CLASS_MECH)
private MetadataMech<KClass> typeMech;
//RetailInfoDaoImpl相关bean配置
@Bean
public RetailInfoDao retailInfoDao() {
return new RetailInfoDaoImpl();
}
@Bean
public RetailInfoService retailInfoService(){
return new RetailInfoServiceImpl();
}
@Bean
public RetailInfoController retailInfoController(){
return new RetailInfoController();
}
@Bean(RetailInfoConstant.ENTITY)
public KClass retailInfoInfoEntity() {
return typeMech.createStaticBeanByResource(
new ClassPathResource("/com/xyst/dinas/biz/datamodel/RetailInfo.jmx", KClass.class));
}
}
......@@ -6,6 +6,7 @@ import com.beecode.bcp.type.TypeConstants;
import com.xyst.dinas.biz.constant.StationConstant;
import com.xyst.dinas.biz.dao.PositionDao;
import com.xyst.dinas.biz.dao.StationDao;
import com.xyst.dinas.biz.internal.SandMiningWarnSettingProcessor;
import com.xyst.dinas.biz.internal.StationInfoQueryProcessor;
import com.xyst.dinas.biz.internal.dao.PositionDaoImpl;
import com.xyst.dinas.biz.internal.dao.StationDaoImpl;
......@@ -41,6 +42,10 @@ public class StationConfiguration {
public StationInfoQueryProcessor createStationInfoQueryProcessor() {
return new StationInfoQueryProcessor();
}
@Bean("com.xyst.dinas.biz.internal.SandMiningWarnSettingProcessor")
public SandMiningWarnSettingProcessor createSandMiningWarnSettingProcessor() {
return new SandMiningWarnSettingProcessor();
}
@Autowired
......
package com.xyst.dinas.biz.constant;
public interface RetailInfoConstant {
/**
* 实体名
*/
String ENTITY = "com.xyst.dinas.biz.datamodel.RetailInfo";
}
package com.xyst.dinas.biz.dao;
import com.beecode.bap.attachment.common.Page;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.dao.BaseDao;
import java.util.List;
import java.util.UUID;
public interface RetailInfoDao extends BaseDao {
KObject load(UUID id);
Page<KObject> listRetailInfoInfoPaging(Page<KObject> page, Integer retailInfoStatus);
UUID create(KObject kObject);
int selectCountByName(String retailInfoName);
void deleteById(UUID id);
List<KObject> listRetailInfoInfoByRegionalCompany(UUID regionalCompanyId);
List<KObject> getByName(String name, UUID id);
void modify(KObject kobject);
}
package com.xyst.dinas.biz.internal;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.query.entity.RowData;
import com.beecode.inz.query.processor.DataProcessor;
import com.beecode.inz.query.processor.DataProcessorContext;
import com.xyst.dinas.biz.service.SandMiningAreaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
/**
* @author scol
*/
public class SandMiningWarnSettingProcessor implements DataProcessor {
@Autowired
SandMiningAreaService sandMiningAreaService;
@Autowired
StaffService staffService;
@Override
public void process(DataProcessorContext context) {
List<RowData> rowDatas = context.getRowDatas();
for (RowData row : rowDatas) {
//采区名称 人员
UUID contractId = UUID.fromString(row.get("billId").toString());
KObject sandMiningArea = sandMiningAreaService.getById(contractId);
Assert.notNull(sandMiningArea, "找不到对应的采砂区域!");
row.put("sandMiningAreaName", sandMiningArea.isNull("sandMiningAreaName") ? "" : sandMiningArea.getString("sandMiningAreaName"));
String personnel = row.get("personnel") != null ? row.get("personnel").toString() : "";
StringBuilder personnelName = new StringBuilder();
if (StringUtils.isNotEmpty(personnel)) {
List<String> personnelList = Arrays.asList(personnel.split(","));
for (int i = 0; i < personnelList.size(); i++) {
String personnelId = personnelList.get(i);
KObject personnelKObject = staffService.getById(UUID.fromString(personnelId));
if (i == personnelList.size() - 1) {
personnelName.append(personnelKObject.getString("name"));
} else {
personnelName.append(personnelKObject.getString("name")).append(",");
}
}
}
row.put("personnelName", personnelName.toString());
}
}
}
package com.xyst.dinas.biz.internal.dao;
import com.beecode.amino.core.Amino;
import com.beecode.bap.attachment.common.Page;
import com.beecode.bcp.core.context.AminoContextHolder;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.internal.dao.AbstractBaseDao;
import com.beecode.inz.common.BaseConstants;
import com.xyst.dinas.biz.constant.ProductionLineConstant;
import com.xyst.dinas.biz.constant.RetailInfoConstant;
import com.xyst.dinas.biz.dao.DinasTypeDao;
import com.xyst.dinas.biz.dao.RetailInfoDao;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import java.util.Date;
import java.util.List;
import java.util.UUID;
public class RetailInfoDaoImpl extends AbstractBaseDao implements RetailInfoDao, RetailInfoConstant {
@Autowired
private HibernateTemplate template;
@Autowired
private DinasTypeDao dinasTypeDao;
@Override
public KObject load(UUID id) {
return (KObject) template.load(ENTITY, id);
}
@Override
public Page<KObject> listRetailInfoInfoPaging(Page<KObject> page, Integer retailInfoStatus) {
KClass bean = Amino.getStaticMetadataContext().getBean(RetailInfoConstant.ENTITY, KClass.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName());
// detachedCriteria.add(Restrictions.eq("department.id", departmentId));
detachedCriteria.add(Restrictions.eq("del", false));
if(null!=retailInfoStatus){
detachedCriteria.add(Restrictions.eq("retailInfoStatus", retailInfoStatus));
}
KObject currentLoginRegionalCompany = dinasTypeDao.getCurrentLoginRegionalCompany();
if(null!=currentLoginRegionalCompany){
detachedCriteria.add(Restrictions.eq("regionalCompany.id",currentLoginRegionalCompany.getUuid("id")));
}
detachedCriteria.addOrder(Order.desc("sortOrder"));
int offset = page.getPageSize() * (page.getPageNo() - 1);
page.setTotal(template.findByCriteria(detachedCriteria).size());
List<KObject> list = (List<KObject>) template.findByCriteria(detachedCriteria,offset,page.getPageSize());
page.setDatas(list);
return page;
}
@Override
public List<KObject> listRetailInfoInfoByRegionalCompany(UUID regionalCompanyId) {
KClass bean = Amino.getStaticMetadataContext().getBean(RetailInfoConstant.ENTITY, KClass.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName());
// detachedCriteria.add(Restrictions.eq("department.id", departmentId));
detachedCriteria.add(Restrictions.eq("del", false));
if(null==regionalCompanyId){
KObject currentLoginRegionalCompany = dinasTypeDao.getCurrentLoginRegionalCompany();
if(null!=currentLoginRegionalCompany){
regionalCompanyId=currentLoginRegionalCompany.getUuid("id");
}
}
if(null!=regionalCompanyId){
detachedCriteria.add(Restrictions.eq("regionalCompany.id",regionalCompanyId));
}
detachedCriteria.addOrder(Order.desc("sortOrder"));
return (List<KObject>) template.findByCriteria(detachedCriteria);
}
@Override
public List<KObject> getByName(String name, UUID id) {
// UUID departmentId = AminoContextHolder.getContext().getStaff().get("department").getUuid("id");
KClass bean = Amino.getStaticMetadataContext().getBean(RetailInfoConstant.ENTITY, KClass.class);
DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName(bean.getName());
KObject currentLoginRegionalCompany = dinasTypeDao.getCurrentLoginRegionalCompany();
if(null!=currentLoginRegionalCompany){
detachedCriteria.add(Restrictions.eq("regionalCompany.id",currentLoginRegionalCompany.getUuid("id")));
}
detachedCriteria.add(Restrictions.eq("del", false));
detachedCriteria.add(Restrictions.eq("retailInfoName", name));
if(id!=null){
detachedCriteria.add(Restrictions.ne("id", id));
}
return (List<KObject>) template.findByCriteria(detachedCriteria);
}
@Override
public void modify(KObject kobject) {
KObject id = load(kobject.getUuid("id"));
kobject.set(BaseConstants.CREATOR,id.get(BaseConstants.CREATOR));
kobject.set(BaseConstants.CREATE_TIME,id.getDate(BaseConstants.CREATE_TIME));
KObject staff = AminoContextHolder.getContext().getStaff();
kobject.set("regionalCompany", dinasTypeDao.getCurrentLoginRegionalCompany());
kobject.set("modifyTime",new Date());
kobject.set(BaseConstants.MODIFIER,staff);
kobject.set("del",false);
template.deleteAll(id.get("productionLines").toList());
KObject productions = kobject.get("productionLines");
if(null!=productions){
List<KObject> kObjects = productions.toList();
for (KObject object : kObjects) {
if(null==object.getUuid("id")){
object.set("id",UUID.randomUUID());
}
object.set("retailInfo",kobject);
template.save(ProductionLineConstant.ENTITY,object);
}
}
template.merge(kobject);
}
@Override
public UUID create(KObject kObject) {
KObject staff = AminoContextHolder.getContext().getStaff();
if(null==kObject.getUuid("id")){
kObject.set("id",UUID.randomUUID());
}
kObject.set("regionalCompany", dinasTypeDao.getCurrentLoginRegionalCompany());
kObject.set(BaseConstants.CREATOR,staff);
kObject.set(BaseConstants.CREATE_TIME, new Date());
kObject.set("del",false);
UUID save = (UUID) template.save(kObject);
KObject productions = kObject.get("productionLines");
if(null!=productions){
List<KObject> kObjects = productions.toList();
for (KObject object : kObjects) {
if(null==object.getUuid("id")){
object.set("id",UUID.randomUUID());
}
object.set("retailInfo",kObject);
template.save(ProductionLineConstant.ENTITY,object);
}
}
return save;
}
@Override
public int selectCountByName(String retailInfoName) {
String departmentId = AminoContextHolder.getContext().getStaff().get("department").getUuid("id").toString();
return 0;
}
@Override
public void deleteById(UUID id) {
KObject staff = AminoContextHolder.getContext().getStaff();
KObject kobject = (KObject) template.load(ENTITY, id);
kobject.set("modifyTime",new Date());
kobject.set(BaseConstants.MODIFIER,staff);
kobject.set("del",true);
template.update(kobject);
}
/**
* 抽象方法,需要实现类提供HibernateTemplate
*
* @return HibernateTemplate
*/
@Override
protected HibernateTemplate getHibernateTemplate() {
return template;
}
/**
* 抽象方法,需要实现类提供当前ModelName
*
* @return String
*/
@Override
protected String getModelName() {
return RetailInfoConstant.ENTITY;
}
}
......@@ -85,20 +85,8 @@ public class SandMiningAreaDaoImpl extends AbstractBaseDao implements SandMining
kobject.set("modifyTime",new Date());
kobject.set(BaseConstants.MODIFIER,staff);
kobject.set("del",false);
template.deleteAll(id.get("productionLines").toList());
KObject productions = kobject.get("productionLines");
if(null!=productions){
List<KObject> kObjects = productions.toList();
for (KObject object : kObjects) {
if(null==object.getUuid("id")){
object.set("id",UUID.randomUUID());
}
object.set("sandMiningArea",kobject);
template.save(ProductionLineConstant.ENTITY,object);
}
}
template.merge(kobject);
//生成采区预警设置信息
}
......@@ -114,17 +102,6 @@ public class SandMiningAreaDaoImpl extends AbstractBaseDao implements SandMining
kObject.set(BaseConstants.CREATE_TIME, new Date());
kObject.set("del",false);
UUID save = (UUID) template.save(kObject);
KObject productions = kObject.get("productionLines");
if(null!=productions){
List<KObject> kObjects = productions.toList();
for (KObject object : kObjects) {
if(null==object.getUuid("id")){
object.set("id",UUID.randomUUID());
}
object.set("sandMiningArea",kObject);
template.save(ProductionLineConstant.ENTITY,object);
}
}
return save;
}
......
package com.xyst.dinas.biz.internal.service;
import com.beecode.bap.attachment.common.Page;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.dao.RetailInfoDao;
import com.xyst.dinas.biz.service.RetailInfoService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
@Transactional(rollbackFor = Exception.class)
public class RetailInfoServiceImpl implements RetailInfoService {
@Autowired
private RetailInfoDao retailInfoDao;
@Override
public Page<KObject> queryByPaging(Page<KObject> page, Integer retailInfoStatus) throws Exception {
if(page.getPageNo()==0||page.getPageSize()==0) {
throw new Exception("pageSize or offset is null");
}
return retailInfoDao.listRetailInfoInfoPaging(page,retailInfoStatus);
}
@Override
public List<KObject> listRetailInfoInfoByRegionalCompany(UUID regionalCompanyId) throws Exception {
return retailInfoDao.listRetailInfoInfoByRegionalCompany(regionalCompanyId);
}
@Override
public UUID addRetailInfo(KObject kObject) {
return retailInfoDao.create(kObject);
}
@Override
public KObject getById(UUID id) {
return retailInfoDao.load(id);
}
@Override
public int selectCountByName(String retailInfoName) {
return retailInfoDao.selectCountByName(retailInfoName);
}
@Override
public KObject getByName(String name, UUID id) {
List<KObject> kObjects = retailInfoDao.getByName(name,id);
if(CollectionUtils.isEmpty(kObjects)){
return null;
}
return kObjects.get(0);
}
@Override
public void update(KObject kobject) {
retailInfoDao.modify(kobject);
}
@Override
public void deleteById(UUID id) {
retailInfoDao.deleteById(id);
}
}
......@@ -4,18 +4,29 @@ import com.beecode.bap.attachment.common.Page;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.dao.SandMiningAreaDao;
import com.xyst.dinas.biz.service.SandMiningAreaService;
import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.biz.warn.WarnSettingEntity;
import com.xyst.dinas.biz.warn.WarnTargetTypeEnum;
import com.xyst.dinas.biz.warn.service.IWarningSettingService;
import com.xyst.dinas.biz.warn.service.WarningSettingServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
/**
* @author scol
*/
@Transactional(rollbackFor = Exception.class)
public class SandMiningAreaServiceImpl implements SandMiningAreaService {
@Autowired
private SandMiningAreaDao sandMiningAreaDao;
@Autowired
private IWarningSettingService warningSettingService;
@Override
public Page<KObject> queryByPaging(Page<KObject> page, Integer sandMiningAreaStatus) throws Exception {
......@@ -27,7 +38,16 @@ public class SandMiningAreaServiceImpl implements SandMiningAreaService {
@Override
public UUID addSandMiningArea(KObject kObject) {
return sandMiningAreaDao.create(kObject);
UUID uuid = sandMiningAreaDao.create(kObject);
return uuid;
}
private String getAreaWarningInfo(KObject kObject) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("regionalCompanyId", kObject.get("regionalCompany").getUuid("id").toString());
return jsonObject.toString();
}
@Override
......@@ -51,8 +71,18 @@ public class SandMiningAreaServiceImpl implements SandMiningAreaService {
@Override
public void update(KObject kobject) {
sandMiningAreaDao.modify(kobject);
if(2==kobject.getInt("status")){
//新建采区后同步新建一条预警设置
WarnSettingEntity warnSetting = new WarnSettingEntity();
warnSetting.setBillType("采区超采预警");
warnSetting.setBillId(kobject.getUuid("id"));
warnSetting.setTarget("开采量");
warnSetting.setTargetType(WarnTargetTypeEnum.NUMBER_TYPE.getCode());
warnSetting.setOpen(false);
warnSetting.setMemo(getAreaWarningInfo(kobject));
warningSettingService.insertWarnSetting(warnSetting);
}
}
@Override
......
package com.xyst.dinas.biz.service;
import com.beecode.bap.attachment.common.Page;
import com.beecode.bcp.type.KObject;
import java.util.List;
import java.util.UUID;
public interface RetailInfoService {
Page<KObject> queryByPaging(Page<KObject> page, Integer retailInfoStatus) throws Exception;
List<KObject> listRetailInfoInfoByRegionalCompany(UUID regionalCompanyId) throws Exception;
UUID addRetailInfo(KObject kObject);
KObject getById(UUID id);
int selectCountByName(String retailInfoName);
KObject getByName(String name, UUID id);
void update(KObject kobject);
void deleteById(UUID id);
}
......@@ -30,12 +30,12 @@ public class WarningSettingServiceImpl implements IWarningSettingService{
/**
* 新增预警设置
*/
public UUID insertWarnSetting(WarnSetting warnSetting) {
@Override
public UUID insertWarnSetting(WarnSetting warnSetting) {
KClass type = Amino.getApplicationMetadataContext().getBean(WarnSettingConstant.ENTITY_WARNSETTING, KClass.class);
JsonNode json = JSONObjectUtils.toJson(warnSetting);
KObject object = JSONObjectUtils.toObject(json, type);
object.set(BaseConstants.CREATE_TIME, LocalDateTime.now());
return warnSettingDao.create(object);
}
......
package com.xyst.dinas.biz.web;
import com.beecode.amino.core.Amino;
import com.beecode.bap.attachment.common.Page;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.nlib.utils.StringUtils;
import com.xyst.dinas.biz.constant.RetailInfoConstant;
import com.xyst.dinas.biz.service.RetailInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.UUID;
/**
* @author scol
*/
@RestController()
@RequestMapping(value="/warehouse/api/dinasBiz/retailInfo")
public class RetailInfoController {
private static final Logger logger = LoggerFactory.getLogger(RetailInfoController.class);
@Autowired
private RetailInfoService retailInfoService;
@RequestMapping(value = "list/page", method = RequestMethod.GET)
public ResponseObj getListPage(
@RequestParam(name = "pageNo") Integer pageNo,
@RequestParam(name = "pageSize") Integer pageSize,
@RequestParam(name = "retailInfoStatus", required = false) Integer retailInfoStatus
) throws Exception {
Page<KObject> objectPage = new Page<>();
objectPage.setPageNo(pageNo);
objectPage.setPageSize(pageSize);
return ResponseObj.success("查询成功", retailInfoService.queryByPaging(objectPage,retailInfoStatus));
}
/**
* 新建散户
* @param body
* @return ResponseObj
*/
@PostMapping
public ResponseObj create(@RequestBody String body){
KObject kobject = JSONObjectUtils.toObject(body,Amino.getApplicationMetadataContext().getBean(RetailInfoConstant.ENTITY, KClass.class));
if(kobject.getUuid("id") == null){
return ResponseObj.error(400,"'id' must be not null!");
}
UUID id = retailInfoService.addRetailInfo(kobject);
return ResponseObj.success("保存成功", id);
}
/**
* 修改散户
* @param body 散户json
* @return
*/
@PutMapping
public ResponseObj update(@RequestBody String body){
KObject kobject = JSONObjectUtils.toObject(body,Amino.getApplicationMetadataContext().getBean(RetailInfoConstant.ENTITY, KClass.class));
if(kobject.getUuid("id") == null){
return ResponseObj.error(400,"'id' must be not null!");
}
retailInfoService.update(kobject);
return ResponseObj.success("修改成功");
}
/**
* 根据id获取散户
* @param id
* @return
*/
@GetMapping("/{id}")
public ResponseObj getById(@PathVariable("id") UUID id){
if(id == null){
return ResponseObj.error(400,"'id' must be not null!");
}
KObject RetailInfo = retailInfoService.getById(id);
return ResponseObj.success("获取成功",RetailInfo);
}
/**
* 根据Id删除散户
* @param id
* @return
*/
@DeleteMapping("/{id}")
public ResponseObj deleteById(@PathVariable("id") UUID id){
if(id == null){
return ResponseObj.error(400,"'id' must be not null!");
}
retailInfoService.deleteById(id);
return ResponseObj.success("删除成功");
}
/**
* 查询是否有重名
* @param name
* @return
*/
@GetMapping("/validateName")
public ResponseObj validateName(@RequestParam("name") String name,@RequestParam(value = "id",required = false) UUID id){
if(StringUtils.isEmpty(name)){
return ResponseObj.error(400,"散户名称不能为空");
}
KObject kObject = retailInfoService.getByName(name,id);
if(kObject != null){
return ResponseObj.error("散户名称已存在!");
}
return ResponseObj.success();
}
}
\ No newline at end of file
......@@ -8,7 +8,11 @@ import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.nlib.utils.StringUtils;
import com.xyst.dinas.biz.constant.SandMiningAreaConstant;
import com.xyst.dinas.biz.request.UpdateWarnSetting;
import com.xyst.dinas.biz.service.SandMiningAreaService;
import com.xyst.dinas.biz.warn.BaseBusinessWarn;
import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.biz.warn.service.IWarningSettingService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -28,6 +32,8 @@ public class SandMiningAreaController {
@Autowired
private SandMiningAreaService sandMiningAreaService;
@Autowired
private IWarningSettingService warningSettingService;
@RequestMapping(value = "list/page", method = RequestMethod.GET)
public ResponseObj getListPage(
......@@ -81,6 +87,47 @@ public class SandMiningAreaController {
return ResponseObj.success("修改成功");
}
/**
* 采区审批
* @param status 审核状态
* @param id id
* @return
*/
@PutMapping("approve")
public ResponseObj approve(@RequestParam("status") Integer status ,@RequestParam("id") UUID id){
if(id == null){
return ResponseObj.error(400,"'id' must be not null!");
}
if(status == null){
return ResponseObj.error(400,"'status' must be not null!");
}
KObject byId = sandMiningAreaService.getById(id);
byId.set("status",status);
sandMiningAreaService.update(byId);
return ResponseObj.success("审批成功");
}
//更新预警设置
@PostMapping("/warnSetting/update")//采区预警设置更新
public ResponseObj updateWarnSettingPerson(@RequestBody UpdateWarnSetting updateWarnSetting) {
UUID settingId = updateWarnSetting.getId();
BaseBusinessWarn contractBusinessWarn = new BaseBusinessWarn(settingId);
WarnSetting warnSetting = contractBusinessWarn.getWarnSetting();
String minOld = warnSetting.getMin()!=null?warnSetting.getMin():"";
String min = updateWarnSetting.getMin()!=null?updateWarnSetting.getMin():"";
String maxOld = warnSetting.getMax()!=null?warnSetting.getMin():"";
String max = updateWarnSetting.getMax()!=null?updateWarnSetting.getMin():"";
warningSettingService.updateWarnSetting(updateWarnSetting);
if (minOld.equals(min)) {
return ResponseObj.success("预警设置更新成功");
}
return ResponseObj.success("预警设置更新成功");
}
/**
* 根据id获取采砂区
......
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xyst.dinas.biz.config.StationConfiguration,\
com.xyst.dinas.biz.config.RetailInfoConfiguration,\
com.xyst.dinas.biz.config.SandMiningAreaConfiguration,\
com.xyst.dinas.biz.config.DinasTypeConfiguration,\
com.xyst.dinas.biz.config.ProductionLineConfiguration,\
......
......@@ -10,7 +10,10 @@
<dependency>bcp.type.constraint.StringLength</dependency>
<dependency>com.beecode.inz.common.datamodel.BaseInfo</dependency>
<dependency>com.xyst.dinas.biz.datamodel.Organization</dependency>
<dependency>com.beecode.bap.biztrait.datamodel.BasicBillRequirement</dependency>
<dependency>com.beecode.inz.basis.datamodel.WarehouseUser</dependency>
<dependency>com.xyst.dinas.biz.datamodel.Station</dependency>
<dependency>com.beecode.bap.biztrait.datamodel.SubTableAnnotation</dependency>
<dependency>com.beecode.bap.biztrait.datamodel.BasicBillRequirement</dependency>
<dependency>com.xyst.dinas.biz.datamodel.DinasType</dependency>
<content>
<m:class>
......@@ -26,7 +29,7 @@
<m:title>散户姓名</m:title>
<m:type>string</m:type>
<m:description>场站名称</m:description>
<m:default></m:default>
<m:default/>
</m:attribute>
<m:attribute>
<m:annotations/>
......@@ -35,7 +38,7 @@
<m:title>身份证号</m:title>
<m:type>string</m:type>
<m:description>身份证号</m:description>
<m:default></m:default>
<m:default/>
</m:attribute>
<m:attribute>
<m:annotations/>
......@@ -44,7 +47,16 @@
<m:title>居住地址</m:title>
<m:type>string</m:type>
<m:description>居住地址</m:description>
<m:default></m:default>
<m:default/>
</m:attribute>
<m:attribute>
<m:annotations/>
<m:id>85e5d156-6d1b-476d-a0f8-4639c8db74f6</m:id>
<m:name>reason</m:name>
<m:title>备注</m:title>
<m:type>string</m:type>
<m:description>备注</m:description>
<m:default/>
</m:attribute>
<m:attribute>
<m:annotations/>
......@@ -52,8 +64,26 @@
<m:name>regionalCompany</m:name>
<m:title>所属区域公司</m:title>
<m:type>com.xyst.dinas.biz.datamodel.Organization</m:type>
<m:description></m:description>
<m:default></m:default>
<m:description/>
<m:default/>
</m:attribute>
<m:attribute>
<m:annotations/>
<m:id>0bc855ea-5d5a-4231-9d75-be63daf0bfd6</m:id>
<m:name>createUser</m:name>
<m:title>所属用户</m:title>
<m:type>com.beecode.inz.basis.datamodel.WarehouseUser</m:type>
<m:description/>
<m:default/>
</m:attribute>
<m:attribute>
<m:annotations/>
<m:id>f5112aa7-1866-4282-91a7-6da28ea3d333</m:id>
<m:name>station</m:name>
<m:title>所属场站</m:title>
<m:type>com.xyst.dinas.biz.datamodel.Station</m:type>
<m:description/>
<m:default/>
</m:attribute>
<m:attribute>
<m:annotations>
......@@ -65,10 +95,11 @@
<m:name>dinasTypeDetails</m:name>
<m:title>售卖的砂石</m:title>
<m:type>com.xyst.dinas.biz.datamodel.RetailInfo$DinasTypeDetail[]</m:type>
<m:description></m:description>
<m:default></m:default>
<m:description/>
<m:default/>
</m:attribute>
</m:attributes>
</m:class>
</content>
</metadata>
......@@ -103,8 +103,8 @@
<m:annotations></m:annotations>
<m:id>7a21a119-edcb-4f41-9292-dfb4480a13b4</m:id>
<m:name>status</m:name>
<m:title>审批状态 0未通过 1通过</m:title>
<m:type>boolean</m:type>
<m:title>审批状态 0待审核 1通过 2未通过</m:title>
<m:type>int</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
......
......@@ -8,6 +8,7 @@
<define>inz.query.Query</define>
<define-version>1.0</define-version>
<dependency>com.xyst.dinas.biz.datamodel.RetailInfo</dependency>
<dependency>com.beecode.inz.basis.datamodel.WarehouseUser</dependency>
<content>
<m:query>
<m:type>com.xyst.dinas.biz.datamodel.RetailInfo</m:type>
......@@ -28,13 +29,6 @@
<m:defaultExecute></m:defaultExecute>
<m:hide></m:hide>
</m:innerScene>
<m:innerScene>
<m:id>9d05497c-061c-4168-af47-90791870b3cf</m:id>
<m:title>权限过滤</m:title>
<m:javaImplement>com.xyst.dinas.biz.scene.XystDinasCommonAllScene</m:javaImplement>
<m:defaultExecute>true</m:defaultExecute>
<m:hide>true</m:hide>
</m:innerScene>
</m:innerScenes>
<m:fields>
<m:field>
......@@ -68,6 +62,26 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>station.id</m:name>
<m:title>场站</m:title>
<m:type>uuid</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.stationName</m:name>
<m:title>场站名称</m:title>
<m:type>string</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>createTime</m:name>
<m:title>创建时间</m:title>
<m:type>datetime</m:type>
......@@ -78,7 +92,7 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>creator.name</m:name>
<m:name>createUser.name</m:name>
<m:title>创建人</m:title>
<m:type>string</m:type>
<m:ref/>
......
......@@ -209,7 +209,7 @@
<m:field>
<m:name>status</m:name>
<m:title>状态</m:title>
<m:type>boolean</m:type>
<m:type>int</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
......
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://www.beecode.cn/schema/amino-metadata" xmlns:m="http://www.beecode.cn/schema/inz-query">
<specification>1.0</specification>
<id>35407203-1e53-40f4-91b8-5927577dd094</id>
<name>com.xyst.dinas.biz.query.SandMiningWarnSetting</name>
<title>采砂预警设置</title>
<define>inz.query.Query</define>
<define-version>1.0</define-version>
<dependency>com.xyst.dinas.biz.datamodel.WarnSetting</dependency>
<content>
<m:query>
<m:type>com.xyst.dinas.biz.datamodel.WarnSetting</m:type>
<m:dataProcessor>com.xyst.dinas.biz.internal.SandMiningWarnSettingProcessor</m:dataProcessor>
<m:authorityItem/>
<m:innerScenes>
<m:innerScene>
<m:id>fa6d9e0d-a774-4f90-b20a-b4b3d5b468a6</m:id>
<m:title>全部</m:title>
<m:javaImplement>com.beecode.inz.common.scene.CommonAllScene</m:javaImplement>
<m:defaultExecute/>
<m:hide></m:hide>
</m:innerScene>
<m:innerScene>
<m:id>12cb7e87-edde-4447-ac5f-53fcd2bdc163</m:id>
<m:title>已废弃</m:title>
<m:javaImplement>com.beecode.inz.common.scene.DefaultDiscardScene</m:javaImplement>
<m:defaultExecute/>
<m:hide></m:hide>
</m:innerScene>
</m:innerScenes>
<m:fields>
<m:field>
<m:name>id</m:name>
<m:title>id</m:title>
<m:type>uuid</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>version</m:name>
<m:title>version</m:title>
<m:type>int</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>billId</m:name>
<m:title>业务id</m:title>
<m:type>uuid</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>target</m:name>
<m:title>预警指标</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>memo</m:name>
<m:title>备注</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>max</m:name>
<m:title>实际值</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>personnel</m:name>
<m:title>通知人员</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>createTime</m:name>
<m:title>创建时间</m:title>
<m:type>datetime</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>creator.name</m:name>
<m:title>创建人</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>modifyTime</m:name>
<m:title>修改时间</m:title>
<m:type>datetime</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>modifier.name</m:name>
<m:title>修改人</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
</m:fields>
</m:query>
</content>
</metadata>
......@@ -45,6 +45,16 @@
<comment>所属组织机构</comment>
</column>
</many-to-one>
<many-to-one name="station" entity-name="com.xyst.dinas.biz.datamodel.Station" fetch="select">
<column name="station_id" not-null="false">
<comment>所属场站</comment>
</column>
</many-to-one>
<many-to-one name="createUser" entity-name="com.beecode.inz.basis.datamodel.WarehouseUser" fetch="select">
<column name="create_user_id" not-null="false">
<comment>所属用户</comment>
</column>
</many-to-one>
<property name="retailInfoName" type="nstring">
<column name="retail_info_name" length="30" >
<comment>散户姓名</comment>
......
......@@ -80,9 +80,9 @@
</column>
</property>
<property name="status" type="boolean" not-null="false">
<property name="status" type="int" not-null="false">
<column name="status">
<comment>审批状态false未通过 true通过</comment>
<comment>审批状态2未通过 1通过 0待审核</comment>
</column>
</property>
<property name="failureReason" type="nstring" not-null="false">
......
......@@ -4,6 +4,7 @@ import com.beecode.amino.metadata.runtime.MetadataMech;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.TypeConstants;
import com.xyst.dinas.production.constant.SandMiningConstant;
import com.xyst.dinas.production.internal.SandShipWarnSettingProcessor;
import com.xyst.dinas.production.internal.dao.SandMiningDaoImpl;
import com.xyst.dinas.production.internal.service.SandMiningServiceImpl;
import com.xyst.dinas.production.service.SandMiningService;
......@@ -56,5 +57,9 @@ public class SandMiningConfiguration {
public SandMiningExpiredTask sandMiningExpiredTask() {
return new SandMiningExpiredTask();
}
@Bean("com.xyst.dinas.production.internal.SandShipWarnSettingProcessor")
public SandShipWarnSettingProcessor sandShipWarnSettingProcessor() {
return new SandShipWarnSettingProcessor();
}
}
package com.xyst.dinas.production.internal;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.query.entity.RowData;
import com.beecode.inz.query.processor.DataProcessor;
import com.beecode.inz.query.processor.DataProcessorContext;
import com.xyst.dinas.production.service.SandMiningService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
/**
* @author scol
*/
public class SandShipWarnSettingProcessor implements DataProcessor {
@Autowired
private SandMiningService sandMiningService;
@Autowired
private StaffService staffService;
@Override
public void process(DataProcessorContext context) {
List<RowData> rowDatas = context.getRowDatas();
for (RowData row : rowDatas) {
//采区名称 人员
UUID contractId = UUID.fromString(row.get("billId").toString());
KObject sandMining = sandMiningService.getById(contractId);
Assert.notNull(sandMining, "找不到对应的采砂许可证!");
row.put("sandMiningStart", sandMining.isNull("sandMiningStart") ? "" : sandMining.getDate("sandMiningStart"));
row.put("sandMiningEnd", sandMining.isNull("sandMiningEnd") ? "" : sandMining.getDate("sandMiningEnd"));
row.put("permitCode", sandMining.isNull("permitCode") ? "" : sandMining.getString("permitCode"));
String personnel = row.get("personnel") != null ? row.get("personnel").toString() : "";
StringBuilder personnelName = new StringBuilder();
if (StringUtils.isNotEmpty(personnel)) {
List<String> personnelList = Arrays.asList(personnel.split(","));
for (int i = 0; i < personnelList.size(); i++) {
String personnelId = personnelList.get(i);
KObject personnelKObject = staffService.getById(UUID.fromString(personnelId));
if (i == personnelList.size() - 1) {
personnelName.append(personnelKObject.getString("name"));
} else {
personnelName.append(personnelKObject.getString("name")).append(",");
}
}
}
row.put("personnelName", personnelName.toString());
}
}
}
......@@ -196,7 +196,7 @@ public class DischargingDaoImpl extends AbstractBaseDao implements DischargingDa
.add(Restrictions.eq("type", DischargingTypeEnum.REVISE_DATA.getValue()))
.add(Restrictions.sqlRestriction(" discharging_time like '" + DateUtil.convertDateToString1(date) + "%'"));
if (id != null) {
detachedCriteria.add(Restrictions.eq(BaseConstants.ID, id));
detachedCriteria.add(Restrictions.ne(BaseConstants.ID, id));
}
return (List<KObject>) template.findByCriteria(detachedCriteria);
}
......
......@@ -59,9 +59,8 @@ public class ProductionPlanReportDaoImpl extends AbstractBaseDao implements Prod
KObject currentLoginRegionalCompany = dinasTypeDao.getCurrentLoginRegionalCompany();
if(null!=currentLoginRegionalCompany){
detachedCriteria.add(Restrictions.eq("regionalCompany.id",currentLoginRegionalCompany.getUuid("id")));
};
detachedCriteria.addOrder(Order.desc("createDate"));
detachedCriteria.addOrder(Order.desc("productionPlanDate"));
}
detachedCriteria.addOrder(Order.desc(BaseConstants.CREATE_TIME));
int offset = page.getPageSize() * (page.getPageNo() - 1);
page.setTotal(template.findByCriteria(detachedCriteria).size());
List<KObject> list = (List<KObject>) template.findByCriteria(detachedCriteria,offset,page.getPageSize());
......
......@@ -2,9 +2,14 @@ package com.xyst.dinas.production.internal.service;
import com.beecode.bap.attachment.common.Page;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.warn.WarnSetting;
import com.xyst.dinas.biz.warn.WarnSettingEntity;
import com.xyst.dinas.biz.warn.WarnTargetTypeEnum;
import com.xyst.dinas.biz.warn.service.IWarningSettingService;
import com.xyst.dinas.production.dao.SandMiningDao;
import com.xyst.dinas.production.service.SandMiningService;
import org.apache.commons.collections.CollectionUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
......@@ -17,6 +22,9 @@ public class SandMiningServiceImpl implements SandMiningService {
@Autowired
private SandMiningDao sandMiningDao;
@Autowired
private IWarningSettingService warningSettingService;
@Override
public Page<KObject> queryByPaging(Page<KObject> page, Integer sandMiningStatus) throws Exception {
if(page.getPageNo()==0||page.getPageSize()==0) {
......@@ -27,7 +35,32 @@ public class SandMiningServiceImpl implements SandMiningService {
@Override
public UUID addSandMining(KObject kObject) {
return sandMiningDao.create(kObject);
UUID uuid = sandMiningDao.create(kObject);
//新增采砂船非工作时间预警和采砂船非自己采区预警
WarnSettingEntity warnSetting = new WarnSettingEntity();
warnSetting.setBillType("进入告警区");
warnSetting.setBillId(uuid);
warnSetting.setTarget("进入告警区");
warnSetting.setOpen(false);
warnSetting.setMemo(getSandShipInfo(kObject));
warningSettingService.insertWarnSetting(warnSetting);
WarnSettingEntity warnSetting1 = new WarnSettingEntity();
warnSetting1.setBillType("非法采砂报警");
warnSetting1.setBillId(uuid);
warnSetting1.setTarget("非作业时间采砂");
warnSetting1.setOpen(false);
warnSetting1.setMemo(getSandShipInfo(kObject));
warningSettingService.insertWarnSetting(warnSetting1);
return uuid;
}
private String getSandShipInfo(KObject kObject) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("regionalCompanyId", kObject.get("regionalCompany").getUuid("id").toString());
return jsonObject.toString();
}
@Override
......@@ -46,8 +79,8 @@ public class SandMiningServiceImpl implements SandMiningService {
@Override
public void update(KObject kobject) {
sandMiningDao.modify(kobject);
UUID id = kobject.getUuid("id");
sandMiningDao.modify(kobject);
}
@Override
......
......@@ -9,6 +9,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
import java.util.Optional;
public class SandMiningExpiredSchedule implements ServiceInitializer {
......@@ -34,4 +35,5 @@ public class SandMiningExpiredSchedule implements ServiceInitializer {
logger.info("采砂许可证状态任务初始化成功!");
}
}
......@@ -67,8 +67,6 @@ public class SandMiningController {
@PutMapping
public ResponseObj update(@RequestBody String body){
KObject kobject = JSONObjectUtils.toObject(body,Amino.getApplicationMetadataContext().getBean(SandMiningConstant.ENTITY, KClass.class));
sandMiningService.update(kobject);
return ResponseObj.success("修改成功");
}
......
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://www.beecode.cn/schema/amino-metadata" xmlns:m="http://www.beecode.cn/schema/inz-query">
<specification>1.0</specification>
<id>d050b6c5-fc17-45c0-8e7f-0159b2e081d2</id>
<name>com.xyst.dinas.production.query.SandShipWarnSetting</name>
<title>船只预警设置</title>
<define>inz.query.Query</define>
<define-version>1.0</define-version>
<dependency>com.xyst.dinas.biz.datamodel.WarnSetting</dependency>
<content>
<m:query>
<m:type>com.xyst.dinas.biz.datamodel.WarnSetting</m:type>
<m:dataProcessor>com.xyst.dinas.production.internal.SandShipWarnSettingProcessor</m:dataProcessor>
<m:authorityItem/>
<m:innerScenes>
<m:innerScene>
<m:id>d9a983a6-0c40-45d5-ac07-32c6fdc85051</m:id>
<m:title>全部</m:title>
<m:javaImplement>com.beecode.inz.common.scene.CommonAllScene</m:javaImplement>
<m:defaultExecute/>
<m:hide></m:hide>
</m:innerScene>
<m:innerScene>
<m:id>c6a7fed5-8ba2-4c07-b86a-bf8a90d527f3</m:id>
<m:title>已废弃</m:title>
<m:javaImplement>com.beecode.inz.common.scene.DefaultDiscardScene</m:javaImplement>
<m:defaultExecute/>
<m:hide></m:hide>
</m:innerScene>
</m:innerScenes>
<m:fields>
<m:field>
<m:name>id</m:name>
<m:title>id</m:title>
<m:type>uuid</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>version</m:name>
<m:title>version</m:title>
<m:type>int</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>billId</m:name>
<m:title>业务id</m:title>
<m:type>uuid</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>target</m:name>
<m:title>预警指标</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>memo</m:name>
<m:title>备注</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>max</m:name>
<m:title>实际值</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>personnel</m:name>
<m:title>通知人员</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>createTime</m:name>
<m:title>创建时间</m:title>
<m:type>datetime</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>creator.name</m:name>
<m:title>创建人</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>modifyTime</m:name>
<m:title>修改时间</m:title>
<m:type>datetime</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>modifier.name</m:name>
<m:title>修改人</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
</m:field>
</m:fields>
</m:query>
</content>
</metadata>
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