Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35883 -r35895 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35883) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35895) @@ -6552,144 +6552,9 @@ @Override public List queryForeignTousseSizeReportData( String startDate, String endDate, String supplier, JSONArray foreignTousseSizeSettingArr, Map parametMap) { - ResultSet rs = null; - Map supplierMap = new HashMap(); - String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDate + " 00:00:00"),dateQueryAdapter.dateAdapter(endDate + " 23:59:59")); - try { - Map firstContactNameOfSupplierMap = queryFirstContactNameOfSupplier(); - String caseWhenSql = " case "; - for (int i = 0; i < foreignTousseSizeSettingArr.size(); i++) { - JSONObject obj = (JSONObject)foreignTousseSizeSettingArr.get(i); - String sizeName = obj.optString("sizeName"); - int minNumber = obj.optInt("minNumber"); - int maxNumber = obj.optInt("maxNumber"); - if(minNumber == maxNumber){ - parametMap.put("column" + i, sizeName + "("+ minNumber +"件)"); - caseWhenSql += " when miCount>=" + minNumber + " and miCount<=" + maxNumber + " then '" + i + "_" + sizeName + "' "; - }else if(obj.optBoolean("isInfinite")){//无穷大的 没有最大值 - parametMap.put("column" + i, sizeName + "("+ minNumber +"件以上)"); - caseWhenSql += " when miCount>=" + minNumber + " then '" + i + "_" + sizeName + "' "; - }else{ - parametMap.put("column" + i, sizeName + "("+ minNumber +"件~"+ maxNumber +"件)"); - caseWhenSql += " when miCount>=" + minNumber + " and miCount<=" + maxNumber + " then '" + i + "_" + sizeName + "' "; - } - } - caseWhenSql += " else '未设置' end tousseSize "; - Set readedIds = new HashSet(); - StringBuilder sbrSql = new StringBuilder(1000); - sbrSql.append("select supplierName,tousseSize,count(*) tousseAmount from (select supplierName,") - .append(caseWhenSql) - .append(" from (select ti.id tiid,td.supplierName,ip.id,ip.urgent,") - .append("(select sum(count) from ") - .append(MaterialInstance.class.getSimpleName()) - .append(" where tousse_id=td.id) miCount from ") - .append(TousseInstance.class.getSimpleName()) - .append(" ti join ") - .append(TousseDefinition.class.getSimpleName()) - .append(" td on td.id=ti.tousseDefinition_id ") - .append(" left join ") - .append(InvoicePlan.class.getSimpleName()) - .append(" ip on ip.id=ti.foreignTousseApp_id ") - .append(" where ip.id is not null and ti.operationTime ") - .append(betweenSql) - .append(" and td.tousseType in('") - .append(TousseDefinition.PACKAGE_TYPE_SPLIT) - .append("','") - .append(TousseDefinition.PACKAGE_TYPE_FOREIGN) - .append("') "); - if(StringUtils.isNotBlank(supplier)){ - sbrSql.append(" and td.supplierName='").append(supplier).append("' "); - } - sbrSql.append(" )temp)temp2 group by supplierName,tousseSize order by supplierName,tousseSize "); - rs = objectDao.executeSql(sbrSql.toString()); - while (rs.next()) { - String supplierName = rs.getString("supplierName"); - if(StringUtils.isBlank(supplierName)){ - supplierName = null; - } - String size = rs.getString("tousseSize"); - Long tousseAmount = rs.getLong("tousseAmount"); - ForeignTousseSizeReportBean bean = null; - if(supplierMap.containsKey(supplierName)){ - bean = supplierMap.get(supplierName); - }else{ - bean = new ForeignTousseSizeReportBean(); - bean.setSupplierName(supplierName); - bean.setSupplierContactName(firstContactNameOfSupplierMap.get(supplierName)); - supplierMap.put(supplierName, bean); - } - if(size.contains("0_")){ - bean.setSizeValue0(tousseAmount); - }else if(size.contains("1_")){ - bean.setSizeValue1(tousseAmount); - }else if(size.contains("2_")){ - bean.setSizeValue2(tousseAmount); - }else if(size.contains("3_")){ - bean.setSizeValue3(tousseAmount); - } - } - } catch (Exception e) { - e.printStackTrace(); - }finally{ - DatabaseUtil.closeResultSetAndStatement(rs); - } - ResultSet rsQueryUrgent = null; - try { - StringBuilder sbrSql = new StringBuilder(1000); - sbrSql.append("select td.supplierName ,count(distinct ip.id) urgentAppAmount from ") - .append(TousseInstance.class.getSimpleName()) - .append(" ti join ") - .append(TousseDefinition.class.getSimpleName()) - .append(" td on td.id=ti.tousseDefinition_id join ") - .append(InvoicePlan.class.getSimpleName()) - .append(" ip on ip.id=ti.foreignTousseApp_id ") - .append(" where ti.operationTime ") - .append(betweenSql); - if(StringUtils.isNotBlank(supplier)){ - sbrSql.append(" and td.supplierName='").append(supplier).append("' "); - } - sbrSql.append(" and ip.urgent='是' group by td.supplierName"); - rsQueryUrgent = objectDao.executeSql(sbrSql.toString()); - while (rsQueryUrgent.next()) { - String supplierName = rsQueryUrgent.getString("supplierName"); - Long urgentAppAmount = rsQueryUrgent.getLong("urgentAppAmount"); - ForeignTousseSizeReportBean bean = supplierMap.get(supplierName); - if(bean != null){ - bean.setUrgentAppAmount(urgentAppAmount); - } - } - } catch (Exception e) { - e.printStackTrace(); - }finally{ - DatabaseUtil.closeResultSetAndStatement(rsQueryUrgent); - } - return Arrays.asList(supplierMap.values().toArray()); + return foreignTousseReportHelper.queryForeignTousseSizeReportData(startDate, endDate, supplier, foreignTousseSizeSettingArr, parametMap); } - /** - * 获取系统供应室对应的第一个联系人 - */ - private Map queryFirstContactNameOfSupplier(){ - String sql = "select contactName,companyName from (select ROW_NUMBER() over(partition by supplier_id order by sequence) rowNum1,s.companyName,sc.contactName from " - + SupplierContact.class.getSimpleName() - + " sc join " - + Supplier.class.getSimpleName() - + " s on s.id=sc.supplier_id) tempTable where rowNum1=1"; - ResultSet rs = null; - Map supplierToContactNameMap = new HashMap(); - try { - rs = objectDao.executeSql(sql); - while (rs.next()) { - String contactName = rs.getString("contactName"); - String companyName = rs.getString("companyName"); - supplierToContactNameMap.put(companyName, contactName); - } - } catch (Exception e) { - e.printStackTrace(); - }finally{ - DatabaseUtil.closeResultSetAndStatement(rs); - } - return supplierToContactNameMap; - } + @Override public List queryForeignTousseApplicationSummaryReport( String startDay, String endDay, String companyName, String foreignTousseName, Long chargingModeId, Long specificationId) { Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/ForeignTousseReportHelper.java =================================================================== diff -u -r35883 -r35895 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/ForeignTousseReportHelper.java (.../ForeignTousseReportHelper.java) (revision 35883) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/ForeignTousseReportHelper.java (.../ForeignTousseReportHelper.java) (revision 35895) @@ -2,20 +2,36 @@ import java.sql.ResultSet; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.supplier.Supplier; +import com.forgon.disinfectsystem.entity.basedatamanager.supplier.SupplierContact; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.reportforms.CustomTimePeriod; +import com.forgon.disinfectsystem.jasperreports.javabeansource.ForeignTousseSizeReportBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.ForeignTousseSupplierStatisticsReportVO; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.util.SqlUtils; + +import edu.emory.mathcs.backport.java.util.Arrays; /** * 外来器械包供应商统计报表 - * + * 外来器械包大小统计报表 */ @Component public class ForeignTousseReportHelper { @@ -155,4 +171,143 @@ } return vos; } + public List queryForeignTousseSizeReportData( + String startDate, String endDate, String supplier, JSONArray foreignTousseSizeSettingArr, Map parametMap) { + ResultSet rs = null; + Map supplierMap = new HashMap(); + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDate + " 00:00:00"),dateQueryAdapter.dateAdapter(endDate + " 23:59:59")); + try { + Map firstContactNameOfSupplierMap = queryFirstContactNameOfSupplier(); + String caseWhenSql = " case "; + for (int i = 0; i < foreignTousseSizeSettingArr.size(); i++) { + JSONObject obj = (JSONObject)foreignTousseSizeSettingArr.get(i); + String sizeName = obj.optString("sizeName"); + int minNumber = obj.optInt("minNumber"); + int maxNumber = obj.optInt("maxNumber"); + if(minNumber == maxNumber){ + parametMap.put("column" + i, sizeName + "("+ minNumber +"件)"); + caseWhenSql += " when miCount>=" + minNumber + " and miCount<=" + maxNumber + " then '" + i + "_" + sizeName + "' "; + }else if(obj.optBoolean("isInfinite")){//无穷大的 没有最大值 + parametMap.put("column" + i, sizeName + "("+ minNumber +"件以上)"); + caseWhenSql += " when miCount>=" + minNumber + " then '" + i + "_" + sizeName + "' "; + }else{ + parametMap.put("column" + i, sizeName + "("+ minNumber +"件~"+ maxNumber +"件)"); + caseWhenSql += " when miCount>=" + minNumber + " and miCount<=" + maxNumber + " then '" + i + "_" + sizeName + "' "; + } + } + caseWhenSql += " else '未设置' end tousseSize "; + StringBuilder sbrSql = new StringBuilder(1000); + sbrSql.append("select supplierName,tousseSize,count(*) tousseAmount from (select supplierName,") + .append(caseWhenSql) + .append(" from (select ti.id tiid,td.supplierName,ip.id,ip.urgent,") + .append("(select sum(count) from ") + .append(MaterialInstance.class.getSimpleName()) + .append(" where tousse_id=td.id) miCount from ") + .append(TousseInstance.class.getSimpleName()) + .append(" ti join ") + .append(TousseDefinition.class.getSimpleName()) + .append(" td on td.id=ti.tousseDefinition_id ") + .append(" left join ") + .append(InvoicePlan.class.getSimpleName()) + .append(" ip on ip.id=ti.foreignTousseApp_id ") + .append(" where ip.id is not null and ti.operationTime ") + .append(betweenSql) + .append(" and td.tousseType in('") + .append(TousseDefinition.PACKAGE_TYPE_SPLIT) + .append("','") + .append(TousseDefinition.PACKAGE_TYPE_FOREIGN) + .append("') "); + if(StringUtils.isNotBlank(supplier)){ + sbrSql.append(" and td.supplierName='").append(supplier).append("' "); + } + sbrSql.append(" )temp)temp2 group by supplierName,tousseSize order by supplierName,tousseSize "); + rs = objectDao.executeSql(sbrSql.toString()); + while (rs.next()) { + String supplierName = rs.getString("supplierName"); + if(StringUtils.isBlank(supplierName)){ + supplierName = null; + } + String size = rs.getString("tousseSize"); + Long tousseAmount = rs.getLong("tousseAmount"); + ForeignTousseSizeReportBean bean = null; + if(supplierMap.containsKey(supplierName)){ + bean = supplierMap.get(supplierName); + }else{ + bean = new ForeignTousseSizeReportBean(); + bean.setSupplierName(supplierName); + bean.setSupplierContactName(firstContactNameOfSupplierMap.get(supplierName)); + supplierMap.put(supplierName, bean); + } + if(size.contains("0_")){ + bean.setSizeValue0(tousseAmount); + }else if(size.contains("1_")){ + bean.setSizeValue1(tousseAmount); + }else if(size.contains("2_")){ + bean.setSizeValue2(tousseAmount); + }else if(size.contains("3_")){ + bean.setSizeValue3(tousseAmount); + } + } + } catch (Exception e) { + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + ResultSet rsQueryUrgent = null; + try { + StringBuilder sbrSql = new StringBuilder(1000); + sbrSql.append("select td.supplierName ,count(distinct ip.id) urgentAppAmount from ") + .append(TousseInstance.class.getSimpleName()) + .append(" ti join ") + .append(TousseDefinition.class.getSimpleName()) + .append(" td on td.id=ti.tousseDefinition_id join ") + .append(InvoicePlan.class.getSimpleName()) + .append(" ip on ip.id=ti.foreignTousseApp_id ") + .append(" where ti.operationTime ") + .append(betweenSql); + if(StringUtils.isNotBlank(supplier)){ + sbrSql.append(" and td.supplierName='").append(supplier).append("' "); + } + sbrSql.append(" and ip.urgent='是' group by td.supplierName"); + rsQueryUrgent = objectDao.executeSql(sbrSql.toString()); + while (rsQueryUrgent.next()) { + String supplierName = rsQueryUrgent.getString("supplierName"); + Long urgentAppAmount = rsQueryUrgent.getLong("urgentAppAmount"); + ForeignTousseSizeReportBean bean = supplierMap.get(supplierName); + if(bean != null){ + bean.setUrgentAppAmount(urgentAppAmount); + } + } + } catch (Exception e) { + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rsQueryUrgent); + } + return Arrays.asList(supplierMap.values().toArray()); + } + /** + * 获取系统供应室对应的第一个联系人 + */ + private Map queryFirstContactNameOfSupplier(){ + String sql = "select contactName,companyName from (select ROW_NUMBER() over(partition by supplier_id order by sequence) rowNum1,s.companyName,sc.contactName from " + + SupplierContact.class.getSimpleName() + + " sc join " + + Supplier.class.getSimpleName() + + " s on s.id=sc.supplier_id) tempTable where rowNum1=1"; + ResultSet rs = null; + Map supplierToContactNameMap = new HashMap(); + try { + rs = objectDao.executeSql(sql); + while (rs.next()) { + String contactName = rs.getString("contactName"); + String companyName = rs.getString("companyName"); + supplierToContactNameMap.put(companyName, contactName); + } + } catch (Exception e) { + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + return supplierToContactNameMap; + } }