拆分模块

This commit is contained in:
2025-09-03 20:56:44 +08:00
parent 08cc2c29a5
commit a2f5e4864b
939 changed files with 14227 additions and 9607 deletions

View File

@@ -0,0 +1,45 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Bank;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BankViewModel extends IdentityViewModel<Bank> {
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
public static BankViewModel from(Bank v) {
BankViewModel vm = new BankViewModel();
vm.update(v);
return vm;
}
@Override
protected void updateFrom(Bank v) {
super.updateFrom(v);
getCode().set(v.getCode());
getName().set(v.getName());
}
@Override
public boolean copyTo(Bank v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,101 @@
package com.ecep.contract.vm;
import javafx.application.Platform;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleBooleanProperty;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.BeanUtils;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
@Data
public class BaseViewModel<T> {
private SimpleBooleanProperty changed = new SimpleBooleanProperty(false);
@Setter(AccessLevel.PROTECTED)
@Getter(AccessLevel.PROTECTED)
private boolean skipChanged = false;
private InvalidationListener changedListener = observable -> {
// System.out.println("observable = " + observable);
if (skipChanged) {
return;
}
changed.set(true);
};
public boolean isChanged() {
return changed.get();
}
public void setChanged(boolean changed) {
this.changed.set(changed);
}
public void bindListener() {
for (PropertyDescriptor descriptor : BeanUtils.getPropertyDescriptors(getClass())) {
String name = descriptor.getName();
if (name.equals("changed")) {
continue;
}
Class<?> propertyType = descriptor.getPropertyType();
if (Property.class.isAssignableFrom(propertyType)) {
try {
Property<?> observable = (Property<?>) descriptor.getReadMethod().invoke(this);
observable.addListener(changedListener);
} catch (IllegalAccessException | InvocationTargetException ignored) {
}
}
}
}
public void unBindListener() throws InvocationTargetException, IllegalAccessException {
for (PropertyDescriptor descriptor : BeanUtils.getPropertyDescriptors(getClass())) {
String name = descriptor.getName();
if (name.equals("changed")) {
continue;
}
Class<?> propertyType = descriptor.getPropertyType();
if (Property.class.isAssignableFrom(propertyType)) {
Observable observable = (Observable) descriptor.getReadMethod().invoke(this);
observable.removeListener(changedListener);
}
}
}
/**
* 应用了 changed property 的控制
* <p>
* 继承类需要重写 updateImpl 方法即可
*/
public final BaseViewModel<T> update(T v) {
setSkipChanged(true);
updateFrom(v);
setChanged(false);
setSkipChanged(false);
return this;
}
protected void updateFrom(T v) {
}
public boolean copyTo(T v) {
return false;
}
/**
* 在UI线程中更新
*/
public static <T, TV extends BaseViewModel<T>> void updateInFxApplicationThread(T entity, TV vm) {
if (Platform.isFxApplicationThread()) {
vm.update(entity);
} else {
Platform.runLater(() -> vm.update(entity));
}
}
}

View File

@@ -0,0 +1,138 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import com.ecep.contract.model.CloudRk;
import com.ecep.contract.model.Company;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CloudRkViewModel extends IdentityViewModel<CloudRk> {
/**
* 云端Id
*/
private SimpleStringProperty cloudId = new SimpleStringProperty();
/**
* 更新间隔天数
*/
private SimpleIntegerProperty updateDays = new SimpleIntegerProperty();
/**
* 自动更新
*/
private SimpleBooleanProperty autoUpdate = new SimpleBooleanProperty();
/**
* 相关方资信评价等级
*/
private SimpleStringProperty rank = new SimpleStringProperty();
/**
* 相关方资信评价等级描述
*/
private SimpleStringProperty rankDescription = new SimpleStringProperty();
/**
* 客户资信评价等级
*/
private SimpleStringProperty customerGrade = new SimpleStringProperty();
/**
* 客户资信评价等级描述
*/
private SimpleStringProperty customerDescription = new SimpleStringProperty();
/**
* 客户资信评价等级描述
*/
private SimpleIntegerProperty customerScore = new SimpleIntegerProperty();
/**
* 供应商资信评价等级
*/
private SimpleStringProperty vendorGrade = new SimpleStringProperty();
/**
* 供应商资信评价等级描述
*/
private SimpleStringProperty vendorDescription = new SimpleStringProperty();
/**
* 供应商资信评价等级描述
*/
private SimpleIntegerProperty vendorScore = new SimpleIntegerProperty();
/**
* 描述
*/
private SimpleStringProperty description = new SimpleStringProperty();
/**
* 公司
*/
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
* 最后更新日期
*/
private SimpleObjectProperty<LocalDateTime> latestUpdate = new SimpleObjectProperty<>();
/**
* 企业更新日期
*/
private SimpleObjectProperty<LocalDateTime> cloudEntUpdate = new SimpleObjectProperty<>();
/**
* 黑名单更新日期
*/
private SimpleObjectProperty<LocalDateTime> cloudBlackListUpdated = new SimpleObjectProperty<>();
/**
* 云端最新更新时间
*/
private SimpleObjectProperty<LocalDateTime> cloudLatest = new SimpleObjectProperty<>();
/**
* Version
*/
private SimpleIntegerProperty version = new SimpleIntegerProperty();
@Override
protected void updateFrom(CloudRk v) {
super.updateFrom(v);
cloudId.set(v.getCloudId());
updateDays.set(v.getUpdateDays());
autoUpdate.set(v.isAutoUpdate());
description.set(v.getDescription());
rank.set(v.getRank());
rankDescription.set(v.getRankDescription());
customerGrade.set(v.getCustomerGrade());
customerDescription.set(v.getCustomerDescription());
customerScore.set(v.getCustomerScore());
vendorGrade.set(v.getVendorGrade());
vendorDescription.set(v.getVendorDescription());
vendorScore.set(v.getVendorScore());
company.set(v.getCompany());
latestUpdate.set(v.getLatestUpdate());
cloudEntUpdate.set(v.getCloudEntUpdate());
cloudBlackListUpdated.set(v.getCloudBlackListUpdated());
cloudLatest.set(v.getCloudLatest());
cloudLatest.set(v.getCloudLatest());
version.set(v.getVersion());
}
@Override
public boolean copyTo(CloudRk v) {
boolean result = super.copyTo(v);
v.setCloudId(cloudId.get());
v.setUpdateDays(updateDays.get());
v.setAutoUpdate(autoUpdate.get());
v.setDescription(description.get());
v.setRank(rank.get());
v.setRankDescription(rankDescription.get());
v.setCustomerGrade(customerGrade.get());
v.setCustomerDescription(customerDescription.get());
v.setCustomerScore(customerScore.get());
v.setVendorGrade(vendorGrade.get());
v.setVendorDescription(vendorDescription.get());
v.setVendorScore(vendorScore.get());
v.setCompany(company.get());
v.setLatestUpdate(latestUpdate.get());
v.setCloudEntUpdate(cloudEntUpdate.get());
v.setCloudBlackListUpdated(cloudBlackListUpdated.get());
v.setCloudLatest(cloudLatest.get());
v.setVersion(version.get());
return result;
}
}

View File

@@ -0,0 +1,95 @@
package com.ecep.contract.vm;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Objects;
import com.ecep.contract.model.CloudTyc;
import com.ecep.contract.model.Company;
import com.ecep.contract.util.MyDateTimePropertyUtils;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CloudTycInfoViewModel extends IdentityViewModel<CloudTyc> {
/**
* 云端Id
*/
private SimpleStringProperty cloudId = new SimpleStringProperty();
/**
* 公司
*/
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
* 最后更新日期
*/
private SimpleObjectProperty<LocalDateTime> latest = new SimpleObjectProperty<>();
/**
* Version
*/
private SimpleIntegerProperty version = new SimpleIntegerProperty();
private SimpleIntegerProperty score = new SimpleIntegerProperty();
private SimpleObjectProperty<LocalDateTime> cloudLatest = new SimpleObjectProperty<>();
@Override
protected void updateFrom(CloudTyc info) {
super.updateFrom(info);
update_((CloudTyc) info);
}
private void update_(CloudTyc info) {
score.set(info.getScore());
if (info.getCloudLatest() != null) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = info.getCloudLatest().atZone(zone);
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
cloudLatest.set(localDateTime);
} else {
cloudLatest.set(null);
}
}
@Override
public boolean copyTo(CloudTyc info) {
boolean modified = super.copyTo(info);
if (copyTo_((CloudTyc) info)) {
modified = true;
}
return modified;
}
private boolean copyTo_(CloudTyc info) {
boolean modified = super.copyTo(info);
if (!Objects.equals(info.getId(), getId().get())) {
info.setId(getId().get());
modified = true;
}
if (!Objects.equals(info.getScore(), getScore().get())) {
info.setScore(getScore().get());
modified = true;
}
Instant latest = MyDateTimePropertyUtils.localDateTimeToInstant(cloudLatest);
if (!Objects.equals(info.getCloudLatest(), latest)) {
info.setCloudLatest(latest);
modified = true;
}
return modified;
}
public static CloudTycInfoViewModel from(CloudTyc cc) {
CloudTycInfoViewModel model = new CloudTycInfoViewModel();
model.update(cc);
return model;
}
}

View File

@@ -0,0 +1,109 @@
package com.ecep.contract.vm;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Objects;
import com.ecep.contract.model.CloudYu;
import com.ecep.contract.model.Company;
import com.ecep.contract.util.MyDateTimePropertyUtils;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CloudYuInfoViewModel extends IdentityViewModel<CloudYu> {
/**
* 云端Id
*/
private SimpleStringProperty cloudId = new SimpleStringProperty();
/**
* 公司
*/
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
* 最后更新日期
*/
private SimpleObjectProperty<LocalDateTime> latest = new SimpleObjectProperty<>();
/**
* Version
*/
private SimpleIntegerProperty version = new SimpleIntegerProperty();
private SimpleStringProperty vendorCode = new SimpleStringProperty();
private SimpleStringProperty vendorClassCode = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> vendorDevelopDate = new SimpleObjectProperty<>();
private SimpleStringProperty customerCode = new SimpleStringProperty();
private SimpleStringProperty customerClassCode = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> customerDevelopDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> cloudLatest = new SimpleObjectProperty<>();
@Override
protected void updateFrom(CloudYu info) {
super.updateFrom(info);
update_((CloudYu) info);
}
private void update_(CloudYu info) {
vendorCode.set(info.getExceptionMessage());
vendorDevelopDate.set(info.getVendorUpdateDate());
customerDevelopDate.set(info.getCustomerUpdateDate());
if (info.getCloudLatest() != null) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = info.getCloudLatest().atZone(zone);
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
cloudLatest.set(localDateTime);
} else {
cloudLatest.set(null);
}
}
@Override
public boolean copyTo(CloudYu info) {
boolean modified = super.copyTo(info);
if (copyTo_((CloudYu) info)) {
modified = true;
}
return modified;
}
private boolean copyTo_(CloudYu info) {
boolean modified = false;
if (!Objects.equals(info.getExceptionMessage(), vendorCode.get())) {
info.setExceptionMessage(vendorCode.get());
modified = true;
}
if (!Objects.equals(info.getVendorUpdateDate(), vendorDevelopDate.get())) {
info.setVendorUpdateDate(vendorDevelopDate.get());
modified = true;
}
if (!Objects.equals(info.getCustomerUpdateDate(), customerDevelopDate.get())) {
info.setCustomerUpdateDate(customerDevelopDate.get());
modified = true;
}
Instant latest = MyDateTimePropertyUtils.localDateTimeToInstant(cloudLatest);
if (!Objects.equals(info.getCloudLatest(), latest)) {
info.setCloudLatest(latest);
modified = true;
}
return modified;
}
public static CloudYuInfoViewModel from(CloudYu cc) {
CloudYuInfoViewModel model = new CloudYuInfoViewModel();
model.update(cc);
return model;
}
}

View File

@@ -0,0 +1,71 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Bank;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyBankAccount;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyBankAccountViewModel extends IdentityViewModel<CompanyBankAccount> implements CompanyBasedViewModel {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
private SimpleObjectProperty<Bank> bank = new SimpleObjectProperty<>();
private SimpleStringProperty openingBank = new SimpleStringProperty();
private SimpleStringProperty account = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
@Override
protected void updateFrom(CompanyBankAccount v) {
getId().set(v.getId());
getCompany().set(v.getCompany());
getBank().set(v.getBank());
getOpeningBank().set(v.getOpeningBank());
getAccount().set(v.getAccount());
}
@Override
public boolean copyTo(CompanyBankAccount v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(bank.get(), v.getBank())) {
v.setBank(bank.get());
modified = true;
}
if (!Objects.equals(openingBank.get(), v.getOpeningBank())) {
v.setOpeningBank(openingBank.get());
modified = true;
}
if (!Objects.equals(account.get(), v.getAccount())) {
v.setAccount(account.get());
modified = true;
}
return modified;
}
public static CompanyBankAccountViewModel from(CompanyBankAccount v) {
CompanyBankAccountViewModel vm = new CompanyBankAccountViewModel();
vm.updateFrom(v);
return vm;
}
}

View File

@@ -0,0 +1,9 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.Company;
import javafx.beans.property.SimpleObjectProperty;
public interface CompanyBasedViewModel {
SimpleObjectProperty<Company> getCompany();
}

View File

@@ -0,0 +1,101 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.BlackReasonType;
import com.ecep.contract.model.CompanyBlackReason;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = false)
@ToString
public class CompanyBlackReasonViewModel extends IdentityViewModel<CompanyBlackReason> {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
private SimpleObjectProperty<BlackReasonType> type = new SimpleObjectProperty<>();
private SimpleStringProperty applyName = new SimpleStringProperty();
private SimpleStringProperty blackReason = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleStringProperty key = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> applyDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> updateTime = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> createTime = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> includeDate = new SimpleObjectProperty<>();
public static CompanyBlackReasonViewModel from(CompanyBlackReason reason) {
CompanyBlackReasonViewModel model = new CompanyBlackReasonViewModel();
model.update(reason);
return model;
}
@Override
protected void updateFrom(CompanyBlackReason v) {
getId().set(v.getId());
getType().set(v.getType());
getApplyName().set(v.getApplyName());
getBlackReason().set(v.getBlackReason());
getDescription().set(v.getDescription());
getKey().set(v.getKey());
getApplyDate().set(v.getApplyDate());
getUpdateTime().set(v.getUpdateTime());
getCreateTime().set(v.getCreateTime());
getIncludeDate().set(v.getIncludeDate());
}
@Override
public boolean copyTo(CompanyBlackReason v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(type.get(), v.getType())) {
v.setType(type.get());
modified = true;
}
if (!Objects.equals(applyName.get(), v.getApplyName())) {
v.setApplyName(applyName.get());
modified = true;
}
if (!Objects.equals(blackReason.get(), v.getBlackReason())) {
v.setBlackReason(blackReason.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
if (!Objects.equals(key.get(), v.getKey())) {
v.setKey(key.get());
modified = true;
}
if (!Objects.equals(applyDate.get(), v.getApplyDate())) {
v.setApplyDate(applyDate.get());
modified = true;
}
if (!Objects.equals(updateTime.get(), v.getUpdateTime())) {
v.setUpdateTime(updateTime.get());
modified = true;
}
if (!Objects.equals(createTime.get(), v.getCreateTime())) {
v.setCreateTime(createTime.get());
modified = true;
}
if (!Objects.equals(includeDate.get(), v.getIncludeDate())) {
v.setIncludeDate(includeDate.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,59 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import com.ecep.contract.model.CompanyContact;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyContactViewModel extends IdentityViewModel<CompanyContact> {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty position = new SimpleStringProperty();
private SimpleStringProperty phone = new SimpleStringProperty();
private SimpleStringProperty email = new SimpleStringProperty();
private SimpleStringProperty address = new SimpleStringProperty();
private SimpleStringProperty u8Code = new SimpleStringProperty();
private SimpleStringProperty memo = new SimpleStringProperty();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
public static CompanyContactViewModel from(CompanyContact contact) {
CompanyContactViewModel model = new CompanyContactViewModel();
model.update(contact);
return model;
}
public void updateFrom(CompanyContact v) {
id.set(v.getId());
name.set(v.getName());
position.set(v.getPosition());
phone.set(v.getPhone());
email.set(v.getEmail());
address.set(v.getAddress());
u8Code.set(v.getU8Code());
created.set(v.getCreated());
memo.set(v.getMemo());
version.set(v.getVersion());
}
public boolean copyTo(CompanyContact v) {
v.setId(id.get());
v.setName(name.get());
v.setPosition(position.get());
v.setPhone(phone.get());
v.setEmail(email.get());
v.setAddress(address.get());
v.setU8Code(u8Code.get());
v.setCreated(created.get());
v.setMemo(memo.get());
return true;
}
}

View File

@@ -0,0 +1,85 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.CompanyCustomerFileType;
import com.ecep.contract.model.CompanyCustomer;
import com.ecep.contract.model.CompanyCustomerFile;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = false)
@ToString
public class CompanyCustomerFileViewModel extends IdentityViewModel<CompanyCustomerFile> {
public static CompanyCustomerFileViewModel from(CompanyCustomerFile companyCustomerFile) {
CompanyCustomerFileViewModel model = new CompanyCustomerFileViewModel();
model.update(companyCustomerFile);
return model;
}
@ToString.Exclude
private SimpleObjectProperty<CompanyCustomer> customer = new SimpleObjectProperty<>();
private SimpleObjectProperty<CompanyCustomerFileType> type = new SimpleObjectProperty<>();
private SimpleStringProperty filePath = new SimpleStringProperty();
private SimpleStringProperty editFilePath = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> signDate = new SimpleObjectProperty<>();
@ToString.Exclude
private SimpleBooleanProperty valid = new SimpleBooleanProperty(this, "valid", false);
@Override
protected void updateFrom(CompanyCustomerFile v) {
super.updateFrom(v);
getCustomer().set(v.getCustomer());
getType().set(v.getType());
getFilePath().set(v.getFilePath());
getEditFilePath().set(v.getEditFilePath());
getSignDate().set(v.getSignDate());
getValid().set(v.isValid());
}
@Override
public boolean copyTo(CompanyCustomerFile v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(customer.get(), v.getCustomer())) {
v.setCustomer(customer.get());
modified = true;
}
if (!Objects.equals(type.get(), v.getType())) {
v.setType(type.get());
modified = true;
}
if (!Objects.equals(filePath.get(), v.getFilePath())) {
v.setFilePath(filePath.get());
modified = true;
}
if (!Objects.equals(editFilePath.get(), v.getEditFilePath())) {
v.setEditFilePath(editFilePath.get());
modified = true;
}
if (!Objects.equals(signDate.get(), v.getSignDate())) {
v.setSignDate(signDate.get());
modified = true;
}
if (!Objects.equals(valid.get(), v.isValid())) {
v.setValid(valid.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,106 @@
package com.ecep.contract.vm;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Objects;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyContact;
import com.ecep.contract.model.CompanyCustomer;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyCustomerViewModel extends IdentityViewModel<CompanyCustomer> {
private SimpleStringProperty state = new SimpleStringProperty();
/**
* 关联的企业
*/
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
* 发展日期
*/
private SimpleObjectProperty<LocalDate> developDate = new SimpleObjectProperty<>();
/**
* 文件夹
*/
private SimpleStringProperty path = new SimpleStringProperty();
/**
* 关联联系人
*/
private SimpleObjectProperty<CompanyContact> contact = new SimpleObjectProperty<>();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<LocalDateTime> created = new SimpleObjectProperty<>();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
public static CompanyCustomerViewModel from(CompanyCustomer cc) {
CompanyCustomerViewModel model = new CompanyCustomerViewModel();
model.update(cc);
return model;
}
public void updateFrom(CompanyCustomer c) {
super.updateFrom(c);
getCompany().set(c.getCompany());
getDevelopDate().set(c.getDevelopDate());
getContact().set(c.getContact());
getPath().set(c.getPath());
getDescription().set(c.getDescription());
if (c.getCreated() != null) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = c.getCreated().atZone(zone);
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
getCreated().set(localDateTime);
} else {
getCreated().set(null);
}
version.set(c.getVersion());
}
public boolean copyTo(CompanyCustomer v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(contact.get(), v.getContact())) {
v.setContact(contact.get());
modified = true;
}
if (!Objects.equals(developDate.get(), v.getDevelopDate())) {
v.setDevelopDate(developDate.get());
modified = true;
}
if (!Objects.equals(path.get(), v.getPath())) {
v.setPath(path.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
if (created.get() == null) {
v.setCreated(null);
} else {
Instant instant = created.get().toInstant(ZoneOffset.ofHours(8));
if (!Objects.equals(instant, v.getCreated())) {
v.setCreated(instant);
modified = true;
}
}
return modified;
}
}

View File

@@ -0,0 +1,60 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyExtendInfo;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyExtendInfoViewModel extends BaseViewModel<CompanyExtendInfo> {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
/**
* 关联的公司
*/
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
* 是否禁用核验
*/
private SimpleBooleanProperty disableVerify = new SimpleBooleanProperty();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
public static CompanyExtendInfoViewModel from(CompanyExtendInfo v) {
CompanyExtendInfoViewModel vm = new CompanyExtendInfoViewModel();
vm.updateFrom(v);
return vm;
}
@Override
protected void updateFrom(CompanyExtendInfo v) {
super.updateFrom(v);
getId().set(v.getId());
getCompany().set(v.getCompany());
getDisableVerify().set(v.isDisableVerify());
getVersion().set(v.getVersion());
}
@Override
public boolean copyTo(CompanyExtendInfo v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(disableVerify.get(), v.isDisableVerify())) {
v.setDisableVerify(disableVerify.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,76 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.CompanyFileType;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyFile;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* View Model for {@link CompanyFile}
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyFileViewModel extends IdentityViewModel<CompanyFile> {
SimpleIntegerProperty id = new SimpleIntegerProperty();
SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
SimpleObjectProperty<CompanyFileType> type = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDate> applyDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDate> expiringDate = new SimpleObjectProperty<>();
SimpleStringProperty filePath = new SimpleStringProperty();
@Override
protected void updateFrom(CompanyFile v) {
id.set(v.getId());
company.set(v.getCompany());
type.set(v.getType());
applyDate.set(v.getApplyDate());
expiringDate.set(v.getExpiringDate());
filePath.set(v.getFilePath());
}
public boolean copyTo(CompanyFile v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(type.get(), v.getType())) {
v.setType(type.get());
modified = true;
}
if (!Objects.equals(applyDate.get(), v.getApplyDate())) {
v.setApplyDate(applyDate.get());
modified = true;
}
if (!Objects.equals(expiringDate.get(), v.getExpiringDate())) {
v.setExpiringDate(expiringDate.get());
modified = true;
}
if (!Objects.equals(filePath.get(), v.getFilePath())) {
v.setFilePath(filePath.get());
modified = true;
}
return modified;
}
public static CompanyFileViewModel from(CompanyFile file) {
CompanyFileViewModel model = new CompanyFileViewModel();
model.update(file);
return model;
}
}

View File

@@ -0,0 +1,59 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import com.ecep.contract.model.CompanyOldName;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyOldNameViewModel extends IdentityViewModel<CompanyOldName> {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty path = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> beginDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> endDate = new SimpleObjectProperty<>();
private SimpleBooleanProperty ambiguity = new SimpleBooleanProperty();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
private SimpleStringProperty memo = new SimpleStringProperty();
public static CompanyOldNameViewModel from(CompanyOldName name) {
CompanyOldNameViewModel model = new CompanyOldNameViewModel();
model.update(name);
return model;
}
public void updateFrom(CompanyOldName oldName) {
id.set(oldName.getId());
name.set(oldName.getName());
path.set(oldName.getPath());
memo.set(oldName.getMemo());
beginDate.set(oldName.getBeginDate());
endDate.set(oldName.getEndDate());
ambiguity.set(oldName.getAmbiguity());
version.set(oldName.getVersion());
}
public boolean copyTo(CompanyOldName c) {
c.setId(id.get());
c.setName(name.get());
c.setPath(path.get());
c.setMemo(memo.get());
c.setBeginDate(beginDate.get());
c.setEndDate(endDate.get());
c.setAmbiguity(ambiguity.get());
return false;
}
}

View File

@@ -0,0 +1,52 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import com.ecep.contract.model.CompanyVendorApprovedFile;
import com.ecep.contract.model.CompanyVendorApprovedList;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = false)
@ToString
public class CompanyVendorApprovedFileViewModel extends IdentityViewModel<CompanyVendorApprovedFile> {
public static CompanyVendorApprovedFileViewModel from(CompanyVendorApprovedFile companyVendorApprovedItemFile) {
CompanyVendorApprovedFileViewModel viewModel = new CompanyVendorApprovedFileViewModel();
viewModel.update(companyVendorApprovedItemFile);
return viewModel;
}
@ToString.Exclude
private SimpleObjectProperty<CompanyVendorApprovedList> list = new SimpleObjectProperty<>();
private SimpleStringProperty fileName = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> signDate = new SimpleObjectProperty<>();
private SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(CompanyVendorApprovedFile v) {
super.updateFrom(v);
getList().set(v.getList());
getFileName().set(v.getFileName());
getSignDate().set(v.getSignDate());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(CompanyVendorApprovedFile v) {
super.copyTo(v);
v.setList(list.get());
v.setFileName(fileName.get());
v.setSignDate(signDate.get());
v.setDescription(description.get());
return true;
}
}

View File

@@ -0,0 +1,67 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.VendorType;
import com.ecep.contract.model.CompanyVendor;
import com.ecep.contract.model.CompanyVendorApprovedItem;
import com.ecep.contract.model.CompanyVendorApprovedList;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyVendorApprovedItemViewModel extends IdentityViewModel<CompanyVendorApprovedItem> {
public static CompanyVendorApprovedItemViewModel from(CompanyVendorApprovedItem item) {
CompanyVendorApprovedItemViewModel model = new CompanyVendorApprovedItemViewModel();
model.update(item);
return model;
}
private SimpleObjectProperty<CompanyVendorApprovedList> list = new SimpleObjectProperty<>();
private SimpleStringProperty vendorName = new SimpleStringProperty();
private SimpleObjectProperty<CompanyVendor> vendor = new SimpleObjectProperty<>();
private SimpleObjectProperty<VendorType> type = new SimpleObjectProperty<>();
private SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(CompanyVendorApprovedItem v) {
super.updateFrom(v);
getVendorName().set(v.getVendorName());
getList().set(v.getList());
getVendor().set(v.getVendor());
getType().set(v.getType());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(CompanyVendorApprovedItem v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(vendorName.get(), v.getVendorName())) {
v.setVendorName(vendorName.get());
modified = true;
}
if (!Objects.equals(list.get(), v.getList())) {
v.setList(list.get());
modified = true;
}
if (!Objects.equals(vendor.get(), v.getVendor())) {
v.setVendor(vendor.get());
modified = true;
}
if (!Objects.equals(type.get(), v.getType())) {
v.setType(type.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,59 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.CompanyVendorApprovedList;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyVendorApprovedListViewModel
extends IdentityViewModel<CompanyVendorApprovedList> {
private SimpleStringProperty title = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> publishDate = new SimpleObjectProperty<>();
private SimpleStringProperty path = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
public static CompanyVendorApprovedListViewModel from(CompanyVendorApprovedList list) {
CompanyVendorApprovedListViewModel model = new CompanyVendorApprovedListViewModel();
model.update(list);
return model;
}
@Override
protected void updateFrom(CompanyVendorApprovedList v) {
super.updateFrom(v);
getTitle().set(v.getTitle());
getPublishDate().set(v.getPublishDate());
getPath().set(v.getPath());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(CompanyVendorApprovedList v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(title.get(), v.getTitle())) {
v.setTitle(title.get());
modified = true;
}
if (!Objects.equals(publishDate.get(), v.getPublishDate())) {
v.setPublishDate(publishDate.get());
modified = true;
}
if (!Objects.equals(path.get(), v.getPath())) {
v.setPath(path.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,87 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import com.ecep.contract.model.CompanyVendor;
import com.ecep.contract.model.CompanyVendorEntity;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.VendorCatalog;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyVendorEntityViewModel extends IdentityViewModel<CompanyVendorEntity> {
private SimpleObjectProperty<CompanyVendor> vendor = new SimpleObjectProperty<>();
private SimpleObjectProperty<String> name = new SimpleObjectProperty<>();
private SimpleObjectProperty<String> abbName = new SimpleObjectProperty<>();
private SimpleObjectProperty<String> code = new SimpleObjectProperty<>();
private SimpleObjectProperty<VendorCatalog> catalog = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> creator = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> developDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> modifier = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> modifyDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> updatedDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> fetchedTime = new SimpleObjectProperty<>();
@Override
protected void updateFrom(CompanyVendorEntity v) {
super.updateFrom(v);
vendor.set(v.getVendor());
name.set(v.getName());
abbName.set(v.getAbbName());
code.set(v.getCode());
catalog.set(v.getCatalog());
creator.set(v.getCreator());
developDate.set(v.getDevelopDate());
modifier.set(v.getModifier());
modifyDate.set(v.getModifyDate());
updatedDate.set(v.getUpdatedDate());
fetchedTime.set(v.getFetchedTime());
}
@Override
public boolean copyTo(CompanyVendorEntity v) {
boolean modified = super.copyTo(v);
if (vendor.get() != null) {
v.setVendor(vendor.get());
modified = true;
}
if (name.get() != null) {
v.setName(name.get());
modified = true;
}
if (abbName.get() != null) {
v.setAbbName(abbName.get());
modified = true;
}
if (code.get() != null) {
v.setCode(code.get());
modified = true;
}
if (catalog.get() != null) {
v.setCatalog(catalog.get());
modified = true;
}
if (creator.get() != null) {
v.setCreator(creator.get());
modified = true;
}
if (developDate.get() != null) {
v.setDevelopDate(developDate.get());
modified = true;
}
if (modifier.get() != null) {
v.setModifier(modifier.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,83 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.CompanyVendorFileType;
import com.ecep.contract.model.CompanyVendor;
import com.ecep.contract.model.CompanyVendorFile;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = false)
@ToString
public class CompanyVendorFileViewModel extends IdentityViewModel<CompanyVendorFile> {
@ToString.Exclude
private SimpleObjectProperty<CompanyVendor> vendor = new SimpleObjectProperty<>();
private SimpleObjectProperty<CompanyVendorFileType> type = new SimpleObjectProperty<>();
private SimpleStringProperty filePath = new SimpleStringProperty();
private SimpleStringProperty editFilePath = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> signDate = new SimpleObjectProperty<>();
@ToString.Exclude
private SimpleBooleanProperty valid = new SimpleBooleanProperty(this, "valid", false);
@Override
protected void updateFrom(CompanyVendorFile v) {
super.updateFrom(v);
getVendor().set(v.getVendor());
getType().set(v.getType());
getFilePath().set(v.getFilePath());
getEditFilePath().set(v.getEditFilePath());
getSignDate().set(v.getSignDate());
getValid().set(v.isValid());
}
@Override
public boolean copyTo(CompanyVendorFile v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getVendor().get(), v.getVendor())) {
v.setVendor(getVendor().get());
modified = true;
}
if (!Objects.equals(getType().get(), v.getType())) {
v.setType(getType().get());
modified = true;
}
if (!Objects.equals(getFilePath().get(), v.getFilePath())) {
v.setFilePath(getFilePath().get());
modified = true;
}
if (!Objects.equals(getEditFilePath().get(), v.getEditFilePath())) {
v.setEditFilePath(getEditFilePath().get());
modified = true;
}
if (!Objects.equals(getSignDate().get(), v.getSignDate())) {
v.setSignDate(getSignDate().get());
modified = true;
}
if (!Objects.equals(getValid().get(), v.isValid())) {
modified = true;
}
return modified;
}
public static CompanyVendorFileViewModel from(CompanyVendorFile companyVendorFile) {
CompanyVendorFileViewModel model = new CompanyVendorFileViewModel();
model.update(companyVendorFile);
return model;
}
}

View File

@@ -0,0 +1,168 @@
package com.ecep.contract.vm;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Objects;
import com.ecep.contract.VendorType;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyContact;
import com.ecep.contract.model.CompanyVendor;
import com.ecep.contract.model.VendorCatalog;
import com.ecep.contract.model.VendorGroup;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyVendorViewModel extends IdentityViewModel<CompanyVendor> {
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty state = new SimpleStringProperty();
/**
* 类型
*/
private SimpleObjectProperty<VendorType> type = new SimpleObjectProperty<>();
/**
* 分组
*/
private SimpleObjectProperty<VendorGroup> group = new SimpleObjectProperty<>();
/**
* 是否为协议供应商
*/
private SimpleBooleanProperty protocolProvider = new SimpleBooleanProperty(false);
/**
* 分组
*/
private SimpleObjectProperty<VendorCatalog> catalog = new SimpleObjectProperty<>();
/**
* 关联的企业
*/
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
* 开发日期
*/
private SimpleObjectProperty<LocalDate> developDate = new SimpleObjectProperty<>();
/**
* 对口联系人
*/
private SimpleObjectProperty<CompanyContact> contact = new SimpleObjectProperty<>();
/**
* 文件夹
*/
private SimpleStringProperty path = new SimpleStringProperty();
/**
* 采购的产品
*/
private SimpleStringProperty purchase = new SimpleStringProperty();
/**
* 说明
*/
private SimpleStringProperty description = new SimpleStringProperty();
/**
* 记录创建日期
*/
private SimpleObjectProperty<LocalDateTime> created = new SimpleObjectProperty<>();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
public static CompanyVendorViewModel from(CompanyVendor companyVendor) {
CompanyVendorViewModel model = new CompanyVendorViewModel();
model.update(companyVendor);
return model;
}
public void updateFrom(CompanyVendor v) {
super.updateFrom(v);
// getState().set(v.getState());
getType().set(v.getType());
getProtocolProvider().set(v.isProtocolProvider());
getCatalog().set(v.getCatalog());
getCompany().set(v.getCompany());
getDevelopDate().set(v.getDevelopDate());
getPath().set(v.getPath());
getPurchase().set(v.getPurchase());
getDescription().set(v.getDescription());
if (v.getCreated() != null) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = v.getCreated().atZone(zone);
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
getCreated().set(localDateTime);
} else {
getCreated().set(null);
}
getContact().set(v.getContact());
version.set(v.getVersion());
}
public boolean copyTo(CompanyVendor v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(type.get(), v.getType())) {
v.setType(type.get());
modified = true;
}
if (!Objects.equals(protocolProvider.get(), v.isProtocolProvider())) {
v.setProtocolProvider(protocolProvider.get());
modified = true;
}
if (!Objects.equals(catalog.get(), v.getCatalog())) {
v.setCatalog(catalog.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(developDate.get(), v.getDevelopDate())) {
v.setDevelopDate(developDate.get());
modified = true;
}
if (!Objects.equals(path.get(), v.getPath())) {
v.setPath(path.get());
modified = true;
}
if (!Objects.equals(purchase.get(), v.getPurchase())) {
v.setPurchase(purchase.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
if (!Objects.equals(contact.get(), v.getContact())) {
v.setContact(contact.get());
modified = true;
}
if (created.get() == null) {
v.setCreated(null);
} else {
Instant instant = created.get().toInstant(ZoneOffset.ofHours(8));
if (!Objects.equals(instant, v.getCreated())) {
v.setCreated(instant);
modified = true;
}
}
return modified;
}
}

View File

@@ -0,0 +1,173 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Company;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyViewModel extends IdentityViewModel<Company> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty shortName = new SimpleStringProperty();
private SimpleStringProperty uid = new SimpleStringProperty();
private SimpleBooleanProperty pathExist = new SimpleBooleanProperty();
private SimpleStringProperty path = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> setupDate = new SimpleObjectProperty<>();
private SimpleStringProperty entStatus = new SimpleStringProperty();
private SimpleStringProperty entType = new SimpleStringProperty();
private SimpleStringProperty district = new SimpleStringProperty();
private SimpleStringProperty industry = new SimpleStringProperty();
private SimpleStringProperty regAddress = new SimpleStringProperty();
private SimpleStringProperty address = new SimpleStringProperty();
private SimpleStringProperty telephone = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> operationPeriodBegin = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> operationPeriodEnd = new SimpleObjectProperty<>();
private SimpleStringProperty registeredCapital = new SimpleStringProperty();
private SimpleStringProperty registeredCapitalCurrency = new SimpleStringProperty();
private SimpleStringProperty legalRepresentative = new SimpleStringProperty();
private SimpleStringProperty memo = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
public static CompanyViewModel from(Company company) {
CompanyViewModel model = new CompanyViewModel();
model.update(company);
return model;
}
@Override
protected void updateFrom(Company company) {
super.updateFrom(company);
name.set(company.getName());
shortName.set(company.getShortName());
uid.set(company.getUniscid());
if (company.getPathExist() != null) {
pathExist.set(company.getPathExist());
}
path.set(company.getPath());
setupDate.set(company.getSetupDate());
entStatus.set(company.getEntStatus());
entType.set(company.getEntType());
district.set(company.getDistrict());
industry.set(company.getIndustry());
regAddress.set(company.getRegAddr());
address.set(company.getAddress());
telephone.set(company.getTelephone());
operationPeriodBegin.set(company.getOperationPeriodBegin());
operationPeriodEnd.set(company.getOperationPeriodEnd());
registeredCapital.set(company.getRegisteredCapital());
registeredCapitalCurrency.set(company.getRegisteredCapitalCurrency());
legalRepresentative.set(company.getLegalRepresentative());
created.set(company.getCreated());
memo.set(company.getMemo());
version.set(company.getVersion());
}
public boolean copyTo(Company v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(shortName.get(), v.getShortName())) {
v.setShortName(shortName.get());
modified = true;
}
if (!Objects.equals(uid.get(), v.getUniscid())) {
v.setUniscid(uid.get());
modified = true;
}
if (!Objects.equals(pathExist.get(), v.getPathExist())) {
v.setPathExist(pathExist.get());
modified = true;
}
if (!Objects.equals(path.get(), v.getPath())) {
v.setPath(path.get());
modified = true;
}
if (!Objects.equals(setupDate.get(), v.getSetupDate())) {
v.setSetupDate(setupDate.get());
modified = true;
}
if (!Objects.equals(entStatus.get(), v.getEntStatus())) {
v.setEntStatus(entStatus.get());
modified = true;
}
if (!Objects.equals(entType.get(), v.getEntType())) {
v.setEntType(entType.get());
modified = true;
}
if (!Objects.equals(district.get(), v.getDistrict())) {
v.setDistrict(district.get());
modified = true;
}
if (!Objects.equals(industry.get(), v.getIndustry())) {
v.setIndustry(industry.get());
modified = true;
}
if (!Objects.equals(regAddress.get(), v.getRegAddr())) {
v.setRegAddr(regAddress.get());
modified = true;
}
if (!Objects.equals(address.get(), v.getAddress())) {
v.setAddress(address.get());
modified = true;
}
if (!Objects.equals(telephone.get(), v.getTelephone())) {
v.setTelephone(telephone.get());
modified = true;
}
if (!Objects.equals(operationPeriodBegin.get(), v.getOperationPeriodBegin())) {
v.setOperationPeriodBegin(operationPeriodBegin.get());
modified = true;
}
if (!Objects.equals(operationPeriodEnd.get(), v.getOperationPeriodEnd())) {
v.setOperationPeriodEnd(operationPeriodEnd.get());
modified = true;
}
if (!Objects.equals(registeredCapital.get(), v.getRegisteredCapital())) {
v.setRegisteredCapital(registeredCapital.get());
modified = true;
}
if (!Objects.equals(registeredCapitalCurrency.get(), v.getRegisteredCapitalCurrency())) {
v.setRegisteredCapitalCurrency(registeredCapitalCurrency.get());
modified = true;
}
if (!Objects.equals(legalRepresentative.get(), v.getLegalRepresentative())) {
v.setLegalRepresentative(legalRepresentative.get());
modified = true;
}
if (!Objects.equals(memo.get(), v.getMemo())) {
v.setMemo(memo.get());
modified = true;
}
if (!Objects.equals(created.get(), v.getCreated())) {
v.setCreated(created.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,64 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractBidVendor;
import com.ecep.contract.model.ContractFile;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractBidVendorViewModel extends IdentityViewModel<ContractBidVendor> {
/**
* 关联的合同
*/
private SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
/**
* 关联的企业
*/
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
*
*/
private SimpleObjectProperty<ContractFile> quotationSheet = new SimpleObjectProperty<>();
@Override
protected void updateFrom(ContractBidVendor v) {
super.updateFrom(v);
getContract().set(v.getContract());
getCompany().set(v.getCompany());
getQuotationSheet().set(v.getQuotationSheet());
}
@Override
public boolean copyTo(ContractBidVendor v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(quotationSheet.get(), v.getQuotationSheet())) {
v.setQuotationSheet(quotationSheet.get());
modified = true;
}
return modified;
}
public static ContractBidVendorViewModel from(ContractBidVendor contractBidVendor) {
ContractBidVendorViewModel viewModel = new ContractBidVendorViewModel();
// viewModel.updateFrom(contractBidVendor);
viewModel.update(contractBidVendor);
return viewModel;
}
}

View File

@@ -0,0 +1,70 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.ContractFileType;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractFile;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractFileViewModel extends IdentityViewModel<ContractFile> {
SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
SimpleObjectProperty<ContractFileType> type = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDate> applyDate = new SimpleObjectProperty<>();
SimpleStringProperty fileName = new SimpleStringProperty();
SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(ContractFile v) {
super.updateFrom(v);
contract.set(v.getContract());
type.set(v.getType());
applyDate.set(v.getApplyDate());
fileName.set(v.getFileName());
description.set(v.getDescription());
super.updateFrom(v);
}
@Override
public boolean copyTo(ContractFile v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(type.get(), v.getType())) {
v.setType(type.get());
modified = true;
}
if (!Objects.equals(applyDate.get(), v.getApplyDate())) {
v.setApplyDate(applyDate.get());
modified = true;
}
if (!Objects.equals(fileName.get(), v.getFileName())) {
v.setFileName(fileName.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static ContractFileViewModel from(ContractFile contractFile) {
ContractFileViewModel model = new ContractFileViewModel();
model.update(contractFile);
return model;
}
}

View File

@@ -0,0 +1,32 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.ContractGroup;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractGroupViewModel extends IdentityViewModel<ContractGroup> {
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty title = new SimpleStringProperty();
@Override
protected void updateFrom(ContractGroup v) {
super.updateFrom(v);
code.set(v.getCode());
name.set(v.getName());
title.set(v.getTitle());
}
@Override
public boolean copyTo(ContractGroup v) {
boolean result = super.copyTo(v);
v.setCode(code.get());
v.setName(name.get());
v.setTitle(title.get());
return result;
}
}

View File

@@ -0,0 +1,84 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.ContractItem;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractItemComposeViewModel extends BaseViewModel<ContractItemComposeViewModel.Compose> {
@Data
public static class Compose {
/**
* 税率
*/
SimpleDoubleProperty taxRate = new SimpleDoubleProperty();
/**
* 不含税价格
*/
SimpleDoubleProperty exclusiveTaxPrice = new SimpleDoubleProperty();
/**
* 含税价格
*/
SimpleDoubleProperty taxPrice = new SimpleDoubleProperty();
/**
* 数量
*/
SimpleDoubleProperty quantity = new SimpleDoubleProperty();
/**
* 含税价格合计
*/
SimpleDoubleProperty taxAmount = new SimpleDoubleProperty();
/**
* 不含税价格合计
*/
SimpleDoubleProperty exclusiveTaxAmount = new SimpleDoubleProperty();
SimpleListProperty<ContractItem> items = new SimpleListProperty<>();
public void add(ContractItem item) {
taxRate.set(item.getTaxRate());
exclusiveTaxPrice.set(item.getExclusiveTaxPrice());
taxPrice.set(item.getTaxPrice());
taxAmount.set(taxAmount.get() + item.getTaxPrice() * item.getQuantity());
exclusiveTaxAmount.set(exclusiveTaxAmount.get() + item.getExclusiveTaxPrice() * item.getQuantity());
quantity.set(quantity.get() + item.getQuantity());
ObservableList<ContractItem> list = items.get();
if (list == null) {
list = FXCollections.observableArrayList();
items.set(list);
}
list.add(item);
}
}
SimpleIntegerProperty id = new SimpleIntegerProperty();
SimpleObjectProperty<String> title = new SimpleObjectProperty<>();
SimpleObjectProperty<String> specification = new SimpleObjectProperty<>();
SimpleObjectProperty<String> unit = new SimpleObjectProperty<>();
/**
* 进项
*/
Compose in = new Compose();
/**
* 出项
*/
Compose out = new Compose();
SimpleObjectProperty<String> remark = new SimpleObjectProperty<>();
}

View File

@@ -0,0 +1,192 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractItem;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Inventory;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 合同内容
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractItemViewModel extends IdentityViewModel<ContractItem> {
/**
* 关联的合同对象
*/
SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
/**
* 关联的用友系统中的数据ID
*/
SimpleIntegerProperty refId = new SimpleIntegerProperty();
SimpleObjectProperty<String> code = new SimpleObjectProperty<>();
SimpleObjectProperty<String> title = new SimpleObjectProperty<>();
SimpleObjectProperty<String> specification = new SimpleObjectProperty<>();
SimpleObjectProperty<String> unit = new SimpleObjectProperty<>();
/**
* 存货
*/
SimpleObjectProperty<Inventory> inventory = new SimpleObjectProperty<>();
/**
*
*/
SimpleDoubleProperty taxRate = new SimpleDoubleProperty();
SimpleDoubleProperty exclusiveTaxPrice = new SimpleDoubleProperty();
SimpleDoubleProperty taxPrice = new SimpleDoubleProperty();
SimpleDoubleProperty quantity = new SimpleDoubleProperty();
SimpleDoubleProperty taxAmount = new SimpleDoubleProperty();
SimpleDoubleProperty exclusiveTaxAmount = new SimpleDoubleProperty();
SimpleObjectProperty<LocalDate> startDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDate> endDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> createDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> updateDate = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> creator = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> updater = new SimpleObjectProperty<>();
SimpleObjectProperty<String> remark = new SimpleObjectProperty<>();
@Override
protected void updateFrom(ContractItem v) {
super.updateFrom(v);
getContract().set(v.getContract());
getRefId().set(v.getRefId());
getCode().set(v.getItemCode());
getTitle().set(v.getTitle());
getSpecification().set(v.getSpecification());
getUnit().set(v.getUnit());
getInventory().set(v.getInventory());
getExclusiveTaxPrice().set(v.getExclusiveTaxPrice());
getTaxRate().set(v.getTaxRate());
getTaxPrice().set(v.getTaxPrice());
getQuantity().set(v.getQuantity());
getStartDate().set(v.getStartDate());
getEndDate().set(v.getEndDate());
getCreateDate().set(v.getCreateDate());
getUpdateDate().set(v.getUpdateDate());
getCreator().set(v.getCreator());
getUpdater().set(v.getUpdater());
getRemark().set(v.getRemark());
getTaxAmount().set(v.getTaxPrice() * v.getQuantity());
getExclusiveTaxAmount().set(v.getExclusiveTaxPrice() * v.getQuantity());
}
@Override
public boolean copyTo(ContractItem v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(refId.get(), v.getRefId())) {
v.setRefId(refId.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getItemCode())) {
v.setItemCode(code.get());
modified = true;
}
if (!Objects.equals(title.get(), v.getTitle())) {
v.setTitle(title.get());
modified = true;
}
if (!Objects.equals(specification.get(), v.getSpecification())) {
v.setSpecification(specification.get());
modified = true;
}
if (!Objects.equals(unit.get(), v.getUnit())) {
v.setUnit(unit.get());
modified = true;
}
if (!Objects.equals(inventory.get(), v.getInventory())) {
v.setInventory(inventory.get());
modified = true;
}
if (!doubleEquals(exclusiveTaxPrice.get(), v.getExclusiveTaxPrice())) {
v.setExclusiveTaxPrice(exclusiveTaxPrice.get());
modified = true;
}
if (!doubleEquals(taxRate.get(), v.getTaxRate())) {
v.setTaxRate(taxRate.get());
modified = true;
}
if (!doubleEquals(taxPrice.get(), v.getTaxPrice())) {
v.setTaxPrice(taxPrice.get());
modified = true;
}
if (!doubleEquals(quantity.get(), v.getQuantity())) {
v.setQuantity(quantity.get());
modified = true;
}
if (!Objects.equals(startDate.get(), v.getStartDate())) {
v.setStartDate(startDate.get());
modified = true;
}
if (!Objects.equals(endDate.get(), v.getEndDate())) {
v.setEndDate(endDate.get());
modified = true;
}
if (!Objects.equals(createDate.get(), v.getCreateDate())) {
v.setCreateDate(createDate.get());
modified = true;
}
if (!Objects.equals(updateDate.get(), v.getUpdateDate())) {
v.setUpdateDate(updateDate.get());
modified = true;
}
if (!Objects.equals(creator.get(), v.getCreator())) {
v.setCreator(creator.get());
modified = true;
}
if (!Objects.equals(updater.get(), v.getUpdater())) {
v.setUpdater(updater.get());
modified = true;
}
if (!Objects.equals(remark.get(), v.getRemark())) {
v.setRemark(remark.get());
modified = true;
}
return modified;
}
/**
* 判断两个 double 值是否相等
*
* @param a a
* @param b b
* @return 在误差范围内是否相同
*/
private boolean doubleEquals(double a, double b) {
return Math.abs(a - b) < 0.0001;
}
public static ContractItemViewModel from(ContractItem contractItem) {
ContractItemViewModel viewModel = new ContractItemViewModel();
viewModel.update(contractItem);
return viewModel;
}
}

View File

@@ -0,0 +1,32 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.ContractKind;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractKindViewModel extends IdentityViewModel<ContractKind> {
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty title = new SimpleStringProperty();
@Override
protected void updateFrom(ContractKind v) {
super.updateFrom(v);
code.set(v.getCode());
name.set(v.getName());
title.set(v.getTitle());
}
@Override
public boolean copyTo(ContractKind v) {
boolean result = super.copyTo(v);
v.setCode(code.get());
v.setName(name.get());
v.setTitle(title.get());
return result;
}
}

View File

@@ -0,0 +1,88 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractPayPlan;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleFloatProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractPayPlanViewModel extends IdentityViewModel<ContractPayPlan> {
/**
* 关联的合同对象
*/
SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
/**
* 关联的用友系统中的数据ID
*/
SimpleIntegerProperty refId = new SimpleIntegerProperty();
SimpleObjectProperty<LocalDate> payDate = new SimpleObjectProperty<>();
SimpleFloatProperty payRatio = new SimpleFloatProperty();
SimpleDoubleProperty payCurrency = new SimpleDoubleProperty();
SimpleObjectProperty<String> payTerm = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> updateDate = new SimpleObjectProperty<>();
@Override
protected void updateFrom(ContractPayPlan v) {
super.updateFrom(v);
getContract().set(v.getContract());
getRefId().set(v.getRefId());
getPayDate().set(v.getPayDate());
getPayRatio().set(v.getPayRatio());
getPayCurrency().set(v.getPayCurrency());
getPayTerm().set(v.getPayTerm());
getUpdateDate().set(v.getUpdateDate());
}
@Override
public boolean copyTo(ContractPayPlan v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(refId.get(), v.getRefId())) {
v.setRefId(refId.get());
modified = true;
}
if (!Objects.equals(payDate.get(), v.getPayDate())) {
v.setPayDate(payDate.get());
modified = true;
}
if (!doubleEquals(payRatio.get(), v.getPayRatio())) {
v.setPayRatio(payRatio.get());
modified = true;
}
if (!doubleEquals(payCurrency.get(), v.getPayCurrency())) {
v.setPayCurrency(payCurrency.get());
modified = true;
}
if (!Objects.equals(payTerm.get(), v.getPayTerm())) {
v.setPayTerm(payTerm.get());
modified = true;
}
return modified;
}
/**
* 判断两个 double 值是否相等
*
* @param a a
* @param b b
* @return 在误差范围内是否相同
*/
private boolean doubleEquals(double a, double b) {
return Math.abs(a - b) < 0.0001;
}
}

View File

@@ -0,0 +1,13 @@
package com.ecep.contract.vm;
import javafx.collections.ObservableList;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractTreeItemModel extends ContractViewModel
{
private ObservableList<ContractTreeItemModel> children;
}

View File

@@ -0,0 +1,40 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.ContractType;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractTypeViewModel extends IdentityViewModel<ContractType> {
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty title = new SimpleStringProperty();
private SimpleStringProperty catalog = new SimpleStringProperty();
private SimpleStringProperty direction = new SimpleStringProperty();
@Override
protected void updateFrom(ContractType v) {
super.updateFrom(v);
code.set(v.getCode());
name.set(v.getName());
title.set(v.getTitle());
catalog.set(v.getCatalog());
direction.set(v.getDirection());
}
@Override
public boolean copyTo(ContractType v) {
boolean result = super.copyTo(v);
v.setCode(code.get());
v.setName(name.get());
v.setTitle(title.get());
v.setCatalog(catalog.get());
v.setDirection(direction.get());
return result;
}
}

View File

@@ -0,0 +1,353 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.ContractPayWay;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyContract;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractGroup;
import com.ecep.contract.model.ContractKind;
import com.ecep.contract.model.ContractType;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Project;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractViewModel extends IdentityViewModel<Contract> {
private SimpleStringProperty guid = new SimpleStringProperty();
private SimpleObjectProperty<ContractPayWay> payWay = new SimpleObjectProperty<>();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty state = new SimpleStringProperty();
/**
* 分组
*/
private SimpleObjectProperty<ContractGroup> group = new SimpleObjectProperty<>();
/**
* 分类
*/
private SimpleObjectProperty<ContractType> type = new SimpleObjectProperty<>();
/**
* 性质
*/
private SimpleObjectProperty<ContractKind> kind = new SimpleObjectProperty<>();
/**
* 主合同编号
*/
private SimpleStringProperty parentCode = new SimpleStringProperty();
/**
* 签订日期
*/
private SimpleObjectProperty<LocalDate> orderDate = new SimpleObjectProperty<>();
/**
* 合同起始日期
*/
private SimpleObjectProperty<LocalDate> startDate = new SimpleObjectProperty<>();
/**
* 合同截止日期
*/
private SimpleObjectProperty<LocalDate> endDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> setupPerson = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> setupDate = new SimpleObjectProperty<>();
/**
* 生效人
*/
private SimpleObjectProperty<Employee> inurePerson = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> inureDate = new SimpleObjectProperty<>();
/**
* 修改人
*/
private SimpleObjectProperty<Employee> varyPerson = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> varyDate = new SimpleObjectProperty<>();
/**
* 文件夹
*/
private SimpleStringProperty path = new SimpleStringProperty();
private SimpleDoubleProperty amount = new SimpleDoubleProperty();
private SimpleBooleanProperty standardPayWay = new SimpleBooleanProperty();
private SimpleBooleanProperty standardContractText = new SimpleBooleanProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<LocalDateTime> created = new SimpleObjectProperty<>();
private SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
/**
* 业务员
*/
private SimpleObjectProperty<Employee> employee = new SimpleObjectProperty<>();
/**
* 经办人
*/
private SimpleObjectProperty<Employee> handler = new SimpleObjectProperty<>();
/**
* 项目
*/
private SimpleObjectProperty<Project> project = new SimpleObjectProperty<>();
/**
* 版本
*/
private SimpleIntegerProperty version = new SimpleIntegerProperty();
/**
* 总数量
*/
private SimpleDoubleProperty totalQuantity = new SimpleDoubleProperty();
/**
* 总金额
*/
private SimpleDoubleProperty totalAmount = new SimpleDoubleProperty();
/**
* 总 不含税 金额
*/
private SimpleDoubleProperty totalUnTaxAmount = new SimpleDoubleProperty();
/**
* 已执行数量
*/
private SimpleDoubleProperty execQuantity = new SimpleDoubleProperty();
/**
* 已执行金额
*/
private SimpleDoubleProperty execAmount = new SimpleDoubleProperty();
/**
* 已执行 不含税 金额
*/
private SimpleDoubleProperty execUnTaxAmount = new SimpleDoubleProperty();
public static ContractViewModel from(CompanyContract cc) {
ContractViewModel model = new ContractViewModel();
model.update(cc.getContract());
return model;
}
public static ContractViewModel from(Contract cc) {
ContractViewModel model = new ContractViewModel();
model.update(cc);
return model;
}
public void updateFrom(Contract c) {
super.updateFrom(c);
getGuid().set(c.getGuid());
getPayWay().set(c.getPayWay());
getCode().set(c.getCode());
getName().set(c.getName());
getState().set(c.getState());
getGroup().set(c.getGroup());
getType().set(c.getType());
getKind().set(c.getKind());
getParentCode().set(c.getParentCode());
getSetupPerson().set(c.getSetupPerson());
getSetupDate().set(c.getSetupDate());
getOrderDate().set(c.getOrderDate());
getStartDate().set(c.getStartDate());
getEndDate().set(c.getEndDate());
getInurePerson().set(c.getInurePerson());
getInureDate().set(c.getInureDate());
getVaryPerson().set(c.getVaryPerson());
getVaryDate().set(c.getVaryDate());
getCompany().set(c.getCompany());
getEmployee().set(c.getEmployee());
getHandler().set(c.getHandler());
getProject().set(c.getProject());
path.set(c.getPath());
description.set(c.getDescription());
amount.set(Objects.requireNonNullElse(c.getAmount(), 0D));
standardPayWay.set(c.isStandardPayWay());
standardContractText.set(c.isStandardPContractText());
created.set(c.getCreated());
version.set(c.getVersion());
getTotalQuantity().set(c.getTotalQuantity());
getTotalAmount().set(c.getTotalAmount());
getTotalUnTaxAmount().set(c.getTotalUnTaxAmount());
getExecQuantity().set(c.getExecQuantity());
getExecAmount().set(c.getExecAmount());
getExecUnTaxAmount().set(c.getExecUnTaxAmount());
}
public boolean copyTo(Contract contract) {
boolean modified = super.copyTo(contract);
if (!Objects.equals(guid.get(), contract.getGuid())) {
contract.setGuid(guid.get());
modified = true;
}
if (!Objects.equals(payWay.get(), contract.getPayWay())) {
contract.setPayWay(payWay.get());
modified = true;
}
if (!Objects.equals(code.get(), contract.getCode())) {
contract.setCode(code.get());
modified = true;
}
if (!Objects.equals(name.get(), contract.getName())) {
contract.setName(name.get());
modified = true;
}
if (!Objects.equals(state.get(), contract.getState())) {
contract.setState(state.get());
modified = true;
}
if (!Objects.equals(group.get(), contract.getGroup())) {
contract.setGroup(group.get());
modified = true;
}
if (!Objects.equals(type.get(), contract.getType())) {
contract.setType(type.get());
modified = true;
}
if (!Objects.equals(kind.get(), contract.getKind())) {
contract.setKind(kind.get());
modified = true;
}
if (!Objects.equals(parentCode.get(), contract.getParentCode())) {
contract.setParentCode(parentCode.get());
modified = true;
}
if (!Objects.equals(setupPerson.get(), contract.getSetupPerson())) {
contract.setSetupPerson(setupPerson.get());
modified = true;
}
if (!Objects.equals(setupDate.get(), contract.getSetupDate())) {
contract.setSetupDate(setupDate.get());
modified = true;
}
if (!Objects.equals(orderDate.get(), contract.getOrderDate())) {
contract.setOrderDate(orderDate.get());
modified = true;
}
if (!Objects.equals(startDate.get(), contract.getStartDate())) {
contract.setStartDate(startDate.get());
modified = true;
}
if (!Objects.equals(endDate.get(), contract.getEndDate())) {
contract.setEndDate(endDate.get());
modified = true;
}
if (!Objects.equals(inurePerson.get(), contract.getInurePerson())) {
contract.setInurePerson(inurePerson.get());
modified = true;
}
if (!Objects.equals(inureDate.get(), contract.getInureDate())) {
contract.setInureDate(inureDate.get());
modified = true;
}
if (!Objects.equals(varyPerson.get(), contract.getVaryPerson())) {
contract.setVaryPerson(varyPerson.get());
modified = true;
}
if (!Objects.equals(varyDate.get(), contract.getVaryDate())) {
contract.setVaryDate(varyDate.get());
modified = true;
}
if (!Objects.equals(path.get(), contract.getPath())) {
contract.setPath(path.get());
modified = true;
}
if (!Objects.equals(description.get(), contract.getDescription())) {
contract.setDescription(description.get());
modified = true;
}
if (!Objects.equals(getEmployee().get(), contract.getEmployee())) {
contract.setEmployee(getEmployee().get());
modified = true;
}
if (!Objects.equals(getHandler().get(), contract.getHandler())) {
contract.setHandler(getHandler().get());
modified = true;
}
if (!Objects.equals(getCompany().get(), contract.getCompany())) {
contract.setCompany(getCompany().get());
modified = true;
}
if (!Objects.equals(getProject().get(), contract.getProject())) {
contract.setProject(getProject().get());
modified = true;
}
if (!Objects.equals(amount.get(), contract.getAmount())) {
contract.setAmount(amount.get());
modified = true;
}
if (!Objects.equals(standardPayWay.get(), contract.isStandardPayWay())) {
contract.setStandardPayWay(standardPayWay.get());
modified = true;
}
if (!Objects.equals(standardContractText.get(), contract.isStandardPContractText())) {
contract.setStandardPContractText(standardContractText.get());
modified = true;
}
if (!doubleEquals(totalQuantity.get(), contract.getTotalQuantity())) {
contract.setTotalQuantity(totalQuantity.get());
modified = true;
}
if (!doubleEquals(totalAmount.get(), contract.getTotalAmount())) {
contract.setTotalAmount(totalAmount.get());
modified = true;
}
if (!doubleEquals(totalUnTaxAmount.get(), contract.getTotalUnTaxAmount())) {
contract.setTotalUnTaxAmount(totalUnTaxAmount.get());
modified = true;
}
if (!doubleEquals(execQuantity.get(), contract.getExecQuantity())) {
contract.setExecQuantity(execQuantity.get());
modified = true;
}
if (!doubleEquals(execAmount.get(), contract.getExecAmount())) {
contract.setExecAmount(execAmount.get());
modified = true;
}
if (!doubleEquals(execUnTaxAmount.get(), contract.getExecUnTaxAmount())) {
contract.setExecUnTaxAmount(execUnTaxAmount.get());
modified = true;
}
if (!Objects.equals(created.get(), contract.getCreated())) {
contract.setCreated(created.get());
modified = true;
}
return modified;
}
private boolean doubleEquals(double a, double b) {
return Math.abs(a - b) < 0.0001;
}
}

View File

@@ -0,0 +1,189 @@
package com.ecep.contract.vm;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import com.ecep.contract.Desktop;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.SpringApp;
import com.ecep.contract.controller.CurrentEmployeeInitialedEvent;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.EmployeeRole;
import com.ecep.contract.service.EmployeeService;
import javafx.application.Platform;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.util.converter.CurrencyStringConverter;
import javafx.util.converter.LocalDateStringConverter;
import javafx.util.converter.LocalDateTimeStringConverter;
import javafx.util.converter.NumberStringConverter;
import lombok.ToString;
/**
* 当前登录用户
*/
@ToString(callSuper = false, exclude = "roles")
public class CurrentEmployee extends EmployeeViewModel {
private static final Logger logger = LoggerFactory.getLogger(CurrentEmployee.class);
/**
* 语言环境
*/
private SimpleObjectProperty<Locale> locale = new SimpleObjectProperty<>(Locale.getDefault());
/**
* 角色
*/
private SimpleListProperty<EmployeeRole> roles = new SimpleListProperty<>(FXCollections.observableArrayList());
private DateTimeFormatter dateFormatter = DateTimeFormatter
.ofPattern(MyDateTimeUtils.DEFAULT_DATE_FORMAT_PATTERN);
private DateTimeFormatter dateTimeFormatter = DateTimeFormatter
.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN);
private DateTimeFormatter timeFormatter = DateTimeFormatter
.ofPattern(MyDateTimeUtils.DEFAULT_TIME_FORMAT_PATTERN);
private LocalDateStringConverter localDateStringConverter = new LocalDateStringConverter(
dateFormatter, null);
private LocalDateTimeStringConverter localDateTimeStringConverter = new LocalDateTimeStringConverter(
dateTimeFormatter, null);
private NumberStringConverter numberStringConverter = new NumberStringConverter("#,##0.00");
private CurrencyStringConverter currencyStringConverter = new CurrencyStringConverter("#,##0.00");
/**
* 是否系统管理员
*/
public boolean isSystemAdministrator() {
return roles.stream().anyMatch(EmployeeRole::isSystemAdministrator);
}
/**
* 语言环境属性
*/
public SimpleObjectProperty<Locale> localeProperty() {
return locale;
}
/**
* 角色属性
*/
public SimpleListProperty<EmployeeRole> rolesProperty() {
return roles;
}
@Override
protected void updateFrom(Employee v) {
super.updateFrom(v);
// 根据用户的个人配置修改
if (StringUtils.hasText(v.getLocale())) {
try {
localeProperty().set(Locale.forLanguageTag(v.getLocale()));
} catch (Exception e) {
handleException("解析设置用户区域设置失败," + v.getLocale(), e);
}
}
if (StringUtils.hasText(v.getDateFormatter())) {
try {
dateFormatter = DateTimeFormatter.ofPattern(v.getDateFormatter());
localDateStringConverter = new LocalDateStringConverter(dateFormatter, null);
} catch (Exception e) {
handleException("解析设置用户日期格式失败," + v.getDateFormatter(), e);
}
}
if (StringUtils.hasText(v.getDateTimeFormatter())) {
try {
dateTimeFormatter = DateTimeFormatter.ofPattern(v.getDateTimeFormatter());
localDateTimeStringConverter = new LocalDateTimeStringConverter(dateTimeFormatter, null);
} catch (Exception e) {
handleException("解析设置用户日期时间格式失败," + v.getDateTimeFormatter(), e);
}
}
if (StringUtils.hasText(v.getNumberFormatter())) {
try {
numberStringConverter = new NumberStringConverter(localeProperty().get(), v.getNumberFormatter());
} catch (Exception e) {
handleException("解析设置用户数字格式失败," + v.getNumberFormatter(), e);
}
}
if (StringUtils.hasText(v.getCurrencyFormatter())) {
try {
currencyStringConverter = new CurrencyStringConverter(localeProperty().get(), v.getCurrencyFormatter());
} catch (Exception e) {
handleException("解析设置用户货币格式失败," + v.getCurrencyFormatter(), e);
}
}
}
/**
* 初始化
*/
public CompletableFuture<Void> initialize() {
CompletableFuture<Void> future = new CompletableFuture<>();
ScheduledExecutorService executorService = Desktop.instance.getExecutorService();
/**
* 异步初始化当前用户
* 1. 从数据库中查询当前用户
* 2. 从数据库中查询当前用户的角色
* 3. 更新当前用户的信息
* 4. 更新当前用户的角色
*/
executorService.submit(() -> {
// issue #1 sss 2020-07-05
EmployeeService employeeService = SpringApp.getBean(EmployeeService.class);
Employee employee = employeeService.findById(Desktop.instance.getActiveEmployeeId());
List<EmployeeRole> roles = employeeService.getRolesByEmployeeId(employee.getId());
Platform.runLater(() -> {
update(employee);
rolesProperty().setAll(roles);
// 发布事件
SpringApp.context.publishEvent(new CurrentEmployeeInitialedEvent(this));
future.complete(null);
});
});
/**
* 定时更新用户活动状态
*/
executorService.scheduleWithFixedDelay(() -> {
try {
SpringApp.getBean(EmployeeService.class).updateActive(Desktop.instance.getSessionId());
} catch (Exception e) {
if (logger.isErrorEnabled()) {
logger.error("updateActive:{}", e.getMessage(), e);
}
}
}, 10, 10, TimeUnit.SECONDS);
return future;
}
private void handleException(String msg, Exception e) {
logger.warn(msg, e);
}
public LocalDateStringConverter getLocalDateStringConverter() {
return localDateStringConverter;
}
public LocalDateTimeStringConverter getLocalDateTimeStringConverter() {
return localDateTimeStringConverter;
}
public NumberStringConverter getNumberStringConverter() {
return numberStringConverter;
}
public CurrencyStringConverter getCurrencyStringConverter() {
return currencyStringConverter;
}
}

View File

@@ -0,0 +1,115 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.CompanyCustomer;
import com.ecep.contract.model.CompanyCustomerEntity;
import com.ecep.contract.model.CustomerCatalog;
import com.ecep.contract.model.Employee;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CustomerEntityViewModel extends IdentityViewModel<CompanyCustomerEntity> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty abbName = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
/**
* 分组
*/
private SimpleObjectProperty<CustomerCatalog> catalog = new SimpleObjectProperty<>();
/**
* 关联的企业
*/
private SimpleObjectProperty<CompanyCustomer> customer = new SimpleObjectProperty<>();
/**
* 发展日期
*/
private SimpleObjectProperty<LocalDate> developDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> creator = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> modifier = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> modifyDate = new SimpleObjectProperty<>();
/**
* 从U8系统同步时间
*/
private SimpleObjectProperty<LocalDate> updatedDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> fetchedTime = new SimpleObjectProperty<>();
public static CustomerEntityViewModel from(CompanyCustomerEntity cc) {
CustomerEntityViewModel model = new CustomerEntityViewModel();
model.update(cc);
return model;
}
@Override
protected void updateFrom(CompanyCustomerEntity v) {
super.updateFrom(v);
getName().set(v.getName());
getAbbName().set(v.getAbbName());
getCode().set(v.getCode());
getCatalog().set(v.getCatalog());
getCustomer().set(v.getCustomer());
getDevelopDate().set(v.getDevelopDate());
getCreator().set(v.getCreator());
getModifier().set(v.getModifier());
getModifyDate().set(v.getModifyDate());
getUpdatedDate().set(v.getUpdatedDate());
getFetchedTime().set(v.getFetchedTime());
}
@Override
public boolean copyTo(CompanyCustomerEntity v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(abbName.get(), v.getAbbName())) {
v.setAbbName(abbName.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(catalog.get(), v.getCatalog())) {
v.setCatalog(catalog.get());
modified = true;
}
if (!Objects.equals(customer.get(), v.getCustomer())) {
v.setCustomer(customer.get());
modified = true;
}
if (!Objects.equals(developDate.get(), v.getDevelopDate())) {
v.setDevelopDate(developDate.get());
modified = true;
}
if (!Objects.equals(creator.get(), v.getCreator())) {
v.setCreator(creator.get());
modified = true;
}
if (!Objects.equals(modifier.get(), v.getModifier())) {
v.setModifier(modifier.get());
modified = true;
}
if (!Objects.equals(modifyDate.get(), v.getModifyDate())) {
v.setModifyDate(modifyDate.get());
modified = true;
}
if (!Objects.equals(updatedDate.get(), v.getUpdatedDate())) {
v.setUpdatedDate(updatedDate.get());
modified = true;
}
if (!Objects.equals(fetchedTime.get(), v.getFetchedTime())) {
v.setFetchedTime(fetchedTime.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,88 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.CustomerSatisfactionSurvey;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Project;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CustomerSatisfactionSurveyViewModel extends IdentityViewModel<CustomerSatisfactionSurvey> implements ProjectBasedViewModel {
/**
* 关联的项目
*/
private SimpleObjectProperty<Project> project = new SimpleObjectProperty<>();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> date = new SimpleObjectProperty<>();
private SimpleIntegerProperty totalScore = new SimpleIntegerProperty();
private SimpleStringProperty data = new SimpleStringProperty();
private SimpleObjectProperty<Employee> applicant = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> applyTime = new SimpleObjectProperty<>();
/**
* 说明、注释
*/
private SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(CustomerSatisfactionSurvey v) {
super.updateFrom(v);
getProject().set(v.getProject());
getCode().set(v.getCode());
getDate().set(v.getDate());
getTotalScore().set(v.getTotalScore());
getData().set(v.getData());
getApplicant().set(v.getApplicant());
getApplyTime().set(v.getApplyTime());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(CustomerSatisfactionSurvey v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getProject().get(), v.getProject())) {
v.setProject(getProject().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getDate().get(), v.getDate())) {
v.setDate(getDate().get());
modified = true;
}
if (!Objects.equals(getTotalScore().get(), v.getTotalScore())) {
v.setTotalScore(getTotalScore().get());
modified = true;
}
if (!Objects.equals(getData().get(), v.getData())) {
v.setData(getData().get());
modified = true;
}
if (!Objects.equals(getApplicant().get(), v.getApplicant())) {
v.setApplicant(getApplicant().get());
modified = true;
}
if (!Objects.equals(getApplyTime().get(), v.getApplyTime())) {
v.setApplyTime(getApplyTime().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,64 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.DeliverySignMethod;
import com.ecep.contract.model.ProjectSaleType;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 交付或签收方式
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class DeliverySignMethodViewModel extends IdentityViewModel<DeliverySignMethod> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
private SimpleObjectProperty<ProjectSaleType> saleType = new SimpleObjectProperty<>();
public static DeliverySignMethodViewModel from(DeliverySignMethod v) {
DeliverySignMethodViewModel model = new DeliverySignMethodViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(DeliverySignMethod v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getDescription().set(v.getDescription());
getSaleType().set(v.getSaleType());
}
@Override
public boolean copyTo(DeliverySignMethod v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
if (!Objects.equals(getSaleType().get(), v.getSaleType())) {
v.setSaleType(getSaleType().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,61 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Department;
import com.ecep.contract.model.Employee;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class DepartmentViewModel extends IdentityViewModel<Department> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleObjectProperty<Employee> leader = new SimpleObjectProperty<>();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleBooleanProperty isActive = new SimpleBooleanProperty();
public static DepartmentViewModel from(Department v) {
DepartmentViewModel model = new DepartmentViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(Department v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getLeader().set(v.getLeader());
getIsActive().set(v.isActive());
}
@Override
public boolean copyTo(Department v) {
if (v == null) return false;
boolean modified = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(leader.get(), v.getLeader())) {
v.setLeader(leader.get());
modified = true;
}
if (!Objects.equals(isActive.get(), v.isActive())) {
v.setActive(isActive.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,82 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.EmployeeAuthBind;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class EmployeeAuthBindViewModel extends IdentityViewModel<EmployeeAuthBind> implements EmployeeBasedViewModel {
private SimpleStringProperty ip = new SimpleStringProperty();
private SimpleStringProperty mac = new SimpleStringProperty();
private SimpleObjectProperty<Employee> employee = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> createTime = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> updater = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> updateTime = new SimpleObjectProperty<>();
private SimpleStringProperty description = new SimpleStringProperty();
public static EmployeeAuthBindViewModel from(EmployeeAuthBind v) {
EmployeeAuthBindViewModel vm = new EmployeeAuthBindViewModel();
vm.update(v);
return vm;
}
@Override
protected void updateFrom(EmployeeAuthBind v) {
super.updateFrom(v);
getIp().set(v.getIp());
getMac().set(v.getMac());
getEmployee().set(v.getEmployee());
getCreateTime().set(v.getCreateTime());
getUpdater().set(v.getUpdater());
getUpdateTime().set(v.getUpdateTime());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(EmployeeAuthBind v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getIp().get(), v.getIp())) {
v.setIp(getIp().get());
modified = true;
}
if (!Objects.equals(getMac().get(), v.getMac())) {
v.setMac(getMac().get());
modified = true;
}
if (!Objects.equals(getEmployee().get(), v.getEmployee())) {
v.setEmployee(getEmployee().get());
modified = true;
}
if (!Objects.equals(getCreateTime().get(), v.getCreateTime())) {
v.setCreateTime(getCreateTime().get());
modified = true;
}
if (!Objects.equals(getUpdater().get(), v.getUpdater())) {
v.setUpdater(getUpdater().get());
modified = true;
}
if (!Objects.equals(getUpdateTime().get(), v.getUpdateTime())) {
v.setUpdateTime(getUpdateTime().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,9 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.Employee;
import javafx.beans.property.SimpleObjectProperty;
public interface EmployeeBasedViewModel {
SimpleObjectProperty<Employee> getEmployee();
}

View File

@@ -0,0 +1,68 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.EmployeeLoginHistory;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class EmployeeLoginHistoryViewModel extends IdentityViewModel<EmployeeLoginHistory> implements EmployeeBasedViewModel {
private SimpleStringProperty ip = new SimpleStringProperty();
private SimpleStringProperty mac = new SimpleStringProperty();
private SimpleObjectProperty<Employee> employee = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> loginTime = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> activeTime = new SimpleObjectProperty<>();
public static EmployeeLoginHistoryViewModel from(EmployeeLoginHistory v) {
EmployeeLoginHistoryViewModel vm = new EmployeeLoginHistoryViewModel();
vm.update(v);
return vm;
}
@Override
protected void updateFrom(EmployeeLoginHistory v) {
super.updateFrom(v);
getIp().set(v.getIp());
getMac().set(v.getMac());
getEmployee().set(v.getEmployee());
getLoginTime().set(v.getLoginTime());
getActiveTime().set(v.getActiveTime());
}
@Override
public boolean copyTo(EmployeeLoginHistory v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getIp().get(), v.getIp())) {
v.setIp(getIp().get());
modified = true;
}
if (!Objects.equals(getMac().get(), v.getMac())) {
v.setMac(getMac().get());
modified = true;
}
if (!Objects.equals(getEmployee().get(), v.getEmployee())) {
v.setEmployee(getEmployee().get());
modified = true;
}
if (!Objects.equals(getLoginTime().get(), v.getLoginTime())) {
v.setLoginTime(getLoginTime().get());
modified = true;
}
if (!Objects.equals(getActiveTime().get(), v.getActiveTime())) {
v.setActiveTime(getActiveTime().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,63 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.EmployeeRole;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class EmployeeRoleViewModel extends IdentityViewModel<EmployeeRole> {
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleBooleanProperty systemAdministrator = new SimpleBooleanProperty();
private SimpleBooleanProperty manager = new SimpleBooleanProperty();
private SimpleBooleanProperty active = new SimpleBooleanProperty();
public static EmployeeRoleViewModel from(EmployeeRole v) {
EmployeeRoleViewModel model = new EmployeeRoleViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(EmployeeRole v) {
super.updateFrom(v);
getCode().set(v.getCode());
getName().set(v.getName());
getSystemAdministrator().set(v.isSystemAdministrator());
getManager().set(v.isManager());
getActive().set(v.isActive());
}
@Override
public boolean copyTo(EmployeeRole v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getSystemAdministrator().get(), v.isSystemAdministrator())) {
v.setSystemAdministrator(getSystemAdministrator().get());
modified = true;
}
if (!Objects.equals(getManager().get(), v.isManager())) {
v.setManager(getManager().get());
modified = true;
}
if (!Objects.equals(getActive().get(), v.isActive())) {
v.setActive(getActive().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,109 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Department;
import com.ecep.contract.model.Employee;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class EmployeeViewModel extends IdentityViewModel<Employee> {
private SimpleStringProperty account = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleObjectProperty<Department> department = new SimpleObjectProperty<>();
private SimpleStringProperty alias = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty email = new SimpleStringProperty();
private SimpleStringProperty phone = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> entryDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> leaveDate = new SimpleObjectProperty<>();
private SimpleBooleanProperty isActive = new SimpleBooleanProperty();
public static EmployeeViewModel from(Employee v) {
EmployeeViewModel model = new EmployeeViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(Employee v) {
super.updateFrom(v);
getAccount().set(v.getAccount());
getName().set(v.getName());
getDepartment().set(v.getDepartment());
// getRoles().set(FXCollections.observableArrayList(v.getRoles()));
getAlias().set(v.getAlias());
getCode().set(v.getCode());
getEmail().set(v.getEmail());
getPhone().set(v.getPhone());
getCreated().set(v.getCreated());
getEntryDate().set(v.getEntryDate());
getLeaveDate().set(v.getLeaveDate());
getIsActive().set(v.isActive());
}
@Override
public boolean copyTo(Employee v) {
if (v == null)
return false;
boolean modified = super.copyTo(v);
if (!Objects.equals(account.get(), v.getAccount())) {
v.setAccount(account.get());
modified = true;
}
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(department.get(), v.getDepartment())) {
v.setDepartment(department.get());
modified = true;
}
// if (!Objects.equals(roles.get(), v.getRoles())) {
// v.setRoles(roles.get());
// modified = true;
// }
if (!Objects.equals(alias.get(), v.getAlias())) {
v.setAlias(alias.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(email.get(), v.getEmail())) {
v.setEmail(email.get());
modified = true;
}
if (!Objects.equals(phone.get(), v.getPhone())) {
v.setPhone(phone.get());
modified = true;
}
if (!Objects.equals(created.get(), v.getCreated())) {
v.setCreated(created.get());
modified = true;
}
if (!Objects.equals(entryDate.get(), v.getEntryDate())) {
v.setEntryDate(entryDate.get());
modified = true;
}
if (!Objects.equals(leaveDate.get(), v.getLeaveDate())) {
v.setLeaveDate(leaveDate.get());
modified = true;
}
if (!Objects.equals(isActive.get(), v.isActive())) {
v.setActive(isActive.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,82 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ExtendVendorInfo;
import com.ecep.contract.model.VendorGroup;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ExtendVendorInfoViewModel extends IdentityViewModel<ExtendVendorInfo> {
/**
* 关联的合同
*/
private SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
/**
* 供应商分组
*/
private SimpleObjectProperty<VendorGroup> group = new SimpleObjectProperty<>();
/**
* 合同序号
*/
private SimpleIntegerProperty codeSequenceNumber = new SimpleIntegerProperty();
/**
* 是否已指定供应商
*/
private SimpleBooleanProperty assignedProvider = new SimpleBooleanProperty();
/**
* 是否是预采购
*/
private SimpleBooleanProperty prePurchase = new SimpleBooleanProperty();
public static ExtendVendorInfoViewModel from(ExtendVendorInfo v) {
ExtendVendorInfoViewModel vm = new ExtendVendorInfoViewModel();
vm.updateFrom(v);
return vm;
}
@Override
protected void updateFrom(ExtendVendorInfo v) {
super.updateFrom(v);
getContract().set(v.getContract());
getGroup().set(v.getGroup());
getCodeSequenceNumber().set(v.getCodeSequenceNumber());
getAssignedProvider().set(v.isAssignedProvider());
getPrePurchase().set(v.isPrePurchase());
}
@Override
public boolean copyTo(ExtendVendorInfo v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(group.get(), v.getGroup())) {
v.setGroup(group.get());
modified = true;
}
if (!Objects.equals(codeSequenceNumber.get(), v.getCodeSequenceNumber())) {
v.setCodeSequenceNumber(codeSequenceNumber.get());
modified = true;
}
if (!Objects.equals(assignedProvider.get(), v.isAssignedProvider())) {
v.setAssignedProvider(assignedProvider.get());
modified = true;
}
if (!Objects.equals(prePurchase.get(), v.isPrePurchase())) {
v.setPrePurchase(prePurchase.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,69 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Function;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class FunctionViewModel extends IdentityViewModel<Function> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty key = new SimpleStringProperty();
private SimpleStringProperty controller = new SimpleStringProperty();
private SimpleStringProperty icon = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleBooleanProperty active = new SimpleBooleanProperty();
public static FunctionViewModel from(Function v) {
FunctionViewModel model = new FunctionViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(Function v) {
super.updateFrom(v);
getName().set(v.getName());
getKey().set(v.getKey());
getController().set(v.getController());
getIcon().set(v.getIcon());
getDescription().set(v.getDescription());
getActive().set(v.isActive());
}
@Override
public boolean copyTo(Function v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(key.get(), v.getKey())) {
v.setKey(key.get());
modified = true;
}
if (!Objects.equals(controller.get(), v.getController())) {
v.setController(controller.get());
modified = true;
}
if (!Objects.equals(icon.get(), v.getIcon())) {
v.setIcon(icon.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
if (active.get() != v.isActive()) {
v.setActive(active.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,43 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.IdentityEntity;
import com.ecep.contract.service.ViewModelService;
import javafx.beans.property.SimpleIntegerProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class IdentityViewModel<T extends IdentityEntity> extends BaseViewModel<T> {
/**
* 主键Id
*/
private SimpleIntegerProperty id = new SimpleIntegerProperty();
@Override
protected void updateFrom(T v) {
super.updateFrom(v);
id.set(v.getId());
}
@Override
public boolean copyTo(T v) {
boolean changed = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
changed = true;
}
return changed;
}
public <TV extends IdentityViewModel<T>> void saveInFxApplicationThread(ViewModelService<T, TV> service) {
T cloudRk = service.findById(getId().get());
if (copyTo(cloudRk)) {
T saved = service.save(cloudRk);
updateInFxApplicationThread(saved, this);
}
}
}

View File

@@ -0,0 +1,153 @@
package com.ecep.contract.vm;
import java.time.MonthDay;
import java.time.Year;
import java.util.Objects;
import com.ecep.contract.model.HistoryPrice;
import com.ecep.contract.model.Inventory;
import com.ecep.contract.model.InventoryHistoryPrice;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleFloatProperty;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class InventoryHistoryPriceViewModel extends IdentityViewModel<InventoryHistoryPrice> {
private SimpleObjectProperty<Inventory> inventory = new SimpleObjectProperty<>();
private SimpleObjectProperty<Year> year = new SimpleObjectProperty<>();
// latest price
private SimpleFloatProperty latestSaleTax = new SimpleFloatProperty();
private SimpleDoubleProperty latestSalePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty latestSaleTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<MonthDay> latestSalePriceDate = new SimpleObjectProperty<>();
private SimpleFloatProperty latestPurchaseTax = new SimpleFloatProperty();
private SimpleDoubleProperty latestPurchasePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty latestPurchaseTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<MonthDay> latestPurchasePriceDate = new SimpleObjectProperty<>();
// mini price
private SimpleFloatProperty miniSaleTax = new SimpleFloatProperty();
private SimpleDoubleProperty miniSalePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty miniSaleTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<MonthDay> miniSalePriceDate = new SimpleObjectProperty<>();
private SimpleFloatProperty miniPurchaseTax = new SimpleFloatProperty();
private SimpleDoubleProperty miniPurchasePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty miniPurchaseTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<MonthDay> miniPurchasePriceDate = new SimpleObjectProperty<>();
// max price
private SimpleFloatProperty maxSaleTax = new SimpleFloatProperty();
private SimpleDoubleProperty maxSalePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty maxSaleTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<MonthDay> maxSalePriceDate = new SimpleObjectProperty<>();
private SimpleFloatProperty maxPurchaseTax = new SimpleFloatProperty();
private SimpleDoubleProperty maxPurchasePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty maxPurchaseTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<MonthDay> maxPurchasePriceDate = new SimpleObjectProperty<>();
void updateHistoryPrice(HistoryPrice historyPrice,
SimpleFloatProperty taxProperty,
SimpleDoubleProperty priceProperty, SimpleDoubleProperty taxPriceProperty,
SimpleObjectProperty<MonthDay> monthDayProperty
) {
if (historyPrice == null) {
taxProperty.set(0);
priceProperty.set(0);
taxPriceProperty.set(0);
monthDayProperty.set(null);
return;
}
taxProperty.set(historyPrice.getTaxRate());
priceProperty.set(historyPrice.getPreTaxPrice());
taxPriceProperty.set(historyPrice.getPostTaxPrice());
monthDayProperty.set(historyPrice.getMonthDay());
}
@Override
protected void updateFrom(InventoryHistoryPrice v) {
super.updateFrom(v);
inventory.set(v.getInventory());
year.set(v.getYear());
// latest price
updateHistoryPrice(v.getLatestPurchasePrice(), latestPurchaseTax, latestPurchasePrice, latestPurchaseTaxPrice, latestPurchasePriceDate);
updateHistoryPrice(v.getLatestSalePrice(), latestSaleTax, latestSalePrice, latestSaleTaxPrice, latestSalePriceDate);
// min price
updateHistoryPrice(v.getMiniPurchasePrice(), miniPurchaseTax, miniPurchasePrice, miniPurchaseTaxPrice, miniPurchasePriceDate);
updateHistoryPrice(v.getMiniSalePrice(), miniSaleTax, miniSalePrice, miniSaleTaxPrice, miniSalePriceDate);
// max price
updateHistoryPrice(v.getMaxPurchasePrice(), maxPurchaseTax, maxPurchasePrice, maxPurchaseTaxPrice, maxPurchasePriceDate);
updateHistoryPrice(v.getMaxSalePrice(), maxSaleTax, maxSalePrice, maxSaleTaxPrice, maxSalePriceDate);
}
boolean copyTo(HistoryPrice historyPrice,
SimpleFloatProperty taxProperty,
SimpleDoubleProperty priceProperty, SimpleDoubleProperty taxPriceProperty,
SimpleObjectProperty<MonthDay> monthDayProperty
) {
boolean modified = false;
if (!Objects.equals(priceProperty.get(), historyPrice.getPreTaxPrice())) {
historyPrice.setPreTaxPrice(priceProperty.get());
modified = true;
}
if (!Objects.equals(taxProperty.get(), historyPrice.getTaxRate())) {
historyPrice.setTaxRate(taxProperty.get());
modified = true;
}
if (!Objects.equals(taxPriceProperty.get(), historyPrice.getPostTaxPrice())) {
historyPrice.setPostTaxPrice(taxPriceProperty.get());
modified = true;
}
if (!Objects.equals(monthDayProperty.get(), historyPrice.getMonthDay())) {
historyPrice.setMonthDay(monthDayProperty.get());
modified = true;
}
return modified;
}
@Override
public boolean copyTo(InventoryHistoryPrice v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(inventory.get(), v.getInventory())) {
v.setInventory(inventory.get());
modified = true;
}
if (!Objects.equals(year.get(), v.getYear())) {
v.setYear(year.get().getValue());
modified = true;
}
// latest price
if (copyTo(v.getLatestPurchasePrice(), latestPurchaseTax, latestPurchasePrice, latestPurchaseTaxPrice, latestPurchasePriceDate)) {
modified = true;
}
if (copyTo(v.getLatestSalePrice(), latestSaleTax, latestSalePrice, latestSaleTaxPrice, latestSalePriceDate)) {
modified = true;
}
// mini price
if (copyTo(v.getMiniPurchasePrice(), miniPurchaseTax, miniPurchasePrice, miniPurchaseTaxPrice, miniPurchasePriceDate)) {
modified = true;
}
if (copyTo(v.getMiniSalePrice(), miniSaleTax, miniSalePrice, miniSaleTaxPrice, miniSalePriceDate)) {
modified = true;
}
// max price
if (copyTo(v.getMaxPurchasePrice(), maxPurchaseTax, maxPurchasePrice, maxPurchaseTaxPrice, maxPurchasePriceDate)) {
modified = true;
}
if (copyTo(v.getMaxSalePrice(), maxSaleTax, maxSalePrice, maxSaleTaxPrice, maxSalePriceDate)) {
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,293 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Inventory;
import com.ecep.contract.model.InventoryCatalog;
import com.ecep.contract.model.Price;
import com.ecep.contract.model.VolumeSize;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleFloatProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class InventoryViewModel extends IdentityViewModel<Inventory> {
private SimpleObjectProperty<InventoryCatalog> catalog = new SimpleObjectProperty<>();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty specification = new SimpleStringProperty();
private SimpleBooleanProperty specificationLock = new SimpleBooleanProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleBooleanProperty nameLock = new SimpleBooleanProperty();
private SimpleFloatProperty purchaseTaxRate = new SimpleFloatProperty();
private SimpleDoubleProperty purchasePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty purchaseTaxPrice = new SimpleDoubleProperty();
private SimpleFloatProperty saleTaxRate = new SimpleFloatProperty();
private SimpleDoubleProperty salePrice = new SimpleDoubleProperty();
private SimpleDoubleProperty saleTaxPrice = new SimpleDoubleProperty();
private SimpleStringProperty weightUnit = new SimpleStringProperty();
private SimpleStringProperty sizeUnit = new SimpleStringProperty();
private SimpleStringProperty volumeUnit = new SimpleStringProperty();
private SimpleDoubleProperty weight = new SimpleDoubleProperty();
private SimpleDoubleProperty packagedWeight = new SimpleDoubleProperty();
private SimpleDoubleProperty sizeLength = new SimpleDoubleProperty();
private SimpleDoubleProperty sizeWidth = new SimpleDoubleProperty();
private SimpleDoubleProperty sizeHeight = new SimpleDoubleProperty();
private SimpleDoubleProperty volume = new SimpleDoubleProperty();
private SimpleDoubleProperty packagedSizeLength = new SimpleDoubleProperty();
private SimpleDoubleProperty packagedSizeWidth = new SimpleDoubleProperty();
private SimpleDoubleProperty packagedSizeHeight = new SimpleDoubleProperty();
private SimpleDoubleProperty packagedVolume = new SimpleDoubleProperty();
private SimpleStringProperty unit = new SimpleStringProperty();
private SimpleObjectProperty<Employee> creator = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> createTime = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> updater = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> updateDate = new SimpleObjectProperty<>();
private SimpleStringProperty description = new SimpleStringProperty();
public static InventoryViewModel from(Inventory v) {
InventoryViewModel model = new InventoryViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(Inventory v) {
super.updateFrom(v);
getCatalog().set(v.getCatalog());
getCode().set(v.getCode());
getSpecification().set(v.getSpecification());
getSpecificationLock().set(v.isSpecificationLock());
getName().set(v.getName());
getNameLock().set(v.isNameLock());
getUnit().set(v.getUnit());
Price purchasePrice = v.getPurchasePrice();
getPurchaseTaxRate().set(purchasePrice.getTaxRate());
getPurchasePrice().set(purchasePrice.getPreTaxPrice());
getPurchaseTaxPrice().set(purchasePrice.getPostTaxPrice());
Price salePrice = v.getSalePrice();
getSaleTaxRate().set(salePrice.getTaxRate());
getSalePrice().set(salePrice.getPreTaxPrice());
getSaleTaxPrice().set(salePrice.getPostTaxPrice());
getWeightUnit().set(v.getWeightUnit());
getSizeUnit().set(v.getSizeUnit());
getVolumeUnit().set(v.getVolumeUnit());
getWeight().set(v.getWeight());
getPackagedWeight().set(v.getPackagedWeight());
VolumeSize volumeSize = v.getVolumeSize();
getSizeLength().set(volumeSize.getLength());
getSizeWidth().set(volumeSize.getWidth());
getSizeHeight().set(volumeSize.getHeight());
getVolume().set(volumeSize.getVolume());
VolumeSize packagedVolumeSize = v.getPackagedVolumeSize();
getPackagedSizeLength().set(packagedVolumeSize.getLength());
getPackagedSizeWidth().set(packagedVolumeSize.getWidth());
getPackagedSizeHeight().set(packagedVolumeSize.getHeight());
getPackagedVolume().set(packagedVolumeSize.getVolume());
getCreator().set(v.getCreator());
getCreateTime().set(v.getCreateTime());
getUpdater().set(v.getUpdater());
getUpdateDate().set(v.getUpdateDate());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(Inventory v) {
if (v == null)
return false;
boolean modified = super.copyTo(v);
if (!Objects.equals(catalog.get(), v.getCatalog())) {
v.setCatalog(catalog.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(specification.get(), v.getSpecification())) {
v.setSpecification(specification.get());
modified = true;
}
if (!Objects.equals(specificationLock.get(), v.isSpecificationLock())) {
v.setSpecificationLock(specificationLock.get());
modified = true;
}
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(nameLock.get(), v.isNameLock())) {
v.setNameLock(nameLock.get());
modified = true;
}
if (!Objects.equals(unit.get(), v.getUnit())) {
v.setUnit(unit.get());
modified = true;
}
// price
Price purchasePrice = v.getPurchasePrice();
if (!Objects.equals(getPurchaseTaxRate().get(), purchasePrice.getTaxRate())) {
purchasePrice.setTaxRate(getPurchaseTaxRate().get());
modified = true;
}
if (!Objects.equals(getPurchasePrice().get(), purchasePrice.getPreTaxPrice())) {
purchasePrice.setPreTaxPrice(getPurchasePrice().get());
modified = true;
}
if (!Objects.equals(getPurchaseTaxPrice().get(), purchasePrice.getPostTaxPrice())) {
purchasePrice.setPostTaxPrice(getPurchaseTaxPrice().get());
modified = true;
}
Price salePrice = v.getSalePrice();
if (!Objects.equals(getSaleTaxRate().get(), salePrice.getTaxRate())) {
salePrice.setTaxRate(getSaleTaxRate().get());
modified = true;
}
if (!Objects.equals(getSalePrice().get(), salePrice.getPreTaxPrice())) {
salePrice.setPreTaxPrice(getSalePrice().get());
modified = true;
}
if (!Objects.equals(getSaleTaxPrice().get(), salePrice.getPostTaxPrice())) {
salePrice.setPostTaxPrice(getSaleTaxPrice().get());
modified = true;
}
if (!Objects.equals(getWeightUnit().get(), v.getWeightUnit())) {
v.setWeightUnit(getWeightUnit().get());
modified = true;
}
if (!Objects.equals(getVolumeUnit().get(), v.getVolumeUnit())) {
v.setVolumeUnit(getVolumeUnit().get());
modified = true;
}
if (!Objects.equals(getSizeUnit().get(), v.getSizeUnit())) {
v.setSizeUnit(getSizeUnit().get());
modified = true;
}
if (!Objects.equals(getWeight().get(), v.getWeight())) {
v.setWeight(getWeight().get());
modified = true;
}
if (!Objects.equals(getPackagedWeight().get(), v.getPackagedWeight())) {
v.setPackagedWeight(getPackagedWeight().get());
modified = true;
}
VolumeSize volumeSize = v.getVolumeSize();
if (!Objects.equals(getSizeLength().get(), volumeSize.getLength())) {
volumeSize.setLength(getSizeLength().get());
modified = true;
}
if (!Objects.equals(getSizeWidth().get(), volumeSize.getWidth())) {
volumeSize.setWidth(getSizeWidth().get());
modified = true;
}
if (!Objects.equals(getSizeHeight().get(), volumeSize.getHeight())) {
volumeSize.setHeight(getSizeHeight().get());
modified = true;
}
if (!Objects.equals(getSizeLength().get(), volumeSize.getLength())) {
volumeSize.setLength(getSizeLength().get());
modified = true;
}
VolumeSize packagedVolumeSize = v.getPackagedVolumeSize();
if (!Objects.equals(getPackagedSizeHeight().get(), packagedVolumeSize.getHeight())) {
packagedVolumeSize.setHeight(getPackagedSizeHeight().get());
modified = true;
}
if (!Objects.equals(getPackagedSizeLength().get(), packagedVolumeSize.getLength())) {
packagedVolumeSize.setLength(getPackagedSizeLength().get());
modified = true;
}
if (!Objects.equals(getPackagedSizeWidth().get(), packagedVolumeSize.getWidth())) {
packagedVolumeSize.setWidth(getPackagedSizeWidth().get());
modified = true;
}
if (!Objects.equals(getPackagedVolume().get(), packagedVolumeSize.getVolume())) {
packagedVolumeSize.setVolume(getPackagedVolume().get());
modified = true;
}
// creator or updater
if (!Objects.equals(creator.get(), v.getCreator())) {
v.setCreator(creator.get());
modified = true;
}
if (!Objects.equals(createTime.get(), v.getCreateTime())) {
v.setCreateTime(createTime.get());
modified = true;
}
if (!Objects.equals(updater.get(), v.getUpdater())) {
v.setUpdater(updater.get());
modified = true;
}
if (!Objects.equals(updateDate.get(), v.getUpdateDate())) {
v.setUpdateDate(updateDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
void taxPrice2ExclusiveTaxPrice(SimpleDoubleProperty taxPrice, SimpleDoubleProperty exclusiveTaxPrice,
SimpleFloatProperty taxRate) {
double value = taxPrice.get();
exclusiveTaxPrice.setValue(value / ((100 + taxRate.get()) / 100));
}
void exclusiveTaxPrice2TaxPrice(SimpleDoubleProperty exclusiveTaxPrice, SimpleDoubleProperty taxPrice,
SimpleFloatProperty taxRate) {
double value = exclusiveTaxPrice.get();
taxPrice.setValue(value * ((100 + taxRate.get()) / 100.0));
}
public void updateSalePrice(double v) {
getSalePrice().set(v);
exclusiveTaxPrice2TaxPrice(getSalePrice(), getSaleTaxPrice(), getSaleTaxRate());
}
public void updateSaleTaxPrice(double v) {
getSaleTaxPrice().set(v);
taxPrice2ExclusiveTaxPrice(getSaleTaxPrice(), getSalePrice(), getSaleTaxRate());
}
public void updatePurchasePrice(double v) {
getPurchasePrice().set(v);
exclusiveTaxPrice2TaxPrice(getPurchasePrice(), getPurchaseTaxPrice(), getPurchaseTaxRate());
}
public void updatePurchaseTaxPrice(double v) {
getPurchaseTaxPrice().set(v);
taxPrice2ExclusiveTaxPrice(getPurchaseTaxPrice(), getPurchasePrice(), getPurchaseTaxRate());
}
}

View File

@@ -0,0 +1,65 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.Invoice;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class InvoiceViewModel extends IdentityViewModel<Invoice> {
SimpleIntegerProperty id = new SimpleIntegerProperty();
SimpleStringProperty code = new SimpleStringProperty();
SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDate> invoiceDate = new SimpleObjectProperty<>();
SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(Invoice v) {
super.updateFrom(v);
getId().set(v.getId());
getCode().set(v.getCode());
getCompany().set(v.getCompany());
getInvoiceDate().set(v.getInvoiceDate());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(Invoice v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(invoiceDate.get(), v.getInvoiceDate())) {
v.setInvoiceDate(invoiceDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static InvoiceViewModel from(Invoice invoice) {
InvoiceViewModel vm = new InvoiceViewModel();
vm.updateFrom(invoice);
return vm;
}
}

View File

@@ -0,0 +1,52 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Function;
import com.ecep.contract.model.Permission;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class PermissionViewModel extends IdentityViewModel<Permission> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleObjectProperty<Function> function = new SimpleObjectProperty<>();
private SimpleStringProperty key = new SimpleStringProperty();
public static PermissionViewModel from(Permission v) {
PermissionViewModel model = new PermissionViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(Permission v) {
super.updateFrom(v);
getName().set(v.getName());
getFunction().set(v.getFunction());
getKey().set(v.getKey());
}
@Override
public boolean copyTo(Permission v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(function.get(), v.getFunction())) {
v.setFunction(function.get());
modified = true;
}
if (!Objects.equals(key.get(), v.getKey())) {
v.setKey(key.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,53 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.ProductType;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProductTypeViewModel extends IdentityViewModel<ProductType> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
public static ProductTypeViewModel from(ProductType v) {
ProductTypeViewModel model = new ProductTypeViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(ProductType v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(ProductType v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,53 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.ProductUsage;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProductUsageViewModel extends IdentityViewModel<ProductUsage> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
public static ProductUsageViewModel from(ProductUsage v) {
ProductUsageViewModel model = new ProductUsageViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(ProductUsage v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(ProductUsage v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,9 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.Project;
import javafx.beans.property.SimpleObjectProperty;
public interface ProjectBasedViewModel {
SimpleObjectProperty<Project> getProject();
}

View File

@@ -0,0 +1,225 @@
package com.ecep.contract.vm;
import java.io.File;
import java.time.LocalDateTime;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;
import org.springframework.util.StringUtils;
import com.ecep.contract.model.CompanyCustomerEvaluationFormFile;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectBid;
import com.ecep.contract.model.ProjectCost;
import com.ecep.contract.util.NumberUtils;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 项目报价
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectBidViewModel extends IdentityViewModel<ProjectBid> implements ProjectBasedViewModel {
/**
* 关联的项目
*/
private SimpleObjectProperty<Project> project = new SimpleObjectProperty<>();
/**
* 客户咨询等级(级别)
*/
private SimpleIntegerProperty level = new SimpleIntegerProperty();
/**
* 报价金额
*/
private SimpleDoubleProperty amount = new SimpleDoubleProperty();
/**
* 客户咨询评估文件,根据资信资评估文件生成客户资信等级(级别)
*/
private SimpleObjectProperty<CompanyCustomerEvaluationFormFile> evaluationFile = new SimpleObjectProperty<>();
/**
* 项目成本表
*/
private SimpleObjectProperty<ProjectCost> cost = new SimpleObjectProperty<>();
/**
* 是否标准付款方式
*/
private SimpleBooleanProperty standardPayWay = new SimpleBooleanProperty();
/**
* 非标准付款方式文本
*/
private SimpleStringProperty noStandardPayWayText = new SimpleStringProperty();
/**
* 是否标准合同文本
*/
private SimpleBooleanProperty standardContractText = new SimpleBooleanProperty();
/**
* 非标准合同文本
*/
private SimpleStringProperty noStandardContractText = new SimpleStringProperty();
/**
* 申请日期
*/
private SimpleObjectProperty<LocalDateTime> applyTime = new SimpleObjectProperty<>();
/**
* 申请人
*/
private SimpleObjectProperty<Employee> applicant = new SimpleObjectProperty<>();
/**
* 审核时间
*/
private SimpleObjectProperty<LocalDateTime> authorizationTime = new SimpleObjectProperty<>();
/**
* 审核人
*/
private SimpleObjectProperty<Employee> authorizer = new SimpleObjectProperty<>();
/**
* 审核文件
*/
private SimpleObjectProperty<File> authorizationFile = new SimpleObjectProperty<>();
/**
* 中标通知书文件
*/
private SimpleObjectProperty<File> bidAcceptanceLetterFile = new SimpleObjectProperty<>();
/**
* 说明、注释
*/
private SimpleStringProperty description = new SimpleStringProperty();
public static ProjectBidViewModel from(ProjectBid v) {
ProjectBidViewModel model = new ProjectBidViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(ProjectBid v) {
super.updateFrom(v);
getProject().set(v.getProject());
getLevel().set(v.getLevel());
getAmount().set(v.getAmount());
getEvaluationFile().set(v.getEvaluationFile());
getCost().set(v.getCost());
getStandardPayWay().set(v.isStandardPayWay());
getNoStandardPayWayText().set(v.getNoStandardPayWayText());
getStandardContractText().set(v.isStandardContractText());
getNoStandardContractText().set(v.getNoStandardContractText());
getApplicant().set(v.getApplicant());
getApplyTime().set(v.getApplyTime());
getAuthorizer().set(v.getAuthorizer());
getAuthorizationTime().set(v.getAuthorizationTime());
if (StringUtils.hasText(v.getAuthorizationFile())) {
File file = new File(v.getAuthorizationFile());
getAuthorizationFile().set(file);
} else {
getAuthorizationFile().set(null);
}
if (StringUtils.hasText(v.getBidAcceptanceLetterFile())) {
File file = new File(v.getBidAcceptanceLetterFile());
getBidAcceptanceLetterFile().set(file);
} else {
getBidAcceptanceLetterFile().set(null);
}
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(ProjectBid v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getProject().get(), v.getProject())) {
v.setProject(getProject().get());
modified = true;
}
if (!Objects.equals(getLevel().get(), v.getLevel())) {
v.setLevel(getLevel().get());
modified = true;
}
if (!NumberUtils.equals(getAmount().get(), v.getAmount())) {
v.setAmount(getAmount().get());
modified = true;
}
if (!Objects.equals(getEvaluationFile().get(), v.getEvaluationFile())) {
v.setEvaluationFile(getEvaluationFile().get());
modified = true;
}
if (!Objects.equals(getCost().get(), v.getCost())) {
v.setCost(getCost().get());
modified = true;
}
if (!Objects.equals(getStandardPayWay().get(), v.isStandardPayWay())) {
v.setStandardPayWay(getStandardPayWay().get());
modified = true;
}
if (!Objects.equals(getNoStandardPayWayText().get(), v.getNoStandardPayWayText())) {
v.setNoStandardPayWayText(getNoStandardPayWayText().get());
modified = true;
}
if (!Objects.equals(getStandardContractText().get(), v.isStandardContractText())) {
v.setStandardContractText(getStandardContractText().get());
modified = true;
}
if (!Objects.equals(getNoStandardContractText().get(), v.getNoStandardContractText())) {
v.setNoStandardContractText(getNoStandardContractText().get());
modified = true;
}
if (!Objects.equals(getApplicant().get(), v.getApplicant())) {
v.setApplicant(getApplicant().get());
modified = true;
}
if (!Objects.equals(getApplyTime().get(), v.getApplyTime())) {
v.setApplyTime(getApplyTime().get());
modified = true;
}
if (!Objects.equals(getAuthorizer().get(), v.getAuthorizer())) {
v.setAuthorizer(getAuthorizer().get());
modified = true;
}
if (!Objects.equals(getAuthorizationTime().get(), v.getAuthorizationTime())) {
v.setAuthorizationTime(getAuthorizationTime().get());
modified = true;
}
if (updateFile(authorizationFile, v::getAuthorizationFile, v::setAuthorizationFile)) {
modified = true;
}
if (updateFile(bidAcceptanceLetterFile, v::getBidAcceptanceLetterFile, v::setBidAcceptanceLetterFile)) {
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
private boolean updateFile(SimpleObjectProperty<File> property, Supplier<String> getter, Consumer<String> setter) {
File file = null;
String path = getter.get();
if (StringUtils.hasText(path)) {
file = new File(path);
}
if (!Objects.equals(property.get(), file)) {
setter.accept(property.get() == null ? null : property.get().getAbsolutePath());
return true;
}
return false;
}
}

View File

@@ -0,0 +1,280 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Inventory;
import com.ecep.contract.model.ProjectCost;
import com.ecep.contract.model.ProjectCostItem;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 合同成本内容
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectCostItemViewModel extends IdentityViewModel<ProjectCostItem> {
/**
* 关联的合同成本对象
*/
SimpleObjectProperty<ProjectCost> cost = new SimpleObjectProperty<>();
SimpleStringProperty title = new SimpleStringProperty();
SimpleStringProperty specification = new SimpleStringProperty();
SimpleStringProperty unit = new SimpleStringProperty();
/**
* 存货
*/
SimpleObjectProperty<Inventory> inventory = new SimpleObjectProperty<>();
SimpleDoubleProperty inQuantity = new SimpleDoubleProperty();
SimpleDoubleProperty inTaxRate = new SimpleDoubleProperty();
SimpleDoubleProperty inTaxPrice = new SimpleDoubleProperty();
SimpleDoubleProperty inTaxAmount = new SimpleDoubleProperty();
SimpleDoubleProperty inExclusiveTaxPrice = new SimpleDoubleProperty();
SimpleDoubleProperty inExclusiveTaxAmount = new SimpleDoubleProperty();
SimpleDoubleProperty outQuantity = new SimpleDoubleProperty();
SimpleDoubleProperty outTaxRate = new SimpleDoubleProperty();
SimpleDoubleProperty outTaxPrice = new SimpleDoubleProperty();
SimpleDoubleProperty outTaxAmount = new SimpleDoubleProperty();
SimpleDoubleProperty outExclusiveTaxPrice = new SimpleDoubleProperty();
SimpleDoubleProperty outExclusiveTaxAmount = new SimpleDoubleProperty();
/**
* 毛利,单位为元,计算结果
*/
SimpleDoubleProperty grossProfit = new SimpleDoubleProperty();
/**
* 毛利率,%,计算结果
*/
SimpleDoubleProperty grossProfitMargin = new SimpleDoubleProperty();
SimpleObjectProperty<LocalDateTime> createDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> updateDate = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> creator = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> updater = new SimpleObjectProperty<>();
SimpleBooleanProperty updatePriceWay = new SimpleBooleanProperty(false);
SimpleStringProperty remark = new SimpleStringProperty();
@Override
protected void updateFrom(ProjectCostItem v) {
super.updateFrom(v);
getCost().set(v.getCost());
getTitle().set(v.getTitle());
getSpecification().set(v.getSpecification());
getUnit().set(v.getUnit());
getInventory().set(v.getInventory());
getInQuantity().set(v.getInQuantity());
getInTaxRate().set(v.getInTaxRate());
getInExclusiveTaxPrice().set(v.getInExclusiveTaxPrice());
getInTaxPrice().set(v.getInExclusiveTaxPrice() * (100 + v.getInTaxRate()) / 100.0);
updateIn();
getOutQuantity().set(v.getOutQuantity());
getOutTaxRate().set(v.getOutTaxRate());
getOutExclusiveTaxPrice().set(v.getOutExclusiveTaxPrice());
getOutTaxPrice().set(v.getOutExclusiveTaxPrice() * (100 + v.getOutTaxRate()) / 100.0);
updateOut();
getCreateDate().set(v.getCreateDate());
getUpdateDate().set(v.getUpdateDate());
getCreator().set(v.getCreator());
getUpdater().set(v.getUpdater());
getRemark().set(v.getRemark());
}
public void updateIn() {
double quantity = getInQuantity().get();
getInTaxAmount().set(getInTaxPrice().get() * quantity);
getInExclusiveTaxAmount().set(getInExclusiveTaxPrice().get() * quantity);
updateGrossProfitMargin();
}
public void updateOut() {
double quantity = getOutQuantity().get();
getOutTaxAmount().set(getOutTaxPrice().get() * quantity);
getOutExclusiveTaxAmount().set(getOutExclusiveTaxPrice().get() * quantity);
updateGrossProfitMargin();
}
public void updateGrossProfitMargin() {
double amount = getInExclusiveTaxAmount().get();
getGrossProfit().set(amount - getOutExclusiveTaxAmount().get());
if (amount == 0) {
getGrossProfitMargin().set(0);
return;
}
getGrossProfitMargin().set(getGrossProfit().get() / amount);
}
@Override
public boolean copyTo(ProjectCostItem v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(cost.get(), v.getCost())) {
v.setCost(cost.get());
modified = true;
}
if (!Objects.equals(title.get(), v.getTitle())) {
v.setTitle(title.get());
modified = true;
}
if (!Objects.equals(specification.get(), v.getSpecification())) {
v.setSpecification(specification.get());
modified = true;
}
if (!Objects.equals(unit.get(), v.getUnit())) {
v.setUnit(unit.get());
modified = true;
}
if (!Objects.equals(inventory.get(), v.getInventory())) {
v.setInventory(inventory.get());
modified = true;
}
if (!doubleEquals(inQuantity.get(), v.getInQuantity())) {
v.setInQuantity(inQuantity.get());
modified = true;
}
if (!doubleEquals(inTaxRate.get(), v.getInTaxRate())) {
v.setInTaxRate(inTaxRate.get());
modified = true;
}
if (!doubleEquals(inExclusiveTaxPrice.get(), v.getInExclusiveTaxPrice())) {
v.setInExclusiveTaxPrice(inExclusiveTaxPrice.get());
modified = true;
}
if (!doubleEquals(outQuantity.get(), v.getOutQuantity())) {
v.setOutQuantity(outQuantity.get());
modified = true;
}
if (!doubleEquals(outTaxRate.get(), v.getOutTaxRate())) {
v.setOutTaxRate(outTaxRate.get());
modified = true;
}
if (!doubleEquals(outExclusiveTaxPrice.get(), v.getOutExclusiveTaxPrice())) {
v.setOutExclusiveTaxPrice(outExclusiveTaxPrice.get());
modified = true;
}
if (!Objects.equals(createDate.get(), v.getCreateDate())) {
v.setCreateDate(createDate.get());
modified = true;
}
if (!Objects.equals(updateDate.get(), v.getUpdateDate())) {
v.setUpdateDate(updateDate.get());
modified = true;
}
if (!Objects.equals(creator.get(), v.getCreator())) {
v.setCreator(creator.get());
modified = true;
}
if (!Objects.equals(updater.get(), v.getUpdater())) {
v.setUpdater(updater.get());
modified = true;
}
if (!Objects.equals(remark.get(), v.getRemark())) {
v.setRemark(remark.get());
modified = true;
}
return modified;
}
/**
* 判断两个 double 值是否相等
*
* @param a a
* @param b b
* @return 在误差范围内是否相同
*/
private boolean doubleEquals(double a, double b) {
return Math.abs(a - b) < 0.0001;
}
public static ProjectCostItemViewModel from(ProjectCostItem v) {
ProjectCostItemViewModel viewModel = new ProjectCostItemViewModel();
viewModel.update(v);
return viewModel;
}
public void updateInQuantity(double value) {
getInQuantity().setValue(value);
updateIn();
}
public void updateInTaxRate(double value) {
getInTaxRate().setValue(value);
if (getUpdatePriceWay().get()) {
exclusiveTaxPrice2TaxPrice(getInExclusiveTaxPrice(), getInTaxPrice(), getInTaxRate());
} else {
taxPrice2ExclusiveTaxPrice(getInTaxPrice(), getInExclusiveTaxPrice(), getInTaxRate());
}
updateIn();
}
public void updateInTaxPrice(double value) {
getInTaxPrice().setValue(value);
taxPrice2ExclusiveTaxPrice(getInTaxPrice(), getInExclusiveTaxPrice(), getInTaxRate());
updateIn();
}
void taxPrice2ExclusiveTaxPrice(SimpleDoubleProperty taxPrice, SimpleDoubleProperty exclusiveTaxPrice,
SimpleDoubleProperty taxRate) {
double value = taxPrice.get();
exclusiveTaxPrice.setValue(value / ((100 + taxRate.get()) / 100));
}
void exclusiveTaxPrice2TaxPrice(SimpleDoubleProperty exclusiveTaxPrice, SimpleDoubleProperty taxPrice,
SimpleDoubleProperty taxRate) {
double value = exclusiveTaxPrice.get();
taxPrice.setValue(value * ((100 + taxRate.get()) / 100.0));
}
public void updateInExclusiveTaxPrice(double value) {
getInExclusiveTaxPrice().setValue(value);
exclusiveTaxPrice2TaxPrice(getInExclusiveTaxPrice(), getInTaxPrice(), getInTaxRate());
updateIn();
}
public void updateOutQuantity(double value) {
getOutQuantity().setValue(value);
updateOut();
}
public void updateOutTaxRate(double value) {
getOutTaxRate().setValue(value);
if (getUpdatePriceWay().get()) {
exclusiveTaxPrice2TaxPrice(getOutExclusiveTaxPrice(), getOutTaxPrice(), getOutTaxRate());
} else {
taxPrice2ExclusiveTaxPrice(getOutTaxPrice(), getOutExclusiveTaxPrice(), getOutTaxRate());
}
updateOut();
}
public void updateOutTaxPrice(double value) {
getOutTaxPrice().setValue(value);
taxPrice2ExclusiveTaxPrice(getOutTaxPrice(), getOutExclusiveTaxPrice(), getOutTaxRate());
updateOut();
}
public void updateOutExclusiveTaxPrice(double value) {
getOutExclusiveTaxPrice().setValue(value);
exclusiveTaxPrice2TaxPrice(getOutExclusiveTaxPrice(), getOutTaxPrice(), getOutTaxRate());
updateOut();
}
}

View File

@@ -0,0 +1,350 @@
package com.ecep.contract.vm;
import java.io.File;
import java.time.LocalDateTime;
import java.util.Objects;
import org.springframework.util.StringUtils;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectCost;
import com.ecep.contract.util.NumberUtils;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleFloatProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectCostViewModel extends IdentityViewModel<ProjectCost> implements ProjectBasedViewModel {
/**
* 合同对象
*/
SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
/**
* 项目对象
*/
SimpleObjectProperty<Project> project = new SimpleObjectProperty<>();
/**
* 申请日期
*/
private SimpleObjectProperty<LocalDateTime> applyTime = new SimpleObjectProperty<>();
/**
* 申请人
*/
private SimpleObjectProperty<Employee> applicant = new SimpleObjectProperty<>();
/**
* 审核时间
*/
private SimpleObjectProperty<LocalDateTime> authorizationTime = new SimpleObjectProperty<>();
/**
* 审核文件
*/
private SimpleObjectProperty<File> authorizationFile = new SimpleObjectProperty<>();
/**
* 审核人
*/
private SimpleObjectProperty<Employee> authorizer = new SimpleObjectProperty<>();
/**
* 是否是标准合同文本
*/
SimpleBooleanProperty standardPayWay = new SimpleBooleanProperty();
/**
* 是否是标准付款方式
*/
SimpleBooleanProperty standardContractText = new SimpleBooleanProperty();
/**
* 非标准付款方式文本
*/
SimpleStringProperty noStandardPayWayText = new SimpleStringProperty();
/**
* 非标准合同文本
*/
SimpleStringProperty noStandardContractText = new SimpleStringProperty();
/**
* 印花税
*/
SimpleFloatProperty stampTax = new SimpleFloatProperty();
/**
* 印花税金额
*/
SimpleFloatProperty stampTaxFee = new SimpleFloatProperty();
/**
* 现场位置费
*/
SimpleFloatProperty onSiteServiceFee = new SimpleFloatProperty();
/**
* 装配服务费
*/
SimpleFloatProperty assemblyServiceFee = new SimpleFloatProperty();
/**
* 技术服务费
*/
SimpleFloatProperty technicalServiceFee = new SimpleFloatProperty();
/**
* 投标服务费
*/
SimpleFloatProperty bidServiceFee = new SimpleFloatProperty();
/**
* 运费
*/
SimpleFloatProperty freightCost = new SimpleFloatProperty();
/**
* 保函费
*/
SimpleFloatProperty guaranteeLetterFee = new SimpleFloatProperty();
/**
* 营业税及附加费
*/
SimpleFloatProperty taxAndSurcharges = new SimpleFloatProperty();
/**
* 营业税及附加费金额
*/
SimpleFloatProperty taxAndSurchargesFee = new SimpleFloatProperty();
/**
* 含税进项总金额
*/
SimpleDoubleProperty inTaxAmount = new SimpleDoubleProperty();
/**
* 不含税进项总金额
*/
SimpleDoubleProperty inExclusiveTaxAmount = new SimpleDoubleProperty();
/**
* 含税出项总金额
*/
SimpleDoubleProperty outTaxAmount = new SimpleDoubleProperty();
/**
* 不含税出项总金额
*/
SimpleDoubleProperty outExclusiveTaxAmount = new SimpleDoubleProperty();
/**
* 毛利率
*/
SimpleDoubleProperty grossProfitMargin = new SimpleDoubleProperty();
/**
* 版本号
*/
SimpleIntegerProperty version = new SimpleIntegerProperty();
/**
* 是否导入锁定,导入锁定后不允许导入
*/
SimpleBooleanProperty importLock = new SimpleBooleanProperty(false);
/**
* 说明、注释
*/
private SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(ProjectCost v) {
super.updateFrom(v);
getContract().set(v.getContract());
getProject().set(v.getProject());
getApplicant().set(v.getApplicant());
getApplyTime().set(v.getApplyTime());
getAuthorizer().set(v.getAuthorizer());
getAuthorizationTime().set(v.getAuthorizationTime());
if (StringUtils.hasText(v.getAuthorizationFile())) {
File file = new File(v.getAuthorizationFile());
getAuthorizationFile().set(file);
} else {
getAuthorizationFile().set(null);
}
getStandardPayWay().set(v.isStandardPayWay());
getStandardContractText().set(v.isStandardContractText());
getNoStandardPayWayText().set(v.getNoStandardPayWayText());
getNoStandardContractText().set(v.getNoStandardContractText());
getStampTax().set(v.getStampTax());
getStampTaxFee().set(v.getStampTaxFee());
getOnSiteServiceFee().set(v.getOnSiteServiceFee());
getAssemblyServiceFee().set(v.getAssemblyServiceFee());
getTechnicalServiceFee().set(v.getTechnicalServiceFee());
getBidServiceFee().set(v.getBidServiceFee());
getFreightCost().set(v.getFreightCost());
getGuaranteeLetterFee().set(v.getGuaranteeLetterFee());
getTaxAndSurcharges().set(v.getTaxAndSurcharges());
getTaxAndSurchargesFee().set(v.getTaxAndSurchargesFee());
getInTaxAmount().set(v.getInTaxAmount());
getInExclusiveTaxAmount().set(v.getInExclusiveTaxAmount());
getOutTaxAmount().set(v.getOutTaxAmount());
getOutExclusiveTaxAmount().set(v.getOutExclusiveTaxAmount());
getGrossProfitMargin().set(v.getGrossProfitMargin());
getVersion().set(v.getVersion());
getDescription().set(v.getDescription());
getImportLock().set(v.isImportLock());
}
@Override
public boolean copyTo(ProjectCost v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(project.get(), v.getProject())) {
v.setProject(project.get());
modified = true;
}
if (!Objects.equals(applicant.get(), v.getApplicant())) {
v.setApplicant(applicant.get());
modified = true;
}
if (!Objects.equals(applyTime.get(), v.getApplyTime())) {
v.setApplyTime(applyTime.get());
modified = true;
}
if (!Objects.equals(authorizer.get(), v.getAuthorizer())) {
v.setAuthorizer(authorizer.get());
modified = true;
}
if (!Objects.equals(authorizationTime.get(), v.getAuthorizationTime())) {
v.setAuthorizationTime(authorizationTime.get());
modified = true;
}
{
File file = null;
if (StringUtils.hasText(v.getAuthorizationFile())) {
file = new File(v.getAuthorizationFile());
}
if (!Objects.equals(authorizationFile.get(), file)) {
v.setAuthorizationFile(authorizationFile.get() == null ? null : authorizationFile.get().getAbsolutePath());
modified = true;
}
}
if (!Objects.equals(standardPayWay.get(), v.isStandardPayWay())) {
v.setStandardPayWay(standardPayWay.get());
modified = true;
}
if (!Objects.equals(standardContractText.get(), v.isStandardContractText())) {
v.setStandardContractText(standardContractText.get());
modified = true;
}
if (!Objects.equals(noStandardPayWayText.get(), v.getNoStandardPayWayText())) {
v.setNoStandardPayWayText(noStandardPayWayText.get());
modified = true;
}
if (!Objects.equals(noStandardContractText.get(), v.getNoStandardContractText())) {
v.setNoStandardContractText(noStandardContractText.get());
modified = true;
}
if (!NumberUtils.equals(stampTax.get(), v.getStampTax())) {
v.setStampTax(stampTax.get());
modified = true;
}
if (!NumberUtils.equals(stampTaxFee.get(), v.getStampTaxFee())) {
v.setStampTaxFee(stampTaxFee.get());
modified = true;
}
if (!NumberUtils.equals(onSiteServiceFee.get(), v.getOnSiteServiceFee())) {
v.setOnSiteServiceFee(onSiteServiceFee.get());
modified = true;
}
if (!NumberUtils.equals(assemblyServiceFee.get(), v.getAssemblyServiceFee())) {
v.setAssemblyServiceFee(assemblyServiceFee.get());
modified = true;
}
if (!NumberUtils.equals(technicalServiceFee.get(), v.getTechnicalServiceFee())) {
v.setTechnicalServiceFee(technicalServiceFee.get());
modified = true;
}
if (!NumberUtils.equals(bidServiceFee.get(), v.getBidServiceFee())) {
v.setBidServiceFee(bidServiceFee.get());
modified = true;
}
if (!NumberUtils.equals(freightCost.get(), v.getFreightCost())) {
v.setFreightCost(freightCost.get());
modified = true;
}
if (!NumberUtils.equals(guaranteeLetterFee.get(), v.getGuaranteeLetterFee())) {
v.setGuaranteeLetterFee(guaranteeLetterFee.get());
modified = true;
}
if (!NumberUtils.equals(taxAndSurcharges.get(), v.getTaxAndSurcharges())) {
v.setTaxAndSurcharges(taxAndSurcharges.get());
modified = true;
}
if (!NumberUtils.equals(taxAndSurchargesFee.get(), v.getTaxAndSurchargesFee())) {
v.setTaxAndSurchargesFee(taxAndSurchargesFee.get());
modified = true;
}
if (!NumberUtils.equals(inTaxAmount.get(), v.getInTaxAmount())) {
v.setInTaxAmount(inTaxAmount.get());
modified = true;
}
if (!NumberUtils.equals(inExclusiveTaxAmount.get(), v.getInExclusiveTaxAmount())) {
v.setInExclusiveTaxAmount(inExclusiveTaxAmount.get());
modified = true;
}
if (!NumberUtils.equals(outTaxAmount.get(), v.getOutTaxAmount())) {
v.setOutTaxAmount(outTaxAmount.get());
modified = true;
}
if (!NumberUtils.equals(outExclusiveTaxAmount.get(), v.getOutExclusiveTaxAmount())) {
v.setOutExclusiveTaxAmount(outExclusiveTaxAmount.get());
modified = true;
}
if (!NumberUtils.equals(grossProfitMargin.get(), v.getGrossProfitMargin())) {
v.setGrossProfitMargin(grossProfitMargin.get());
modified = true;
}
if (!NumberUtils.equals(version.get(), v.getVersion())) {
v.setVersion(version.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
if (!Objects.equals(importLock.get(), v.isImportLock())) {
v.setImportLock(importLock.get());
modified = true;
}
return modified;
}
public static ProjectCostViewModel from(ProjectCost projectCost) {
ProjectCostViewModel viewModel = new ProjectCostViewModel();
viewModel.update(projectCost);
return viewModel;
}
public void updateGrossProfitMargin() {
double amount = getInExclusiveTaxAmount().get();
if (amount == 0) {
getGrossProfitMargin().set(0);
return;
}
double grossProfit = amount - getOutExclusiveTaxAmount().get() - getStampTaxFee().get() - getTaxAndSurchargesFee().get();
getGrossProfitMargin().set(grossProfit * 100 / amount);
}
/**
* 根据印花税税率更新印花税税费
*/
public void updateStampTaxFee() {
getStampTaxFee().set((float) (getInTaxAmount().get() * getStampTax().get() / 100));
updateGrossProfitMargin();
}
public void updateTaxAndSurchargesFee() {
double value = (getInTaxAmount().get() - getInExclusiveTaxAmount().get()) - (getOutTaxAmount().get() - getOutExclusiveTaxAmount().get());
getTaxAndSurchargesFee().set((float) (value * getTaxAndSurcharges().get() / 100));
updateGrossProfitMargin();
}
}

View File

@@ -0,0 +1,23 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectFile;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectFileViewModel extends IdentityViewModel<ProjectFile> implements ProjectBasedViewModel {
/**
* 关联的项目
*/
private SimpleObjectProperty<Project> project = new SimpleObjectProperty<>();
public static ProjectFileViewModel from(ProjectFile file) {
ProjectFileViewModel viewModel = new ProjectFileViewModel();
viewModel.update(file);
return viewModel;
}
}

View File

@@ -0,0 +1,153 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.ContractPayWay;
import com.ecep.contract.model.ContractPayPlan;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectFundPlan;
import com.ecep.contract.util.NumberUtils;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleFloatProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 项目资金计划视图模型
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectFundPlanViewModel extends IdentityViewModel<ProjectFundPlan> implements ProjectBasedViewModel {
/**
* 关联的项目
*/
private SimpleObjectProperty<Project> project = new SimpleObjectProperty<>();
/**
* 付款日期
*/
private SimpleObjectProperty<LocalDate> payDate = new SimpleObjectProperty<>();
/**
* 付款比例
*/
private SimpleFloatProperty payRatio = new SimpleFloatProperty();
/**
* 付款金额
*/
private SimpleDoubleProperty payCurrency = new SimpleDoubleProperty();
/**
* 余额
*/
private SimpleDoubleProperty balance = new SimpleDoubleProperty();
/**
* 付款条件
*/
private SimpleStringProperty payTerm = new SimpleStringProperty();
/**
* 合同付款计划
*/
private SimpleObjectProperty<ContractPayPlan> contractPayPlan = new SimpleObjectProperty<>();
/**
* 更新日期
*/
private SimpleObjectProperty<LocalDateTime> updateDate = new SimpleObjectProperty<>();
/**
* 付款方式
*/
private SimpleObjectProperty<ContractPayWay> payWay = new SimpleObjectProperty<>();
/**
* 从实体对象创建视图模型
*/
public static ProjectFundPlanViewModel from(ProjectFundPlan entity) {
ProjectFundPlanViewModel model = new ProjectFundPlanViewModel();
model.update(entity);
return model;
}
@Override
protected void updateFrom(ProjectFundPlan entity) {
super.updateFrom(entity);
// 设置项目关联
getProject().set(entity.getProject());
// 设置付款相关信息
getPayDate().set(entity.getPayDate());
getPayRatio().set(entity.getPayRatio());
getPayCurrency().set(entity.getPayCurrency());
getPayTerm().set(entity.getPayTerm());
// 设置合同付款计划关联
getContractPayPlan().set(entity.getContractPayPlan());
// 设置更新日期
getUpdateDate().set(entity.getUpdateDate());
// 设置付款方式
getPayWay().set(entity.getPayWay());
}
@Override
public boolean copyTo(ProjectFundPlan entity) {
boolean modified = super.copyTo(entity);
// 复制项目关联
if (!Objects.equals(getProject().get(), entity.getProject())) {
entity.setProject(getProject().get());
modified = true;
}
// 复制付款相关信息
if (!Objects.equals(getPayDate().get(), entity.getPayDate())) {
entity.setPayDate(getPayDate().get());
modified = true;
}
if (!NumberUtils.equals(getPayRatio().get(), entity.getPayRatio())) {
entity.setPayRatio(getPayRatio().get());
modified = true;
}
if (!NumberUtils.equals(getPayCurrency().get(), entity.getPayCurrency())) {
entity.setPayCurrency(getPayCurrency().get());
modified = true;
}
if (!Objects.equals(getPayTerm().get(), entity.getPayTerm())) {
entity.setPayTerm(getPayTerm().get());
modified = true;
}
// 复制合同付款计划关联
if (!Objects.equals(getContractPayPlan().get(), entity.getContractPayPlan())) {
entity.setContractPayPlan(getContractPayPlan().get());
modified = true;
}
// 复制更新日期
if (!Objects.equals(getUpdateDate().get(), entity.getUpdateDate())) {
entity.setUpdateDate(getUpdateDate().get());
modified = true;
}
// 复制付款方式
if (!Objects.equals(getPayWay().get(), entity.getPayWay())) {
entity.setPayWay(getPayWay().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,53 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.ProjectIndustry;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectIndustryViewModel extends IdentityViewModel<ProjectIndustry> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
public static ProjectIndustryViewModel from(ProjectIndustry v) {
ProjectIndustryViewModel model = new ProjectIndustryViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(ProjectIndustry v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(ProjectIndustry v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,172 @@
package com.ecep.contract.vm;
import java.io.File;
import java.time.LocalDateTime;
import java.util.Objects;
import org.springframework.util.StringUtils;
import com.ecep.contract.model.CompanyCustomerEvaluationFormFile;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectQuotation;
import com.ecep.contract.util.NumberUtils;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 项目报价
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectQuotationViewModel extends IdentityViewModel<ProjectQuotation> {
/**
* 关联的项目
*/
private SimpleObjectProperty<Project> project = new SimpleObjectProperty<>();
/**
* 客户咨询等级(级别)
*/
private SimpleIntegerProperty level = new SimpleIntegerProperty();
/**
* 是否标准付款方式
*/
private SimpleBooleanProperty standardPayWay = new SimpleBooleanProperty();
/**
* 非标准付款方式文本
*/
private SimpleStringProperty noStandardPayWayText = new SimpleStringProperty();
/**
* 报价金额
*/
private SimpleDoubleProperty amount = new SimpleDoubleProperty();
/**
* 客户咨询评估文件,根据资信资评估文件生成客户资信等级(级别)
*/
private SimpleObjectProperty<CompanyCustomerEvaluationFormFile> evaluationFile = new SimpleObjectProperty<>();
/**
* 申请日期
*/
private SimpleObjectProperty<LocalDateTime> applyTime = new SimpleObjectProperty<>();
/**
* 申请人
*/
private SimpleObjectProperty<Employee> applicant = new SimpleObjectProperty<>();
/**
* 审核时间
*/
private SimpleObjectProperty<LocalDateTime> authorizationTime = new SimpleObjectProperty<>();
/**
* 审核人
*/
private SimpleObjectProperty<Employee> authorizer = new SimpleObjectProperty<>();
/**
* 审核文件
*/
private SimpleObjectProperty<File> authorizationFile = new SimpleObjectProperty<>();
/**
* 说明、注释
*/
private SimpleStringProperty description = new SimpleStringProperty();
public static ProjectQuotationViewModel from(ProjectQuotation v) {
ProjectQuotationViewModel model = new ProjectQuotationViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(ProjectQuotation v) {
super.updateFrom(v);
getLevel().set(v.getLevel());
getStandardPayWay().set(v.isStandardPayWay());
getNoStandardPayWayText().set(v.getNoStandardPayWayText());
getAmount().set(v.getAmount());
getEvaluationFile().set(v.getEvaluationFile());
getProject().set(v.getProject());
getApplicant().set(v.getApplicant());
getApplyTime().set(v.getApplyTime());
getAuthorizer().set(v.getAuthorizer());
getAuthorizationTime().set(v.getAuthorizationTime());
if (StringUtils.hasText(v.getAuthorizationFile())) {
File file = new File(v.getAuthorizationFile());
getAuthorizationFile().set(file);
} else {
getAuthorizationFile().set(null);
}
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(ProjectQuotation v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getLevel().get(), v.getLevel())) {
v.setLevel(getLevel().get());
modified = true;
}
if (!Objects.equals(getStandardPayWay().get(), v.isStandardPayWay())) {
v.setStandardPayWay(getStandardPayWay().get());
modified = true;
}
if (!Objects.equals(getNoStandardPayWayText().get(), v.getNoStandardPayWayText())) {
v.setNoStandardPayWayText(getNoStandardPayWayText().get());
modified = true;
}
if (!NumberUtils.equals(getAmount().get(), v.getAmount())) {
v.setAmount(getAmount().get());
modified = true;
}
if (!Objects.equals(getEvaluationFile().get(), v.getEvaluationFile())) {
v.setEvaluationFile(getEvaluationFile().get());
modified = true;
}
if (!Objects.equals(getProject().get(), v.getProject())) {
v.setProject(getProject().get());
modified = true;
}
if (!Objects.equals(getApplicant().get(), v.getApplicant())) {
v.setApplicant(getApplicant().get());
modified = true;
}
if (!Objects.equals(getApplyTime().get(), v.getApplyTime())) {
v.setApplyTime(getApplyTime().get());
modified = true;
}
if (!Objects.equals(getAuthorizer().get(), v.getAuthorizer())) {
v.setAuthorizer(getAuthorizer().get());
modified = true;
}
if (!Objects.equals(getAuthorizationTime().get(), v.getAuthorizationTime())) {
v.setAuthorizationTime(getAuthorizationTime().get());
modified = true;
}
{
File file = null;
if (StringUtils.hasText(v.getAuthorizationFile())) {
file = new File(v.getAuthorizationFile());
}
if (!Objects.equals(authorizationFile.get(), file)) {
v.setAuthorizationFile(authorizationFile.get() == null ? null : authorizationFile.get().getAbsolutePath());
modified = true;
}
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,48 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.ContractFileType;
import com.ecep.contract.model.ProjectSaleType;
import com.ecep.contract.model.ProjectSaleTypeRequireFileType;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectSaleTypeRequireFileTypeViewModel extends IdentityViewModel<ProjectSaleTypeRequireFileType> {
private SimpleObjectProperty<ProjectSaleType> saleType = new SimpleObjectProperty<>();
private SimpleObjectProperty<ContractFileType> fileType = new SimpleObjectProperty<>();
public static ProjectSaleTypeRequireFileTypeViewModel from(ProjectSaleTypeRequireFileType entity) {
ProjectSaleTypeRequireFileTypeViewModel vm = new ProjectSaleTypeRequireFileTypeViewModel();
vm.updateFrom(entity);
return vm;
}
@Override
protected void updateFrom(ProjectSaleTypeRequireFileType v) {
super.updateFrom(v);
getSaleType().set(v.getSaleType());
getFileType().set(v.getFileType());
}
@Override
public boolean copyTo(ProjectSaleTypeRequireFileType v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getSaleType().get(), v.getSaleType())) {
v.setSaleType(getSaleType().get());
modified = true;
}
if (!Objects.equals(getFileType().get(), v.getFileType())) {
v.setFileType(getFileType().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,91 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.ProjectSaleType;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectSaleTypeViewModel extends IdentityViewModel<ProjectSaleType> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty path = new SimpleStringProperty();
private SimpleBooleanProperty storeByYear = new SimpleBooleanProperty();
private SimpleStringProperty description = new SimpleStringProperty();
/**
* 符合重大项目的合同金额条件
*/
private SimpleDoubleProperty criticalProjectLimit = new SimpleDoubleProperty();
/**
* 是否启用重大项目决策(三重一大)
*/
private SimpleBooleanProperty criticalProjectDecision = new SimpleBooleanProperty();
private SimpleBooleanProperty active = new SimpleBooleanProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
public static ProjectSaleTypeViewModel from(ProjectSaleType v) {
ProjectSaleTypeViewModel model = new ProjectSaleTypeViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(ProjectSaleType v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getPath().set(v.getPath());
getStoreByYear().set(v.isStoreByYear());
getDescription().set(v.getDescription());
getCriticalProjectLimit().set(v.getCriticalProjectLimit());
getCriticalProjectDecision().set(v.isCriticalProjectDecision());
getActive().set(v.isActive());
}
@Override
public boolean copyTo(ProjectSaleType v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getPath().get(), v.getPath())) {
v.setPath(getPath().get());
modified = true;
}
if (!Objects.equals(getStoreByYear().get(), v.isStoreByYear())) {
v.setStoreByYear(getStoreByYear().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
if (!Objects.equals(getCriticalProjectLimit().get(), v.getCriticalProjectLimit())) {
v.setCriticalProjectLimit(getCriticalProjectLimit().get());
modified = true;
}
if (!Objects.equals(getCriticalProjectDecision().get(), v.isCriticalProjectDecision())) {
v.setCriticalProjectDecision(getCriticalProjectDecision().get());
modified = true;
}
if (!Objects.equals(getActive().get(), v.isActive())) {
v.setActive(getActive().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,53 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.ProjectType;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectTypeViewModel extends IdentityViewModel<ProjectType> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
public static ProjectTypeViewModel from(ProjectType v) {
ProjectTypeViewModel model = new ProjectTypeViewModel();
model.update(v);
return model;
}
@Override
protected void updateFrom(ProjectType v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(ProjectType v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,236 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyBankAccount;
import com.ecep.contract.model.CompanyContact;
import com.ecep.contract.model.CompanyInvoiceInfo;
import com.ecep.contract.model.DeliverySignMethod;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.ProductType;
import com.ecep.contract.model.ProductUsage;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectIndustry;
import com.ecep.contract.model.ProjectSaleType;
import com.ecep.contract.model.ProjectType;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ProjectViewModel extends IdentityViewModel<Project> {
private SimpleObjectProperty<Company> customer = new SimpleObjectProperty<>();
/**
* 银行账户(公司可能有多个账户,此项目关联其中一个账户)
*/
private SimpleObjectProperty<CompanyBankAccount> bankAccount = new SimpleObjectProperty<>();
/**
* 开票信息(公司可能有多个开票信息,此项目关联其中一个开票信息)
*/
private SimpleObjectProperty<CompanyInvoiceInfo> invoiceInfo = new SimpleObjectProperty<>();
/**
* 主联系人(公司可能有多个联系人,此项目关联其中一个为主联系人)
*/
private SimpleObjectProperty<CompanyContact> mainContact = new SimpleObjectProperty<>();
/**
* 备用联系人(公司可能有多个联系人,此项目关联其中一个为备用联系人)
*/
private SimpleObjectProperty<CompanyContact> subContact = new SimpleObjectProperty<>();
/**
* 项目名称
*/
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleIntegerProperty codeYear = new SimpleIntegerProperty();
private SimpleIntegerProperty codeSequenceNumber = new SimpleIntegerProperty();
private SimpleObjectProperty<ProjectIndustry> industry = new SimpleObjectProperty<>();
private SimpleObjectProperty<ProjectSaleType> saleType = new SimpleObjectProperty<>();
private SimpleObjectProperty<ProjectType> projectType = new SimpleObjectProperty<>();
private SimpleObjectProperty<ProductType> productType = new SimpleObjectProperty<>();
private SimpleObjectProperty<DeliverySignMethod> deliverySignMethod = new SimpleObjectProperty<>();
private SimpleObjectProperty<ProductUsage> productUsage = new SimpleObjectProperty<>();
/**
* 项目地址
*/
private SimpleStringProperty address = new SimpleStringProperty();
private SimpleBooleanProperty useBid = new SimpleBooleanProperty();
private SimpleBooleanProperty useOffer = new SimpleBooleanProperty();
private SimpleIntegerProperty amount = new SimpleIntegerProperty();
private SimpleBooleanProperty standardPayWay = new SimpleBooleanProperty();
private SimpleStringProperty path = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleObjectProperty<Employee> applicant = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> authorizer = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> created = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> plannedStartTime = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> plannedCompletionTime = new SimpleObjectProperty<>();
private SimpleIntegerProperty version = new SimpleIntegerProperty();
public static ProjectViewModel from(Project project) {
ProjectViewModel model = new ProjectViewModel();
model.update(project);
return model;
}
@Override
protected void updateFrom(Project v) {
super.updateFrom(v);
customer.set(v.getCustomer());
bankAccount.set(v.getBankAccount());
invoiceInfo.set(v.getInvoiceInfo());
mainContact.set(v.getMainContact());
subContact.set(v.getSubContact());
name.set(v.getName());
code.set(v.getCode());
codeYear.set(v.getCodeYear());
codeSequenceNumber.set(v.getCodeSequenceNumber());
address.set(v.getAddress());
useBid.set(v.isUseBid());
useOffer.set(v.isUseOffer());
amount.set(Objects.requireNonNullElse(v.getAmount(), 0));
standardPayWay.set(v.isStandardPayWay());
industry.set(v.getIndustry());
saleType.set(v.getSaleType());
projectType.set(v.getProjectType());
productType.set(v.getProductType());
getDeliverySignMethod().set(v.getDeliverySignMethod());
getProductUsage().set(v.getProductUsage());
path.set(v.getPath());
getDescription().set(v.getDescription());
getApplicant().set(v.getApplicant());
getAuthorizer().set(v.getAuthorizer());
getCreated().set(v.getCreated());
getPlannedStartTime().set(v.getPlannedStartTime());
getPlannedCompletionTime().set(v.getPlannedCompletionTime());
getVersion().set(v.getVersion());
}
public boolean copyTo(Project v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(customer.get(), v.getCustomer())) {
v.setCustomer(customer.get());
modified = true;
}
if (!Objects.equals(bankAccount.get(), v.getBankAccount())) {
v.setBankAccount(bankAccount.get());
modified = true;
}
if (!Objects.equals(invoiceInfo.get(), v.getInvoiceInfo())) {
v.setInvoiceInfo(invoiceInfo.get());
modified = true;
}
if (!Objects.equals(mainContact.get(), v.getMainContact())) {
v.setMainContact(mainContact.get());
modified = true;
}
if (!Objects.equals(subContact.get(), v.getSubContact())) {
v.setSubContact(subContact.get());
modified = true;
}
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(codeYear.get(), v.getCodeYear())) {
v.setCodeYear(codeYear.get());
modified = true;
}
if (!Objects.equals(codeSequenceNumber.get(), v.getCodeSequenceNumber())) {
v.setCodeSequenceNumber(codeSequenceNumber.get());
modified = true;
}
if (!Objects.equals(address.get(), v.getAddress())) {
v.setAddress(address.get());
modified = true;
}
if (!Objects.equals(useBid.get(), v.isUseBid())) {
v.setUseBid(useBid.get());
modified = true;
}
if (!Objects.equals(useOffer.get(), v.isUseOffer())) {
v.setUseOffer(useOffer.get());
modified = true;
}
if (!Objects.equals(amount.get(), v.getAmount())) {
v.setAmount(amount.get());
modified = true;
}
if (!Objects.equals(standardPayWay.get(), v.isStandardPayWay())) {
v.setStandardPayWay(standardPayWay.get());
modified = true;
}
if (!Objects.equals(industry.get(), v.getIndustry())) {
v.setIndustry(industry.get());
modified = true;
}
if (!Objects.equals(saleType.get(), v.getSaleType())) {
v.setSaleType(saleType.get());
modified = true;
}
if (!Objects.equals(projectType.get(), v.getProjectType())) {
v.setProjectType(projectType.get());
modified = true;
}
if (!Objects.equals(productType.get(), v.getProductType())) {
v.setProductType(productType.get());
modified = true;
}
if (!Objects.equals(deliverySignMethod.get(), v.getDeliverySignMethod())) {
v.setDeliverySignMethod(deliverySignMethod.get());
modified = true;
}
if (!Objects.equals(productUsage.get(), v.getProductUsage())) {
v.setProductUsage(productUsage.get());
modified = true;
}
if (!Objects.equals(path.get(), v.getPath())) {
v.setPath(path.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
if (!Objects.equals(applicant.get(), v.getApplicant())) {
v.setApplicant(applicant.get());
modified = true;
}
if (!Objects.equals(authorizer.get(), v.getAuthorizer())) {
v.setAuthorizer(authorizer.get());
modified = true;
}
if (!Objects.equals(created.get(), v.getCreated())) {
v.setCreated(created.get());
modified = true;
}
if (!Objects.equals(plannedStartTime.get(), v.getPlannedStartTime())) {
v.setPlannedStartTime(plannedStartTime.get());
modified = true;
}
if (!Objects.equals(plannedCompletionTime.get(), v.getPlannedCompletionTime())) {
v.setPlannedCompletionTime(plannedCompletionTime.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,106 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.Inventory;
import com.ecep.contract.model.Invoice;
import com.ecep.contract.model.PurchaseBillVoucher;
import com.ecep.contract.model.PurchaseBillVoucherItem;
import com.ecep.contract.model.PurchaseOrderItem;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class PurchaseBillVoucherItemViewModel extends IdentityViewModel<PurchaseBillVoucherItem> {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
private SimpleIntegerProperty refId = new SimpleIntegerProperty();
/**
* 关联的销售订单
*/
private SimpleObjectProperty<PurchaseBillVoucher> voucher = new SimpleObjectProperty<>();
private SimpleObjectProperty<PurchaseOrderItem> orderItem = new SimpleObjectProperty<>();
private SimpleObjectProperty<Invoice> invoice = new SimpleObjectProperty<>();
private SimpleObjectProperty<Inventory> inventory = new SimpleObjectProperty<>();
private SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
private SimpleDoubleProperty quantity = new SimpleDoubleProperty();
private SimpleDoubleProperty price = new SimpleDoubleProperty();
private SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(PurchaseBillVoucherItem v) {
super.updateFrom(v);
getId().set(v.getId());
getRefId().set(v.getRefId());
getVoucher().set(v.getVoucher());
getOrderItem().set(v.getOrderItem());
getInvoice().set(v.getInvoice());
getInventory().set(v.getInventory());
getContract().set(v.getContract());
getQuantity().set(v.getQuantity());
getPrice().set(v.getPrice());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(PurchaseBillVoucherItem v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(voucher.get(), v.getVoucher())) {
v.setVoucher(voucher.get());
modified = true;
}
if (!Objects.equals(orderItem.get(), v.getOrderItem())) {
v.setOrderItem(orderItem.get());
modified = true;
}
if (!Objects.equals(invoice.get(), v.getInvoice())) {
v.setInvoice(invoice.get());
modified = true;
}
if (!Objects.equals(inventory.get(), v.getInventory())) {
v.setInventory(inventory.get());
modified = true;
}
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(refId.get(), v.getRefId())) {
v.setRefId(refId.get());
modified = true;
}
if (!Objects.equals(quantity.get(), v.getQuantity())) {
v.setQuantity(quantity.get());
modified = true;
}
if (!Objects.equals(price.get(), v.getPrice())) {
v.setPrice(price.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static PurchaseBillVoucherItemViewModel from(PurchaseBillVoucherItem item) {
PurchaseBillVoucherItemViewModel viewModel = new PurchaseBillVoucherItemViewModel();
viewModel.update(item);
return viewModel;
}
}

View File

@@ -0,0 +1,110 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.Invoice;
import com.ecep.contract.model.PurchaseBillVoucher;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class PurchaseBillVoucherViewModel extends IdentityViewModel<PurchaseBillVoucher> {
SimpleIntegerProperty id = new SimpleIntegerProperty();
SimpleIntegerProperty refId = new SimpleIntegerProperty();
SimpleStringProperty code = new SimpleStringProperty();
SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
SimpleObjectProperty<Invoice> invoice = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> employee = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> maker = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> verifier = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> makerDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> modifyDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> verifierDate = new SimpleObjectProperty<>();
SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(PurchaseBillVoucher v) {
getId().set(v.getId());
getRefId().set(v.getRefId());
getCode().set(v.getCode());
getCompany().set(v.getCompany());
getInvoice().set(v.getInvoice());
getEmployee().set(v.getEmployee());
getMaker().set(v.getMaker());
getVerifier().set(v.getVerifier());
getMakerDate().set(v.getMakerDate());
getModifyDate().set(v.getModifyDate());
getVerifierDate().set(v.getVerifierDate());
getDescription().set(v.getDescription());
super.updateFrom(v);
}
@Override
public boolean copyTo(PurchaseBillVoucher v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(refId.get(), v.getRefId())) {
v.setRefId(refId.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(invoice.get(), v.getInvoice())) {
v.setInvoice(invoice.get());
modified = true;
}
if (!Objects.equals(employee.get(), v.getEmployee())) {
v.setEmployee(employee.get());
modified = true;
}
if (!Objects.equals(maker.get(), v.getMaker())) {
v.setMaker(maker.get());
modified = true;
}
if (!Objects.equals(verifier.get(), v.getVerifier())) {
v.setVerifier(verifier.get());
modified = true;
}
if (!Objects.equals(makerDate.get(), v.getMakerDate())) {
v.setMakerDate(makerDate.get());
modified = true;
}
if (!Objects.equals(modifyDate.get(), v.getModifyDate())) {
v.setModifyDate(modifyDate.get());
modified = true;
}
if (!Objects.equals(verifierDate.get(), v.getVerifierDate())) {
v.setVerifierDate(verifierDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static PurchaseBillVoucherViewModel from(PurchaseBillVoucher order) {
PurchaseBillVoucherViewModel model = new PurchaseBillVoucherViewModel();
model.update(order);
return model;
}
}

View File

@@ -0,0 +1,106 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Inventory;
import com.ecep.contract.model.PurchaseOrder;
import com.ecep.contract.model.PurchaseOrderItem;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class PurchaseOrderItemViewModel extends IdentityViewModel<PurchaseOrderItem> {
private SimpleIntegerProperty id = new SimpleIntegerProperty();
/**
* 关联的销售订单
*/
private SimpleObjectProperty<PurchaseOrder> order = new SimpleObjectProperty<>();
private SimpleObjectProperty<Inventory> inventory = new SimpleObjectProperty<>();
private SimpleIntegerProperty refId = new SimpleIntegerProperty();
private SimpleDoubleProperty quantity = new SimpleDoubleProperty();
private SimpleDoubleProperty price = new SimpleDoubleProperty();
private SimpleDoubleProperty taxRate = new SimpleDoubleProperty();
private SimpleDoubleProperty exclusiveTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<LocalDate> arriveDate = new SimpleObjectProperty<>();
private SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(PurchaseOrderItem v) {
super.updateFrom(v);
getId().set(v.getId());
getOrder().set(v.getOrder());
getInventory().set(v.getInventory());
getRefId().set(v.getRefId());
getQuantity().set(v.getQuantity());
getPrice().set(v.getPrice());
getTaxRate().set(v.getTaxRate());
getExclusiveTaxPrice().set(v.getExclusiveTaxPrice());
getArriveDate().set(v.getArriveDate());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(PurchaseOrderItem v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(order.get(), v.getOrder())) {
v.setOrder(order.get());
modified = true;
}
if (!Objects.equals(inventory.get(), v.getInventory())) {
v.setInventory(inventory.get());
modified = true;
}
if (!Objects.equals(refId.get(), v.getRefId())) {
v.setRefId(refId.get());
modified = true;
}
if (!Objects.equals(quantity.get(), v.getQuantity())) {
v.setQuantity(quantity.get());
modified = true;
}
if (!Objects.equals(taxRate.get(), v.getTaxRate())) {
v.setTaxRate(taxRate.get());
modified = true;
}
if (!Objects.equals(price.get(), v.getPrice())) {
v.setPrice(price.get());
modified = true;
}
if (!Objects.equals(exclusiveTaxPrice.get(), v.getExclusiveTaxPrice())) {
v.setExclusiveTaxPrice(exclusiveTaxPrice.get());
modified = true;
}
if (!Objects.equals(arriveDate.get(), v.getArriveDate())) {
v.setArriveDate(arriveDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static PurchaseOrderItemViewModel from(PurchaseOrderItem item) {
PurchaseOrderItemViewModel viewModel = new PurchaseOrderItemViewModel();
viewModel.update(item);
return viewModel;
}
}

View File

@@ -0,0 +1,113 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.PurchaseOrder;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class PurchaseOrderViewModel extends IdentityViewModel<PurchaseOrder> {
SimpleIntegerProperty id = new SimpleIntegerProperty();
SimpleIntegerProperty refId = new SimpleIntegerProperty();
SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> employee = new SimpleObjectProperty<>();
SimpleStringProperty code = new SimpleStringProperty();
SimpleObjectProperty<Employee> maker = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> verifier = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> closer = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> makerDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> modifyDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> verifierDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> closerDate = new SimpleObjectProperty<>();
SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(PurchaseOrder v) {
getId().set(v.getId());
getRefId().set(v.getRefId());
getContract().set(v.getContract());
getEmployee().set(v.getEmployee());
getCode().set(v.getCode());
getMaker().set(v.getMaker());
getVerifier().set(v.getVerifier());
getCloser().set(v.getCloser());
getMakerDate().set(v.getMakerDate());
getModifyDate().set(v.getModifyDate());
getVerifierDate().set(v.getVerifierDate());
getCloserDate().set(v.getCloserDate());
getDescription().set(v.getDescription());
super.updateFrom(v);
}
@Override
public boolean copyTo(PurchaseOrder v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(refId.get(), v.getRefId())) {
v.setRefId(refId.get());
modified = true;
}
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(maker.get(), v.getMaker())) {
v.setMaker(maker.get());
modified = true;
}
if (!Objects.equals(verifier.get(), v.getVerifier())) {
v.setVerifier(verifier.get());
modified = true;
}
if (!Objects.equals(closer.get(), v.getCloser())) {
v.setCloser(closer.get());
modified = true;
}
if (!Objects.equals(makerDate.get(), v.getMakerDate())) {
v.setMakerDate(makerDate.get());
modified = true;
}
if (!Objects.equals(modifyDate.get(), v.getModifyDate())) {
v.setModifyDate(modifyDate.get());
modified = true;
}
if (!Objects.equals(verifierDate.get(), v.getVerifierDate())) {
v.setVerifierDate(verifierDate.get());
modified = true;
}
if (!Objects.equals(closerDate.get(), v.getCloserDate())) {
v.setCloserDate(closerDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static PurchaseOrderViewModel from(PurchaseOrder order) {
PurchaseOrderViewModel model = new PurchaseOrderViewModel();
model.update(order);
return model;
}
}

View File

@@ -0,0 +1,110 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.SalesBillVoucher;
import com.ecep.contract.model.SalesOrder;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class SalesBillVoucherViewModel extends IdentityViewModel<SalesBillVoucher> {
SimpleIntegerProperty id = new SimpleIntegerProperty();
SimpleIntegerProperty refId = new SimpleIntegerProperty();
SimpleStringProperty code = new SimpleStringProperty();
SimpleObjectProperty<Company> company = new SimpleObjectProperty<>();
SimpleObjectProperty<SalesOrder> order = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> employee = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> maker = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> verifier = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> makerDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> modifyDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDateTime> verifierDate = new SimpleObjectProperty<>();
SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(SalesBillVoucher v) {
getId().set(v.getId());
getRefId().set(v.getRefId());
getCode().set(v.getCode());
getCompany().set(v.getCompany());
getOrder().set(v.getOrder());
getEmployee().set(v.getEmployee());
getMaker().set(v.getMaker());
getVerifier().set(v.getVerifier());
getMakerDate().set(v.getMakerDate());
getModifyDate().set(v.getModifyDate());
getVerifierDate().set(v.getVerifierDate());
getDescription().set(v.getDescription());
super.updateFrom(v);
}
@Override
public boolean copyTo(SalesBillVoucher v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(refId.get(), v.getRefId())) {
v.setRefId(refId.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(company.get(), v.getCompany())) {
v.setCompany(company.get());
modified = true;
}
if (!Objects.equals(order.get(), v.getOrder())) {
v.setOrder(order.get());
modified = true;
}
if (!Objects.equals(employee.get(), v.getEmployee())) {
v.setEmployee(employee.get());
modified = true;
}
if (!Objects.equals(maker.get(), v.getMaker())) {
v.setMaker(maker.get());
modified = true;
}
if (!Objects.equals(verifier.get(), v.getVerifier())) {
v.setVerifier(verifier.get());
modified = true;
}
if (!Objects.equals(makerDate.get(), v.getMakerDate())) {
v.setMakerDate(makerDate.get());
modified = true;
}
if (!Objects.equals(modifyDate.get(), v.getModifyDate())) {
v.setModifyDate(modifyDate.get());
modified = true;
}
if (!Objects.equals(verifierDate.get(), v.getVerifierDate())) {
v.setVerifierDate(verifierDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static SalesBillVoucherViewModel from(SalesBillVoucher order) {
SalesBillVoucherViewModel model = new SalesBillVoucherViewModel();
model.update(order);
return model;
}
}

View File

@@ -0,0 +1,105 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.SalesOrder;
import com.ecep.contract.model.SalesOrderItem;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class SalesOrderItemViewModel extends IdentityViewModel<SalesOrderItem> {
/**
* 关联的销售订单
*/
private SimpleObjectProperty<SalesOrder> order = new SimpleObjectProperty<>();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleDoubleProperty quantity = new SimpleDoubleProperty();
private SimpleDoubleProperty price = new SimpleDoubleProperty();
private SimpleDoubleProperty taxRate = new SimpleDoubleProperty();
private SimpleDoubleProperty exclusiveTaxPrice = new SimpleDoubleProperty();
private SimpleObjectProperty<LocalDate> startDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> endDate = new SimpleObjectProperty<>();
private SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(SalesOrderItem v) {
super.updateFrom(v);
getOrder().set(v.getOrder());
getCode().set(v.getCode());
getName().set(v.getName());
getQuantity().set(v.getQuantity());
getPrice().set(v.getPrice());
getTaxRate().set(v.getTaxRate());
getExclusiveTaxPrice().set(v.getExclusiveTaxPrice());
getStartDate().set(v.getStartDate());
getEndDate().set(v.getEndDate());
getDescription().set(v.getDescription());
}
@Override
public boolean copyTo(SalesOrderItem v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(order.get(), v.getOrder())) {
v.setOrder(order.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(quantity.get(), v.getQuantity())) {
v.setQuantity(quantity.get());
modified = true;
}
if (!Objects.equals(price.get(), v.getPrice())) {
v.setPrice(price.get());
modified = true;
}
if (!Objects.equals(taxRate.get(), v.getTaxRate())) {
v.setTaxRate(taxRate.get());
modified = true;
}
if (!Objects.equals(price.get(), v.getPrice())) {
v.setPrice(price.get());
modified = true;
}
if (!Objects.equals(exclusiveTaxPrice.get(), v.getExclusiveTaxPrice())) {
v.setExclusiveTaxPrice(exclusiveTaxPrice.get());
modified = true;
}
if (!Objects.equals(startDate.get(), v.getStartDate())) {
v.setStartDate(startDate.get());
modified = true;
}
if (!Objects.equals(endDate.get(), v.getEndDate())) {
v.setEndDate(endDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static SalesOrderItemViewModel from(SalesOrderItem item) {
SalesOrderItemViewModel viewModel = new SalesOrderItemViewModel();
// viewModel.updateFrom(item);
viewModel.update(item);
return viewModel;
}
}

View File

@@ -0,0 +1,94 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.SalesOrder;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class SalesOrderViewModel extends IdentityViewModel<SalesOrder> {
SimpleIntegerProperty id = new SimpleIntegerProperty();
SimpleObjectProperty<Contract> contract = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> employee = new SimpleObjectProperty<>();
SimpleStringProperty code = new SimpleStringProperty();
SimpleObjectProperty<Employee> maker = new SimpleObjectProperty<>();
SimpleObjectProperty<Employee> verifier = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDate> makerDate = new SimpleObjectProperty<>();
SimpleObjectProperty<LocalDate> verifierDate = new SimpleObjectProperty<>();
SimpleStringProperty description = new SimpleStringProperty();
@Override
protected void updateFrom(SalesOrder v) {
getId().set(v.getId());
getContract().set(v.getContract());
getEmployee().set(v.getEmployee());
getCode().set(v.getCode());
getMaker().set(v.getMaker());
getVerifier().set(v.getVerifier());
getMakerDate().set(v.getMakerDate());
getVerifierDate().set(v.getVerifierDate());
super.updateFrom(v);
}
@Override
public boolean copyTo(SalesOrder v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(id.get(), v.getId())) {
v.setId(id.get());
modified = true;
}
if (!Objects.equals(contract.get(), v.getContract())) {
v.setContract(contract.get());
modified = true;
}
if (!Objects.equals(employee.get(), v.getEmployee())) {
v.setEmployee(employee.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(maker.get(), v.getMaker())) {
v.setMaker(maker.get());
modified = true;
}
if (!Objects.equals(makerDate.get(), v.getMakerDate())) {
v.setMakerDate(makerDate.get());
modified = true;
}
if (!Objects.equals(verifier.get(), v.getVerifier())) {
v.setVerifier(verifier.get());
modified = true;
}
if (!Objects.equals(verifierDate.get(), v.getVerifierDate())) {
v.setVerifierDate(verifierDate.get());
modified = true;
}
if (!Objects.equals(description.get(), v.getDescription())) {
v.setDescription(description.get());
modified = true;
}
return modified;
}
public static SalesOrderViewModel from(SalesOrder order) {
SalesOrderViewModel model = new SalesOrderViewModel();
model.update(order);
return model;
}
}

View File

@@ -0,0 +1,110 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.CompanyVendor;
import com.ecep.contract.model.CompanyVendorEntity;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.VendorCatalog;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class VendorEntityViewModel extends IdentityViewModel<CompanyVendorEntity> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty abbName = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
/**
* 分组
*/
private SimpleObjectProperty<VendorCatalog> catalog = new SimpleObjectProperty<>();
/**
* 关联的企业
*/
private SimpleObjectProperty<CompanyVendor> vendor = new SimpleObjectProperty<>();
/**
* 发展日期
*/
private SimpleObjectProperty<LocalDate> developDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> creator = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> modifier = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> modifyDate = new SimpleObjectProperty<>();
/**
* 从U8系统同步时间
*/
private SimpleObjectProperty<LocalDate> updatedDate = new SimpleObjectProperty<>();
public static VendorEntityViewModel from(CompanyVendorEntity cc) {
VendorEntityViewModel model = new VendorEntityViewModel();
model.update(cc);
return model;
}
@Override
protected void updateFrom(CompanyVendorEntity v) {
super.updateFrom(v);
getName().set(v.getName());
getAbbName().set(v.getAbbName());
getCode().set(v.getCode());
getCatalog().set(v.getCatalog());
getVendor().set(v.getVendor());
getDevelopDate().set(v.getDevelopDate());
getCreator().set(v.getCreator());
getModifier().set(v.getModifier());
getModifyDate().set(v.getModifyDate());
getUpdatedDate().set(v.getUpdatedDate());
}
@Override
public boolean copyTo(CompanyVendorEntity v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
modified = true;
}
if (!Objects.equals(abbName.get(), v.getAbbName())) {
v.setAbbName(abbName.get());
modified = true;
}
if (!Objects.equals(code.get(), v.getCode())) {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(catalog.get(), v.getCatalog())) {
v.setCatalog(catalog.get());
modified = true;
}
if (!Objects.equals(vendor.get(), v.getVendor())) {
v.setVendor(vendor.get());
modified = true;
}
if (!Objects.equals(developDate.get(), v.getDevelopDate())) {
v.setDevelopDate(developDate.get());
modified = true;
}
if (!Objects.equals(creator.get(), v.getCreator())) {
v.setCreator(creator.get());
modified = true;
}
if (!Objects.equals(modifier.get(), v.getModifier())) {
v.setModifier(modifier.get());
modified = true;
}
if (!Objects.equals(modifyDate.get(), v.getModifyDate())) {
v.setModifyDate(modifyDate.get());
modified = true;
}
if (!Objects.equals(updatedDate.get(), v.getUpdatedDate())) {
v.setUpdatedDate(updatedDate.get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,43 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.ContractFileType;
import com.ecep.contract.model.VendorGroup;
import com.ecep.contract.model.VendorGroupRequireFileType;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class VendorGroupRequireFileTypeViewModel extends IdentityViewModel<VendorGroupRequireFileType> {
private SimpleObjectProperty<VendorGroup> group = new SimpleObjectProperty<>();
private SimpleObjectProperty<ContractFileType> fileType = new SimpleObjectProperty<>();
@Override
protected void updateFrom(VendorGroupRequireFileType v) {
super.updateFrom(v);
getGroup().set(v.getGroup());
getFileType().set(v.getFileType());
}
@Override
public boolean copyTo(VendorGroupRequireFileType v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getGroup().get(), v.getGroup())) {
v.setGroup(getGroup().get());
modified = true;
}
if (!Objects.equals(getFileType().get(), v.getFileType())) {
v.setFileType(getFileType().get());
modified = true;
}
return modified;
}
}

View File

@@ -0,0 +1,82 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.VendorGroup;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class VendorGroupViewModel extends IdentityViewModel<VendorGroup> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
private SimpleStringProperty description = new SimpleStringProperty();
private SimpleBooleanProperty active = new SimpleBooleanProperty();
private SimpleBooleanProperty priceComparison = new SimpleBooleanProperty();
/**
* 中选的供应商是否可以免除报价表
*/
private SimpleBooleanProperty requireQuotationSheetForBid = new SimpleBooleanProperty();
/**
* 是否可以提前预采购
*/
private SimpleBooleanProperty canPrePurchase = new SimpleBooleanProperty();
public static VendorGroupViewModel from(VendorGroup v) {
VendorGroupViewModel vm = new VendorGroupViewModel();
vm.updateFrom(v);
return vm;
}
@Override
protected void updateFrom(VendorGroup v) {
super.updateFrom(v);
getName().set(v.getName());
getCode().set(v.getCode());
getDescription().set(v.getDescription());
getActive().set(v.isActive());
getPriceComparison().set(v.isPriceComparison());
getRequireQuotationSheetForBid().set(v.isRequireQuotationSheetForBid());
getCanPrePurchase().set(v.isCanPrePurchase());
}
@Override
public boolean copyTo(VendorGroup v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(getName().get(), v.getName())) {
v.setName(getName().get());
modified = true;
}
if (!Objects.equals(getCode().get(), v.getCode())) {
v.setCode(getCode().get());
modified = true;
}
if (!Objects.equals(getDescription().get(), v.getDescription())) {
v.setDescription(getDescription().get());
modified = true;
}
if (!Objects.equals(getActive().get(), v.isActive())) {
v.setActive(getActive().get());
modified = true;
}
if (!Objects.equals(getPriceComparison().get(), v.isPriceComparison())) {
v.setPriceComparison(getPriceComparison().get());
modified = true;
}
if (!Objects.equals(getRequireQuotationSheetForBid().get(), v.isRequireQuotationSheetForBid())) {
v.setRequireQuotationSheetForBid(getRequireQuotationSheetForBid().get());
modified = true;
}
if (!Objects.equals(getCanPrePurchase().get(), v.isCanPrePurchase())) {
v.setCanPrePurchase(getCanPrePurchase().get());
modified = true;
}
return modified;
}
}