Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseChargeModeManagerImpl.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseChargeModeManagerImpl.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseChargeModeManagerImpl.java (revision 32710) @@ -0,0 +1,76 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.service; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ChargeSetting; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ChargeSettingModeItem; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseChargeMode; +import com.forgon.disinfectsystem.vo.ForeignTousseChargeModeVo; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; + +public class ForeignTousseChargeModeManagerImpl extends BasePoManagerImpl implements + ForeignTousseChargeModeManager { + + @Override + public void deleteForeignTousseChargeMode(String ids) { + if(StringUtils.isNotBlank(ids)){ + this.delete(ids, ";"); + } + } + + @SuppressWarnings("unchecked") + @Override + public List searchEnableAndInvoicePlanForeignTousseChargeModeList(Long tousseDefinitionID) { + List result = new ArrayList(); + List enableForeignTousseChargeMode = this.getByProperty("isEnable", Constants.STR_YES); + if(CollectionUtils.isNotEmpty(enableForeignTousseChargeMode)){ + for (ForeignTousseChargeMode foreignTousseChargeMode : enableForeignTousseChargeMode) { + try { + ForeignTousseChargeModeVo vo = new ForeignTousseChargeModeVo(); + BeanUtils.copyProperties(vo, foreignTousseChargeMode); + result.add(vo); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + } + if(DatabaseUtil.isPoIdValid(tousseDefinitionID)){ + //查询历史收费设置中,已经被禁用或者已经被删除了的收费模式 + List enableForeignTousseChargeModeIDList = new ArrayList(); + if(CollectionUtils.isNotEmpty(enableForeignTousseChargeMode)){ + for (ForeignTousseChargeMode foreignTousseChargeMode : enableForeignTousseChargeMode) { + enableForeignTousseChargeModeIDList.add(foreignTousseChargeMode.getId()); + } + } + List tousseDefinitionChargeSetting = objectDao.findByProperty(ChargeSetting.class.getSimpleName(), "tousseDefinitionID", tousseDefinitionID); + if(CollectionUtils.isNotEmpty(tousseDefinitionChargeSetting)){ + ChargeSetting chargeSetting = tousseDefinitionChargeSetting.get(0); + if(CollectionUtils.isNotEmpty(chargeSetting.getChargeSettingModeItems())){ + for (ChargeSettingModeItem chargeSettingModeItem : chargeSetting.getChargeSettingModeItems()) { + if(StringUtils.equals(chargeSettingModeItem.getMode(), ForeignTousseChargeMode.MODE_RATE)){ + if(!enableForeignTousseChargeModeIDList.contains(chargeSettingModeItem.getForeignTousseChargeModeID())){ + ForeignTousseChargeModeVo vo = new ForeignTousseChargeModeVo(); + vo.setMode(chargeSettingModeItem.getMode()); + vo.setId(chargeSettingModeItem.getForeignTousseChargeModeID()); + vo.setRate(chargeSettingModeItem.getForeignTousseChargeModeRate()); + vo.setName(chargeSettingModeItem.getForeignTousseChargeModeName()); + result.add(vo); + } + } + } + } + } + } + return result; + } + +} Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r32160 -r32710 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 32160) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 32710) @@ -2701,4 +2701,37 @@ class="com.forgon.disinfectsystem.tousse.instrumentsettype.service.InstrumentSetTypeManagerImpl"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ChargeSettingManager.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ChargeSettingManager.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ChargeSettingManager.java (revision 32710) @@ -0,0 +1,24 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.service; + +import net.sf.json.JSONArray; + +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ChargeSetting; +import com.forgon.tools.hibernate.BasePoManager; + +public interface ChargeSettingManager extends BasePoManager{ + + /** + * 保存外来器械包申请单收费设置 + * @param invoicePlanID + * @param foreignTousseChargeInfos + */ + public void batchSaveOrUpdateChargeSetting(String invoicePlanID, String foreignTousseChargeInfos); + + /** + * 加载外来器械包申请单收费设置 + * @param invoicePlanID + * @return + */ + public JSONArray loadForeignTousseChargeSetting(String invoicePlanID); + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingVo.java (revision 32710) @@ -0,0 +1,115 @@ +package com.forgon.disinfectsystem.vo; + +import java.util.ArrayList; +import java.util.List; + +import com.forgon.Constants; + +/** + * 外来器械包收费设置VO + */ +public class ChargeSettingVo { + + private Long id; + + /** + * 外来器械包申请单ID + */ + private Long invoicePlanID; + + /** + * 外来器械包供应商名称 + */ + private String supplierName; + + /** + * 外来器械包定义ID + */ + private Long tousseDefinitionID; + + /** + * 外来器械包定义名称 + */ + private String tousseDefinitionName; + + /** + * 总计 + */ + private Double totalPrice; + + /** + * 本次配置是否默认项 + */ + private String isDefaultValue = Constants.STR_NO; + + /** + * 外来器械包收费明细(收费模式明细) + */ + private List chargeSettingModeItems = new ArrayList(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getInvoicePlanID() { + return invoicePlanID; + } + + public void setInvoicePlanID(Long invoicePlanID) { + this.invoicePlanID = invoicePlanID; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public Long getTousseDefinitionID() { + return tousseDefinitionID; + } + + public void setTousseDefinitionID(Long tousseDefinitionID) { + this.tousseDefinitionID = tousseDefinitionID; + } + + public String getTousseDefinitionName() { + return tousseDefinitionName; + } + + public void setTousseDefinitionName(String tousseDefinitionName) { + this.tousseDefinitionName = tousseDefinitionName; + } + + public Double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(Double totalPrice) { + this.totalPrice = totalPrice; + } + + public String getIsDefaultValue() { + return isDefaultValue; + } + + public void setIsDefaultValue(String isDefaultValue) { + this.isDefaultValue = isDefaultValue; + } + + public List getChargeSettingModeItems() { + return chargeSettingModeItems; + } + + public void setChargeSettingModeItems( + List chargeSettingModeItemVos) { + this.chargeSettingModeItems = chargeSettingModeItemVos; + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ChargeSettingAction.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ChargeSettingAction.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ChargeSettingAction.java (revision 32710) @@ -0,0 +1,89 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.action; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ChargeSetting; +import com.forgon.disinfectsystem.foreigntoussecharge.service.ChargeSettingManager; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem/foreigntoussecharge") +@Action(value = "chargeSettingAction") +public class ChargeSettingAction implements Preparable, ModelDriven { + + ChargeSetting chargeSetting; + + private ChargeSettingManager chargeSettingManager; + + public void setChargeSettingManager(ChargeSettingManager chargeSettingManager) { + this.chargeSettingManager = chargeSettingManager; + } + + /** + * 外来器械包申请单收费设置 + */ + public void batchSaveOrUpdateChargeSetting(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONUtil.addMessage(json, "保存成功!"); + + try { + // 外来器械包申请单ID + String invoicePlanID = StrutsParamUtils.getPraramValue("invoicePlanID", ""); + // 外来器械包收费设置 + String foreignTousseChargeInfos = StrutsParamUtils.getPraramValue("foreignTousseChargeInfos", ""); + chargeSettingManager.batchSaveOrUpdateChargeSetting(invoicePlanID, foreignTousseChargeInfos); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "保存失败:" + e.getMessage()); + } + + StrutsResponseUtils.output(json); + } + + /** + * 查看外来器械包申请单的收费设置 + */ + public void loadForeignTousseChargeSetting(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + try { + // 外来器械包申请单ID + String invoicePlanID = StrutsParamUtils.getPraramValue("invoicePlanID", ""); + JSONArray data = chargeSettingManager.loadForeignTousseChargeSetting(invoicePlanID); + JSONUtil.addProperty(json, "data", data); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "加载失败:" + e.getMessage()); + } + + StrutsResponseUtils.output(json); + } + + @Override + public ChargeSetting getModel() { + return chargeSetting; + } + + @Override + public void prepare() throws Exception { + String id = StrutsParamUtils.getPraramValue("id", ""); + chargeSetting = new ChargeSetting(); + if(DatabaseUtil.isPoIdValid(id)){ + chargeSetting = chargeSettingManager.get(id); + } + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java =================================================================== diff -u -r31284 -r32710 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java (.../ForeignTousseApplication.java) (revision 31284) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntousseapplication/ForeignTousseApplication.java (.../ForeignTousseApplication.java) (revision 32710) @@ -183,6 +183,9 @@ public static final String INVOICE_STATUS_SAME_SIGNED = "部分签收"; public static final String INVOICE_STATUS_ALL_SIGNED = "已签收"; + public static final String CHARGE_STATUS_CHARGED = "已确认"; + public static final String CHARGE_STATUS_UNCHARGE = "待确认"; + /** * 申请单是否接口推送过来的(GDSZYY-92) */ @@ -193,6 +196,11 @@ */ @JsonIgnore private UseRecord useRecord; + + /** + * 收费状态:勾选单据点击【收费设置】弹出页面填写保存后,【收费状态】为【已确认】,背景颜色为白色,未收费则显示为【待确认】NFYY-29 + */ + private String chargeStatus = CHARGE_STATUS_UNCHARGE; public String getProcessType() { return processType; @@ -595,6 +603,14 @@ this.useRecord = useRecord; } + public String getChargeStatus() { + return chargeStatus; + } + + public void setChargeStatus(String chargeStatus) { + this.chargeStatus = chargeStatus; + } + /** * 从使用记录转换为待归还的外来器械包申请单时, * 如果使用记录上的手术间、病人姓名、手术名称等值不为空,而原来的外来器械包申请单上的值为空, Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseChargeModeManager.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseChargeModeManager.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseChargeModeManager.java (revision 32710) @@ -0,0 +1,24 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.service; + +import java.util.List; + +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseChargeMode; +import com.forgon.disinfectsystem.vo.ForeignTousseChargeModeVo; +import com.forgon.tools.hibernate.BasePoManager; + +public interface ForeignTousseChargeModeManager extends BasePoManager{ + + /** + * 删除 + * @param ids + */ + public void deleteForeignTousseChargeMode(String ids); + + /** + * 收费设置页面,收费模式的下拉框,需要查找启用的收费设置及当前物品设置的收费模式 + * @param tousseDefinitionID 外来器械包申请单上物品的包定义ID + * @return + */ + public List searchEnableAndInvoicePlanForeignTousseChargeModeList(Long tousseDefinitionID); + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ForeignTousseSpecification.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ForeignTousseSpecification.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ForeignTousseSpecification.java (revision 32710) @@ -0,0 +1,88 @@ +package com.forgon.disinfectsystem.entity.foreigntoussecharge; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Transient; + +import org.apache.commons.lang.StringUtils; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import com.forgon.Constants; + +/** + * 外来器械包规格设置(不同规格对应不同单价) + * @author zhoupeimian + * @since 2021-12-11 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ForeignTousseSpecification { + + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 单价 + */ + private Double price; + + /** + * 是否启用(不填默认为是) + */ + private String isEnable = Constants.STR_YES; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public String getIsEnable() { + return isEnable; + } + + public void setIsEnable(String isEnable) { + this.isEnable = isEnable; + } + + /** + * 判断是否启用 + * @return + */ + @Transient + public boolean isEnabled() { + return StringUtils.equals(this.getIsEnable(), Constants.STR_YES); + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSetting.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSetting.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSetting.java (revision 32710) @@ -0,0 +1,130 @@ +package com.forgon.disinfectsystem.entity.foreigntoussecharge; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.CascadeType; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.forgon.Constants; + +/** + * 外来器械包收费设置 + * @author zhoupeimian + * @since 2021-12-12 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ChargeSetting { + + private Long id; + + /** + * 外来器械包申请单ID + */ + private Long invoicePlanID; + + /** + * 外来器械包供应商名称 + */ + private String supplierName; + + /** + * 外来器械包定义ID + */ + private Long tousseDefinitionID; + + /** + * 总计 + */ + private Double totalPrice; + + /** + * 本次配置是否默认项 + */ + private String isDefaultValue = Constants.STR_NO; + + /** + * 外来器械包收费明细(收费模式明细) + */ + @JsonIgnore + private List chargeSettingModeItems = new ArrayList(); + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getInvoicePlanID() { + return invoicePlanID; + } + + public void setInvoicePlanID(Long invoicePlanID) { + this.invoicePlanID = invoicePlanID; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public Long getTousseDefinitionID() { + return tousseDefinitionID; + } + + public void setTousseDefinitionID(Long tousseDefinitionID) { + this.tousseDefinitionID = tousseDefinitionID; + } + + public Double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(Double totalPrice) { + this.totalPrice = totalPrice; + } + + public String getIsDefaultValue() { + return isDefaultValue; + } + + public void setIsDefaultValue(String isDefaultValue) { + this.isDefaultValue = isDefaultValue; + } + + @OneToMany(fetch = FetchType.LAZY) + @Cascade(value = { CascadeType.ALL }) + @JoinColumn(name = "setting_id") + public List getChargeSettingModeItems() { + return chargeSettingModeItems; + } + + public void setChargeSettingModeItems( + List chargeSettingModeItems) { + this.chargeSettingModeItems = chargeSettingModeItems; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ForeignTousseChargeModeVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ForeignTousseChargeModeVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ForeignTousseChargeModeVo.java (revision 32710) @@ -0,0 +1,85 @@ +package com.forgon.disinfectsystem.vo; + +/** + * 外来器械包规格Vo + * @author zhoupeimian + * @since 2021-12-11 + */ +public class ForeignTousseChargeModeVo { + + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 模式("系数"或者"固定值") + */ + private String mode; + + /** + * 系数 + */ + private Double rate; + + /** + * (价格)固定值 + */ + private Double fixedPrice; + + /** + * 是否启用(不填默认为是) + */ + private String isEnable; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public Double getRate() { + return rate; + } + + public void setRate(Double rate) { + this.rate = rate; + } + + public Double getFixedPrice() { + return fixedPrice; + } + + public void setFixedPrice(Double fixedPrice) { + this.fixedPrice = fixedPrice; + } + + public String getIsEnable() { + return isEnable; + } + + public void setIsEnable(String isEnable) { + this.isEnable = isEnable; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ForeignTousseChargeMode.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ForeignTousseChargeMode.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ForeignTousseChargeMode.java (revision 32710) @@ -0,0 +1,127 @@ +package com.forgon.disinfectsystem.entity.foreigntoussecharge; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Transient; + +import org.apache.commons.lang.StringUtils; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import com.forgon.Constants; + +/** + * 外来器械包收费模式(收费系数或者固定值价格) + * @author zhoupeimian + * @since 2021-12-11 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ForeignTousseChargeMode { + + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 模式("系数"或者"固定值") + */ + private String mode = MODE_RATE; + + /** + * 系数 + */ + private Double rate; + + /** + * (价格)固定值 + */ + private Double fixedPrice; + + /** + * 是否启用(不填默认为是) + */ + private String isEnable = Constants.STR_YES; + + public static final String MODE_RATE = "系数"; + public static final String MODE_FIXED_VALUE = "固定值"; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public Double getRate() { + return rate; + } + + public void setRate(Double rate) { + this.rate = rate; + } + + public Double getFixedPrice() { + return fixedPrice; + } + + public void setFixedPrice(Double fixedPrice) { + this.fixedPrice = fixedPrice; + } + + + public String getIsEnable() { + return isEnable; + } + + public void setIsEnable(String isEnable) { + this.isEnable = isEnable; + } + + /** + * 判断是否启用 + * @return + */ + @Transient + public boolean isEnabled(){ + return StringUtils.equals(this.getIsEnable(), Constants.STR_YES); + } + + /** + * 判断是否启用 + * @return + */ + @Transient + public boolean isFixedPriceMode(){ + return StringUtils.equals(this.mode, MODE_FIXED_VALUE); + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ForeignTousseSpecificationAction.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ForeignTousseSpecificationAction.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ForeignTousseSpecificationAction.java (revision 32710) @@ -0,0 +1,131 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.action; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseSpecification; +import com.forgon.disinfectsystem.foreigntoussecharge.service.ForeignTousseSpecificationManager; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem/foreigntoussecharge") +@Action(value = "foreignTousseSpecificationAction") +public class ForeignTousseSpecificationAction implements Preparable, ModelDriven { + + private ForeignTousseSpecification foreignTousseSpecification; + + private ForeignTousseSpecificationManager foreignTousseSpecificationManager; + + public void setForeignTousseSpecificationManager( + ForeignTousseSpecificationManager foreignTousseSpecificationManager) { + this.foreignTousseSpecificationManager = foreignTousseSpecificationManager; + } + + /** + * 查看外来器械收费模式 + */ + public void loadForeignTousseSpecification(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONObject data = new JSONObject(); + try { + if(foreignTousseSpecification != null && DatabaseUtil.isPoIdValid(foreignTousseSpecification.getId())){ + data = JSONObject.fromObject(foreignTousseSpecification); + JSONUtil.addProperty(json, "data", data); + }else{ + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "数据不存在!"); + } + } catch (Exception e) { + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "查询失败:" + e.getMessage()); + } + StrutsResponseUtils.output(json); + } + + /** + * 保存或修改 + */ + public void saveOrUpdateForeignTousseSpecification(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONUtil.addMessage(json, "保存成功!"); + + try { + foreignTousseSpecificationManager.save(foreignTousseSpecification); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "保存失败:" + e.getMessage()); + } + + StrutsResponseUtils.output(json); + } + + /** + * 删除 + */ + public void deleteForeignTousseSpecification(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONUtil.addMessage(json, "删除成功!"); + + try { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + foreignTousseSpecificationManager.deleteForeignTousseSpecification(ids); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "删除失败:" + e.getMessage()); + } + + StrutsResponseUtils.output(json); + } + + /** + * 加载外来器械包规格设置列表 + */ + public void loadForeignTousseSpecificationList(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONArray data = new JSONArray(); + try { + List foreignTousseSpecificationList = foreignTousseSpecificationManager.getAll(); + if(CollectionUtils.isNotEmpty(foreignTousseSpecificationList)){ + data = JSONArray.fromObject(foreignTousseSpecificationList); + } + } catch (Exception e) { + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "查询失败:" + e.getMessage()); + } + JSONUtil.addProperty(json, "data", data); + StrutsResponseUtils.output(json); + } + + @Override + public ForeignTousseSpecification getModel() { + return foreignTousseSpecification; + } + + @Override + public void prepare() throws Exception { + String id = StrutsParamUtils.getPraramValue("id", ""); + foreignTousseSpecification = new ForeignTousseSpecification(); + if(DatabaseUtil.isPoIdValid(id)){ + foreignTousseSpecification = foreignTousseSpecificationManager.get(id); + } + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseSpecificationManagerImpl.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseSpecificationManagerImpl.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseSpecificationManagerImpl.java (revision 32710) @@ -0,0 +1,18 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.service; + +import org.apache.commons.lang.StringUtils; + +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseSpecification; +import com.forgon.tools.hibernate.BasePoManagerImpl; + +public class ForeignTousseSpecificationManagerImpl extends BasePoManagerImpl implements + ForeignTousseSpecificationManager { + + @Override + public void deleteForeignTousseSpecification(String ids) { + if(StringUtils.isNotBlank(ids)){ + this.delete(ids, ";"); + } + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingSpecItemVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingSpecItemVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingSpecItemVo.java (revision 32710) @@ -0,0 +1,96 @@ +package com.forgon.disinfectsystem.vo; + +/** + * 外来器械包收费设置上的收费模式下的器械包规格收费明细VO + */ +public class ChargeSettingSpecItemVo { + + private Long id; + + /** + * 外来器械包规格ID + */ + private Long foreignTousseSpecID; + + /** + * 外来器械包规格名称 + */ + private String foreignTousseSpecName; + + /** + * 外来器械包规格价格 + */ + private Double foreignTousseSpecPrice; + + /** + * 单价 = 规格价格 * 模式系数;或者 固定值模式的价格 + */ + private Double price; + + /** + * 数量 + */ + private Integer amount; + + /** + * 金额 = 单价 * 数量 + */ + private Double totalPrice; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getForeignTousseSpecID() { + return foreignTousseSpecID; + } + + public void setForeignTousseSpecID(Long foreignTousseSpecID) { + this.foreignTousseSpecID = foreignTousseSpecID; + } + + public String getForeignTousseSpecName() { + return foreignTousseSpecName; + } + + public void setForeignTousseSpecName(String foreignTousseSpecName) { + this.foreignTousseSpecName = foreignTousseSpecName; + } + + public Double getForeignTousseSpecPrice() { + return foreignTousseSpecPrice; + } + + public void setForeignTousseSpecPrice(Double foreignTousseSpecPrice) { + this.foreignTousseSpecPrice = foreignTousseSpecPrice; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Integer getAmount() { + return amount; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + public Double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(Double totalPrice) { + this.totalPrice = totalPrice; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingModeItemVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingModeItemVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ChargeSettingModeItemVo.java (revision 32710) @@ -0,0 +1,126 @@ +package com.forgon.disinfectsystem.vo; + +import java.util.ArrayList; +import java.util.List; + +/** + * 外来器械包收费设置上的收费模式VO + */ +public class ChargeSettingModeItemVo { + + private Long id; + + /** + * 收费模式ID + */ + private Long foreignTousseChargeModeID; + + /** + * 收费模式名称 + */ + private String foreignTousseChargeModeName; + + /** + * 收费模式系数 + */ + private Double foreignTousseChargeModeRate; + + /** + * 收费模式类型 + */ + private String mode; + + /** + * 单价 = 规格价格 * 模式系数;或者 固定值模式的价格 + */ + private Double fixedPrice; + + /** + * 数量 + */ + private Integer fixedAmount; + + /** + * 金额 = 单价 * 数量 + */ + private Double fixedTotalPrice; + + /** + * 外来器械收费模式的器械包规格收费明细 + */ + private List chargeSettingSpecItems = new ArrayList(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getForeignTousseChargeModeID() { + return foreignTousseChargeModeID; + } + + public void setForeignTousseChargeModeID(Long foreignTousseChargeModeID) { + this.foreignTousseChargeModeID = foreignTousseChargeModeID; + } + + public String getForeignTousseChargeModeName() { + return foreignTousseChargeModeName; + } + + public void setForeignTousseChargeModeName(String foreignTousseChargeModeName) { + this.foreignTousseChargeModeName = foreignTousseChargeModeName; + } + + public Double getForeignTousseChargeModeRate() { + return foreignTousseChargeModeRate; + } + + public void setForeignTousseChargeModeRate(Double foreignTousseChargeModeRate) { + this.foreignTousseChargeModeRate = foreignTousseChargeModeRate; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public Double getFixedPrice() { + return fixedPrice; + } + + public void setFixedPrice(Double fixedPrice) { + this.fixedPrice = fixedPrice; + } + + public Integer getFixedAmount() { + return fixedAmount; + } + + public void setFixedAmount(Integer fixedAmount) { + this.fixedAmount = fixedAmount; + } + + public Double getFixedTotalPrice() { + return fixedTotalPrice; + } + + public void setFixedTotalPrice(Double fixedTotalPrice) { + this.fixedTotalPrice = fixedTotalPrice; + } + + public List getChargeSettingSpecItems() { + return chargeSettingSpecItems; + } + + public void setChargeSettingSpecItems( + List chargeSettingSpecItems) { + this.chargeSettingSpecItems = chargeSettingSpecItems; + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ChargeSettingManagerImpl.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ChargeSettingManagerImpl.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ChargeSettingManagerImpl.java (revision 32710) @@ -0,0 +1,407 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ChargeSetting; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ChargeSettingModeItem; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ChargeSettingSpecItem; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseChargeMode; +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseSpecification; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.vo.ChargeSettingModeItemVo; +import com.forgon.disinfectsystem.vo.ChargeSettingSpecItemVo; +import com.forgon.disinfectsystem.vo.ChargeSettingVo; +import com.forgon.exception.SystemException; +import com.forgon.tools.Constants; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; + +public class ChargeSettingManagerImpl extends BasePoManagerImpl implements ChargeSettingManager { + + @SuppressWarnings("unchecked") + @Override + public void batchSaveOrUpdateChargeSetting(String invoicePlanID, String foreignTousseChargeInfos) { + if(!DatabaseUtil.isPoIdValid(invoicePlanID)){ + return; + } + + ForeignTousseApplication foreignTousseApplication = (ForeignTousseApplication) objectDao.getById(ForeignTousseApplication.class.getSimpleName(), invoicePlanID); + if(foreignTousseApplication == null){ + throw new SystemException("外来器械包申请单不存在!"); + } + + //查询旧数据 + String sql = String.format("select po from %s po where invoicePlanID = %s ", ChargeSetting.class.getSimpleName(), invoicePlanID); + List oldChargeSettingList = objectDao.findByHql(sql); + //物品对应的收费设置 + Map chargeSettingMap = new HashMap(); + if(CollectionUtils.isNotEmpty(oldChargeSettingList)){ + for (ChargeSetting chargeSetting : oldChargeSettingList) { + chargeSettingMap.put(chargeSetting.getTousseDefinitionID(), chargeSetting); + } + } + + JSONArray foreignTousseChargeInfoArr = JSONArray.fromObject(foreignTousseChargeInfos); + if(foreignTousseChargeInfoArr == null || foreignTousseChargeInfoArr.size() == 0){ + throw new SystemException("参数异常!"); + } + + List chargeSettingList = new ArrayList(); + for (Object object : foreignTousseChargeInfoArr) { + JSONObject settingJson = (JSONObject) object; + // 设置的基础信息 + ChargeSetting setting = chargeSettingMap.get(settingJson.optLong("tousseDefinitionID")); + if(setting == null){ + setting = new ChargeSetting(); + } + setting.setInvoicePlanID(foreignTousseApplication.getId()); + setting.setTousseDefinitionID(settingJson.optLong("tousseDefinitionID")); + setting.setSupplierName(settingJson.optString("supplierName")); + setting.setTotalPrice(settingJson.optDouble("totalPrice")); + setting.setIsDefaultValue(settingJson.optString("isDefaultValue")); + //收费模式Id和收费模式Map + Map chargeSettingModeItemMap = new HashMap(); + if(CollectionUtils.isNotEmpty(setting.getChargeSettingModeItems())){ + for (ChargeSettingModeItem chargeSettingModeItem : setting.getChargeSettingModeItems()) { + chargeSettingModeItemMap.put(chargeSettingModeItem.getForeignTousseChargeModeID(), chargeSettingModeItem); + } + } + // 设置的收费模式信息 + JSONArray chargeSettingModeItemsArr = settingJson.optJSONArray("chargeSettingModeItems"); + if(chargeSettingModeItemsArr != null && chargeSettingModeItemsArr.size() > 0){ + for (Object object2 : chargeSettingModeItemsArr) { + JSONObject modelJson = (JSONObject) object2; + ChargeSettingModeItem item = chargeSettingModeItemMap.get(modelJson.optLong("foreignTousseChargeModeID")); + if(item == null){ + item = new ChargeSettingModeItem(); + } + item.setForeignTousseChargeModeID(modelJson.optLong("foreignTousseChargeModeID")); + item.setForeignTousseChargeModeName(modelJson.optString("foreignTousseChargeModeName")); + item.setForeignTousseChargeModeRate(modelJson.optDouble("foreignTousseChargeModeRate")); + item.setMode(modelJson.optString("mode")); + if(StringUtils.equals(item.getMode(), ForeignTousseChargeMode.MODE_FIXED_VALUE)){ + item.setFixedAmount(modelJson.optInt("fixedAmount")); + item.setFixedPrice(modelJson.optDouble("fixedPrice")); + item.setFixedTotalPrice(modelJson.optDouble("fixedTotalPrice")); + } + + // 收费模式下的外来器械包规格收费明细 + JSONArray chargeSettingSpecItemsArr = modelJson.optJSONArray("chargeSettingSpecItems"); + //外来器械包规格Map + Map chargeSettingSpecItemMap = new HashMap(); + if(CollectionUtils.isNotEmpty(item.getChargeSettingSpecItems())){ + for (ChargeSettingSpecItem chargeSettingSpecItem : item.getChargeSettingSpecItems()) { + chargeSettingSpecItemMap.put(chargeSettingSpecItem.getForeignTousseSpecID(), chargeSettingSpecItem); + } + } + if(chargeSettingSpecItemsArr != null && chargeSettingSpecItemsArr.size() > 0){ + for (Object object3 : chargeSettingSpecItemsArr) { + JSONObject specJson = (JSONObject) object3; + ChargeSettingSpecItem specItem = chargeSettingSpecItemMap.get(specJson.optLong("foreignTousseSpecID")); + if(specItem == null){ + specItem = new ChargeSettingSpecItem(); + } + specItem.setAmount(specJson.optInt("amount")); + specItem.setForeignTousseSpecID(specJson.optLong("foreignTousseSpecID")); + specItem.setForeignTousseSpecName(specJson.optString("foreignTousseSpecName")); + specItem.setForeignTousseSpecPrice(specJson.optDouble("foreignTousseSpecPrice")); + specItem.setPrice(specJson.optDouble("price")); + specItem.setTotalPrice(specJson.optDouble("totalPrice")); + item.getChargeSettingSpecItems().add(specItem); + } + } + + setting.getChargeSettingModeItems().add(item); + } + } + chargeSettingList.add(setting); + } + objectDao.batchSaveOrUpdate(chargeSettingList); + foreignTousseApplication.setChargeStatus(ForeignTousseApplication.CHARGE_STATUS_CHARGED); + objectDao.saveOrUpdate(foreignTousseApplication); + } + + @SuppressWarnings("unchecked") + @Override + public JSONArray loadForeignTousseChargeSetting(String invoicePlanID) { + JSONArray result = new JSONArray(); + ForeignTousseApplication foreignTousseApplication = (ForeignTousseApplication) objectDao.getById(ForeignTousseApplication.class.getSimpleName(), invoicePlanID); + if(foreignTousseApplication == null){ + throw new SystemException("参数异常!"); + } + List applicationItems = foreignTousseApplication.getApplicationItems(); + if(CollectionUtils.isEmpty(applicationItems)){ + throw new SystemException("申请单没有申请物品!"); + } + List chargeSettingList = this.getByProperty("invoicePlanID", invoicePlanID); + + //物品对应的收费设置 + Map chargeSettingMap = getChargeSettingMap(applicationItems, chargeSettingList); + + //查询启用的收费模式 + List enableChargeModeList = objectDao.findByProperty( + ForeignTousseChargeMode.class.getSimpleName(), "isEnable", Constants.STR_YES); + //查询启用的器械包规格 + List enableSpecificationList = objectDao.findByProperty( + ForeignTousseSpecification.class.getSimpleName(), "isEnable", Constants.STR_YES); + + List chargeSettingVoList = new ArrayList(); + for (TousseItem tousseItem : applicationItems) { + ChargeSettingVo vo = new ChargeSettingVo(); + vo = getChargeSettingVoByTousseItem(foreignTousseApplication, tousseItem, chargeSettingMap.get(tousseItem), enableChargeModeList, enableSpecificationList); + chargeSettingVoList.add(vo); + } + result = JSONArray.fromObject(chargeSettingVoList); + return result; + } + + /** + * 物品的收费设置Vo + * @param tousseItem + * @param list + * @return + */ + private ChargeSettingVo getChargeSettingVoByTousseItem(ForeignTousseApplication foreignTousseApplication, TousseItem tousseItem, ChargeSetting chargeSetting, + List enableChargeModeList, List enableSpecificationList) { + ChargeSettingVo vo = null; + if(chargeSetting != null){ + vo = buildChargeSettingVo(tousseItem, chargeSetting, enableChargeModeList, enableSpecificationList); + }else{ + // 查找历史收费设置中和当前物品同名称的收费设置 + vo = getDefaultChargeSettingVoByTousseItem(tousseItem, enableChargeModeList, enableSpecificationList); + if(vo != null){ + return vo; + }else{ + vo = new ChargeSettingVo(); + vo.setInvoicePlanID(foreignTousseApplication.getId()); + vo.setIsDefaultValue(Constants.STR_NO); + vo.setSupplierName(tousseItem.getSupplierName()); + vo.setTotalPrice(0.0); + vo.setTousseDefinitionID(tousseItem.getTousseDefinitionId()); + vo.setTousseDefinitionName(tousseItem.getTousseName()); + //收费模式 + if(CollectionUtils.isNotEmpty(enableChargeModeList)){ + List modeItemVos = new ArrayList(); + //非固定价格的收费模式(对应页面上收费模式下拉框及模式的规格) + ChargeSettingModeItemVo unFixedModeItem = new ChargeSettingModeItemVo(); + unFixedModeItem.setMode(ForeignTousseChargeMode.MODE_RATE); + if(CollectionUtils.isNotEmpty(enableSpecificationList)){ + //器械包规格 + List specItemVos = new ArrayList(); + for (ForeignTousseSpecification spec : enableSpecificationList) { + ChargeSettingSpecItemVo specItemVo = new ChargeSettingSpecItemVo(); + specItemVo.setAmount(0); + specItemVo.setForeignTousseSpecID(spec.getId()); + specItemVo.setForeignTousseSpecName(spec.getName()); + specItemVo.setForeignTousseSpecPrice(spec.getPrice()); + specItemVo.setPrice(0.0); + specItemVo.setTotalPrice(0.0); + specItemVos.add(specItemVo); + } + unFixedModeItem.setChargeSettingSpecItems(specItemVos); + modeItemVos.add(unFixedModeItem); + //固定价格的收费模式 + for (ForeignTousseChargeMode mode : enableChargeModeList) { + if(mode.isFixedPriceMode()){ + ChargeSettingModeItemVo modeItemVo = new ChargeSettingModeItemVo(); + modeItemVo.setFixedAmount(0); + modeItemVo.setFixedPrice(mode.getFixedPrice()); + modeItemVo.setFixedTotalPrice(0.0); + modeItemVo.setForeignTousseChargeModeID(mode.getId()); + modeItemVo.setForeignTousseChargeModeName(mode.getName()); + modeItemVo.setForeignTousseChargeModeRate(mode.getRate()); + modeItemVo.setMode(mode.getMode()); + modeItemVos.add(modeItemVo); + } + } + vo.setChargeSettingModeItems(modeItemVos); + } + } + } + } + return vo; + } + + /** + * 构造收费设置的Vo + * @param tousseItem + * @param chargeSetting + * @param enableChargeModeList + * @param enableSpecificationList + * @return + */ + private ChargeSettingVo buildChargeSettingVo(TousseItem tousseItem, ChargeSetting chargeSetting, + List enableChargeModeList, List enableSpecificationList){ + ChargeSettingVo vo = new ChargeSettingVo(); + if(chargeSetting == null || tousseItem == null){ + return vo; + } + vo.setInvoicePlanID(tousseItem.getInvoicePlanID()); + vo.setTousseDefinitionID(tousseItem.getTousseDefinitionId()); + vo.setTousseDefinitionName(tousseItem.getTousseName()); + vo.setSupplierName(tousseItem.getSupplierName()); + vo.setIsDefaultValue(chargeSetting.getIsDefaultValue()); + vo.setTotalPrice(chargeSetting.getTotalPrice()); + //收费模式 + List modeItems = chargeSetting.getChargeSettingModeItems(); + if(CollectionUtils.isNotEmpty(modeItems)){ + List modeItemVos = new ArrayList(); + for (ChargeSettingModeItem item : modeItems) { + //器械包规格 + List specItems = item.getChargeSettingSpecItems(); + List specItemVos = new ArrayList(); + if(CollectionUtils.isNotEmpty(specItems)){ + for (ChargeSettingSpecItem specItem : specItems) { + ChargeSettingSpecItemVo specItemVo = new ChargeSettingSpecItemVo(); + specItemVo.setAmount(specItem.getAmount()); + specItemVo.setForeignTousseSpecID(specItem.getForeignTousseSpecID()); + specItemVo.setForeignTousseSpecName(specItem.getForeignTousseSpecName()); + specItemVo.setForeignTousseSpecPrice(specItem.getForeignTousseSpecPrice()); + specItemVo.setPrice(specItem.getPrice()); + specItemVo.setTotalPrice(specItem.getTotalPrice()); + specItemVos.add(specItemVo); + } + // 添加没有选中的器械包规格 + specItemVos = addUnSelectedSpecItemVo(specItemVos, enableSpecificationList); + } + ChargeSettingModeItemVo modeItemVo = new ChargeSettingModeItemVo(); + modeItemVo.setFixedAmount(item.getFixedAmount()); + modeItemVo.setFixedPrice(item.getFixedPrice()); + modeItemVo.setFixedTotalPrice(item.getFixedTotalPrice()); + modeItemVo.setForeignTousseChargeModeID(item.getForeignTousseChargeModeID()); + modeItemVo.setForeignTousseChargeModeName(item.getForeignTousseChargeModeName()); + modeItemVo.setForeignTousseChargeModeRate(item.getForeignTousseChargeModeRate()); + modeItemVo.setMode(item.getMode()); + modeItemVo.setChargeSettingSpecItems(specItemVos); + modeItemVos.add(modeItemVo); + } + // 添加没有选中的固定价格的收费模式 + modeItemVos = addUnSelectedFixedPriceModeItemVo(modeItemVos, enableChargeModeList); + vo.setChargeSettingModeItems(modeItemVos); + } + return vo; + } + + /** + * 根据物品名称获取之前最近一次设置的默认收费设置 + * @param tousseItem + * @param enableSpecificationList + * @param enableChargeModeList + * @return + */ + @SuppressWarnings("unchecked") + private ChargeSettingVo getDefaultChargeSettingVoByTousseItem(TousseItem tousseItem, List enableChargeModeList, List enableSpecificationList) { + String sql = String.format("where po.isDefaultValue = '%s' and po.tousseDefinitionID in " + + "(select id from %s where name = '%s') ", + Constants.STR_YES, + TousseDefinition.class.getSimpleName(), + tousseItem.getTousseName()); + int chargeSettingCount = objectDao.countObjectBySql(ChargeSetting.class.getSimpleName(), sql); + if(chargeSettingCount == 0){ + return null; + } + List chargeSettingList = objectDao.findBySql(ChargeSetting.class.getSimpleName(), sql, 0, 1, "po.id desc"); + if(CollectionUtils.isNotEmpty(chargeSettingList)){ + return buildChargeSettingVo(tousseItem, chargeSettingList.get(0), enableChargeModeList, enableSpecificationList); + } + return null; + } + + /** + * 添加没有选中的固定价格收费模式 + * @param modeItemVos + * @param enableChargeModeList + * @return + */ + private List addUnSelectedFixedPriceModeItemVo(List modeItemVos, + List enableChargeModeList) { + List savedModeIDList = new ArrayList(); + for (ChargeSettingModeItemVo vo : modeItemVos) { + savedModeIDList.add(vo.getForeignTousseChargeModeID()); + } + //固定价格的收费模式 + for (ForeignTousseChargeMode mode : enableChargeModeList) { + if(mode.isFixedPriceMode()){ + if(savedModeIDList.contains(mode.getId())){ + continue; + } + ChargeSettingModeItemVo modeItemVo = new ChargeSettingModeItemVo(); + modeItemVo.setFixedAmount(0); + modeItemVo.setFixedPrice(mode.getFixedPrice()); + modeItemVo.setFixedTotalPrice(0.0); + modeItemVo.setForeignTousseChargeModeID(mode.getId()); + modeItemVo.setForeignTousseChargeModeName(mode.getName()); + modeItemVo.setForeignTousseChargeModeRate(mode.getRate()); + modeItemVo.setMode(mode.getMode()); + modeItemVos.add(modeItemVo); + } + } + return modeItemVos; + } + + /** + * 添加没有选中的规格 + * @param specItemVos + * @param enableSpecificationList + * @return + */ + private List addUnSelectedSpecItemVo(List specItemVos, + List enableSpecificationList) { + + List savedSpecIDList = new ArrayList(); + for (ChargeSettingSpecItemVo vo : specItemVos) { + savedSpecIDList.add(vo.getForeignTousseSpecID()); + } + for (ForeignTousseSpecification spec : enableSpecificationList) { + if(savedSpecIDList.contains(spec.getId())){ + continue; + } + ChargeSettingSpecItemVo specItemVo = new ChargeSettingSpecItemVo(); + specItemVo.setAmount(0); + specItemVo.setForeignTousseSpecID(spec.getId()); + specItemVo.setForeignTousseSpecName(spec.getName()); + specItemVo.setForeignTousseSpecPrice(spec.getPrice()); + specItemVo.setPrice(0.0); + specItemVo.setTotalPrice(0.0); + specItemVos.add(specItemVo); + } + return specItemVos; + } + + /** + * 物品的收费设置 + * @param applicationItems + * @param chargeSettingList + * @return + */ + private Map getChargeSettingMap( + List applicationItems, + List chargeSettingList) { + Map chargeSettingMap = new HashMap(); + if(CollectionUtils.isEmpty(chargeSettingList)){ + return chargeSettingMap; + } + Map tousseItemMap = new HashMap(); + for (TousseItem tousseItem : applicationItems) { + tousseItemMap.put(tousseItem.getTousseDefinitionId(), tousseItem); + } + for (ChargeSetting chargeSetting : chargeSettingList) { + Long tousseDefinitionID = chargeSetting.getTousseDefinitionID(); + TousseItem tousseItem = tousseItemMap.get(tousseDefinitionID); + chargeSettingMap.put(tousseItem, chargeSetting); + } + return chargeSettingMap; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSettingModeItem.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSettingModeItem.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSettingModeItem.java (revision 32710) @@ -0,0 +1,155 @@ +package com.forgon.disinfectsystem.entity.foreigntoussecharge; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.CascadeType; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 外来器械包收费设置的收费模式明细 + * @author zhoupeimian + * @since 2021-12-12 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ChargeSettingModeItem { + + private Long id; + + /** + * 收费模式ID + */ + private Long foreignTousseChargeModeID; + + /** + * 设置收费设置时的模式名称,避免修改规格影响历史数据 + */ + private String foreignTousseChargeModeName; + + /** + * 设置收费设置时的模式系数,避免修改规格影响历史数据 + */ + private Double foreignTousseChargeModeRate; + + /** + * 收费模式类型 + */ + private String mode; + + /** + * 单价 = 规格价格 * 模式系数;或者 固定值模式的价格 + */ + private Double fixedPrice; + + /** + * 数量 + */ + private Integer fixedAmount; + + /** + * 金额 = 单价 * 数量 + */ + private Double fixedTotalPrice; + + /** + * 外来器械收费模式的器械包规格收费明细 + */ + @JsonIgnore + private List chargeSettingSpecItems = new ArrayList(); + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getForeignTousseChargeModeID() { + return foreignTousseChargeModeID; + } + + public void setForeignTousseChargeModeID(Long foreignTousseChargeModeID) { + this.foreignTousseChargeModeID = foreignTousseChargeModeID; + } + + public String getForeignTousseChargeModeName() { + return foreignTousseChargeModeName; + } + + public void setForeignTousseChargeModeName(String foreignTousseChargeModeName) { + this.foreignTousseChargeModeName = foreignTousseChargeModeName; + } + + public Double getForeignTousseChargeModeRate() { + return foreignTousseChargeModeRate; + } + + public void setForeignTousseChargeModeRate(Double foreignTousseChargeModeRate) { + this.foreignTousseChargeModeRate = foreignTousseChargeModeRate; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public Double getFixedPrice() { + return fixedPrice; + } + + public void setFixedPrice(Double fixedPrice) { + this.fixedPrice = fixedPrice; + } + + public Integer getFixedAmount() { + return fixedAmount; + } + + public void setFixedAmount(Integer fixedAmount) { + this.fixedAmount = fixedAmount; + } + + public Double getFixedTotalPrice() { + return fixedTotalPrice; + } + + public void setFixedTotalPrice(Double fixedTotalPrice) { + this.fixedTotalPrice = fixedTotalPrice; + } + + @OneToMany(fetch = FetchType.LAZY) + @Cascade(value = { CascadeType.ALL }) + @JoinColumn(name = "setting_mode_id") + public List getChargeSettingSpecItems() { + return chargeSettingSpecItems; + } + + public void setChargeSettingSpecItems( + List chargeSettingSpecItems) { + this.chargeSettingSpecItems = chargeSettingSpecItems; + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseSpecificationManager.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseSpecificationManager.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/service/ForeignTousseSpecificationManager.java (revision 32710) @@ -0,0 +1,14 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.service; + +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseSpecification; +import com.forgon.tools.hibernate.BasePoManager; + +public interface ForeignTousseSpecificationManager extends BasePoManager{ + + /** + * 删除 + * @param ids + */ + public void deleteForeignTousseSpecification(String ids); + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ForeignTousseChargeModeAction.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ForeignTousseChargeModeAction.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntoussecharge/action/ForeignTousseChargeModeAction.java (revision 32710) @@ -0,0 +1,154 @@ +package com.forgon.disinfectsystem.foreigntoussecharge.action; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.disinfectsystem.entity.foreigntoussecharge.ForeignTousseChargeMode; +import com.forgon.disinfectsystem.foreigntoussecharge.service.ForeignTousseChargeModeManager; +import com.forgon.disinfectsystem.vo.ForeignTousseChargeModeVo; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem/foreigntoussecharge") +@Action(value = "foreignTousseChargeModeAction") +public class ForeignTousseChargeModeAction implements Preparable, ModelDriven { + + private ForeignTousseChargeMode foreignTousseChargeMode; + + private ForeignTousseChargeModeManager foreignTousseChargeModeManager; + + public void setForeignTousseChargeModeManager( + ForeignTousseChargeModeManager foreignTousseChargeModeManager) { + this.foreignTousseChargeModeManager = foreignTousseChargeModeManager; + } + + /** + * 查看外来器械收费模式 + */ + public void loadForeignTousseChargeMode(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONObject data = new JSONObject(); + try { + if(foreignTousseChargeMode != null && DatabaseUtil.isPoIdValid(foreignTousseChargeMode.getId())){ + data = JSONObject.fromObject(foreignTousseChargeMode); + JSONUtil.addProperty(json, "data", data); + }else{ + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "数据不存在!"); + } + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "查询失败:" + e.getMessage()); + } + StrutsResponseUtils.output(json); + } + + /** + * 保存或修改 + */ + public void saveOrUpdateForeignTousseChargeMode(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONUtil.addMessage(json, "保存成功!"); + + try { + foreignTousseChargeModeManager.save(foreignTousseChargeMode); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "保存失败:" + e.getMessage()); + } + + StrutsResponseUtils.output(json); + } + + /** + * 删除 + */ + public void deleteForeignTousseChargeMode(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONUtil.addMessage(json, "删除成功!"); + + try { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + foreignTousseChargeModeManager.deleteForeignTousseChargeMode(ids); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "删除失败:" + e.getMessage()); + } + + StrutsResponseUtils.output(json); + } + + /** + * 加载外来器械包收费模式设置列表 + */ + public void loadForeignTousseChargeModeList(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONArray data = new JSONArray(); + try { + List foreignTousseChargeModeList = foreignTousseChargeModeManager.getAll(); + if(CollectionUtils.isNotEmpty(foreignTousseChargeModeList)){ + data = JSONArray.fromObject(foreignTousseChargeModeList); + } + } catch (Exception e) { + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "查询失败:" + e.getMessage()); + } + JSONUtil.addProperty(json, "data", data); + StrutsResponseUtils.output(json); + } + + /** + * 查询外来器械包收费模式下拉列表 + */ + public void searchEnableAndInvoicePlanForeignTousseChargeModeList(){ + JSONObject json = new JSONObject(); + JSONUtil.addSuccess(json, true); + JSONArray data = new JSONArray(); + try { + Long tousseDefinitionID = StrutsParamUtils.getPraramLongValue("tousseDefinitionID", null); + List foreignTousseChargeModeVoList = foreignTousseChargeModeManager.searchEnableAndInvoicePlanForeignTousseChargeModeList(tousseDefinitionID); + if(CollectionUtils.isNotEmpty(foreignTousseChargeModeVoList)){ + data = JSONArray.fromObject(foreignTousseChargeModeVoList); + } + } catch (Exception e) { + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "查询失败:" + e.getMessage()); + } + JSONUtil.addProperty(json, "data", data); + StrutsResponseUtils.output(json); + } + + @Override + public ForeignTousseChargeMode getModel() { + return foreignTousseChargeMode; + } + + @Override + public void prepare() throws Exception { + foreignTousseChargeMode = new ForeignTousseChargeMode(); + String id = StrutsParamUtils.getPraramValue("id", ""); + if(DatabaseUtil.isPoIdValid(id)){ + foreignTousseChargeMode = foreignTousseChargeModeManager.get(id); + } + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSettingSpecItem.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSettingSpecItem.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/foreigntoussecharge/ChargeSettingSpecItem.java (revision 32710) @@ -0,0 +1,114 @@ +package com.forgon.disinfectsystem.entity.foreigntoussecharge; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 外来器械收费模式的器械包规格收费明细 + * @author zhoupeimian + * @since 2021-12-12 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class ChargeSettingSpecItem { + + private Long id; + + /** + * 外来器械包规格ID + */ + private Long foreignTousseSpecID; + + /** + * 设置外来器械包规格时的名称,避免修改规格影响历史数据 + */ + private String foreignTousseSpecName; + + /** + * 设置外来器械包规格时的价格,避免修改规格影响历史数据 + */ + private Double foreignTousseSpecPrice; + + /** + * 单价 = 规格价格 * 模式系数;或者 固定值模式的价格 + */ + private Double price; + + /** + * 数量 + */ + private Integer amount; + + /** + * 金额 = 单价 * 数量 + */ + private Double totalPrice; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getForeignTousseSpecID() { + return foreignTousseSpecID; + } + + public void setForeignTousseSpecID(Long foreignTousseSpecID) { + this.foreignTousseSpecID = foreignTousseSpecID; + } + + public String getForeignTousseSpecName() { + return foreignTousseSpecName; + } + + public void setForeignTousseSpecName(String foreignTousseSpecName) { + this.foreignTousseSpecName = foreignTousseSpecName; + } + + public Double getForeignTousseSpecPrice() { + return foreignTousseSpecPrice; + } + + public void setForeignTousseSpecPrice(Double foreignTousseSpecPrice) { + this.foreignTousseSpecPrice = foreignTousseSpecPrice; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Integer getAmount() { + return amount; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + public Double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(Double totalPrice) { + this.totalPrice = totalPrice; + } + +}