Commit 2d146357 by 焦凯

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

parents 11c72633 71852b7e
......@@ -26,10 +26,12 @@ import com.beecode.bcp.type.TypeConstants;
import com.beecode.inz.common.CommonConstants;
import com.beecode.inz.common.GlobalControllerExceptionHandler;
import com.beecode.inz.common.dao.CommonDao;
import com.beecode.inz.common.dao.QueryComponentDao;
import com.beecode.inz.common.internal.biztrait.InzBizTraitImpl;
import com.beecode.inz.common.internal.dao.ByIdDaoImpl;
import com.beecode.inz.common.internal.dao.CommonDaoImpl;
import com.beecode.inz.common.internal.dao.FollowerDaoImpl;
import com.beecode.inz.common.internal.dao.QueryComponentDaoImpl;
import com.beecode.inz.common.internal.dao.SalesRecordDaoImpl;
import com.beecode.inz.common.internal.scene.ChargeOfMeScene;
import com.beecode.inz.common.internal.scene.ChargeOfMySubordinates;
......@@ -49,15 +51,18 @@ import com.beecode.inz.common.internal.service.ByIdServiceImpl;
import com.beecode.inz.common.internal.service.CommonServiceImpl;
import com.beecode.inz.common.internal.service.FollowerPrivilegeServiceImpl;
import com.beecode.inz.common.internal.service.FollowerServiceImpl;
import com.beecode.inz.common.internal.service.QueryComponentServiceImpl;
import com.beecode.inz.common.internal.service.SalesRecordServiceImpl;
import com.beecode.inz.common.internal.service.TemplateManageServiceImpl;
import com.beecode.inz.common.service.CommonService;
import com.beecode.inz.common.service.QueryComponentService;
import com.beecode.inz.common.util.ApiSecurityHandle;
import com.beecode.inz.common.web.AuthcInfoController;
import com.beecode.inz.common.web.BiztypeViewConfigController;
import com.beecode.inz.common.web.CertifacationController;
import com.beecode.inz.common.web.CommonController;
import com.beecode.inz.common.web.FollowerController;
import com.beecode.inz.common.web.QueryComponentController;
import com.beecode.inz.common.web.SalesRecordController;
/**
......@@ -275,4 +280,18 @@ public class CommonConfiguration {
return new ApiSecurityHandle();
}
@Bean
public QueryComponentController queryComponentController(){
return new QueryComponentController();
}
@Bean
public QueryComponentService queryComponentServiceImpl(){
return new QueryComponentServiceImpl();
}
@Bean
public QueryComponentDao queryComponentDaoImpl(){
return new QueryComponentDaoImpl();
}
}
package com.beecode.inz.common.dao;
import java.util.List;
import java.util.UUID;
import org.json.JSONArray;
import org.json.JSONObject;
import com.beecode.inz.common.pojo.QueryComponentCoulmnData;
public interface QueryComponentDao {
JSONObject queryDetailByMasterId(UUID masterId, String detailModelName, List<QueryComponentCoulmnData> columnList,
int pageSize, int current);
}
package com.beecode.inz.common.internal.dao;
import java.util.List;
import java.util.UUID;
import javax.persistence.Tuple;
import org.hibernate.query.Query;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import com.beecode.inz.common.dao.QueryComponentDao;
import com.beecode.inz.common.pojo.QueryComponentCoulmnData;
public class QueryComponentDaoImpl implements QueryComponentDao{
@Autowired
private HibernateTemplate template;
@Override
public JSONObject queryDetailByMasterId(UUID masterId, String detailModelName, List<QueryComponentCoulmnData> columnList, int pageSize,
int current) {
return template.execute(session ->{
String hql = "SELECT ";
int i = 0;
for(QueryComponentCoulmnData column : columnList) {
hql += " " + column.getKey();
if(i < columnList.size() - 1) {
hql += ",";
}
i++;
}
hql += " from " + detailModelName + " where master.id =:masterId ";
Query<Tuple> query = session.createQuery(hql, Tuple.class).setFirstResult((current - 1) * pageSize).setMaxResults(pageSize);
query.setParameter("masterId", masterId);
List<Tuple> queryList = query.getResultList();
JSONArray resultList = new JSONArray();
for(Tuple queryResult : queryList) {
JSONObject resultData = new JSONObject();
for(int j = 0 ; j < columnList.size() ; j++) {
resultData.put(columnList.get(j).getKey(), queryResult.get(j));
}
resultList.put(resultData);
}
JSONObject result = new JSONObject();
result.put("data", resultList);
long total = queryDetailCountByMasterId(masterId, detailModelName);
result.put("total", total);
return result;
});
}
private long queryDetailCountByMasterId(UUID masterId, String detailModelName) {
return template.execute(session ->{
String hql = "SELECT count(id) ";
hql += " from " + detailModelName + " where master.id =:masterId ";
Query<Tuple> query = session.createQuery(hql, Tuple.class);
query.setParameter("masterId", masterId);
List<Tuple> queryList = query.getResultList();
Tuple tuple = queryList.get(0);
long count = Long.parseLong(tuple.get(0).toString());
return count;
});
}
}
package com.beecode.inz.common.internal.service;
import java.util.List;
import java.util.UUID;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.inz.common.dao.ByIdDao;
import com.beecode.inz.common.dao.QueryComponentDao;
import com.beecode.inz.common.pojo.QueryComponentCoulmnData;
import com.beecode.inz.common.service.QueryComponentService;
public class QueryComponentServiceImpl implements QueryComponentService {
@Autowired
private QueryComponentDao queryComponentDao;
@Override
public JSONObject queryDetailByMasterId(UUID masterId, String detailModelName, List<QueryComponentCoulmnData> columnList, int pageSize,
int current) {
// TODO Auto-generated method stub
return queryComponentDao.queryDetailByMasterId(masterId, detailModelName, columnList, pageSize, current);
}
}
package com.beecode.inz.common.pojo;
public class QueryComponentCoulmnData {
private String title;
private String key;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
package com.beecode.inz.common.service;
import java.util.List;
import java.util.UUID;
import org.json.JSONArray;
import com.beecode.inz.common.pojo.QueryComponentCoulmnData;
public interface QueryComponentService {
Object queryDetailByMasterId(UUID masterId, String detailModelName, List<QueryComponentCoulmnData> columnList, int pageSize,
int current);
}
package com.beecode.inz.common.web;
import java.util.List;
import java.util.UUID;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.inz.common.pojo.QueryComponentCoulmnData;
import com.beecode.inz.common.service.QueryComponentService;
import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
@RestController
public class QueryComponentController {
@Autowired
private QueryComponentService queryComponentService;
@PostMapping("/queryComponent/queryDetailByMasterId/{masterId}")
public Object queryDetailByMasterId(@PathVariable UUID masterId, @RequestBody String body) {
JSONObject list = new JSONObject(body);
JSONArray array = JSONArray.fromObject(list.get("columnList").toString());
List<QueryComponentCoulmnData> columnList = JSONArray.toList(array, QueryComponentCoulmnData.class);
return queryComponentService.queryDetailByMasterId(masterId, list.getString("detailModelName"), columnList, list.getInt("pageSize"), list.getInt("current")).toString();
}
@PostMapping("/sand/user/queryComponent/queryDetailByMasterId/{masterId}")
public Object queryDetailByMasterIdComcompany(@PathVariable UUID masterId, @RequestBody String body) {
JSONObject list = new JSONObject(body);
JSONArray array = JSONArray.fromObject(list.get("columnList").toString());
List<QueryComponentCoulmnData> columnList = JSONArray.toList(array, QueryComponentCoulmnData.class);
return queryComponentService.queryDetailByMasterId(masterId, list.getString("detailModelName"), columnList, list.getInt("pageSize"), list.getInt("current")).toString();
}
}
......@@ -221,7 +221,7 @@ public class InzWorkflowServiceImpl implements InzWorkflowService{
@Override
public void startWorkflow(String actionName, String bizTypeName, String bizObjectName, String bizProcessName,
KObject bizData, Map<String, Object> params) throws WorkflowRuntimeException {
startWorkflow(actionName, bizTypeName, bizObjectName, bizProcessName, bizData, null,null);
startWorkflow(actionName, bizTypeName, bizObjectName, bizProcessName, bizData, params,null);
}
@Transactional
......
......@@ -590,14 +590,14 @@ public class WorkflowGenerator {
equipCount.put("type", "int");
JSONObject regionalCompanyCode = new JSONObject();
totalValue.put("name", "regionalCompanyCode");
totalValue.put("key", "regionalCompanyCode");
totalValue.put("type", "String");
regionalCompanyCode.put("name", "regionalCompanyCode");
regionalCompanyCode.put("key", "regionalCompanyCode");
regionalCompanyCode.put("type", "string");
JSONObject regionalCompanyName = new JSONObject();
totalValue.put("name", "regionalCompanyName");
totalValue.put("key", "regionalCompanyName");
totalValue.put("type", "String");
regionalCompanyName.put("name", "regionalCompanyName");
regionalCompanyName.put("key", "regionalCompanyName");
regionalCompanyName.put("type", "string");
array.put(arg1);
array.put(arg2);
......
......@@ -92,7 +92,6 @@ public class SandMiningAreaServiceImpl implements SandMiningAreaService {
sandMiningAreaDao.deleteById(id);
WarnSetting warnSetting = warningSettingService.getWarnSetting(SandMiningAreaConstant.SAND_MINING_AREA_BILL_TYPE, id, SandMiningAreaConstant.SAND_MINING_AREA_WARN_TARGET);
warningSettingService.deleteWarnSetting(warnSetting.getSettingId());
warningSettingService.endWarnStateBySettingId(warnSetting.getSettingId());
}
@Override
......
......@@ -13,23 +13,20 @@ public class WarnSettingConstant {
public static final String min = "min";
/** 预警阀值上限 */
public static final String max = "max";
/** */
/** 业务类型 */
public static final String billType = "billType";
/** */
/** 业务ID */
public static final String billId = "billId";
/** */
/** 预警指标*/
public static final String target = "target";
/** */
/** 指标数据类型 */
public static final String targetType = "targetType";
/** */
/** 通知人员 */
public static final String personnel = "personnel";
/** */
/** 备注 */
public static final String memo = "memo";
/************************************/
/** 实体名:预警执行记录 */
public static final String ENTITY_WARNINGEXE = "com.xyst.dinas.biz.datamodel.WarningExe";
......@@ -47,7 +44,4 @@ public class WarnSettingConstant {
public static final String ACTUAL_VALUE = "actualValue";
}
......@@ -33,16 +33,20 @@ public class WarningServiceImpl implements WarningService{
@Override
public UUID insertWarnSetting(WarnSetting warnSetting) {
String billType = warnSetting.getBillType();
String warnCalculator = warnSetting.warnCalculator();
Assert.notNull(billType, "The billType must not be null!");
Assert.notNull(warnCalculator, "The warnCalculator must not be null!");
KClass type = Amino.getApplicationMetadataContext().getBean(WarnSettingConstant.ENTITY_WARNSETTING, KClass.class);
KObject setting = type.newInstance();
setting.set(WarnSettingConstant.billType, warnSetting.getBillType());
setting.set(WarnSettingConstant.billType, billType);
setting.set(WarnSettingConstant.billId, warnSetting.getBillId());
setting.set(WarnSettingConstant.target, warnSetting.getTarget());
setting.set(WarnSettingConstant.targetType, warnSetting.getTargetType());
setting.set(WarnSettingConstant.min, warnSetting.getMin());
setting.set(WarnSettingConstant.max, warnSetting.getMax());
setting.set(WarnSettingConstant.memo, warnSetting.getMemo());
setting.set(WarnSettingConstant.warnCalculator, warnSetting.warnCalculator());
setting.set(WarnSettingConstant.warnCalculator, warnCalculator);
setting.set(WarnSettingConstant.isOpen, warnSetting.isOpen()==null? true:warnSetting.isOpen());
String[] personnel = warnSetting.getPersonnel();
if (personnel!=null) {
......@@ -170,7 +174,7 @@ public class WarningServiceImpl implements WarningService{
/**
* 删除预警设置
* 删除预警设置, 自动结束预警执行记录
*
* @param warnSettingId
*/
......@@ -180,26 +184,35 @@ public class WarningServiceImpl implements WarningService{
kObject.set("del",true);
kObject.set("discard",true);
warnSettingDao.update(kObject);
//结束预警执行记录
KObject warnExeRecord = warnSettingDao.queryWarnExeRecordBySettingId(warnSettingId);
warnSettingDao.endWarnRecordState(warnExeRecord);
}
/**
* 删除预警设置
*
* @param billType
* @param billId
* @param target
* 开启或关闭预警设置; 可重复开启或关闭
* @param warnSettingId 预警设置ID
* @param isOpen 开启true/关闭false
*/
@Override
public void deleteWarnSetting(String billType, UUID billId, String target) {
WarnSetting warnSetting = warnSettingDao.getWarnSetting(billType, billId, target);
KObject kObject = warnSettingDao.queryWarnSettingById(warnSetting.getSettingId());
kObject.set("del",true);
kObject.set("discard",true);
warnSettingDao.update(kObject);
public void onOffWarnSetting(UUID warnSettingId,boolean isOpen) {
KObject warnSetting = warnSettingDao.queryWarnSettingById(warnSettingId);
boolean isOpen2 = warnSetting.getBoolean(WarnSettingConstant.isOpen);
if(isOpen == isOpen2) return;
warnSetting.set(WarnSettingConstant.isOpen,isOpen);
warnSettingDao.update(warnSetting);
if(isOpen) {
//再次开启,触发预警
BaseBusinessWarn baseBusinessWarn = new BaseBusinessWarn(warnSettingId);
baseBusinessWarn.warn();
}else {
//关闭预警,结束预警执行记录
KObject warnExeRecord = warnSettingDao.queryWarnExeRecordBySettingId(warnSettingId);
warnSettingDao.endWarnRecordState(warnExeRecord);
}
}
private String UuidListToString(List<UUID> uuids) {
StringBuilder str = new StringBuilder();
for (int i = 0; i < uuids.size(); i++) {
......
......@@ -23,6 +23,7 @@ import org.hibernate.criterion.Restrictions;
import org.hibernate.query.Query;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.stereotype.Repository;
......@@ -97,6 +98,24 @@ public class WarnSettingDao {
return warnSettingToEntity(kObject.orElse(null));
});
}
public List<KObject> queryWarnSettings(String billType, @Nullable UUID billId,@Nullable String target) {
String QUERY_HQL = "from " + WarnSettingConstant.ENTITY_WARNSETTING + " where billType =:billType";
return template.execute(session -> {
StringBuilder hql = new StringBuilder(QUERY_HQL);
if (billId != null) hql.append(" and billId =:billId");
if (target != null) hql.append(" and target =:target");
Query<KObject> query = session.createQuery(hql.toString(), KObject.class);
query.setParameter("billType", billType);
if (billId != null) query.setParameter("billId", billId);
if (target != null) query.setParameter("target", target);
return query.getResultList();
});
}
private WarnSetting warnSettingToEntity(KObject singleResult) {
if (singleResult == null) return null;
......
......@@ -41,16 +41,18 @@ public interface WarningService {
void updateWarnSetting(WarnSettingReq warnSetting);
/**
* 删除预警设置
* 删除预警设置, 自动结束预警执行记录
* @param warnSettingId
*/
void deleteWarnSetting(@NonNull UUID warnSettingId);
/**
* 删除预警设置
*/
void deleteWarnSetting(@NonNull String billType, @Nullable UUID billId, @Nullable String target);
/**
* 开启或关闭预警设置; 可重复开启或关闭
* @param warnSettingId 预警设置ID
* @param isOpen 开启true/关闭false
*/
public void onOffWarnSetting(UUID warnSettingId,boolean isOpen) ;
/***************************************/
......
......@@ -36,7 +36,6 @@ public class WarnSettingController {
@PostMapping("/warnsetting/insert")
public Object insertWarnSetting(@RequestBody WarnSettingEntity warnSettingEntity) {
// BeanUtils.copyProperties(warnSettingEntity, WarnSettingReq.class);
warningService.insertWarnSetting(warnSettingEntity);
return ResponseObj.success("预警设置新增成功");
}
......
......@@ -11,6 +11,8 @@ public class ContractConstant {
/** 实体名:合同子表 */
public static final String CONTRACT_DETAILS = "contractDetails";
/** 合同信息表ID */
public static final String CONTRACT_ID = "contractId";
/** 项目 */
public static final String PROJECT = "project";
/** 项目编号 */
......
......@@ -93,6 +93,25 @@ public class ContractDao {
}
});
}
/**
* 根据合同信息表ID查找当前有效合同
* @param infoid
* @return
*/
public KObject getContractByContractInfoId(UUID infoid) {
List<KObject> contracts = template.execute(new HibernateCallback<List<KObject>>() {
@Override
public List<KObject> doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + ContractConstant.ENTITY_CONTRACT + " where (discard is null or discard = 0) and contractId =:contractId order by createTime desc", KObject.class);
query.setParameter("contractId", infoid);
return query.getResultList();
}
});
if(contracts.isEmpty()) return null;
return contracts.get(0);
}
public List<KObject> queryContractByCode(String contractCode) {
return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() {
@Override
......
......@@ -215,7 +215,7 @@ public class ContractServiceImpl implements ContractService {
contractInfoDao.update(contract);
//1.合同审批通过后,自动新增砂石余量预警设置
UUID contractId = contract.getUuid("id");
UUID contractId = contract.getUuid(ContractConstant.CONTRACT_ID);
String billType = ContractWarnConst.billType;
String contractBaseInfo = getContractBaseInfo(contract);
List<KObject> detials = contract.get("contractDetails").toList();
......@@ -308,8 +308,10 @@ public class ContractServiceImpl implements ContractService {
@Override
public Object queryWarnSettingById(UUID id) {
KObject warnSetting = warnSettingDao.queryWarnSettingById(id);
String billId = warnSetting.getString("billId");
KObject contract = contractDao.load(UUID.fromString(billId));
String contractId = warnSetting.getString("billId");
KObject contractInfo = contractInfoDao.load(UUID.fromString(contractId));
KObject contract = contractDao.getContractByContractInfoId(contractInfo.getUuid("id"));
Map<String, Object> map = new HashMap<>();
map.put("contractName", contract.getString("contractName"));
map.put("purchaseSandUnitName", contract.get("purchaseSandUnit").getString("name"));
......@@ -337,6 +339,12 @@ public class ContractServiceImpl implements ContractService {
KObject contract = contractDao.load(id);
contract.set(ContractConstant.CONTRACT_STATE,ContractStateEnum.COMPLETED.name());
contractDao.update(contract);
//合同完成后,把该合同的所有预警设置全部清除
UUID contractInfoId = contract.getUuid(ContractConstant.CONTRACT_ID);
List<KObject> warnSettings = warnSettingDao.queryWarnSettings(ContractWarnConst.billType, contractInfoId, null);
for (KObject warnSetting : warnSettings) {
warningSettingService.deleteWarnSetting(warnSetting.getUuid(BaseConstants.ID));
}
}
@Transactional
......
......@@ -22,7 +22,8 @@ public class ContractPerformWarningProcessor implements DataProcessor {
for (RowData row : rowDatas) {
//合同,项目,购砂单位
UUID contractId = UUID.fromString(row.get("billId").toString());
KObject contract = contractService.queryContract(contractId);
KObject contractInfo = contractService.queryContractInfo(contractId);
KObject contract = contractService.getLastContractByInfoId(contractInfo.getUuid("id"));
row.put("projectName", contract.isNull("project") ? "" : contract.get("project").getString("projectName"));
row.put("contractName", contract.getString("contractName"));
String purchaseSandUnitName = contract.get("purchaseSandUnit").getString("name");
......
......@@ -35,7 +35,8 @@ public class ContractWarnSettingProcessor implements DataProcessor {
for (RowData row : rowDatas) {
//合同,项目,购砂单位
UUID contractId = UUID.fromString(row.get("billId").toString());
KObject contract = contractService.queryContract(contractId);
KObject contractInfo = contractService.queryContractInfo(contractId);
KObject contract = contractService.getLastContractByInfoId(contractInfo.getUuid("id"));
Assert.notNull(contract, "找不到对应的合同!");
row.put("projectName", contract.isNull("project") ? "" : contract.get("project").getString("projectName"));
row.put("contractName", contract.getString("contractName"));
......
......@@ -30,7 +30,8 @@ public class AdvanceBalanceWarningCalculator implements IWarningCalculator{
String min = warnSetting.getMin();
String target = warnSetting.getTarget();
if(min==null || min.trim().length()==0) return false;
KObject contract = contractService.queryContract(warnSetting.getBillId());
KObject contractInfo = contractService.queryContractInfo(warnSetting.getBillId());
KObject contract = contractService.getLastContractByInfoId(contractInfo.getUuid("id"));
advanceBalance = contract.getDouble(ContractConstant.ADVANCE_BALANCE);
if (advanceBalance < Double.valueOf(min)) {
String contractCode = contract.getString(ContractConstant.CONTRACT_CODE);
......
......@@ -34,7 +34,8 @@ public class ContractExpireWarningCalculator implements IWarningCalculator{
String min = warnSetting.getMin();
if(min==null || min.trim().length()==0) return false;
KObject contract = contractService.queryContract(warnSetting.getBillId());
KObject contractInfo = contractService.queryContractInfo(warnSetting.getBillId());
KObject contract = contractService.getLastContractByInfoId(contractInfo.getUuid("id"));
Date endDate = contract.getDate(ContractConstant.endDate);
Date now = new Date();
diffDays = (int) ((endDate.getTime() -now.getTime()) / millisOfDay);
......
......@@ -35,7 +35,8 @@ public class DinasCountWarningCalculator implements IWarningCalculator{
String target = warnSetting.getTarget();
if(min==null || min.trim().length()==0) return false;
KObject contract = contractService.queryContract(warnSetting.getBillId());
KObject contractInfo = contractService.queryContractInfo(warnSetting.getBillId());
KObject contract = contractService.getLastContractByInfoId(contractInfo.getUuid("id"));
List<KObject> details = contract.get(ContractConstant.CONTRACT_DETAILS).toList();
for (KObject detail : details) {
String dinasTypeName = detail.get(ContractConstant.dinasType).getString(DinasTypeConstant.DINASTYPE_NAME);
......
......@@ -540,6 +540,38 @@
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>bcp.type.constraint.Numeric</m:type>
<m:properties>
<m:property>
<m:key>precision</m:key>
<m:value>12</m:value>
</m:property>
<m:property>
<m:key>scale</m:key>
<m:value>4</m:value>
</m:property>
</m:properties>
</m:annotation>
<m:annotation>
<m:type>javax.persistence.Column</m:type>
<m:properties>
<m:property>
<m:key>name</m:key>
<m:value>dinas_amount</m:value>
</m:property>
</m:properties>
</m:annotation>
</m:annotations>
<m:id>4b08ddf4-95fd-4b5d-96fd-9445b6983ebe</m:id>
<m:name>dinasAmount</m:name>
<m:title>合同总量</m:title>
<m:type>fixnum</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>bcp.type.constraint.StringLength</m:type>
<m:value>300</m:value>
</m:annotation>
......
......@@ -21,6 +21,8 @@ dependencies {
compile project(":inz.basis")
compile project(":xyst.dinas.biz")
compile project(":xyst.dinas.project")
compile project(":xyst.dinas.contract")
compile project(":xyst.dinas.sales")
testCompile lib.amino_boot_web
......
......@@ -2,8 +2,23 @@ package com.xyst.dinas.finance.config;
import org.springframework.context.annotation.Bean;
import com.xyst.dinas.finance.dao.BankRechargeDetailDao;
import com.xyst.dinas.finance.dao.ExpenseAdjustDao;
import com.xyst.dinas.finance.dao.StatementAccountDao;
import com.xyst.dinas.finance.internal.dao.BankRechargeDetailDaoImpl;
import com.xyst.dinas.finance.internal.dao.ExpenseAdjustDaoImpl;
import com.xyst.dinas.finance.internal.dao.StatementAccountDaoImpl;
import com.xyst.dinas.finance.internal.service.BankRechargeDetailServiceImpl;
import com.xyst.dinas.finance.internal.service.ExpenseAdjustServiceImpl;
import com.xyst.dinas.finance.internal.service.StatementAccountServiceImpl;
import com.xyst.dinas.finance.processor.FinanceRefundProcessor;
import com.xyst.dinas.finance.service.BankRechargeDetailService;
import com.xyst.dinas.finance.service.ExpenseAdjustService;
import com.xyst.dinas.finance.service.StatementAccountService;
import com.xyst.dinas.finance.web.BankRechargeDetailController;
import com.xyst.dinas.finance.web.ExpenseAdjustController;
import com.xyst.dinas.finance.web.RefundController;
import com.xyst.dinas.finance.web.StatementAccountController;
public class FinanceConfiguration {
......@@ -17,6 +32,50 @@ public class FinanceConfiguration {
return new FinanceRefundProcessor();
}
@Bean
public ExpenseAdjustController expenseAdjustController() {
return new ExpenseAdjustController();
}
@Bean
public ExpenseAdjustService expenseAdjustService() {
return new ExpenseAdjustServiceImpl();
}
@Bean
public ExpenseAdjustDao expenseAdjustDao() {
return new ExpenseAdjustDaoImpl();
}
@Bean
public BankRechargeDetailController bankRechargeDetailController() {
return new BankRechargeDetailController();
}
@Bean
public BankRechargeDetailService bankRechargeDetailService() {
return new BankRechargeDetailServiceImpl();
}
@Bean
public BankRechargeDetailDao bankRechargeDetailDao() {
return new BankRechargeDetailDaoImpl();
}
@Bean
public StatementAccountController statementAccountController() {
return new StatementAccountController();
}
@Bean
public StatementAccountService statementAccountService() {
return new StatementAccountServiceImpl();
}
@Bean
public StatementAccountDao statementAccountDao() {
return new StatementAccountDaoImpl();
}
}
package com.xyst.dinas.finance.constant;
public class ArtificialRechargeConstant {
//人工充值
public static final String ENTITY = "com.xyst.dinas.finance.datamodel.ArtificialRecharge";
}
package com.xyst.dinas.finance.constant;
public class BankRechargeDetailConstant {
//银行充值明细
public static final String ENTITY = "com.xyst.dinas.finance.datamodel.BankRechargeDetail";
}
package com.xyst.dinas.finance.constant;
public interface ExpenseAdjustConstant {
//费用调整
public static final String ENTITY = "com.xyst.dinas.finance.datamodel.ExpenseAdjust";
}
package com.xyst.dinas.finance.dao;
import com.beecode.bcp.type.KObject;
public interface BankRechargeDetailDao {
void save(KObject bankRechargeDetail);
}
package com.xyst.dinas.finance.dao;
import com.beecode.bcp.type.KObject;
public interface ExpenseAdjustDao {
void save(KObject expenseAdjust);
}
package com.xyst.dinas.finance.dao;
import java.util.List;
import java.util.UUID;
import com.beecode.bcp.type.KObject;
public interface StatementAccountDao {
List<KObject> queryStatementAccountByContractId(UUID contractId, String modelPath);
}
package com.xyst.dinas.finance.entity;
import java.math.BigDecimal;
public class StatementAccount {
private String dealDate;
private String dealType;
private BigDecimal dealAmount;
public String getDealDate() {
return dealDate;
}
public void setDealDate(String dealDate) {
this.dealDate = dealDate;
}
public String getDealType() {
return dealType;
}
public void setDealType(String dealType) {
this.dealType = dealType;
}
public BigDecimal getDealAmount() {
return dealAmount;
}
public void setDealAmount(BigDecimal dealAmount) {
this.dealAmount = dealAmount;
}
}
package com.xyst.dinas.finance.internal.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateOperations;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.finance.dao.BankRechargeDetailDao;
public class BankRechargeDetailDaoImpl implements BankRechargeDetailDao {
@Autowired
private HibernateOperations template;
@Override
public void save(KObject bankRechargeDetail) {
template.save(bankRechargeDetail);
}
}
package com.xyst.dinas.finance.internal.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateOperations;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.finance.dao.ExpenseAdjustDao;
public class ExpenseAdjustDaoImpl implements ExpenseAdjustDao{
@Autowired
private HibernateOperations template;
@Override
public void save(KObject expenseAdjust) {
template.save(expenseAdjust);
}
}
package com.xyst.dinas.finance.internal.dao;
import java.util.List;
import java.util.UUID;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.HibernateOperations;
import com.beecode.bcp.type.KObject;
import com.mchange.v2.c3p0.stmt.StatementCache;
import com.xyst.dinas.finance.constant.ArtificialRechargeConstant;
import com.xyst.dinas.finance.dao.StatementAccountDao;
public class StatementAccountDaoImpl implements StatementAccountDao{
@Autowired
private HibernateOperations template;
@Override
public List<KObject> queryStatementAccountByContractId(UUID contractId, String modelPath) {
return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() {
@SuppressWarnings("unchecked")
@Override
public List<KObject> doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + modelPath + " where contract.id=:contractId", KObject.class);
query.setParameter("contractId", contractId);
List<KObject> resultList = query.getResultList();
return resultList;
}
});
}
}
package com.xyst.dinas.finance.internal.service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.UUID;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.amino.core.Amino;
import com.beecode.bcp.core.context.AminoContextHolder;
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.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.contract.internal.dao.ContractDao;
import com.xyst.dinas.finance.constant.ArtificialRechargeConstant;
import com.xyst.dinas.finance.constant.BankRechargeDetailConstant;
import com.xyst.dinas.finance.constant.ExpenseAdjustConstant;
import com.xyst.dinas.finance.dao.BankRechargeDetailDao;
import com.xyst.dinas.finance.service.BankRechargeDetailService;
import com.xyst.dinas.project.dao.ProjectFiledDao;
import com.xyst.dinas.project.dao.PurchaseSandCompanyDao;
public class BankRechargeDetailServiceImpl implements BankRechargeDetailService {
@Autowired
private BankRechargeDetailDao bankRechargeDetailDao;
@Autowired
private ContractDao contractDao;
@Autowired
private ProjectFiledDao projectFiledDao;
@Autowired
private PurchaseSandCompanyDao purchaseSandCompanyDao;
@Autowired
private DinasOrganizationDao dinasOrganizationDao;
@Override
@Transactional
public Object createRechargeDetail(JSONObject jsonObject) {
try {
KClass bankRechargeDetailClass = Amino.getApplicationMetadataContext().getBean(BankRechargeDetailConstant.ENTITY, KClass.class);
KObject bankRechargeDetail = bankRechargeDetailClass.newInstance();
bankRechargeDetail.set("bankName", jsonObject.getString("bankName"));
bankRechargeDetail.set("rechargeAmount", jsonObject.getBigDecimal("rechargeAmount"));
bankRechargeDetail.set("rechargeStatus", "STAY_ENTER_ACCOUNT"); //充值状态 待入账
bankRechargeDetail.set("paymentAccountNumber", jsonObject.getString("paymentAccountNumber"));
bankRechargeDetail.set("shroffAccountNumber", jsonObject.getString("shroffAccountNumber"));
bankRechargeDetail.set("remark", jsonObject.getString("remark"));
bankRechargeDetailDao.save(bankRechargeDetail);
return ResponseObj.success();
} catch (Exception e) {
e.printStackTrace();
return ResponseObj.error();
}
}
@Override
@Transactional
public Object createEnterAccount(JSONObject jsonObject) {
try{
KClass artificialRechargeClass = Amino.getApplicationMetadataContext().getBean(ArtificialRechargeConstant.ENTITY, KClass.class);
//KObject expenseAdjust = expenseAdjustClass.newInstance();
KObject artificialRecharge = JSONObjectUtils.toObject(jsonObject.toString(), artificialRechargeClass);
artificialRecharge.set("creator", AminoContextHolder.getContext().getStaff());
artificialRecharge.set("createTime", new Date());
artificialRecharge.set("project", jsonObject.isNull("project") ? null : projectFiledDao.load(UUID.fromString(jsonObject.getJSONObject("project").getString("id"))));
artificialRecharge.set("regionalCompany", jsonObject.isNull("regionalCompany") ? null : dinasOrganizationDao.load(UUID.fromString(jsonObject.getJSONObject("regionalCompany").getString("id"))));
artificialRecharge.set("purchaseSandUnit", jsonObject.isNull("purchaseSandUnit") ? null : purchaseSandCompanyDao.load(UUID.fromString(jsonObject.getJSONObject("purchaseSandUnit").getString("id"))));
artificialRecharge.set("contract", jsonObject.isNull("contract") ? null : contractDao.load(UUID.fromString(jsonObject.getJSONObject("contract").getString("id"))));
if (!jsonObject.isNull("advanceAmount")) {
//生成预付款调整
artificialRecharge.set("id", UUID.randomUUID());
artificialRecharge.set("fundType", "ADVANCE");
artificialRecharge.set("rechargeAmount", jsonObject.getBigDecimal("advanceAmount"));
bankRechargeDetailDao.save(artificialRecharge);
}
if (!jsonObject.isNull("depositAmount")) {
//生成保证金调整
KObject artificialRechargeTwo = artificialRechargeClass.newInstance(artificialRecharge);
artificialRechargeTwo.set("id", UUID.randomUUID());
artificialRechargeTwo.set("fundType", "DEPOSIT");
artificialRechargeTwo.set("rechargeAmount", jsonObject.getBigDecimal("depositAmount"));
bankRechargeDetailDao.save(artificialRechargeTwo);
}
return ResponseObj.success();
} catch(Exception e) {
e.printStackTrace();
return ResponseObj.error();
}
}
}
package com.xyst.dinas.finance.internal.service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.UUID;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.amino.core.Amino;
import com.beecode.bcp.core.context.AminoContextHolder;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.Null;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.contract.internal.dao.ContractDao;
import com.xyst.dinas.finance.constant.BankRechargeDetailConstant;
import com.xyst.dinas.finance.constant.ExpenseAdjustConstant;
import com.xyst.dinas.finance.dao.ExpenseAdjustDao;
import com.xyst.dinas.finance.service.ExpenseAdjustService;
import com.xyst.dinas.project.dao.ProjectFiledDao;
import com.xyst.dinas.project.dao.PurchaseSandCompanyDao;
public class ExpenseAdjustServiceImpl implements ExpenseAdjustService {
@Autowired
private ExpenseAdjustDao expenseAdjustDao;
@Autowired
private ContractDao contractDao;
@Autowired
private ProjectFiledDao projectFiledDao;
@Autowired
private PurchaseSandCompanyDao purchaseSandCompanyDao;
@Autowired
private DinasOrganizationDao dinasOrganizationDao;
@Override
@Transactional
public Object create(JSONObject jsonObject) {
try {
KClass expenseAdjustClass = Amino.getApplicationMetadataContext().getBean(ExpenseAdjustConstant.ENTITY, KClass.class);
//KObject expenseAdjust = expenseAdjustClass.newInstance();
KObject expenseAdjust = JSONObjectUtils.toObject(jsonObject.toString(), expenseAdjustClass);
expenseAdjust.set("creator", AminoContextHolder.getContext().getStaff());
expenseAdjust.set("createTime", new Date());
expenseAdjust.set("id", UUID.randomUUID());
expenseAdjust.set("project", jsonObject.isNull("project") ? null : projectFiledDao.load(UUID.fromString(jsonObject.getJSONObject("project").getString("id"))));
expenseAdjust.set("regionalCompany", jsonObject.isNull("regionalCompany") ? null : dinasOrganizationDao.load(UUID.fromString(jsonObject.getJSONObject("regionalCompany").getString("id"))));
expenseAdjust.set("purchaseSandUnit", jsonObject.isNull("purchaseSandUnit") ? null : purchaseSandCompanyDao.load(UUID.fromString(jsonObject.getJSONObject("purchaseSandUnit").getString("id"))));
//获取关联合同
UUID contractId = UUID.fromString(jsonObject.getJSONObject("contract").getString("id"));
KObject contract = contractDao.load(contractId);
if (jsonObject.getString("fundType").equals("ADVANCE")) { //预付款
contract.set("advanceBalance", contract.getBigDecimal("advanceBalance") == null ? new BigDecimal("0").add(jsonObject.getBigDecimal("expenseAdjustAmount")) : contract.getBigDecimal("advanceBalance").add(jsonObject.getBigDecimal("expenseAdjustAmount")));
} else if(jsonObject.getString("fundType").equals("DEPOSIT")) { //保证金
contract.set("depositBalance", contract.getBigDecimal("depositBalance") == null ? new BigDecimal("0").add(jsonObject.getBigDecimal("expenseAdjustAmount")) : contract.getBigDecimal("depositBalance").add(jsonObject.getBigDecimal("expenseAdjustAmount")));
}
contractDao.update(contract);
expenseAdjust.set("contract", contract);
expenseAdjustDao.save(expenseAdjust);
return ResponseObj.success();
} catch (Exception e) {
e.printStackTrace();
return ResponseObj.error();
}
}
}
package com.xyst.dinas.finance.internal.service;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.finance.constant.ArtificialRechargeConstant;
import com.xyst.dinas.finance.constant.ExpenseAdjustConstant;
import com.xyst.dinas.finance.constant.FinanceRefundConstant;
import com.xyst.dinas.finance.dao.StatementAccountDao;
import com.xyst.dinas.finance.entity.StatementAccount;
import com.xyst.dinas.finance.enumeration.FundTypeEnum;
import com.xyst.dinas.finance.service.StatementAccountService;
import com.xyst.dinas.sales.constant.SalesRecordConstant;
public class StatementAccountServiceImpl implements StatementAccountService{
@Autowired
private StatementAccountDao statementAccountDao;
@Override
public Object queryStatementAccountByContractId(UUID contractId) {
try {
List<KObject> artificialRechargeList = statementAccountDao.queryStatementAccountByContractId(contractId, ArtificialRechargeConstant.ENTITY);
List<StatementAccount> statementAccounts = new ArrayList<StatementAccount>();
//人工充值
if (artificialRechargeList.size() > 0) {
for (int i = 0; i < artificialRechargeList.size(); i++) {
KObject kObject = artificialRechargeList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款充值");
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金充值");
}
statementAccount.setDealAmount(kObject.getBigDecimal("rechargeAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
}
//退费
List<KObject> financeRefundList = statementAccountDao.queryStatementAccountByContractId(contractId, FinanceRefundConstant.ENTITY);
if (financeRefundList.size() > 0) {
for (int i = 0; i < financeRefundList.size(); i++) {
KObject kObject = financeRefundList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款退费");
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金退费");
}
statementAccount.setDealAmount(kObject.getBigDecimal("applyRefundAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
}
//费用调整
List<KObject> expenseAdjustList = statementAccountDao.queryStatementAccountByContractId(contractId, ExpenseAdjustConstant.ENTITY);
if (expenseAdjustList.size() > 0) {
for (int i = 0; i < expenseAdjustList.size(); i++) {
KObject kObject = expenseAdjustList.get(i);
StatementAccount statementAccount = new StatementAccount();
if (kObject.getString("fundType").equals(FundTypeEnum.ADVANCE.name())) { //预付款
statementAccount.setDealType("预付款费用调整");
} else if (kObject.getString("fundType").equals(FundTypeEnum.DEPOSIT.name())){
statementAccount.setDealType("保证金费用调整");
}
statementAccount.setDealAmount(kObject.getBigDecimal("expenseAdjustAmount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
}
//销售
List<KObject> saleRecordList = statementAccountDao.queryStatementAccountByContractId(contractId, SalesRecordConstant.ENTITY);
if (saleRecordList.size() > 0) {
for (int i = 0; i < saleRecordList.size(); i++) {
KObject kObject = saleRecordList.get(i);
StatementAccount statementAccount = new StatementAccount();
statementAccount.setDealType("销售");
statementAccount.setDealAmount(kObject.getBigDecimal("amount"));
statementAccount.setDealDate(kObject.getString("createTime"));
statementAccounts.add(statementAccount);
}
}
return ResponseObj.success("查询成功", statementAccounts);
} catch (Exception e) {
e.printStackTrace();
return ResponseObj.error();
}
}
}
package com.xyst.dinas.finance.service;
import org.json.JSONObject;
public interface BankRechargeDetailService {
Object createRechargeDetail(JSONObject jsonObject);
Object createEnterAccount(JSONObject jsonObject);
}
package com.xyst.dinas.finance.service;
import org.json.JSONObject;
public interface ExpenseAdjustService {
Object create(JSONObject jsonObject);
}
package com.xyst.dinas.finance.service;
import java.util.UUID;
public interface StatementAccountService {
Object queryStatementAccountByContractId(UUID fromString);
}
package com.xyst.dinas.finance.web;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.xyst.dinas.finance.service.BankRechargeDetailService;
/**
* 银行入账明细
*
* @author yangqingsong
* @date 2021年4月23日
*/
@RestController
public class BankRechargeDetailController {
@Autowired
private BankRechargeDetailService bankRechargeDetailService;
@ResponseBody
@RequestMapping(value = "/finance/bankRechargeDetail/createRechargeDetail", method = RequestMethod.POST, consumes = "application/json")
public Object createRechargeDetail(@RequestBody String body) {
JSONObject jsonObject = new JSONObject(body);
return bankRechargeDetailService.createRechargeDetail(jsonObject);
}
@ResponseBody
@RequestMapping(value = "/finance/bankRechargeDetail/createEnterAccount", method = RequestMethod.POST, consumes = "application/json")
public Object createEnterAccount(@RequestBody String body) {
JSONObject jsonObject = new JSONObject(body);
return bankRechargeDetailService.createEnterAccount(jsonObject);
}
}
package com.xyst.dinas.finance.web;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.xyst.dinas.finance.service.BankRechargeDetailService;
import com.xyst.dinas.finance.service.ExpenseAdjustService;
/**
* 费用调整
*
* @author yangqingsong
* @date 2021年4月23日
*/
@RestController
public class ExpenseAdjustController {
@Autowired
private ExpenseAdjustService expenseAdjustService;
@ResponseBody
@RequestMapping(value = "/finance/expenseAdjust/create", method = RequestMethod.POST, consumes = "application/json")
public Object create(@RequestBody String body) {
JSONObject jsonObject = new JSONObject(body);
return expenseAdjustService.create(jsonObject);
}
}
package com.xyst.dinas.finance.web;
import java.util.UUID;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
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 com.xyst.dinas.finance.service.StatementAccountService;
/**
* 费用调整
*
* @author yangqingsong
* @date 2021年4月25日
*/
@RestController
public class StatementAccountController {
@Autowired
private StatementAccountService statementAccountService;
@ResponseBody
@RequestMapping(value = "/finance/statementAccount/queryStatementAccountByContractId", method = RequestMethod.GET)
public Object queryStatementAccountByContractId(@RequestParam String contractId) {
return statementAccountService.queryStatementAccountByContractId(UUID.fromString(contractId));
}
}
......@@ -58,7 +58,7 @@
<description></description>
</field>
<field title='购砂单位'>
<name>purchaseSandCompany.id</name>
<name>purchaseSandUnit.id</name>
<type>uuid</type>
<ref>
<type></type>
......@@ -67,7 +67,7 @@
<description></description>
</field>
<field title='购砂单位name'>
<name>purchaseSandCompany.name</name>
<name>purchaseSandUnit.name</name>
<type>string</type>
<ref>
<type></type>
......@@ -85,11 +85,11 @@
<description></description>
</field>
<field title='项目名称'>
<name>projectName</name>
<name>project.projectName</name>
<type>string</type>
<ref>
<type></type>
<name></name>
<name>com.xyst.dinas.project.datamodel.ProjectFiled</name>
</ref>
<description></description>
</field>
......
......@@ -58,7 +58,7 @@
<description></description>
</field>
<field title='购砂单位'>
<name>purchaseSandCompany.id</name>
<name>purchaseSandUnit.id</name>
<type>uuid</type>
<ref>
<type></type>
......@@ -67,7 +67,7 @@
<description></description>
</field>
<field title='购砂单位name'>
<name>purchaseSandCompany.name</name>
<name>purchaseSandUnit.name</name>
<type>string</type>
<ref>
<type></type>
......@@ -85,11 +85,11 @@
<description></description>
</field>
<field title='项目名称'>
<name>projectName</name>
<name>project.projectName</name>
<type>string</type>
<ref>
<type></type>
<name></name>
<name>com.xyst.dinas.project.datamodel.ProjectFiled</name>
</ref>
<description></description>
</field>
......
......@@ -58,7 +58,7 @@
<description></description>
</field>
<field title='购砂单位'>
<name>purchaseSandCompany.id</name>
<name>purchaseSandUnit.id</name>
<type>uuid</type>
<ref>
<type></type>
......@@ -67,7 +67,7 @@
<description></description>
</field>
<field title='购砂单位name'>
<name>purchaseSandCompany.name</name>
<name>purchaseSandUnit.name</name>
<type>string</type>
<ref>
<type></type>
......@@ -85,11 +85,11 @@
<description></description>
</field>
<field title='项目名称'>
<name>projectName</name>
<name>project.projectName</name>
<type>string</type>
<ref>
<type></type>
<name></name>
<name>com.xyst.dinas.project.datamodel.ProjectFiled</name>
</ref>
<description></description>
</field>
......
......@@ -67,7 +67,7 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>purchaseSandCompany.id</m:name>
<m:name>purchaseSandUnit.id</m:name>
<m:title>购砂单位</m:title>
<m:type>uuid</m:type>
<m:ref>
......@@ -77,7 +77,7 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>purchaseSandCompany.name</m:name>
<m:name>purchaseSandUnit.name</m:name>
<m:title>购砂单位name</m:title>
<m:type>string</m:type>
<m:ref>
......@@ -97,11 +97,11 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>projectName</m:name>
<m:name>project.projectName</m:name>
<m:title>项目名称</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:name>com.xyst.dinas.project.datamodel.ProjectFiled</m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
......
......@@ -67,7 +67,7 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>purchaseSandCompany.id</m:name>
<m:name>purchaseSandUnit.id</m:name>
<m:title>购砂单位</m:title>
<m:type>uuid</m:type>
<m:ref>
......@@ -77,7 +77,7 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>purchaseSandCompany.name</m:name>
<m:name>purchaseSandUnit.name</m:name>
<m:title>购砂单位name</m:title>
<m:type>string</m:type>
<m:ref>
......@@ -97,11 +97,11 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>projectName</m:name>
<m:name>project.projectName</m:name>
<m:title>项目名称</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:name>com.xyst.dinas.project.datamodel.ProjectFiled</m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
......
......@@ -67,7 +67,7 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>purchaseSandCompany.id</m:name>
<m:name>purchaseSandUnit.id</m:name>
<m:title>购砂单位</m:title>
<m:type>uuid</m:type>
<m:ref>
......@@ -77,7 +77,7 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>purchaseSandCompany.name</m:name>
<m:name>purchaseSandUnit.name</m:name>
<m:title>购砂单位name</m:title>
<m:type>string</m:type>
<m:ref>
......@@ -97,11 +97,11 @@
<m:desc></m:desc>
</m:field>
<m:field>
<m:name>projectName</m:name>
<m:name>project.projectName</m:name>
<m:title>项目名称</m:title>
<m:type>string</m:type>
<m:ref>
<m:name></m:name>
<m:name>com.xyst.dinas.project.datamodel.ProjectFiled</m:name>
<m:type></m:type>
</m:ref>
<m:desc></m:desc>
......
......@@ -95,17 +95,12 @@ public class SandMiningServiceImpl implements SandMiningService {
WarnSetting warnSetting = warningSettingService.getWarnSetting(SandMiningAreaConstant.SAND_SHIP_WARN_BILL_TYPE, id, SandMiningAreaConstant.SAND_SHIP_WARN_TARGET_ENTER_WARNING_AREA);
if(null!=warnSetting){
warningSettingService.deleteWarnSetting(warnSetting.getSettingId());
warningSettingService.endWarnStateBySettingId(warnSetting.getSettingId());
}
//非作业时间采砂的
WarnSetting warnSetting1 = warningSettingService.getWarnSetting(SandMiningAreaConstant.SAND_SHIP_WARN_BILL_TYPE, id, SandMiningAreaConstant.SAND_SHIP_WARN_TARGET_NO_OPERATING_HOURS);
if(null!=warnSetting1){
warningSettingService.deleteWarnSetting(warnSetting1.getSettingId());
warningSettingService.endWarnStateBySettingId(warnSetting1.getSettingId());
}
}
@Override
......
......@@ -22,6 +22,7 @@ dependencies {
compile project(":xyst.dinas.biz")
compile project(":xyst.dinas.contract")
compile project(":xyst.dinas.price")
compile project(":xyst.dinas.project")
testCompile lib.amino_boot_web
......
package com.xyst.dinas.sales.constant;
public interface SalesRecordConstant {
public static String ENTITY = "com.xyst.dinas.sales.datamodel.SalesRecord";
}
......@@ -8,6 +8,8 @@ import com.beecode.bcp.type.KObject;
public interface NeedPlanDao {
KObject queryNeedPlanByContractIdAndCycleId(UUID planningCycleId, UUID contractId);
List<KObject> queryNeedPlanByContractId(UUID contractId);
List<UUID> queryNeedPlanContratByCycleId(UUID planningCycleId);
......
package com.xyst.dinas.sales.entity;
import java.math.BigDecimal;
import java.util.UUID;
public class ContractExecuteDetail {
private UUID dinasTypeId;
private String dinasTypeName;
private BigDecimal contractAmount;
private BigDecimal needPlanAmount;
private BigDecimal saleAmount;
private BigDecimal surplusAmount;
public ContractExecuteDetail(UUID dinasTypeId, String dinasTypeName) {
this.dinasTypeId = dinasTypeId;
this.dinasTypeName = dinasTypeName;
}
public UUID getDinasTypeId() {
return dinasTypeId;
}
public void setDinasTypeId(UUID dinasTypeId) {
this.dinasTypeId = dinasTypeId;
}
public String getDinasTypeName() {
return dinasTypeName;
}
public void setDinasTypeName(String dinasTypeName) {
this.dinasTypeName = dinasTypeName;
}
public BigDecimal getContractAmount() {
return contractAmount;
}
public void setContractAmount(BigDecimal contractAmount) {
this.contractAmount = contractAmount;
}
public BigDecimal getNeedPlanAmount() {
return needPlanAmount;
}
public void setNeedPlanAmount(BigDecimal needPlanAmount) {
this.needPlanAmount = needPlanAmount;
}
public BigDecimal getSaleAmount() {
return saleAmount;
}
public void setSaleAmount(BigDecimal saleAmount) {
this.saleAmount = saleAmount;
}
public BigDecimal getSurplusAmount() {
return surplusAmount;
}
public void setSurplusAmount(BigDecimal surplusAmount) {
this.surplusAmount = surplusAmount;
}
}
......@@ -3,7 +3,6 @@ package com.xyst.dinas.sales.internal.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.persistence.Tuple;
......@@ -28,7 +27,6 @@ public class NeedPlanDaoImpl implements NeedPlanDao, NeedPlanConstant {
@Override
public KObject queryNeedPlanByContractIdAndCycleId(UUID planningCycleId, UUID contractId) {
return (KObject)template.execute(new HibernateCallback<KObject>() {
@SuppressWarnings("unchecked")
@Override
public KObject doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + NEED_PLAN_NTITY + " where planningCycle.id=:planningCycleId and contract.id=:contractId and submitState=:submitState", KObject.class);
......@@ -41,6 +39,21 @@ public class NeedPlanDaoImpl implements NeedPlanDao, NeedPlanConstant {
}
});
}
@Override
public List<KObject> queryNeedPlanByContractId(UUID contractId) {
return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() {
@Override
public List<KObject> doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + NEED_PLAN_NTITY + " where contract.id=:contractId and submitState=:submitState", KObject.class);
query.setParameter("contractId", contractId);
query.setParameter("submitState", "SUBMITTED");
List<KObject> resultList = query.getResultList();
if(resultList.isEmpty()) return null;
return resultList;
}
});
}
@Override
public List<UUID> queryNeedPlanContratByCycleId(UUID planningCycleId) {
......
......@@ -28,13 +28,16 @@ import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.biz.service.DinasOrganizationService;
import com.xyst.dinas.biz.service.DinasTypeService;
import com.xyst.dinas.biz.service.StationService;
import com.xyst.dinas.biz.warn.BaseBusinessWarn;
import com.xyst.dinas.biz.warn.dao.WarnSettingDao;
import com.xyst.dinas.biz.warn.service.WarningService;
import com.xyst.dinas.price.entity.StationDinasTypePriceDetail;
import com.xyst.dinas.price.service.PriceAdjustmentService;
import com.xyst.dinas.sales.constant.InventoryConstant;
import com.xyst.dinas.sales.dao.InventoryDao;
import com.xyst.dinas.sales.entity.InventoryLog;
import com.xyst.dinas.sales.entity.StationDinasTypeRelation;
import com.xyst.dinas.sales.processor.StockAmountWarnCalculate;
import com.xyst.dinas.sales.service.InventoryService;
public class InventoryServiceImpl implements InventoryService {
......@@ -64,6 +67,9 @@ public class InventoryServiceImpl implements InventoryService {
private WarnSettingDao warnSettingDao;
@Autowired
private WarningService warningService;
@Autowired
public BapContext bapContext;
@Override
......@@ -120,6 +126,9 @@ public class InventoryServiceImpl implements InventoryService {
kobj.set("amount", amount);
}
inventoryDao.update(kobj);
BaseBusinessWarn warn = warningService.createWarn("库存", UUID.fromString(stationId), dinasTypeName);
warn.setWarningCalculate(new StockAmountWarnCalculate(kobj.getDouble("amount")));
warn.warn();
if(isLog) {
try {
......
package com.xyst.dinas.sales.internal.service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Stream;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.contract.service.ContractService;
import com.xyst.dinas.sales.dao.NeedPlanDao;
import com.xyst.dinas.sales.entity.ContractExecuteDetail;
import com.xyst.dinas.sales.service.NeedPlanService;
......@@ -18,6 +20,9 @@ public class NeedPlanServiceImpl implements NeedPlanService {
@Autowired
private NeedPlanDao needPlanDao;
@Autowired
private ContractService contractService;
@Override
public KObject queryNeedPlanAmountByDinasType(UUID planningCycleId,UUID contractId, UUID dinasTypeId) {
......@@ -39,4 +44,47 @@ public class NeedPlanServiceImpl implements NeedPlanService {
return list;
}
@Override
public List<ContractExecuteDetail> queryContractExecuteDetailByContractId(UUID contractId) {
List<ContractExecuteDetail> result = new ArrayList<ContractExecuteDetail>();
KObject contract = contractService.queryContract(contractId);
KObject[] contractDetails = contract.get("contractDetails").toArray();
//计算该合同的所有已提交的需用计划中各种砂石类型的需用总量
List<KObject> needPlanList = needPlanDao.queryNeedPlanByContractId(contractId);
Map<UUID, BigDecimal> map = new HashMap<UUID, BigDecimal>();
if(needPlanList != null) {
for(int i = 0; i < needPlanList.size(); i++) {
KObject needPlan = needPlanList.get(i);
KObject[] needPlanDetails = needPlan.get("NeedPlanDetails").toArray();
for(int j = 0; j < needPlanDetails.length; j++) {
KObject needPlanDetail = needPlanDetails[j];
UUID key = needPlanDetail.get("dinasType").getUuid("id");
BigDecimal amount = needPlanDetail.getBigDecimal("needPlanAmount");
if(map.containsKey(key)) {
BigDecimal oldAmount = map.get(key);
map.put(key, oldAmount.add(amount));
} else {
map.put(key, amount);
}
}
}
}
for(int i = 0; i < contractDetails.length; i++) {
KObject contractDetail = contractDetails[i];
UUID dinasTypeId = contractDetail.get("dinasType").getUuid("id");
String dinasTypeName = contractDetail.get("dinasType").getString("dinasTypeName");
ContractExecuteDetail item = new ContractExecuteDetail(dinasTypeId, dinasTypeName);
item.setContractAmount(contractDetail.getBigDecimal("purchaseAmount"));
if(map.containsKey(dinasTypeId)) {
item.setNeedPlanAmount(map.get(dinasTypeId));
} else {
item.setNeedPlanAmount(new BigDecimal(0));
}
item.setSaleAmount(contractDetail.getBigDecimal("purchaseAmount").subtract(contractDetail.getBigDecimal("dinasAmount")));
item.setSurplusAmount(contractDetail.getBigDecimal("dinasAmount"));
result.add(item);
}
return result;
}
}
package com.xyst.dinas.sales.processor;
import com.xyst.dinas.biz.warn.IWarningCalculator;
import com.xyst.dinas.biz.warn.WarnSetting;
/**
* 库存砂石余量 预警计算器
*
* @author Jackpot
* @date 2021年4月22日
*/
public class StockAmountWarnCalculate implements IWarningCalculator{
//砂石库存量
private double stockAmount;
private String warnMessage;
public StockAmountWarnCalculate(double stockAmount) {
this.stockAmount = stockAmount;
}
@Override
public boolean isWarning(WarnSetting warnSetting) {
String min = warnSetting.getMin();
String dinasTypeName = warnSetting.getTarget();
if(min==null || min.trim().length()==0) return false;
if (stockAmount < Double.valueOf(min)) {
warnMessage = "["+dinasTypeName+"]"+"的当前库存量为"+stockAmount+",已不足"+min+"吨!";
return true;
}
return false;
}
@Override
public String warnMessage() {
return warnMessage;
}
@Override
public String getActualValue() {
return stockAmount+"";
}
}
......@@ -4,6 +4,7 @@ import java.util.List;
import java.util.UUID;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.sales.entity.ContractExecuteDetail;
public interface NeedPlanService {
......@@ -11,5 +12,7 @@ public interface NeedPlanService {
KObject queryNeedPlanAmountByDinasType(UUID planningCycleId, UUID contractId, UUID DinasTypeId);
List<UUID> queryNeedPlanContratByCycleId(UUID fromString);
List<ContractExecuteDetail> queryContractExecuteDetailByContractId(UUID contractId);
}
package com.xyst.dinas.sales.web;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
......@@ -14,6 +12,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.sales.entity.ContractExecuteDetail;
import com.xyst.dinas.sales.service.NeedPlanService;
@RestController
......@@ -38,5 +37,12 @@ public class NeedPlanController {
List<UUID> list = needPlanService.queryNeedPlanContratByCycleId(UUID.fromString(planningCycleId));
return ResponseObj.success("success", list);
}
@ResponseBody
@RequestMapping(value = "/project/queryContractExecuteDetailByContractId", method = RequestMethod.GET)
public Object queryContractExecuteDetailByContractId(@RequestParam("contractId") String contractId) {
List<ContractExecuteDetail> list = needPlanService.queryContractExecuteDetailByContractId(UUID.fromString(contractId));
return ResponseObj.success("success", list);
}
}
......@@ -37,22 +37,6 @@
]
},
"actions": [
{
"param": [],
"enable": "ALL",
"name": "query_export",
"action": "query_export",
"title": "导出",
"type": ""
},
{
"name": "queryRefresh",
"title": "刷新",
"action": "queryRefresh",
"param": [],
"type": "",
"enable": "ALL"
}
],
"table": {
"selectType": "MULTI",
......@@ -150,7 +134,21 @@
"title" : "详情",
"action" : "openDetail",
"param" : {
"modelName" : "123"
"detailModelName" : "com.xyst.dinas.sales.datamodel.NeedPlan$NeedPlanDetail",
"columnList":[
{
"key":"dinasType.dinasTypeName",
"title":"砂石种类"
},
{
"key":"needPlanAmount",
"title":"需用计划量(吨)"
},
{
"key":"effectiveSale",
"title":"销售计划量(吨)"
}
]
},
"type" : ""
} ],
......
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://www.beecode.cn/schema/amino-metadata">
<specification>1.0</specification>
<id>691cf13f-181e-4728-babc-fc30d0258f19</id>
<name>com.xyst.dinas.sales.advanquery.ProjectAdvQuery</name>
<title>单位项目查询</title>
<description>单位项目查询</description>
<define>advanced.query.template</define>
<define-version>1.0</define-version>
<content>
<template>
<sql-type>SQL</sql-type>
<sql>
SELECT
organization.id AS id,
contract.id AS contractId,
contract.contractName AS contractName,
organization.name AS orgName,
company.name AS companyName,
project.projectName AS projectName,
project_type.title AS projectTypeTitle,
contract.deposit AS contractDeposit,
contract.advanceBalance AS contractAdvanceBalance,
contract.dinasAmount AS dinasAmount,
need_plan.needPlanTotalAmount AS needPlanTotalAmount,
contract.saleDinasAmount AS saleDinasAmount,
contract.dinasAmount - contract.saleDinasAmount AS surplusAmount,
round(contract.saleDinasAmount / contract.dinasAmount * 100, 2) AS finishPercent
FROM
PurchaseSandCompany AS company
LEFT JOIN xystOrganization AS organization ON organization.id = company.regionalCompany
LEFT JOIN Contract AS contract ON contract.purchaseSandUnit = company.id
LEFT JOIN ProjectFiled AS project ON project.id = contract.project
LEFT JOIN ProjectType AS project_type ON project_type.id = project.projectType
LEFT JOIN (SELECT contract AS contractId, sum(needPlanTotalAmount) AS needPlanTotalAmount FROM NeedPlan) AS need_plan ON need_plan.contractId = contract.id
WHERE organization.id = :?regionalCompanyId and company.name like :?companyName and project.projectName like :?projectName and project_type.id = :?projectTypeId
</sql>
</template>
</content>
</metadata>
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://www.beecode.cn/schema/amino-metadata">
<specification>1.0</specification>
<id>29b894e6-a10e-41b1-afc4-9fa9927ee088</id>
<name>com.xyst.dinas.sales.advanquery.ProjectQueryView</name>
<title>单位项目查询</title>
<description>单位项目查询</description>
<define>advanced.query.view</define>
<define-version>1.0</define-version>
<content>
<view>
{
"name": "单位项目查询",
"title": "单位项目查询",
"description": "单位项目查询",
"actions": [],
"scenes" : {
"isShowScenes" : true
},
"fuzzySearch": [
],
"isShowTabCountZero": true,
"groups": [
{
"name": "all",
"title": "全部",
"content": {
"datasource": "com.xyst.dinas.sales.advanquery.ProjectAdvQuery"
}
}
],
"content": {
"isShowView": "table",
"datasource": "com.xyst.dinas.sales.advanquery.ProjectAdvQuery",
"arguments": {
"items": [
]
},
"actions": [
{
"param": [],
"enable": "ALL",
"name": "query_export",
"action": "query_export",
"title": "导出",
"type": ""
}
],
"table": {
"selectType": "MULTI",
"serialNumber": "series",
"pageSize": 200,
"orders":[
],
"expand": false,
"columns": [
{
"type": "VALUE",
"title": "id",
"key": "id",
"columnType": {
"name" : "inner",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "合同Id",
"key": "contractId",
"columnType": {
"name" : "inner",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "合同名称",
"key": "contractName",
"columnType": {
"name" : "inner",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "区域公司",
"key": "orgName",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "购砂单位",
"key": "companyName",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "项目名称",
"key": "projectName",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "项目类型",
"key": "projectTypeTitle",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "保证金(元)",
"key": "contractDeposit",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "预付款余额(元)",
"key": "contractAdvanceBalance",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "合同量(吨)",
"key": "dinasAmount",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "需用总量(吨)",
"key": "needPlanTotalAmount",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "销售总量(吨)",
"key": "saleDinasAmount",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "剩余量(吨)",
"key": "surplusAmount",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type": "VALUE",
"title": "完成百分比(%)",
"key": "finishPercent",
"columnType": {
"name": "select",
"data": {
"selected": true
}
}
},
{
"type" : "ACTION",
"key" : "new_logo77b16046-4d20-4e43-b6bc-5e5e264014fe",
"title" : "操作列",
"width" : 150,
"actions" : [ {
"name" : "new_action",
"title" : "详情",
"action" : "openDetail",
"param" : {
"listenerName" : "project-and-company-query-detail"
},
"type" : ""
} ],
"nodeKey" : 13,
"align" : "center",
"isShow" : false
}
]
}
}
}
</view>
</content>
</metadata>
......@@ -68,7 +68,7 @@
WHERE result.type = :?type
AND result.organizationId = :?organizationId
AND result.projectId = :?projectId
AND result.organizationId = :?organizationId
AND result.type = :?type
AND result.planningCycleStartTime &gt;= :?planningCycleStartTime
AND result.planningCycleEndTime &lt;= :?planningCycleEndTime
</sql>
......
......@@ -44,23 +44,9 @@
"action": "query_export",
"title": "导出",
"type": ""
},
{
"name": "queryRefresh",
"title": "刷新",
"action": "queryRefresh",
"param": [],
"type": "",
"enable": "ALL"
}
],
"table": {
"selectType": "MULTI",
"serialNumber": "series",
"pageSize": 10,
"orders":[
],
"expand": false,
"columns": [
{
......@@ -161,7 +147,25 @@
"title" : "详情",
"action" : "openDetail",
"param" : {
"modelName" : "123"
"detailModelName" : "com.xyst.dinas.sales.datamodel.SalesPlan$SalesPlanDetail",
"columnList":[
{
"key":"dinasType.dinasTypeName",
"title":"砂石种类"
},
{
"key":"requiredAmount",
"title":"需用计划量(吨)"
},
{
"key":"planAmount",
"title":"销售计划量(吨)"
},
{
"key":"actualSaleAmount",
"title":"实际运输量(吨)"
}
]
},
"type" : ""
} ],
......
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