/** * 功能描述: 保存子表修改记录 创建人:yudajun 创建时间:2014-4-22 下午5:38:04 修改人:yudajun 修改时间:2014-4-22 下午5:38:04 修改备注: * 参数: @param oldObject 参数: @param newObject * * @version */ public void saveQuotationModifyRecord( List<Quotation> oldList, List<Quotation> newList, Long mainId) { List<ModifyRecord> recordList = new ArrayList<ModifyRecord>(); Map<Long, Quotation> oldMap = new HashMap<Long, Quotation>(); for (int i = 0; i < oldList.size(); i++) { Quotation old = new Quotation(); old = oldList.get(i).clone(); oldMap.put(old.getId(), old); } List<BillingModel> billmodelList = billingModelService.getAll(); Map<String, Long> billModeMap = new HashMap<String, Long>(); for (BillingModel model : billmodelList) { billModeMap.put(model.getName().toLowerCase(), model.getId()); } List<Quotation> addList = new ArrayList<Quotation>(); for (int i = 0; i < newList.size(); i++) { Quotation newObject = newList.get(i); if (oldMap.containsKey(newObject.getId())) { // Quotation oldObject = oldMap.get(newObject.getId()).clone(); if (oldObject != null && PriceType.ratio.equals(oldObject.getPriceType())) { // 分成 if (oldObject.getRatioMine() != null && newObject.getRatioMine() != null && oldObject.getRatioMine().compareTo(newObject.getRatioMine()) != 0) { ModifyRecord record = getNewModifyRecord(newObject.getQuotationMainId()); record.setOperateType(OperateType.modify); record.setModifyField(MODIFY_RECORD_FIELD_RATIOMINE); record.setOldValue(String.valueOf(oldObject.getRatioMine().doubleValue())); record.setNewValue(String.valueOf(newObject.getRatioMine().doubleValue())); recordList.add(record); } if (oldObject.getRatioCustomer() != null && newObject.getRatioCustomer() != null && oldObject.getRatioCustomer().compareTo(newObject.getRatioCustomer()) != 0) { ModifyRecord record = getNewModifyRecord(newObject.getQuotationMainId()); record.setOperateType(OperateType.modify); record.setModifyField(MODIFY_RECORD_FIELD_RATIOCUS); record.setOldValue(String.valueOf(oldObject.getRatioCustomer().doubleValue())); record.setNewValue(String.valueOf(newObject.getRatioCustomer().doubleValue())); recordList.add(record); } if (oldObject.getRatioThird() != null && newObject.getRatioThird() != null && oldObject.getRatioThird().compareTo(newObject.getRatioThird()) != 0) { ModifyRecord record = getNewModifyRecord(newObject.getQuotationMainId()); record.setOperateType(OperateType.modify); record.setModifyField(MODIFY_RECORD_FIELD_RATIO3TH); record.setOldValue(String.valueOf(oldObject.getRatioThird().doubleValue())); record.setNewValue(String.valueOf(newObject.getRatioThird().doubleValue())); recordList.add(record); } oldMap.remove(newObject.getId()); continue; } if (oldObject != null && PriceType.rebate.equals(oldObject.getPriceType())) { // 返点 if (oldObject.getRatioRebate() != null && newObject.getRatioRebate() != null && oldObject.getRatioRebate().compareTo(newObject.getRatioRebate()) != 0) { ModifyRecord record = getNewModifyRecord(newObject.getQuotationMainId()); record.setOperateType(OperateType.modify); record.setModifyField(MODIFY_RECORD_FIELD_RATIOREBATE); record.setOldValue(String.valueOf(oldObject.getRatioRebate().doubleValue())); record.setNewValue(String.valueOf(newObject.getRatioRebate().doubleValue())); recordList.add(record); } oldMap.remove(newObject.getId()); continue; } if (oldObject != null && PriceType.unit.equals(oldObject.getPriceType())) { // 单价 if (billModeMap.get("cps").equals(oldObject.getBillingModelId())) { if (oldObject.getRatioMine() != null && newObject.getRatioMine() != null && oldObject.getRatioMine().compareTo(newObject.getRatioMine()) != 0) { ModifyRecord record = getNewModifyRecord(newObject.getQuotationMainId()); record.setOperateType(OperateType.modify); record.setModifyField(MODIFY_RECORD_FIELD_CPS + "." + oldObject.getIndustryId()); record.setNewValue(String.valueOf(newObject.getRatioMine().doubleValue())); record.setOldValue(String.valueOf(oldObject.getRatioMine().doubleValue())); if (newObject.getId() == null) { // 如果没有id,认为是新增的 addList.add(newObject); continue; } else { oldMap.remove(newObject.getId()); } recordList.add(record); } } else if (oldObject.getPublishPrice() != null && newObject.getPublishPrice() != null && oldObject.getPublishPrice().compareTo(newObject.getPublishPrice()) != 0) { ModifyRecord record = getNewModifyRecord(newObject.getQuotationMainId()); record.setOperateType(OperateType.modify); if (billModeMap.get("cpa").equals(oldObject.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPA); } if (billModeMap.get("cpc").equals(oldObject.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPC); } if (billModeMap.get("cpt").equals(oldObject.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPT); } if (billModeMap.get("cpm").equals(oldObject.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPM); } record.setOldValue(String.valueOf(oldObject.getPublishPrice().doubleValue())); record.setNewValue(String.valueOf(newObject.getPublishPrice().doubleValue())); if (newObject.getId() == null) { // 如果没有id,认为是新增的 addList.add(newObject); continue; } else { oldMap.remove(newObject.getId()); } recordList.add(record); } } oldMap.remove(newObject.getId()); } else { addList.add(newObject); } } if (CollectionUtils.isNotEmpty(addList)) { for (Quotation add : addList) { ModifyRecord record = getNewModifyRecord(add.getQuotationMainId()); record.setOperateType(OperateType.insert); if (add != null && PriceType.unit.equals(add.getPriceType())) { // 单价 if (billModeMap.get("cps").equals(add.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPS + "." + add.getIndustryId()); record.setNewValue(String.valueOf(add.getRatioMine().doubleValue())); } else { if (billModeMap.get("cpa").equals(add.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPA); } if (billModeMap.get("cpc").equals(add.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPC); } if (billModeMap.get("cpt").equals(add.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPT); } if (billModeMap.get("cpm").equals(add.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPM); } record.setNewValue(String.valueOf(add.getPublishPrice().doubleValue())); } } if (add != null && PriceType.rebate.equals(add.getPriceType())) { // 返点 record.setModifyField(MODIFY_RECORD_FIELD_RATIOREBATE); record.setNewValue(String.valueOf(add.getRatioRebate().doubleValue())); } if (add != null && PriceType.ratio.equals(add.getPriceType())) { // 分成 record.setModifyField(MODIFY_RECORD_FIELD_RATIOREBATE); record.setNewValue(String.valueOf(add.getRatioMine().doubleValue())); } recordList.add(record); } } if (!oldMap.isEmpty()) { for (Long key : oldMap.keySet()) { Quotation delete = oldMap.get(key); ModifyRecord record = getNewModifyRecord(delete.getQuotationMainId()); if (delete != null && PriceType.unit.equals(delete.getPriceType())) { // 单价 if (billModeMap.get("cps").equals(delete.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPS + "." + delete.getIndustryId()); record.setOldValue(String.valueOf(delete.getRatioMine().doubleValue())); } else { if (billModeMap.get("cpa").equals(delete.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPA); } if (billModeMap.get("cpc").equals(delete.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPC); } if (billModeMap.get("cpt").equals(delete.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPT); } if (billModeMap.get("cpm").equals(delete.getBillingModelId())) { record.setModifyField(MODIFY_RECORD_FIELD_CPM); } record.setOldValue(String.valueOf(delete.getPublishPrice().doubleValue())); } } if (delete != null && PriceType.rebate.equals(delete.getPriceType())) { // 返点 record.setModifyField(MODIFY_RECORD_FIELD_RATIOREBATE); record.setOldValue(String.valueOf(delete.getRatioRebate().doubleValue())); } if (delete != null && PriceType.ratio.equals(delete.getPriceType())) { // 分成 record.setModifyField(MODIFY_RECORD_FIELD_RATIOREBATE); record.setOldValue(String.valueOf(delete.getRatioMine().doubleValue())); } record.setOperateType(OperateType.delete); recordList.add(record); } } if (CollectionUtils.isNotEmpty(recordList)) { modifyRecordRepository.save(recordList); } }