Compare commits

...

26 Commits

Author SHA1 Message Date
wuyilin 6a2305eba0 插件移动至plugin下 1 week ago
wuyilin 3036116937 插件修改路径 1 week ago
wuyilin 08dd7a2b17 Merge branch 'dev-feature-quotation' into dev 1 week ago
wuyilin 4e4e6e5fe1 合同列表界面设置过滤条件 1 week ago
wuyilin 3665c7be0c 移动至quotation文件价 1 week ago
wuyilin 3d2b9dfd69 修改隐藏条件 1 week ago
wuyilin 95c42a233e 添加状态,修改隐藏条件 2 weeks ago
wuyilin 3f63f4d3b3 报价单审批插件 2 weeks ago
wuyilin 246da2018a 修改状态 2 weeks ago
wuyilin 61043248fa 获取项目类型,提交修改状态 2 weeks ago
lihuangbin666 7935d60668 Merge branch 'dev-feature-clueManage' into dev 2 weeks ago
lihuangbin666 829196f7f4 线索管理默认状态 2 weeks ago
huangdehua a2a02a35f5 Merge branch 'dev_feature_入会申请变更' into dev 2 weeks ago
huangdehua 5ddf2b6b46 feature(会费缴纳) 界面初始化以及值更新时控制显隐 2 weeks ago
huangdehua 63fb628033 Merge branch 'dev_feature_入会申请变更' into dev 2 weeks ago
huangdehua a3664d011b feature(入会申请与审核) 变更操作以及界面初始化取消赋值 2 weeks ago
wuyilin 465703d38b Merge branch 'dev-feature-quotation' into dev 2 weeks ago
wuyilin 4636ddd78a 数据库接口 2 weeks ago
wuyilin 7ee8fa9597 提交后修改状态 2 weeks ago
wuyilin 810152443b 报价单插件 2 weeks ago
huangdehua c975221ea9 feature(入会申请与审核) 界面初始化 2 weeks ago
huangdehua 7b87d80120 feature(入会申请与审核) 界面初始化 2 weeks ago
huangdehua e5b7b698a9 feature(入会申请与审核) 会费缴纳弹窗 2 weeks ago
lihuangbin666 61164e395b 线索管理自动编码 3 weeks ago
lihuangbin666 fd8ff44d15 线索管理自动编码 3 weeks ago
wuyilin b26509b119 配置修改 3 weeks ago
  1. 2
      application-tenant/tenant-admin/src/main/resources/application-config.yml
  2. 32
      application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml
  3. 17
      common/common-association/src/main/java/apelet/association/controller/plugin/formPlugin/ClueManageFormPlugin.java
  4. 56
      common/common-association/src/main/java/apelet/association/plugin/MembershipPayPopupPlugin.java
  5. 40
      common/common-association/src/main/java/apelet/association/plugin/MembershipPayShowHidePlugin.java
  6. 25
      common/common-association/src/main/java/apelet/association/plugin/UnitNameChangeFormPlugin.java
  7. 295
      common/common-association/src/main/java/apelet/association/plugin/UnitNameChangeOperationPlugin.java
  8. 74
      common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java
  9. 18
      common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java
  10. 53
      common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java
  11. 29
      common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java
  12. 90
      common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java
  13. 55
      common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java
  14. 54
      common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java
  15. 49
      common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java
  16. 11
      common/common-association/src/main/java/apelet/association/utils/CreatNumberUtils.java
  17. 9
      pom.xml

2
application-tenant/tenant-admin/src/main/resources/application-config.yml

@ -145,7 +145,7 @@ common-redis: @@ -145,7 +145,7 @@ common-redis:
# master-slave:
# 每个节点逗号分隔,第一个为主节点,其余为从节点。同时每个节点前必须以redis://开头。
# address: redis://localhost:6379,redis://localhost:6378,...
address: redis://192.168.100.25:6379
address: redis://localhost:6379
# 链接超时,单位毫秒。
timeout: 6000
# 单位毫秒。分布式锁的超时检测时长。

32
application-tenant/tenant-admin/src/main/resources/tenant-admin-dev.yml

@ -5,7 +5,7 @@ logging: @@ -5,7 +5,7 @@ logging:
config: classpath:logback-spring.xml
server:
port: 8075
port: 8077
application:
# Jwt令牌加密的签名值。该值的长度要超过10个字符(过短会报错)。
@ -201,21 +201,21 @@ spring: @@ -201,21 +201,21 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 租户管理数据源。
# 租户管理数据源。
tenant-admin:
url: jdbc:mysql://192.168.100.18:3306/apelet_admin_xk?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: X7&9p8L2@6z4K7!8
# 租户业务平台的通用业务数据,如字典、在线表单、流程、报表的定义等数据。
url: jdbc:mysql://frp-use.com:51850/apelet_xhgl?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: X7&9p8L2@6z4K7!8
# 租户业务平台的通用业务数据,如字典、在线表单、流程、报表的定义等数据。
tenant-common:
url: jdbc:mysql://192.168.100.18:3306/apelet_admin_xk?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai
username: root
password: X7&9p8L2@6z4K7!8
# 默认生成的操作日志数据源配置。
url: jdbc:mysql://frp-use.com:51850/apelet_xhgl?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai
username: root
password: X7&9p8L2@6z4K7!8
# 默认生成的操作日志数据源配置。
operation-log:
url: jdbc:mysql://192.168.100.18:3306/apelet_admin_xk?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: X7&9p8L2@6z4K7!8
url: jdbc:mysql://frp-use.com:51850/apelet_xhgl?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: X7&9p8L2@6z4K7!8
driverClassName: com.mysql.cj.jdbc.Driver
name: tenant-admin
initialSize: 10
@ -305,3 +305,9 @@ cqurl: @@ -305,3 +305,9 @@ cqurl:
username:
accountId:
flowable:
# 关闭自动创建/更新表,只检查
database-schema-update: false
# 关闭事件注册引擎(你 99% 不需要)
event-registry:
enabled: false

17
common/common-association/src/main/java/apelet/association/controller/plugin/formPlugin/ClueManageFormPlugin.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package apelet.association.controller.plugin.formPlugin;
import apelet.association.utils.CreatNumberUtils;
import apelet.common.core.object.ObjectValue;
import apelet.common.online.abstractplugin.ExecutePluginParent;
import apelet.common.online.model.constant.AttributeEnum;
public class ClueManageFormPlugin extends ExecutePluginParent {
@Override
public void formCreated(String widgetVariableName, ObjectValue objectValue) {
super.formCreated(widgetVariableName, objectValue);
// this.setAttribute("seekInfo","11");
// this.setWidgetAttribute("number", AttributeEnum.VALUE_CHANGE, "123");
CreatNumberUtils creatNumberUtils = new CreatNumberUtils();
this.setWidgetAttribute("billstatus", AttributeEnum.VALUE_CHANGE,"1");
}
}

56
common/common-association/src/main/java/apelet/association/plugin/MembershipPayPopupPlugin.java

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
package apelet.association.plugin;
import apelet.common.core.object.ObjectValue;
import apelet.common.online.abstractplugin.ExecutePluginParent;
import apelet.common.online.model.ShowParameter;
import apelet.common.online.model.constant.ShowTypeEnum;
import apelet.common.online.model.constant.ViewStatus;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName: MembershipPayPopupPlugin
* @Author: huangdehua
* @Date: 2026/4/30 09:37
* @Description:
*/
public class MembershipPayPopupPlugin extends ExecutePluginParent {
/**
* 目标表单ID - membershipFeePay 表单在平台中的表单ID
*/
private static final Object FORM_ID = "2049040032123064320";
/**
* 触发按钮的标识 - 对应表单上按钮的 key/标识
* 点击此按钮时触发弹窗
*/
private static final String BUTTON_KEY = "会费缴纳";
/**
* 按钮点击事件
* 点击按钮时以弹窗方式打开 membershipFeePay 表单
*
* @param buttonKey 按钮标识
* @param objectValue 当前表单数据对象
*/
@Override
public void buttonTriggered(String buttonKey, ObjectValue objectValue) {
// 仅响应指定按钮的点击事件
if (!BUTTON_KEY.equals(buttonKey)) {
return;
}
// 调用 showForm 打开 membershipFeePay 表单
ShowParameter showParameter = new ShowParameter();
showParameter.setFormId(FORM_ID.toString());
showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL);
showParameter.setStatus(ViewStatus.EDIT);
Map<String, Object> customParam = new HashMap<>();
customParam.put("id"," ");
showParameter.setCustomParam(customParam);
super.showForm(showParameter);
}
}

40
common/common-association/src/main/java/apelet/association/plugin/MembershipPayShowHidePlugin.java

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
package apelet.association.plugin;
import apelet.common.core.object.ObjectValue;
import apelet.common.online.abstractplugin.ExecutePluginParent;
import apelet.common.online.model.constant.AttributeEnum;
import java.util.Objects;
/**
* @ClassName: MembershipPayShowHidePlugin
* @Author: huangdehua
* @Date: 2026/5/7 15:00
* @Description: 会费缴纳界面会员类别为非会员时显示银行收款凭证号字段其他情况隐藏
*/
public class MembershipPayShowHidePlugin extends ExecutePluginParent {
@Override
public void formCreated(String widgetVariableName, ObjectValue objectValue) {
super.formCreated(widgetVariableName, objectValue);
String membershipType = objectValue.getString("membershipType");
if (Objects.equals(membershipType, "E")){
super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, true);
}else {
super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, false);
}
}
@Override
public void change(String widgetVariableName, ObjectValue objectValue) {
super.change(widgetVariableName, objectValue);
String membershipType = objectValue.getString("membership_type");
if (Objects.equals(widgetVariableName, "membershipType")){
if (Objects.equals(membershipType, "E")){
super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, true);
}else {
super.setWidgetAttribute("bankReceiptV", AttributeEnum.SHOW, false);
}
}
}
}

25
common/common-association/src/main/java/apelet/association/plugin/UnitNameChangeFormPlugin.java

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
package apelet.association.plugin;
import apelet.common.core.object.ObjectValue;
import apelet.common.online.abstractplugin.ExecutePluginParent;
import apelet.common.online.model.constant.AttributeEnum;
/**
* @ClassName: UnitNameChangeFormPlugin
* @Author: huangdehua
* @Date: 2026/4/30 10:40
* @Description: 入会申请与审核界面初始化
*/
public class UnitNameChangeFormPlugin extends ExecutePluginParent {
/**
* 界面初始化事件
* 将单据状态 billStatus 赋值为 "A"
*/
@Override
public void formCreated(String str, ObjectValue objectValue) {
super.formCreated(str, objectValue);
//objectValue.setString("billStatus", "A");
//this.setWidgetAttribute("billstatus", AttributeEnum.VALUE_CHANGE, "A");
}
}

295
common/common-association/src/main/java/apelet/association/plugin/UnitNameChangeOperationPlugin.java

@ -0,0 +1,295 @@ @@ -0,0 +1,295 @@
package apelet.association.plugin;
import apelet.common.core.object.ObjectCollection;
import apelet.common.core.object.ObjectValue;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.online.plugin.BeginOperationTransactionArgs;
import apelet.common.online.plugin.OperationResult;
import apelet.common.online.plugin.OperationServicePlugIn;
import apelet.common.orm.impl.Filter;
import apelet.common.orm.impl.FilterItem;
import java.util.Iterator;
import java.util.Map;
/**
* @ClassName: UnitNameChangeOperationPlugin
* @Author: huangdehua
* @Date: 2026/4/30 11:02
* @Description: 入会申请与审核 变更单位名称
*/
public class UnitNameChangeOperationPlugin extends OperationServicePlugIn {
// 主表与子表数据源变量名,需与在线表单配置保持一致。
private static final String TABLE_NAME = "membership_apply";
private static final String CHILD_TABLE_NAME = "membership_apply_entry";
private static final String FIELD_ID = "id";
private static final String FIELD_NUMBER = "number";
private static final String FIELD_UNIT_NAME = "unit_name";
private static final String FIELD_BILL_STATUS = "billstatus";
private static final String FIELD_IS_HISTORY = "is_history";
private static final String FIELD_VERSION_NUMBER = "version_number";
private static final String STATUS_ACTIVE = "A";
private static final String STATUS_CHANGED = "C";
private static final Integer IS_HISTORY_YES = 1;
private static final Integer IS_HISTORY_NO = 0;
@Override
public void beginOperationTransaction(BeginOperationTransactionArgs args) {
try {
ObjectValue model = args.getModel();
if (model == null) {
setFailResult("获取表单数据失败");
return;
}
String pkId = model.getString(FIELD_ID);
if (pkId == null || pkId.isEmpty()) {
setFailResult("新增单据不允许执行变更操作");
return;
}
String newUnitName = model.getString(FIELD_UNIT_NAME);
if (newUnitName == null || newUnitName.isEmpty()) {
setFailResult("单位名称不能为空");
return;
}
OrmGenDataSourceUtil ormUtil = ormGenDataSourceUtil();
if (ormUtil == null) {
setFailResult("获取数据库连接失败");
return;
}
Filter pkFilter = new Filter();
pkFilter.add(new FilterItem(FIELD_ID, "=", pkId));
ObjectCollection oldCollection = ormUtil.query(TABLE_NAME, pkFilter, null);
if (oldCollection == null || oldCollection.isEmpty()) {
setFailResult("未找到当前单据数据");
return;
}
ObjectValue oldBill = oldCollection.getObject(0);
String oldUnitName = oldBill.getString(FIELD_UNIT_NAME);
if (oldUnitName == null || oldUnitName.equals(newUnitName)) {
setFailResult("单位名称未发生变化,无需变更");
return;
}
String billNumber = oldBill.getString(FIELD_NUMBER);
if (billNumber == null || billNumber.isEmpty()) {
setFailResult("单据编号不能为空");
return;
}
// 通过单据编号 + 排除当前ID,查找同一业务单据之前变更产生的记录
ObjectValue previousChangedBill = findBillByNumberAndStatus(ormUtil, billNumber, pkId, STATUS_CHANGED);
ObjectValue previousActiveBill = findBillByNumberAndStatus(ormUtil, billNumber, pkId, STATUS_ACTIVE);
if (previousActiveBill != null) {
// 二次变更:同一单据编号下已存在 A 记录(上次变更产生的),直接更新其 unit_name,无需新增
// 获取当前历史单据的最大版本号
int currentMaxVersion = getMaxVersionNumber(ormUtil, billNumber, pkId);
if (previousChangedBill != null) {
// 已有历史 C 记录,用当前旧单据数据覆盖它,并更新版本号
overwriteBill(ormUtil, previousChangedBill, oldBill, currentMaxVersion + 1);
} else {
// 无历史 C 记录,将当前旧单据标记为 C,并设置版本号
oldBill.put(FIELD_BILL_STATUS, STATUS_CHANGED);
oldBill.put(FIELD_IS_HISTORY, IS_HISTORY_YES);
oldBill.put(FIELD_VERSION_NUMBER, currentMaxVersion + 1);
ormUtil.update(TABLE_NAME, oldBill, null);
}
// 直接更新 A 记录的 unit_name
previousActiveBill.put(FIELD_UNIT_NAME, newUnitName);
ormUtil.update(TABLE_NAME, previousActiveBill, null);
} else {
// 首次变更:同一单据编号下没有 A 记录,走新增逻辑
oldBill.put(FIELD_BILL_STATUS, STATUS_CHANGED);
oldBill.put(FIELD_IS_HISTORY, IS_HISTORY_YES);
oldBill.put(FIELD_VERSION_NUMBER, 1);
ormUtil.update(TABLE_NAME, oldBill, null);
ObjectValue newBill = new ObjectValue(TABLE_NAME);
copyValuesWithoutId(oldBill, newBill, FIELD_BILL_STATUS, FIELD_IS_HISTORY, FIELD_VERSION_NUMBER);
newBill.put(FIELD_UNIT_NAME, newUnitName);
newBill.put(FIELD_IS_HISTORY, IS_HISTORY_NO);
newBill.put(FIELD_VERSION_NUMBER, 1);
ObjectCollection copiedChildren = copyChildCollection(model.getValues().get(CHILD_TABLE_NAME));
if (copiedChildren != null && !copiedChildren.isEmpty()) {
newBill.put(CHILD_TABLE_NAME, copiedChildren);
}
ormUtil.addNew(TABLE_NAME, newBill);
updateNewBillStatus(ormUtil, pkId, newUnitName);
}
setSuccessResult();
} catch (Exception e) {
e.printStackTrace();
setFailResult("单位名称变更处理失败:" + e.getMessage());
}
}
private void copyValuesWithoutId(ObjectValue source, ObjectValue target, String... excludedFields) {
Map<String, Object> values = source.getValues();
Iterator<String> it = values.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
if (FIELD_ID.equals(key) || isExcludedField(key, excludedFields)) {
continue;
}
// 排除 history 和 versionNumber 字段,由业务逻辑单独设置
if (FIELD_IS_HISTORY.equals(key) || FIELD_VERSION_NUMBER.equals(key)) {
continue;
}
target.put(key, values.get(key));
}
}
private boolean isExcludedField(String fieldName, String... excludedFields) {
if (excludedFields == null) {
return false;
}
for (String excludedField : excludedFields) {
if (fieldName.equals(excludedField)) {
return true;
}
}
return false;
}
private ObjectCollection copyChildCollection(Object childValue) {
if (!(childValue instanceof ObjectCollection)) {
return null;
}
// 子表行只去掉主键,其他字段原样复制,避免丢失联系人等历史明细。
ObjectCollection oldChildren = (ObjectCollection) childValue;
if (oldChildren.isEmpty()) {
return null;
}
ObjectCollection newChildren = new ObjectCollection();
for (int i = 0; i < oldChildren.size(); i++) {
ObjectValue oldChild = oldChildren.getObject(i);
if (oldChild == null) {
continue;
}
ObjectValue newChild = new ObjectValue(null);
copyValuesWithoutId(oldChild, newChild);
newChildren.addObject(newChild);
}
return newChildren;
}
/**
* 通过单据编号查找同一业务单据的变更记录
* 查询条件number = billNumber AND id != excludePkId AND billstatus = status
*
* @param ormUtil ORM 工具
* @param billNumber 单据编号关联同一业务单据
* @param excludePkId 排除的单据主键当前操作的记录
* @param status 单据状态
* @return 匹配的单据无则返回 null
*/
private ObjectValue findBillByNumberAndStatus(OrmGenDataSourceUtil ormUtil, String billNumber, String excludePkId, String status) throws Exception {
Filter filter = new Filter();
filter.add(new FilterItem(FIELD_NUMBER, "=", billNumber));
filter.add(new FilterItem(FIELD_ID, "<>", excludePkId));
//filter.add(new FilterItem(FIELD_BILL_STATUS, "=", status));
ObjectCollection collection = ormUtil.query(TABLE_NAME, filter, null);
if (collection == null || collection.isEmpty()) {
return null;
}
return collection.getObject(0);
}
/**
* 用源单据数据覆盖目标单据保留目标单据的 ID其他字段用源数据替换
*
* @param ormUtil ORM 工具
* @param targetBill 被覆盖的历史单据保留其 ID
* @param sourceBill 用于覆盖的数据源
* @param versionNumber 版本号
*/
private void overwriteBill(OrmGenDataSourceUtil ormUtil, ObjectValue targetBill, ObjectValue sourceBill, int versionNumber) throws Exception {
ObjectValue overwrittenBill = new ObjectValue(TABLE_NAME);
overwrittenBill.put(FIELD_ID, targetBill.getString(FIELD_ID));
copyValuesWithoutId(sourceBill, overwrittenBill, FIELD_BILL_STATUS, FIELD_IS_HISTORY, FIELD_VERSION_NUMBER);
overwrittenBill.put(FIELD_BILL_STATUS, STATUS_CHANGED);
overwrittenBill.put(FIELD_IS_HISTORY, IS_HISTORY_YES);
overwrittenBill.put(FIELD_VERSION_NUMBER, versionNumber);
ormUtil.update(TABLE_NAME, overwrittenBill, null);
}
private void updateNewBillStatus(OrmGenDataSourceUtil ormUtil, String oldPkId, String newUnitName) throws Exception {
Filter filter = new Filter();
filter.add(new FilterItem(FIELD_ID, "<>", oldPkId));
filter.add(new FilterItem(FIELD_UNIT_NAME, "=", newUnitName));
ObjectCollection collection = ormUtil.query(TABLE_NAME, filter, null);
if (collection == null || collection.isEmpty()) {
return;
}
ObjectValue newBill = collection.getObject(0);
if (newBill == null) {
return;
}
newBill.put(FIELD_BILL_STATUS, STATUS_ACTIVE);
newBill.put(FIELD_IS_HISTORY, IS_HISTORY_NO);
newBill.put(FIELD_VERSION_NUMBER, 1);
ormUtil.update(TABLE_NAME, newBill, null);
}
private void setSuccessResult() {
OperationResult result = new OperationResult();
result.setSuccess(true);
setOperationResult(result);
}
private void setFailResult(String message) {
OperationResult result = new OperationResult();
result.setSuccess(false);
result.setMessage(message);
result.setShowMessage(true);
setOperationResult(result);
}
/**
* 获取同一单据编号下的最大版本号排除当前操作的记录
*
* @param ormUtil ORM 工具
* @param billNumber 单据编号
* @param excludePkId 排除的单据主键
* @return 最大版本号未找到则返回 0
*/
private int getMaxVersionNumber(OrmGenDataSourceUtil ormUtil, String billNumber, String excludePkId) throws Exception {
Filter filter = new Filter();
filter.add(new FilterItem(FIELD_NUMBER, "=", billNumber));
filter.add(new FilterItem(FIELD_ID, "<>", excludePkId));
ObjectCollection collection = ormUtil.query(TABLE_NAME, filter, null);
if (collection == null || collection.isEmpty()) {
return 0;
}
int maxVersion = 0;
for (int i = 0; i < collection.size(); i++) {
ObjectValue bill = collection.getObject(i);
Object versionObj = bill.getValues().get(FIELD_VERSION_NUMBER);
if (versionObj != null) {
int version;
if (versionObj instanceof Integer) {
version = (Integer) versionObj;
} else {
version = Integer.parseInt(versionObj.toString());
}
if (version > maxVersion) {
maxVersion = version;
}
}
}
return maxVersion;
}
}

74
common/common-association/src/main/java/apelet/association/plugin/quotation/ConfirmPlugin.java

@ -0,0 +1,74 @@ @@ -0,0 +1,74 @@
package apelet.association.plugin.quotation;
import apelet.common.core.object.ObjectCollection;
import apelet.common.core.object.ObjectValue;
import apelet.common.core.util.ApplicationContextHolder;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.online.plugin.BeginOperationTransactionArgs;
import apelet.common.online.plugin.OperationServicePlugIn;
import apelet.common.online.plugin.OperationServicePlugInArgs;
import apelet.common.online.service.impl.OnlineFormServiceImpl;
import apelet.common.orm.impl.Filter;
import apelet.common.orm.impl.FilterItem;
import apelet.common.orm.impl.Selector;
import apelet.common.orm.impl.SelectorItem;
/*
弹窗确认后保存数据库
*/
public class ConfirmPlugin extends OperationServicePlugIn {
private OnlineFormServiceImpl onlineFormService;
private OrmGenDataSourceUtil ormGenDataSourceUtil;
public ConfirmPlugin() {
onlineFormService = ApplicationContextHolder.getBean("onlineFormService");
ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil");
}
@Override
public void onPreparePropertys(OperationServicePlugInArgs e) {
e.addFiledKey("id");
e.addFiledKey("canaelreason");
}
@Override
public void beginOperationTransaction(BeginOperationTransactionArgs e){
super.beginOperationTransaction(e);
ObjectCollection modelCollcetion = e.getModelCollcetion();
if (ormGenDataSourceUtil == null) {
throw new RuntimeException("ORM工具类初始化失败,无法执行数据库操作");
}
if (modelCollcetion != null && !modelCollcetion.isEmpty()) {
for (int i = 0; i < modelCollcetion.size(); i++) {
try {
ObjectValue object = modelCollcetion.getObject(i);
Object id = object.get("id");
String reason = object.getString("canaelreason");
//根据id查找对应单据
OrmGenDataSourceUtil ormUtil = ormGenDataSourceUtil;
if (ormUtil == null) {
return;
}
Filter pkFilter = new Filter();
pkFilter.add(new FilterItem("id", "=", id));
ObjectCollection oldCollection = ormUtil.query("quotation", pkFilter, null);
ObjectValue oldBill = oldCollection.getObject(0);
oldBill.put("status", "4");
oldBill.put("canaelreason", reason);
oldBill.put("billstatus","A");
Selector selector = new Selector();
selector.getList().add(new SelectorItem("status"));
selector.getList().add(new SelectorItem("canaelreason"));
selector.getList().add(new SelectorItem("billstatus"));
ormGenDataSourceUtil.update(oldBill.getTableName(), oldBill, selector);
}catch (Exception ex) {
// 抛出运行时异常,使事务回滚
throw new RuntimeException("更新单据状态失败: " + ex.getMessage(), ex);
}
}
}
}
}

18
common/common-association/src/main/java/apelet/association/plugin/quotation/ContractPlugin.java

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
package apelet.association.plugin.quotation;
import apelet.common.online.abstractplugin.ListPlugin;
import apelet.common.orm.impl.Filter;
import apelet.common.orm.impl.FilterItem;
/*
合同列表界面设置过滤条件
*/
public class ContractPlugin extends ListPlugin {
@Override
protected Filter getFilter(){
Filter filter = new Filter();
filter.add(new FilterItem("status",FilterItem.equals,"3"));
return filter;
}
}

53
common/common-association/src/main/java/apelet/association/plugin/quotation/OpenPopupPlugin.java

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
package apelet.association.plugin.quotation;
import apelet.common.core.object.ObjectValue;
import apelet.common.online.abstractplugin.ListPlugin;
import apelet.common.online.model.ShowParameter;
import apelet.common.online.model.constant.ShowTypeEnum;
import apelet.common.online.model.constant.ViewStatus;
import java.util.HashMap;
import java.util.Map;
/*
取消报价插件,打开弹窗
*/
public class OpenPopupPlugin extends ListPlugin {
/**
* 目标表单ID - 表单在平台中的表单ID
*/
private static final Object FORM_ID = "2052578317407621120";
/**
* 触发按钮的标识 - 对应表单上按钮的 key/标识
* 点击此按钮时触发弹窗
*/
private static final String BUTTON_KEY = "取消报价";
/**
* 按钮点击事件
*
* @param widgetVariableName 按钮名称
* @param objectValue 数据
*/
@Override
public void buttonTriggered(String widgetVariableName, ObjectValue objectValue){
super.buttonTriggered(widgetVariableName, objectValue);
if (BUTTON_KEY.equals(widgetVariableName)){
//打开弹窗
ShowParameter showParameter = new ShowParameter();
showParameter.setFormId(FORM_ID.toString());
showParameter.setHowType(ShowTypeEnum.OPEN_ONLINE_MODAL);
showParameter.setStatus(ViewStatus.EDIT);
// 传参
Map<String,Object> map = new HashMap<>();
// 为弹窗中的隐藏字段标识
map.put("id","");
// 设置参数
showParameter.setCustomParam(map);
super.showForm(showParameter);
}
}
}

29
common/common-association/src/main/java/apelet/association/plugin/quotation/PopupGetIdPlugin.java

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
package apelet.association.plugin.quotation;
import apelet.common.core.object.ObjectValue;
import apelet.common.online.abstractplugin.ExecutePluginParent;
import apelet.common.online.dto.OnlineEventPluginExecuteDto;
import apelet.common.online.model.constant.AttributeEnum;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.Collection;
import java.util.Map;
/*
弹窗获取id
*/
public class PopupGetIdPlugin extends ExecutePluginParent {
@Override
public void formCreated(String widgetVariableName, ObjectValue objectValue){
OnlineEventPluginExecuteDto dto = getDto();
Map<String, Object> rowData = dto.getModel().getRowData();
if (rowData != null && !rowData.isEmpty()){
Collection<Object> values = rowData.values();
Object firstValue = values.iterator().next();
JSONArray jsonArray = (JSONArray) firstValue;
JSONObject item = jsonArray.getJSONObject(0);
String id = item.getString("id");
this.setWidgetAttribute("id", AttributeEnum.VALUE_CHANGE,id);
}
}
}

90
common/common-association/src/main/java/apelet/association/plugin/quotation/QuotationPlugin.java

@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
package apelet.association.plugin.quotation;
import apelet.common.core.object.ObjectCollection;
import apelet.common.core.object.ObjectValue;
import apelet.common.core.object.TokenData;
import apelet.common.core.util.ApplicationContextHolder;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.online.abstractplugin.ExecutePluginParent;
import apelet.common.online.model.constant.AttributeEnum;
import liquibase.repackaged.org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
/*
报价单插件
*/
public class QuotationPlugin extends ExecutePluginParent {
private static final OrmGenDataSourceUtil ORM_GEN_DATA_SOURCE_UTIL = ApplicationContextHolder.getBean(OrmGenDataSourceUtil.class);
@Override
public void formCreated(String widgetVariableName, ObjectValue objectValue){
super.formCreated(widgetVariableName, objectValue);
//获取当前登录的用户ID
TokenData tokenData = TokenData.takeFromRequest();
Long userId = tokenData.getUserId();
//查询当前用户信息
ObjectValue sysUserInfo = ORM_GEN_DATA_SOURCE_UTIL.queryOne("xy_sys_user", userId);
//赋值
if (sysUserInfo != null){
this.setWidgetAttribute("managerperson", AttributeEnum.VALUE_CHANGE, sysUserInfo);
}
//设置报价单状态
//获取id
long id = objectValue.getLong("id");
if(id == 0){
this.setWidgetAttribute("status",AttributeEnum.VALUE_CHANGE,"1");
this.setWidgetAttribute("billstatus",AttributeEnum.VALUE_CHANGE,"A");
//设置总价初始值为0
this.setWidgetAttribute("qty",AttributeEnum.VALUE_CHANGE,0);
}
//获取报价单状态
String status = objectValue.getString("status");
if(!("4").equals(status)){
//隐藏取消原因
this.setWidgetAttribute("canaelreason",AttributeEnum.SHOW,false);
}
}
@Override
public void change(String widgetVariableName, ObjectValue objectValue){
super.change(widgetVariableName, objectValue);
//获取报价单状态
String status = objectValue.getString("status");
//若status为"4"
if(status.equals("4")){
this.setWidgetAttribute("canaelreason",AttributeEnum.SHOW,true);
}else {
this.setWidgetAttribute("canaelreason",AttributeEnum.SHOW,false);
}
//获取单据体
ObjectCollection quotationE = objectValue.getObjectCollection("quotation_e");
// 总金额
BigDecimal allTotalAmount = BigDecimal.ZERO;
//判断是否有数据
if (quotationE != null && !quotationE.isEmpty()){
for (int i = 0; i < quotationE.size(); i++ ){
// 获取行数据
ObjectValue row = quotationE.getObject(i);
//获取指导折扣价
BigDecimal discount = row.getBigDecimal("discount");
// 判空处理
if (discount == null) {
discount = BigDecimal.ZERO;
}
//获取数量
int num = row.getInt("num");
// 计算总价 = 折扣价 * 数量
BigDecimal totalAmount = discount.multiply(BigDecimal.valueOf(num));
allTotalAmount = allTotalAmount.add(totalAmount);
}
this.setWidgetAttribute("qty",AttributeEnum.VALUE_CHANGE,allTotalAmount);
}
//获取项目类型
String type = objectValue.getString("type");
type = StringUtils.removeEnd(type, ",");
this.setWidgetAttribute("type",AttributeEnum.VALUE_CHANGE,type);
}
}

55
common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewPastPlugin.java

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
package apelet.association.plugin.quotation;
import apelet.common.core.object.ObjectCollection;
import apelet.common.core.object.ObjectValue;
import apelet.common.core.util.ApplicationContextHolder;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.online.plugin.BeginOperationTransactionArgs;
import apelet.common.online.plugin.OperationServicePlugIn;
import apelet.common.online.plugin.OperationServicePlugInArgs;
import apelet.common.online.service.impl.OnlineFormServiceImpl;
import apelet.common.orm.impl.Selector;
import apelet.common.orm.impl.SelectorItem;
/*
审核通过插件
*/
public class ReviewPastPlugin extends OperationServicePlugIn {
private OnlineFormServiceImpl onlineFormService;
private OrmGenDataSourceUtil ormGenDataSourceUtil;
public void AuditOperationServicePlugIn() {
onlineFormService = ApplicationContextHolder.getBean("onlineFormService");
ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil");
}
@Override
public void onPreparePropertys(OperationServicePlugInArgs e) {
e.addFiledKey("id");
e.addFiledKey("status");
}
@Override
public void beginOperationTransaction(BeginOperationTransactionArgs e){
super.beginOperationTransaction(e);
ObjectCollection modelCollcetion = e.getModelCollcetion();
if(modelCollcetion != null && !modelCollcetion.isEmpty()){
for (int i = 0; i < modelCollcetion.size(); i++) {
try {
// 获取单据对象
ObjectValue bill = modelCollcetion.getObject(i);
bill.put("status", "3");
bill.put("billstatus","C");
Selector selector = new Selector();
selector.getList().add(new SelectorItem("status"));
selector.getList().add(new SelectorItem("billstatus"));
ormGenDataSourceUtil().update(bill.getTableName(), bill, selector);
}catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
}
}

54
common/common-association/src/main/java/apelet/association/plugin/quotation/ReviewRefusePlugin.java

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
package apelet.association.plugin.quotation;
import apelet.common.core.object.ObjectCollection;
import apelet.common.core.object.ObjectValue;
import apelet.common.core.util.ApplicationContextHolder;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.online.plugin.BeginOperationTransactionArgs;
import apelet.common.online.plugin.OperationServicePlugIn;
import apelet.common.online.plugin.OperationServicePlugInArgs;
import apelet.common.online.service.impl.OnlineFormServiceImpl;
import apelet.common.orm.impl.Selector;
import apelet.common.orm.impl.SelectorItem;
/*
审核驳回插件
*/
public class ReviewRefusePlugin extends OperationServicePlugIn {
private OnlineFormServiceImpl onlineFormService;
private OrmGenDataSourceUtil ormGenDataSourceUtil;
public void AuditOperationServicePlugIn() {
onlineFormService = ApplicationContextHolder.getBean("onlineFormService");
ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil");
}
@Override
public void onPreparePropertys(OperationServicePlugInArgs e) {
e.addFiledKey("id");
e.addFiledKey("status");
}
@Override
public void beginOperationTransaction(BeginOperationTransactionArgs e){
super.beginOperationTransaction(e);
ObjectCollection modelCollcetion = e.getModelCollcetion();
if(modelCollcetion != null && !modelCollcetion.isEmpty()){
for (int i = 0; i < modelCollcetion.size(); i++) {
try {
// 获取单据对象
ObjectValue bill = modelCollcetion.getObject(i);
bill.put("status", "1");
bill.put("billstatus","A");
Selector selector = new Selector();
selector.getList().add(new SelectorItem("status"));
selector.getList().add(new SelectorItem("billstatus"));
ormGenDataSourceUtil().update(bill.getTableName(), bill, selector);
}catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
}
}

49
common/common-association/src/main/java/apelet/association/plugin/quotation/StatusChangePlugin.java

@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
package apelet.association.plugin.quotation;
import apelet.common.core.object.ObjectCollection;
import apelet.common.core.object.ObjectValue;
import apelet.common.core.util.ApplicationContextHolder;
import apelet.common.generator.utils.OrmGenDataSourceUtil;
import apelet.common.online.plugin.BeginOperationTransactionArgs;
import apelet.common.online.plugin.OperationServicePlugIn;
import apelet.common.online.plugin.OperationServicePlugInArgs;
import apelet.common.online.service.impl.OnlineFormServiceImpl;
import apelet.common.orm.impl.Selector;
import apelet.common.orm.impl.SelectorItem;
//提交后修改状态
public class StatusChangePlugin extends OperationServicePlugIn {
private OnlineFormServiceImpl onlineFormService;
private OrmGenDataSourceUtil ormGenDataSourceUtil;
public void AuditOperationServicePlugIn() {
onlineFormService = ApplicationContextHolder.getBean("onlineFormService");
ormGenDataSourceUtil = ApplicationContextHolder.getBean("ormGenDataSourceUtil");
}
@Override
public void onPreparePropertys(OperationServicePlugInArgs e) {
e.addFiledKey("id");
e.addFiledKey("status");
}
@Override
public void beginOperationTransaction(BeginOperationTransactionArgs e){
super.beginOperationTransaction(e);
ObjectCollection modelCollcetion = e.getModelCollcetion();
if(modelCollcetion != null && !modelCollcetion.isEmpty()){
for (int i = 0; i < modelCollcetion.size(); i++) {
try {
// 获取单据对象
ObjectValue bill = modelCollcetion.getObject(i);
bill.put("status", "2");
Selector selector = new Selector();
selector.getList().add(new SelectorItem("status"));
ormGenDataSourceUtil().update(bill.getTableName(), bill, selector);
}catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
}
}

11
common/common-association/src/main/java/apelet/association/utils/CreatNumberUtils.java

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
package apelet.association.utils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class CreatNumberUtils {
public String creatNumber() {
return LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
}
}

9
pom.xml

@ -70,9 +70,9 @@ @@ -70,9 +70,9 @@
<properties>
<profile.name>dev</profile.name>
<!-- 注册中心地址 -->
<discovery.server-addr>192.168.100.25:8848</discovery.server-addr>
<discovery.server-addr>localhost:8848</discovery.server-addr>
<!-- 配置中心地址 -->
<config.server-addr>192.168.100.25:8848</config.server-addr>
<config.server-addr>localhost:8848</config.server-addr>
<!-- 配置中心的分组和名字空间 -->
<config.group>DEFAULT_GROUP</config.group>
<!-- 如果是public可以保持为空,否则一定要填写名字空间id,而非名称 -->
@ -286,6 +286,11 @@ @@ -286,6 +286,11 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>apelet</groupId>
<artifactId>common-orm</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>

Loading…
Cancel
Save