package target; import java.util.Calendar; import foundation.action.ActionProvider; import foundation.dao.DataPackage; import foundation.dao.DataSource; import foundation.dao.Filter; import foundation.data.entity.Entity; import foundation.data.entity.EntitySet; import foundation.data.object.DataObject; import foundation.io.IOContext; import foundation.persist.NamedSQL; import foundation.persist.SQLRunner; public class TargetHandler extends ActionProvider { @Override protected void publishMethod() { //1. 指标计算 addMethod("targetCalculate"); //2. 经销商指标汇总 addMethod("dealerTargetCollection"); } public void targetCalculate() throws Exception { String targetTypeCode = context.getParam(); TargetType targetType = TargetType.parse(targetTypeCode); targetType.loadPackage(); SQLRunner.beginTrans(); try { //1. 删除本年度指标计算 Calendar calendar = Calendar.getInstance(); DataObject dataObject = DataObject.getInstance("business_data_summary"); Filter filter = new Filter(); filter.add("title_code", targetType.getCode()); filter.add("year", calendar.get(Calendar.YEAR)); dataObject.deleteEntity(filter); NamedSQL namedSQL = NamedSQL.getInstance("summaryMonthTarget"); namedSQL = setParams(namedSQL, targetType); //1. 分岗位汇总月度(有指标) for (int i = 1; i <= 12; i++) { String month = "_m" + i; namedSQL.setParam("monthAmtTarget", "amt" + month); namedSQL.setParam("monthQtyTarget", "qty" + month); namedSQL.setParam("month", i); SQLRunner.execSQL(namedSQL); } //2. 分岗位汇总月度(无指标) namedSQL = NamedSQL.getInstance("summaryMonthAchieveWithoutTarget"); namedSQL = setParams(namedSQL, targetType); for (int i = 1; i <= 12; i++) { String month = "_m" + i; namedSQL.setParam("monthAmtTarget", "amt" + month); namedSQL.setParam("monthQtyTarget", "qty" + month); namedSQL.setParam("month", i); SQLRunner.execSQL(namedSQL); } //3. 汇总季度 namedSQL = NamedSQL.getInstance("summarySeasonTarget"); namedSQL.setParam("code", targetType.getCode()); SQLRunner.execSQL(namedSQL); //4. 汇总年度 namedSQL = NamedSQL.getInstance("summaryYearTarget"); namedSQL.setParam("code", targetType.getCode()); SQLRunner.execSQL(namedSQL); }catch (Exception e) { SQLRunner.rollback(); return ; } SQLRunner.commit(); } public void dealerTargetCollection() throws Exception { String targetTable; DataObject dataObject; TargetType targetType; NamedSQL namedSQL = NamedSQL.getInstance("getAuthorizeDealer"); Filter filter = new Filter(); String operator = dataReader.getOperator(); if ("importData".equalsIgnoreCase(operator)) { //2. from import IOContext ioContext = context.getContext(IOContext.class); String ioBatchId = ioContext.getIoBatchId(); filter.add("io_batch_id", ioBatchId); targetTable = context.getDataName(); String tempDataName = "temp_" + targetTable; dataObject = DataObject.getInstance(tempDataName); targetType = TargetType.parseByTableName(targetTable); NamedSQL checkImportError = NamedSQL.getInstance("importGetImportErrors"); checkImportError.setParam("ioBatchId", ioBatchId); checkImportError.setParam("toTempTable", tempDataName); EntitySet errorSet = checkImportError.getEntitySet(); if (!errorSet.isEmpty()) { return; } } else { //1. from request DataPackage dataPackage = dataReader.getDataPackage(); Entity master = dataPackage.getMasterEntity(DataSource.Request); filter.add("temp_md_target_dealer_hospital.hospital_id", master.getString("hospital_id")); filter.add("year", master.getString("year")); dataObject = dataPackage.getMasterDataObject(); targetTable = dataObject.getTableName(); targetType = TargetType.parseByTableName(targetTable); } namedSQL.setFilter(filter); namedSQL.setParam("targetTable", dataObject.getTableName()); EntitySet entitySet = SQLRunner.getEntitySet(namedSQL); dataObject = DataObject.getInstance("md_target_dealer"); for (Entity entity: entitySet) { SQLRunner.beginTrans(); try { String orgId = entity.getString("org_id"); String buId = entity.getString("bu_id"); String companyId = entity.getString("company_id"); String year = entity.getString("year"); Filter deleteFilter = new Filter(); deleteFilter.add("org_id", orgId); deleteFilter.add("bu_id", buId); deleteFilter.add("company_id", companyId); deleteFilter.add("year", year); deleteFilter.add("type_code", targetType.getCode()); dataObject.deleteEntity(deleteFilter); namedSQL = NamedSQL.getInstance("collectDealerTarget"); namedSQL.setParam("typeCode", targetType.getCode()); namedSQL.setParam("typeName", targetType.getName()); namedSQL.setParam("targetTable", targetTable); namedSQL.setParam("orgId", orgId); namedSQL.setParam("buId", buId); namedSQL.setParam("companyId", companyId); namedSQL.setParam("year", year); EntitySet dealerTargets = SQLRunner.getEntitySet(namedSQL); for (Entity oneDealerTarget: dealerTargets) { dataObject.saveEntity(oneDealerTarget); } }catch (Exception e) { SQLRunner.rollback(); } SQLRunner.commit(); } } private NamedSQL setParams(NamedSQL namedSQL, TargetType targetType) throws Exception { namedSQL.setParam("code", targetType.getCode()); namedSQL.setParam("name", targetType.getName()); namedSQL.setParam("joinSql", targetType.getJoinSql()); namedSQL.setParam("amtAchieve", targetType.getAmtField()); namedSQL.setParam("qtyAchieve", targetType.getQtyField()); namedSQL.setParam("targetTable", targetType.getTableName()); namedSQL.setParam("positionTable", targetType.getPositionTable()); namedSQL.setParam("document", targetType.getDocument()); namedSQL.setParam("documentDetail", targetType.getDocumentDetail()); namedSQL.setParam("documentPosition", targetType.getDocumentPosition()); return namedSQL; } }