Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStorageRecordManagerImpl.java =================================================================== diff -u -r30434 -r30483 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStorageRecordManagerImpl.java (.../DisposableGoodsStorageRecordManagerImpl.java) (revision 30434) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsStorageRecordManagerImpl.java (.../DisposableGoodsStorageRecordManagerImpl.java) (revision 30483) @@ -415,96 +415,123 @@ StringBuilder sb = new StringBuilder(); Set warehosueIds = wareHouseManager.getCurrentUserOrgUnitWarehouseIds(); sb.append("select * from ( "); - //入库单 - sb.append("select ge.type,ge.subType,ge.warehouseName,dg.name,dg.specification, sum(gei.amount) as amount, gei.cost as price, sum(gei.amount*gei.cost) as totalPrice "); - sb.append("from GodownEntry ge "); - sb.append("inner join GodownEntryItem gei on gei.godownEntry_id = ge.id "); - sb.append("inner join DisposableGoods dg on dg.id = gei.disposableGoodsID "); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ - sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + + if(CollectionUtils.isEmpty(departCodeList) && StringUtils.isBlank(settleAccountsDepartCoding)){ + //入库单 + sb.append("select ge.type,ge.subType,ge.warehouseName,dg.name,dg.specification, sum(gei.amount) as amount, gei.cost as price, sum(gei.amount*gei.cost) as totalPrice "); + sb.append("from GodownEntry ge "); + sb.append("inner join GodownEntryItem gei on gei.godownEntry_id = ge.id "); + sb.append("inner join DisposableGoods dg on dg.id = gei.disposableGoodsID "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + }else{ + sb.append("and dg.id IN (select id from DisposableGoods) "); + } + sb.append(" and ge.type <> '" + GodownEntry.TYPE_APPROPRIATE + "'"); + sb.append(" and "); + sb.append(SqlBuilder.build_number_IN_Statement("ge.warehouseID", SqlBuilder.IN, warehosueIds)); + sb.append(" and "); + sb.append(dateQueryAdapter.dateAreaSql("ge.time", startDate, endDate, true, true)); + sb.append("group by ge.type,ge.subType,ge.warehouseName, dg.name,dg.specification,gei.cost "); + + sb.append(" union all "); + + //发货记录 + sb.append("select '发货单' as type,'发货出库' as subType,i.sourceWarehouseName as warehouseName,dg.name,dg.specification,sum(dgi.amount) as amount,dgi.price as price, sum(dgi.amount*dgi.price) as totalPrice "); + sb.append("from Invoice i "); + sb.append("inner join InvoiceItem ii on ii.invoice_id = i.id "); + sb.append("inner join DiposableGoodsItem dgi on ii.id = dgi.invoiceItemID "); + sb.append("inner join DisposableGoods dg on dg.id = dgi.disposableGoodsID "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + }else{ + sb.append("and dg.id IN (select id from DisposableGoods) "); + } + sb.append(" and "); + sb.append(dateQueryAdapter.dateAreaSql("i.sendTime", startDate, endDate, true, true)); + sb.append(" and "); + sb.append(SqlBuilder.build_number_IN_Statement("i.sourceWarehouseId", SqlBuilder.IN, warehosueIds)); + sb.append("group by i.sourceWarehouseName, dg.name,dg.specification,dgi.price "); + + + sb.append(" union all "); + + //退货记录 + sb.append("select '退货单' as type,'退货入库' as subType,rgr.warehouseName as warehouseName,dg.name,dg.specification,sum(rgi.amount) as amount, rgi.price as price, sum(rgi.amount*rgi.price) as totalPrice "); + sb.append("from ReturnGoodsRecord rgr "); + sb.append("inner join ReturnGoodsItem rgi on rgi.returnGoodsRecord_ID = rgr.id "); + sb.append("inner join DisposableGoods dg on rgi.disposableGoodsID = dg.id "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + }else{ + sb.append("and dg.id IN (select id from DisposableGoods) "); + } + sb.append(" and "); + sb.append(dateQueryAdapter.dateAreaSql("rgr.returnTime", startDate, endDate, true, true)); + sb.append(" and "); + sb.append(SqlBuilder.build_number_IN_Statement("rgr.warehouseID", SqlBuilder.IN, warehosueIds)); + sb.append("group by rgr.warehouseName,dg.name,dg.specification,rgi.price "); + + sb.append(" union all "); + + //装配扣减 + sb.append("select '装配扣减' as type,'装配出库' as subType,dgbs.warehouseName as warehouseName,dg.name,dg.specification, dgi.amount, dgi.price as price,(dgi.amount*dgi.price) as totalPrice "); + sb.append("from PackingRecord pr "); + sb.append("join DiposableGoodsItem dgi on pr.id=dgi.packingRecordId "); + sb.append("inner join DisposableGoods dg on dg.id=dgi.disposableGoodsID "); + sb.append("inner join DisposableGoodsBatchStock dgbs on dgi.disposableGoodsBatchStockID=dgbs.id "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + }else{ + sb.append("and dg.id IN (select id from DisposableGoods) "); + } + sb.append("and "); + sb.append(dateQueryAdapter.dateAreaSql("pr.packTime", startDate, endDate, true, true)); + sb.append("and "); + sb.append(SqlBuilder.build_number_IN_Statement("dgbs.warehouseID", SqlBuilder.IN, warehosueIds)); + + sb.append(" union all "); + + //供应室领用 + sb.append("select '供应室领用' as type,'' as subType,rri.warehouseName as warehouseName,dg.name,dg.specification, rri.amount,rri.price as price,(rri.amount*rri.price) as totalPrice "); + sb.append("from ReceiveRecord rr "); + sb.append("join ReceiveRecordItem rri on rri.receiveRecord_id = rr.id "); + sb.append("join DisposableGoods dg on dg.id = rri.disposableGoodsId "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + }else{ + sb.append("and dg.id IN (select id from DisposableGoods) "); + } + sb.append("and "); + sb.append(dateQueryAdapter.dateAreaSql("rr.time", startDate, endDate, true, true)); + sb.append("and "); + sb.append(SqlBuilder.build_number_IN_Statement("rri.warehouseId", SqlBuilder.IN, warehosueIds)); }else{ - sb.append("and dg.id IN (select id from DisposableGoods) "); + //发货记录 + sb.append("select '发货单' as type,'发货出库' as subType,i.sourceWarehouseName as warehouseName,dg.name,dg.specification,sum(dgi.amount) as amount,dgi.price as price, sum(dgi.amount*dgi.price) as totalPrice "); + sb.append("from Invoice i "); + sb.append("inner join InvoiceItem ii on ii.invoice_id = i.id "); + sb.append("inner join DiposableGoodsItem dgi on ii.id = dgi.invoiceItemID "); + sb.append("inner join DisposableGoods dg on dg.id = dgi.disposableGoodsID "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + }else{ + sb.append("and dg.id IN (select id from DisposableGoods) "); + } + sb.append(" and "); + sb.append(dateQueryAdapter.dateAreaSql("i.sendTime", startDate, endDate, true, true)); + sb.append(" and "); + sb.append(SqlBuilder.build_number_IN_Statement("i.sourceWarehouseId", SqlBuilder.IN, warehosueIds)); + if(CollectionUtils.isNotEmpty(departCodeList)){ + sb.append(" and "); + sb.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("i.departCoding", departCodeList)); + } + if(StringUtils.isNotBlank(settleAccountsDepartCoding)){ + sb.append(" and i.settleAccountsDepartCoding = '" + settleAccountsDepartCoding + "'"); + } + + sb.append("group by i.sourceWarehouseName, dg.name,dg.specification,dgi.price "); } - sb.append(" and ge.type <> '" + GodownEntry.TYPE_APPROPRIATE + "'"); - sb.append(" and "); - sb.append(SqlBuilder.build_number_IN_Statement("ge.warehouseID", SqlBuilder.IN, warehosueIds)); - sb.append(" and "); - sb.append(dateQueryAdapter.dateAreaSql("ge.time", startDate, endDate, true, true)); - sb.append("group by ge.type,ge.subType,ge.warehouseName, dg.name,dg.specification,gei.cost "); - - sb.append(" union all "); - - //发货记录 - sb.append("select '发货单' as type,'发货出库' as subType,i.sourceWarehouseName as warehouseName,dg.name,dg.specification,sum(dgi.amount) as amount,dgi.price as price, sum(dgi.amount*dgi.price) as totalPrice "); - sb.append("from Invoice i "); - sb.append("inner join InvoiceItem ii on ii.invoice_id = i.id "); - sb.append("inner join DiposableGoodsItem dgi on ii.id = dgi.invoiceItemID "); - sb.append("inner join DisposableGoods dg on dg.id = dgi.disposableGoodsID "); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ - sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - }else{ - sb.append("and dg.id IN (select id from DisposableGoods) "); - } - sb.append(" and "); - sb.append(dateQueryAdapter.dateAreaSql("i.sendTime", startDate, endDate, true, true)); - sb.append(" and "); - sb.append(SqlBuilder.build_number_IN_Statement("i.sourceWarehouseId", SqlBuilder.IN, warehosueIds)); - sb.append("group by i.sourceWarehouseName, dg.name,dg.specification,dgi.price "); - - - sb.append(" union all "); - - //退货记录 - sb.append("select '退货单' as type,'退货入库' as subType,rgr.warehouseName as warehouseName,dg.name,dg.specification,sum(rgi.amount) as amount, rgi.price as price, sum(rgi.amount*rgi.price) as totalPrice "); - sb.append("from ReturnGoodsRecord rgr "); - sb.append("inner join ReturnGoodsItem rgi on rgi.returnGoodsRecord_ID = rgr.id "); - sb.append("inner join DisposableGoods dg on rgi.disposableGoodsID = dg.id "); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ - sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - }else{ - sb.append("and dg.id IN (select id from DisposableGoods) "); - } - sb.append(" and "); - sb.append(dateQueryAdapter.dateAreaSql("rgr.returnTime", startDate, endDate, true, true)); - sb.append(" and "); - sb.append(SqlBuilder.build_number_IN_Statement("rgr.warehouseID", SqlBuilder.IN, warehosueIds)); - sb.append("group by rgr.warehouseName,dg.name,dg.specification,rgi.price "); - - sb.append(" union all "); - - //装配扣减 - sb.append("select '装配扣减' as type,'装配出库' as subType,dgbs.warehouseName as warehouseName,dg.name,dg.specification, dgi.amount, dgi.price as price,(dgi.amount*dgi.price) as totalPrice "); - sb.append("from PackingRecord pr "); - sb.append("join DiposableGoodsItem dgi on pr.id=dgi.packingRecordId "); - sb.append("inner join DisposableGoods dg on dg.id=dgi.disposableGoodsID "); - sb.append("inner join DisposableGoodsBatchStock dgbs on dgi.disposableGoodsBatchStockID=dgbs.id "); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ - sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - }else{ - sb.append("and dg.id IN (select id from DisposableGoods) "); - } - sb.append("and "); - sb.append(dateQueryAdapter.dateAreaSql("pr.packTime", startDate, endDate, true, true)); - sb.append("and "); - sb.append(SqlBuilder.build_number_IN_Statement("dgbs.warehouseID", SqlBuilder.IN, warehosueIds)); - - sb.append(" union all "); - - //供应室领用 - sb.append("select '供应室领用' as type,'' as subType,rri.warehouseName as warehouseName,dg.name,dg.specification, rri.amount,rri.price as price,(rri.amount*rri.price) as totalPrice "); - sb.append("from ReceiveRecord rr "); - sb.append("join ReceiveRecordItem rri on rri.receiveRecord_id = rr.id "); - sb.append("join DisposableGoods dg on dg.id = rri.disposableGoodsId "); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ - sb.append("and ").append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - }else{ - sb.append("and dg.id IN (select id from DisposableGoods) "); - } - sb.append("and "); - sb.append(dateQueryAdapter.dateAreaSql("rr.time", startDate, endDate, true, true)); - sb.append("and "); - sb.append(SqlBuilder.build_number_IN_Statement("rri.warehouseId", SqlBuilder.IN, warehosueIds)); - sb.append(" ) md "); System.out.println(sb.toString()); return sb; @@ -523,120 +550,159 @@ StringBuilder sb = new StringBuilder(); Set warehosueIds = wareHouseManager.getCurrentUserOrgUnitWarehouseIds(); sb.append("select * from ( "); - //单号与单类型及单id的修正关系(对于调拨单产生的入库单和退库单,由于用户不知道自动产生的单,所以需要把单号和单类型改为调拨单的单号和单类型) - String godownEntryIdSerialNumber = " (select ge.id,mge.type,mge.serialNumber from GodownEntry ge inner join (select id,type,serialNumber from GodownEntry) mge on ge.sourceId = mge.id union all select id,type,serialNumber from GodownEntry where sourceId is null or sourceId = 0) "; - - String godownEntryItemSummarySql = "select dgbs.batchNumber, ge.id as entryId,gei.disposableGoodsID, gei.cost as price, sum(gei.amount) as amount,sum(gei.amount*gei.cost) as totalPrice " - +"from "+GodownEntry.class.getSimpleName()+" ge inner join " - + GodownEntryItem.class.getSimpleName()+" gei on gei.godownEntry_id = ge.id " - + " inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on dgbs.id=gei.disposableGoodsBatchStockID " - + " group by gei.disposableGoodsID,gei.cost,ge.id,dgbs.batchNumber"; - - //入库单 - sb.append("select atp.batchNumber as batchNumber, ge.operator,isn.serialNumber,ge.time,isn.type,ge.subType,ge.warehouseName, "); - sb.append("atp.amount,atp.price,atp.totalPrice as totalPrice,dg.name,dg.specification, '' as depart, '' as settleAccountsDepart "); - sb.append(" from GodownEntry ge inner join " + godownEntryIdSerialNumber + " isn on ge.id = isn.id"); - sb.append(" inner join ("+godownEntryItemSummarySql+") atp"); - sb.append(" on atp.entryId = ge.id "); - sb.append(" inner join DisposableGoods dg on dg.id = atp.disposableGoodsID "); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + if(CollectionUtils.isEmpty(departCodeList) && StringUtils.isBlank(settleAccountsDepartCoding)){ + //单号与单类型及单id的修正关系(对于调拨单产生的入库单和退库单,由于用户不知道自动产生的单,所以需要把单号和单类型改为调拨单的单号和单类型) + String godownEntryIdSerialNumber = " (select ge.id,mge.type,mge.serialNumber from GodownEntry ge inner join (select id,type,serialNumber from GodownEntry) mge on ge.sourceId = mge.id union all select id,type,serialNumber from GodownEntry where sourceId is null or sourceId = 0) "; + + String godownEntryItemSummarySql = "select dgbs.batchNumber, ge.id as entryId,gei.disposableGoodsID, gei.cost as price, sum(gei.amount) as amount,sum(gei.amount*gei.cost) as totalPrice " + +"from "+GodownEntry.class.getSimpleName()+" ge inner join " + + GodownEntryItem.class.getSimpleName()+" gei on gei.godownEntry_id = ge.id " + + " inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on dgbs.id=gei.disposableGoodsBatchStockID " + + " group by gei.disposableGoodsID,gei.cost,ge.id,dgbs.batchNumber"; + + //入库单 + sb.append("select atp.batchNumber as batchNumber, ge.operator,isn.serialNumber,ge.time,isn.type,ge.subType,ge.warehouseName, "); + sb.append("atp.amount,atp.price,atp.totalPrice as totalPrice,dg.name,dg.specification, '' as depart, '' as settleAccountsDepart "); + sb.append(" from GodownEntry ge inner join " + godownEntryIdSerialNumber + " isn on ge.id = isn.id"); + sb.append(" inner join ("+godownEntryItemSummarySql+") atp"); + sb.append(" on atp.entryId = ge.id "); + sb.append(" inner join DisposableGoods dg on dg.id = atp.disposableGoodsID "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(" and "); + sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + } + sb.append(" and ge.type <> '" + GodownEntry.TYPE_APPROPRIATE + "'"); sb.append(" and "); - sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - } - sb.append(" and ge.type <> '" + GodownEntry.TYPE_APPROPRIATE + "'"); - sb.append(" and "); - sb.append(SqlBuilder.build_number_IN_Statement("ge.warehouseID", SqlBuilder.IN, warehosueIds)); - sb.append(" where "); - sb.append(dateQueryAdapter.dateAreaSql("ge.time", startDate, endDate, true, true)); - - sb.append(" union all "); - - //发货记录 - sb.append(" select idtp.batchNumber as batchNumber, i.sender as operator,i.serialNumber,i.sendTime as time,'发货单' as type,'发货出库' as subType,i.sourceWarehouseName as warehouseName," ); - sb.append("idtp.amount, null as price,idtp.totalPrice,dg.name,dg.specification, i.depart as depart, i.settleAccountsDepart as settleAccountsDepart "); - sb.append(" from Invoice i "); - sb.append(" inner join ( "); - sb.append(" select dgbs.disposableGoodsId,dgbs.batchNumber, ii.invoice_id,sum(dgi.amount) as amount,sum(dgi.amount*dgi.price) as totalPrice from " - + InvoiceItem.class.getSimpleName() + " ii inner join " - + DiposableGoodsItem.class.getSimpleName()+ " dgi on ii.id = dgi.invoiceItemID " - + " inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on dgbs.id = dgi.disposableGoodsBatchStockID"); - sb.append(" group by dgbs.disposableGoodsId, dgbs.batchNumber, ii.invoice_id) idtp"); - sb.append(" on i.id = idtp.invoice_id "); - sb.append(" inner join DisposableGoods dg on dg.id = idtp.disposableGoodsId where "); - sb.append(dateQueryAdapter.dateAreaSql("i.sendTime", startDate, endDate, true, true)); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(SqlBuilder.build_number_IN_Statement("ge.warehouseID", SqlBuilder.IN, warehosueIds)); + sb.append(" where "); + sb.append(dateQueryAdapter.dateAreaSql("ge.time", startDate, endDate, true, true)); + + sb.append(" union all "); + + //发货记录 + sb.append(" select idtp.batchNumber as batchNumber, i.sender as operator,i.serialNumber,i.sendTime as time,'发货单' as type,'发货出库' as subType,i.sourceWarehouseName as warehouseName," ); + sb.append("idtp.amount, null as price,idtp.totalPrice,dg.name,dg.specification, i.depart as depart, i.settleAccountsDepart as settleAccountsDepart "); + sb.append(" from Invoice i "); + sb.append(" inner join ( "); + sb.append(" select dgbs.disposableGoodsId,dgbs.batchNumber, ii.invoice_id,sum(dgi.amount) as amount,sum(dgi.amount*dgi.price) as totalPrice from " + + InvoiceItem.class.getSimpleName() + " ii inner join " + + DiposableGoodsItem.class.getSimpleName()+ " dgi on ii.id = dgi.invoiceItemID " + + " inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on dgbs.id = dgi.disposableGoodsBatchStockID"); + sb.append(" group by dgbs.disposableGoodsId, dgbs.batchNumber, ii.invoice_id) idtp"); + sb.append(" on i.id = idtp.invoice_id "); + sb.append(" inner join DisposableGoods dg on dg.id = idtp.disposableGoodsId where "); + sb.append(dateQueryAdapter.dateAreaSql("i.sendTime", startDate, endDate, true, true)); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(" and "); + sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + } sb.append(" and "); - sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - } - sb.append(" and "); - sb.append(SqlBuilder.build_number_IN_Statement("i.sourceWarehouseId", SqlBuilder.IN, warehosueIds)); - - if(CollectionUtils.isNotEmpty(departCodeList)){ + sb.append(SqlBuilder.build_number_IN_Statement("i.sourceWarehouseId", SqlBuilder.IN, warehosueIds)); + + /*if(CollectionUtils.isNotEmpty(departCodeList)){ + sb.append(" and "); + sb.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("i.departCoding", departCodeList)); + } + if(StringUtils.isNotBlank(settleAccountsDepartCoding)){ + sb.append(" and i.settleAccountsDepartCoding = '" + settleAccountsDepartCoding + "'"); + }*/ + + + sb.append(" union all "); + + //退货记录 + sb.append(" select mt.batchNumber as batchNumber, rgr.operator,'' as serialNumber,rgr.returnTime as time,'退货单' as type,'退货入库' as subType,rgr.warehouseName as warehouseName,"); + sb.append(" mt.amount,null as price,mt.totalPrice as totalPrice,dg.name,dg.specification, rgr.depart as depart, rgr.settleAccountsDepart as settleAccountsDepart "); + sb.append(" from ReturnGoodsRecord rgr inner join"); + sb.append(" (select dgbs.batchNumber, rgr.id as recordId,rgi.disposableGoodsID as disposableGoodsId, sum(rgi.amount) as amount,sum(rgi.amount*rgi.price) as totalPrice from " + + ReturnGoodsRecord.class.getSimpleName()+ " rgr inner join " + + ReturnGoodsItem.class.getSimpleName() + " rgi on rgi.returnGoodsRecord_ID = rgr.id" + + " inner join " + DisposableGoodsBatchStock.class.getSimpleName() + + " dgbs on dgbs.id=rgi.disposableGoodsBatchStockID" +" group by dgbs.batchNumber,rgi.disposableGoodsID,rgr.id) mt "); + sb.append(" on mt.recordId = rgr.id "); + sb.append(" inner join DisposableGoods dg on mt.disposableGoodsID = dg.id"); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(" and"); + sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + } + sb.append(" where "); + sb.append(SqlBuilder.build_number_IN_Statement("rgr.warehouseID", SqlBuilder.IN, warehosueIds)); + /*if(CollectionUtils.isNotEmpty(departCodeList)){ + sb.append(" and "); + sb.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("rgr.departCoding", departCodeList)); + } + if(StringUtils.isNotBlank(settleAccountsDepartCoding)){ + sb.append(" and rgr.settleAccountsDepartCoding = '" + settleAccountsDepartCoding + "'"); + }*/ + + sb.append(" union all "); + + //装配扣减 + sb.append(" select dgbs.batchNumber as batchNumber, pr.packer as operator,'' as serialNumber,pr.packTime as time,'装配扣减' as type,'装配出库' as subType,dgbs.warehouseName as warehouseName," ); + sb.append(" dgi.amount, dgi.price as price,(dgi.amount*dgi.price) as totalPrice,dg.name,dg.specification, '' as depart, '' as settleAccountsDepart "); + sb.append(" from " + PackingRecord.class.getSimpleName() + " pr "); + sb.append(" inner join " + DiposableGoodsItem.class.getSimpleName() + " dgi on pr.id=dgi.packingRecordId"); + sb.append(" inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on dgi.disposableGoodsBatchStockID=dgbs.id"); + sb.append(" inner join " + DisposableGoods.class.getSimpleName() + " dg on dg.id=dgi.disposableGoodsID where (1=1) "); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(" and"); + sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + } sb.append(" and "); - sb.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("i.departCoding", departCodeList)); - } - if(StringUtils.isNotBlank(settleAccountsDepartCoding)){ - sb.append(" and i.settleAccountsDepartCoding = '" + settleAccountsDepartCoding + "'"); - } - - - sb.append(" union all "); - - //退货记录 - sb.append(" select mt.batchNumber as batchNumber, rgr.operator,'' as serialNumber,rgr.returnTime as time,'退货单' as type,'退货入库' as subType,rgr.warehouseName as warehouseName,"); - sb.append(" mt.amount,null as price,mt.totalPrice as totalPrice,dg.name,dg.specification, rgr.depart as depart, rgr.settleAccountsDepart as settleAccountsDepart "); - sb.append(" from ReturnGoodsRecord rgr inner join"); - sb.append(" (select dgbs.batchNumber, rgr.id as recordId,rgi.disposableGoodsID as disposableGoodsId, sum(rgi.amount) as amount,sum(rgi.amount*rgi.price) as totalPrice from " - + ReturnGoodsRecord.class.getSimpleName()+ " rgr inner join " - + ReturnGoodsItem.class.getSimpleName() + " rgi on rgi.returnGoodsRecord_ID = rgr.id" - + " inner join " + DisposableGoodsBatchStock.class.getSimpleName() - + " dgbs on dgbs.id=rgi.disposableGoodsBatchStockID" +" group by dgbs.batchNumber,rgi.disposableGoodsID,rgr.id) mt "); - sb.append(" on mt.recordId = rgr.id "); - sb.append(" inner join DisposableGoods dg on mt.disposableGoodsID = dg.id"); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ - sb.append(" and"); - sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - } - sb.append(" where "); - sb.append(SqlBuilder.build_number_IN_Statement("rgr.warehouseID", SqlBuilder.IN, warehosueIds)); - - sb.append(" union all "); - - //装配扣减 - sb.append(" select dgbs.batchNumber as batchNumber, pr.packer as operator,'' as serialNumber,pr.packTime as time,'装配扣减' as type,'装配出库' as subType,dgbs.warehouseName as warehouseName," ); - sb.append(" dgi.amount, dgi.price as price,(dgi.amount*dgi.price) as totalPrice,dg.name,dg.specification, '' as depart, '' as settleAccountsDepart "); - sb.append(" from " + PackingRecord.class.getSimpleName() + " pr "); - sb.append(" inner join " + DiposableGoodsItem.class.getSimpleName() + " dgi on pr.id=dgi.packingRecordId"); - sb.append(" inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on dgi.disposableGoodsBatchStockID=dgbs.id"); - sb.append(" inner join " + DisposableGoods.class.getSimpleName() + " dg on dg.id=dgi.disposableGoodsID where (1=1) "); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ - sb.append(" and"); - sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); - } - sb.append(" and "); - sb.append(SqlBuilder.build_number_IN_Statement("dgbs.warehouseID", SqlBuilder.IN, warehosueIds)); - sb.append(" and "); - sb.append(dateQueryAdapter.dateAreaSql("pr.packTime", startDate, endDate, true, true)); - - sb.append(" union all "); - - //供应室领用 - sb.append(" select dgbs.batchNumber as batchNumber,rr.operator as operator,'' as serialNumber,rr.time as time,'供应室领用' as type,'' as subType,dgbs.warehouseName as warehouseName,"); - sb.append(" rri.amount,rri.price as price,(rri.amount*rri.price) as totalPrice,dg.name,dg.specification, '' as depart, '' as settleAccountsDepart"); - sb.append(" from " + ReceiveRecordItem.class.getSimpleName() + " rri "); - sb.append(" inner join " + ReceiveRecord.class.getSimpleName() + " rr on rr.id = rri.receiveRecord_id"); - sb.append(" inner join " + DisposableGoods.class.getSimpleName() + " dg on dg.id = rri.disposableGoodsId"); - sb.append(" inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on rri.disposableGoodsBatchStockId=dgbs.id where (1=1)"); - if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(SqlBuilder.build_number_IN_Statement("dgbs.warehouseID", SqlBuilder.IN, warehosueIds)); sb.append(" and "); - sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + sb.append(dateQueryAdapter.dateAreaSql("pr.packTime", startDate, endDate, true, true)); + + sb.append(" union all "); + + //供应室领用 + sb.append(" select dgbs.batchNumber as batchNumber,rr.operator as operator,'' as serialNumber,rr.time as time,'供应室领用' as type,'' as subType,dgbs.warehouseName as warehouseName,"); + sb.append(" rri.amount,rri.price as price,(rri.amount*rri.price) as totalPrice,dg.name,dg.specification, '' as depart, '' as settleAccountsDepart"); + sb.append(" from " + ReceiveRecordItem.class.getSimpleName() + " rri "); + sb.append(" inner join " + ReceiveRecord.class.getSimpleName() + " rr on rr.id = rri.receiveRecord_id"); + sb.append(" inner join " + DisposableGoods.class.getSimpleName() + " dg on dg.id = rri.disposableGoodsId"); + sb.append(" inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on rri.disposableGoodsBatchStockId=dgbs.id where (1=1)"); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(" and "); + sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + } + sb.append(" and "); + sb.append(SqlBuilder.build_number_IN_Statement("dgbs.warehouseID", SqlBuilder.IN, warehosueIds)); + + sb.append(" and "); + sb.append(dateQueryAdapter.dateAreaSql("rr.time", startDate, endDate, true, true)); + + }else{ + // 查询条件的申请科室、结算科室、发货科室分组必须均为空的情况下,才查入库单,否则查询出库单(发货单)。 + //发货记录 + sb.append(" select idtp.batchNumber as batchNumber, i.sender as operator,i.serialNumber,i.sendTime as time,'发货单' as type,'发货出库' as subType,i.sourceWarehouseName as warehouseName," ); + sb.append("idtp.amount, null as price,idtp.totalPrice,dg.name,dg.specification, i.depart as depart, i.settleAccountsDepart as settleAccountsDepart "); + sb.append(" from Invoice i "); + sb.append(" inner join ( "); + sb.append(" select dgbs.disposableGoodsId,dgbs.batchNumber, ii.invoice_id,sum(dgi.amount) as amount,sum(dgi.amount*dgi.price) as totalPrice from " + + InvoiceItem.class.getSimpleName() + " ii inner join " + + DiposableGoodsItem.class.getSimpleName()+ " dgi on ii.id = dgi.invoiceItemID " + + " inner join " + DisposableGoodsBatchStock.class.getSimpleName() + " dgbs on dgbs.id = dgi.disposableGoodsBatchStockID"); + sb.append(" group by dgbs.disposableGoodsId, dgbs.batchNumber, ii.invoice_id) idtp"); + sb.append(" on i.id = idtp.invoice_id "); + sb.append(" inner join DisposableGoods dg on dg.id = idtp.disposableGoodsId where "); + sb.append(dateQueryAdapter.dateAreaSql("i.sendTime", startDate, endDate, true, true)); + if(CollectionUtils.isNotEmpty(disposableGoodsIdList)){ + sb.append(" and "); + sb.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("dg.id", disposableGoodsIdList)); + } + sb.append(" and "); + sb.append(SqlBuilder.build_number_IN_Statement("i.sourceWarehouseId", SqlBuilder.IN, warehosueIds)); + + if(CollectionUtils.isNotEmpty(departCodeList)){ + sb.append(" and "); + sb.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("i.departCoding", departCodeList)); + } + if(StringUtils.isNotBlank(settleAccountsDepartCoding)){ + sb.append(" and i.settleAccountsDepartCoding = '" + settleAccountsDepartCoding + "'"); + } + } - sb.append(" and "); - sb.append(SqlBuilder.build_number_IN_Statement("dgbs.warehouseID", SqlBuilder.IN, warehosueIds)); - - sb.append(" and "); - sb.append(dateQueryAdapter.dateAreaSql("rr.time", startDate, endDate, true, true)); - sb.append(" ) md "); sb.append(" where "); sb.append(dateQueryAdapter.dateAreaSql("time", startDate, endDate, true, true));