页面效果就是如下
当我们对其点击订单导出 及信息导出
重点开始 可能逻辑有点麻烦,请注意每一个细节 有些代码无法上传完整,但只是倾诉一个过程和一个思想
Controller 接口一马当先
@RequestMapping(name = "导出订单详情", value = {"/download"}, method = RequestMethod.GET)
public void download(WebRequest request, HttpServletResponse response) throws IOException {
foOrderService.downLoadOrderInfo(request,response);
}
接口不是最难的 最难的才刚刚开始
Service
public void downLoadOrderInfo(WebRequest request, HttpServletResponse response) throws IOException {
String fileName = ConstantsInfo.EXCEL_TITLE_PREFIX + "_" + CommonsUtils.getDate() + ".xls";
String[] headers = {"入库单号", "箱号", "产品码", "收货状态", "预期数量", "中转仓收货数", "目的仓收货数", "上架数量", "头程运输方式", "跟踪号", "参考号", "目的仓库", "交货仓库", "币种", "金额"};
String[] fieldNames = {"orderCode", "boxNo", "productCode", "status", "deliveryCount", "transferCount", "receiveCount",
"shelvesCount", "busiProductCode", "trackNo", "referenceNo", "beginWarehouse", "endWarehouse", "currency", "orderAmt"};
Map <String, Object> searchParams = Servlets.getParametersStartingWith(request, "search_");
Collection <SearchFilter> filters = SearchFilter.parse(searchParams);
Specification <FoOrders> specification = DynamicSpecifications.bySearchFilter(filters);
**List <FoOrders> list = this.findAllData(specification);
List <OrderExport> orderExportList = new ArrayList <>();**
if (CollectionUtils.isNotEmpty(list)) {
List <String> foOrderNos = list.stream().map(FoOrders::getFoOrderNo).collect(Collectors.toList());
List <Map <String, Object>> foProducts = ***this.findFoProductByFoOrderNo(foOrderNos);***
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(foProducts)) {
for (Map <String, Object> map : foProducts) {
OrderExport orderExport = new OrderExport();
orderExport.setOrderCode(String.valueOf(map.get("fo_order_no")));
orderExport.setBoxNo(String.valueOf(map.get("fo_box_no")));
orderExport.setProductCode(String.valueOf(map.get("standard_code")));
orderExport.setStatus(String.valueOf(map.get("param_detail_cname")));
orderExport.setDeliveryCount(Integer.valueOf(String.valueOf(map.get("fo_delivery_count"))));
orderExport.setTransferCount(Integer.valueOf(String.valueOf(map.get("fo_transfer_count"))));
orderExport.setReceiveCount(Integer.valueOf(String.valueOf(map.get("fo_receive_count"))));
orderExport.setShelvesCount(Integer.valueOf(String.valueOf(map.get("fo_shelves_count"))));
orderExport.setBusiProductCode(String.valueOf(map.get("busi_product_code")));
orderExport.setTrackNo(String.valueOf(map.get("fo_track_no")));
orderExport.setReferenceNo(String.valueOf(map.get("fo_reference_no")));
orderExport.setEndWarehouse(String.valueOf(map.get("fo_end_warehouse")));
orderExport.setBeginWarehouse(String.valueOf(map.get("fo_begin_warehouse")));
orderExport.setCurrency(String.valueOf(map.get("currency")));
orderExport.setOrderAmt(new BigDecimal(String.valueOf(map.get("order_amt"))));
orderExportList.add(orderExport);
}
}
}
new ExportExcel <OrderExport>().exportExcel(fileName, headers, orderExportList, fieldNames, response, null);
}
service方法中存在 this.findFoProductByFoOrderNo
public List <Map <String, Object>> findFoProductByFoOrderNo(List <String> foOrderNos) {
return foProductDao.findByFoOrderNosAndDeleteFlag(foOrderNos);
}
Dao所用到的方法以及数据 findByFoOrderNosAndDeleteFlag(方法)
@Query(value = "select fp.fo_order_no,fp.fo_box_no,fp.standard_code,pd.param_detail_cname,IFNULL(fp.fo_delivery_count,'0') fo_delivery_count, IFNULL(fp.fo_transfer_count,'0') fo_transfer_count,IFNULL(fp.fo_receive_count,'0') fo_receive_count,IFNULL(fp.fo_shelves_count,'0') fo_shelves_count,fo.busi_product_code,fo.fo_track_no,fo.fo_reference_no,fo.fo_end_warehouse,fo.fo_begin_warehouse,fo.currency,fo.order_amt from fo_product fp " +
"LEFT JOIN fo_orders fo on fo.fo_order_no = fp.fo_order_no " +
"LEFT JOIN param_detail pd on pd.param_detail_code = fo.fo_order_status_customer and pd.delete_flag = 0 " +
"where fp.fo_order_no in (:orderNos) and fp.delete_flag = 0 ",nativeQuery = true)
List<Map<String,Object>> findByFoOrderNosAndDeleteFlag(@Param("orderNos") List<String> orderNos);
可能上面不是很清楚大致的数据是什么情况
pojo 表格最终展示的数据
public class OrderExport {
@ApiModelProperty(value = "入库单号")
/** 入库单号 */
private String orderCode;
@ApiModelProperty(value = "箱号")
/** 箱号 */
private String boxNo;
@ApiModelProperty(value = "产品码")
/** 产品码 */
private String productCode;
@ApiModelProperty(value = "收货状态")
/** 收货状态 */
private String status;
@ApiModelProperty(value = "预期数量(送货数)")
/** 预期数量 */
private Integer deliveryCount;
@ApiModelProperty(value = "中转仓收货数")
/** 中转仓收货数 */
private Integer transferCount;
@ApiModelProperty(value = "目的仓收货数")
/** 目的仓收货数 */
private Integer receiveCount;
@ApiModelProperty(value = "上架数量")
/** 上架数量 */
private Integer shelvesCount;
@ApiModelProperty(value = "头程运输方式")
/** 头程运输方式 */
private String busiProductCode;
@ApiModelProperty(value = "跟踪号")
/** 跟踪号 */
private String trackNo;
@ApiModelProperty(value = "参考号")
/** 参考号 */
private String referenceNo;
@ApiModelProperty(value = "目的仓库")
/** 目的仓库 */
private String beginWarehouse;
@ApiModelProperty(value = "交货仓库")
/** 交货仓库 */
private String endWarehouse;
@ApiModelProperty(value = "币种")
/** 币种 */
private String currency;
@ApiModelProperty(value = "金额")
/** 金额 */
private BigDecimal orderAmt;
pojo **FoOrders **
@DynamicInsert
@DynamicUpdate
@Entity
@Table(name = "fo_orders", schema = "sdorder")
public class FoOrders extends OrderListenerEntity {
@JsonView(View.class)
@ApiModelProperty(value="订单编号")
private String foOrderNo;
@JsonView(View.class)
@ApiModelProperty(value="父级订单编号")
private String foParentNo;
@JsonView(View.class)
@ApiModelProperty(value="马帮FBA号码")
private String foFbaNo;
@JsonView(View.class)
@ApiModelProperty(value="参考编码(顺丰等)")
private String foReferenceNo;
@JsonView(View.class)
@ApiModelProperty(value="物流运单号")
private String foTrackNo;
@JsonView(View.class)
@ApiModelProperty(value="JW号")
private String jwNo;
@JsonView(View.class)
@ApiModelProperty(value="物流承运商")
private String foTrackMerchant;
工具类
@DynamicInsert
@DynamicUpdate
@MappedSuperclass
@EntityListeners({OrderPersistenceListener.class})
public abstract class OrderListenerEntity implements java.io.Serializable {
//protected Integer createrId;//创建人id
/**
* 创建时间
*/
@JsonView(View.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08")
protected Date createTime;
//protected Integer updaterId;
@JsonView(View.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08")
protected Date updateTime;
@JsonView(View.class)
protected Integer deleteFlag;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_time", columnDefinition = "datetime", updatable = false)
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Audited
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "update_time", columnDefinition = "datetime")
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Audited
@Column(name = "delete_flag", columnDefinition = "tinyint")
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
}