Commit bb454e2e by chongli

销售后台提交发票

parent f87b54ad
......@@ -37,6 +37,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import com.ctrip.fun.admin.form.PaginationForm;
import com.ctrip.fun.admin.form.basic.InvoiceRquestDto;
import com.ctrip.fun.admin.form.golf.ResourceInventoryForm;
import com.ctrip.fun.admin.form.golf.ResourcePriceForm;
import com.ctrip.fun.admin.form.market.EventGameGroupForm;
......@@ -44,6 +45,7 @@ import com.ctrip.fun.admin.form.market.EventGamePlayerForm;
import com.ctrip.fun.admin.form.operation.SupplierQueryForm;
import com.ctrip.fun.admin.service.basic.DistrictService;
import com.ctrip.fun.admin.service.basic.EntityImageService;
import com.ctrip.fun.admin.service.basic.InvoiceRequestService;
import com.ctrip.fun.admin.service.basic.PrePayCardService;
import com.ctrip.fun.admin.service.basic.SubDistrictService;
import com.ctrip.fun.admin.service.basic.VoucherShareLogService;
......@@ -99,6 +101,7 @@ import com.ctrip.fun.common.vo.app.ResponseFriendBean;
import com.ctrip.fun.common.vo.basic.EntityImageBean;
import com.ctrip.fun.common.vo.basic.EntityImageQuery;
import com.ctrip.fun.common.vo.basic.ImageSizeEnum;
import com.ctrip.fun.common.vo.basic.InvoiceRequestBean;
import com.ctrip.fun.common.vo.basic.PrePayCardBean;
import com.ctrip.fun.common.vo.basic.SubDistrictBean;
import com.ctrip.fun.common.vo.basic.SubDistrictQuery;
......@@ -265,6 +268,9 @@ public class JsonController {
@Autowired
private OpVoucherOrderService opVoucherOrderService = null;
@Autowired
private InvoiceRequestService invoiceRequestService = null;
@Value("${imageEndpoint}")
private String imageEndpoint;
......@@ -2535,4 +2541,18 @@ public class JsonController {
response.setBody(vouchers);
return response;
}
@RequestMapping(value = "/invoiceRequest/financeUpdate", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public Response<Integer> financeUpdate(InvoiceRquestDto invoiceRquestDto) {
Response<Integer> response = new Response<Integer>();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage(ResponseStatusEnum.SUCCESS.getMsg());
InvoiceRequestBean bean = new InvoiceRequestBean();
BeanConverter.copyProperties(bean, invoiceRquestDto);
invoiceRequestService.update("", bean);
response.setBody(1);
return response;
}
}
package com.ctrip.fun.admin.controller.basic;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.ctrip.fun.admin.form.PaginationForm;
import com.ctrip.fun.admin.form.basic.InvoiceRquestDto;
import com.ctrip.fun.admin.service.basic.InvoiceRequestExcelExportService;
import com.ctrip.fun.admin.service.basic.InvoiceRequestExcelImportService;
import com.ctrip.fun.admin.service.basic.TelTaskService;
import com.ctrip.fun.admin.service.system.UserDetailsService;
import com.ctrip.fun.admin.service.system.UserService;
import com.ctrip.fun.admin.utility.SpringSecurityUtil;
import com.ctrip.fun.common.core.util.BeanConverter;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.vo.PagedResponseBean;
import com.ctrip.fun.common.vo.basic.InvoiceRequestQuery;
import com.ctrip.fun.common.vo.basic.InvoiceRequestBean;
import com.ctrip.fun.admin.service.basic.InvoiceRequestService;
/**
* @author gaoc
*/
@Controller
@RequestMapping("/invoiceRequest")
public class InvoiceRequestController {
@Autowired
private TelTaskService telTaskService;
@Autowired
private UserService userService;
@Autowired
private UserDetailsService userDetailsService ;
@Autowired
private InvoiceRequestService invoiceRequestService;
@Autowired
private InvoiceRequestExcelExportService invoiceRequestExcelExportService;
@Autowired
private InvoiceRequestExcelImportService invoiceRequestExcelImportService;
/**
* 新建任务页面
*/
@RequestMapping(value = "/create", method = RequestMethod.GET)
public String toCreateTelTask(@ModelAttribute("dto") InvoiceRquestDto dto, ModelMap model) {
model.put("action", "/invoiceRequest/create");
return "basic/invoiceRequest/invoiceRequestForm";
}
/**
* 新建任务
*/
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String createVoucher(@Valid @ModelAttribute("dto") InvoiceRquestDto dto,
BindingResult bindingResult, ModelMap model) {
dto.setRequestPerson(SpringSecurityUtil.getCurrentUserName());
InvoiceRequestBean bean = new InvoiceRequestBean();
BeanConverter.copyProperties(bean, dto);
invoiceRequestService.add("", bean);
return "redirect:list";
}
@RequestMapping(value = "/edit", method = RequestMethod.GET)
public String editGet(HttpServletRequest request,
@ModelAttribute("dto") InvoiceRquestDto dto,
@RequestParam(value = "id", required = true) int id, ModelMap model) {
InvoiceRequestBean bean = invoiceRequestService.get("", id);
BeanConverter.copyProperties(dto, bean);
String returnPage = request.getParameter("page");
model.put("action", "/invoiceRequest/edit");
return "basic/invoiceRequest/invoiceRequestForm";
}
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String editPost(HttpServletRequest request,
@RequestParam(value = "id", required = true) int id,
@Valid @ModelAttribute("form") InvoiceRquestDto form,
BindingResult bindingResult, ModelMap model) {
InvoiceRequestBean bean = new InvoiceRequestBean();
BeanConverter.copyProperties(bean, form);
invoiceRequestService.update("", bean);
return "redirect:list";
}
@RequestMapping(value = "/excel", method = RequestMethod.GET)
public String getExcelExport(@ModelAttribute(value = "form") InvoiceRequestQuery query, HttpServletResponse response) {
List<InvoiceRequestBean> responseBean = invoiceRequestExcelExportService.list("", query);
response.setContentType("application/binary;charset=ISO8859-1");
//String filename = communeExcelExportService.createExcelName(form);
String filename = null;
try {
ServletOutputStream outputStream = response.getOutputStream();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
filename += format.format(new Date());
filename += " 公社会员订单 ";
filename = filename.replaceAll(" ", "_");
response.setHeader("Content-disposition", "attachment;filename=" + new String(filename.getBytes("gb2312"), "ISO8859-1") + ".xlsx");
invoiceRequestExcelExportService.exportExcel(filename, responseBean, outputStream);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@RequestMapping(value = "/excelImport", method = RequestMethod.POST)
public String excelimport(MultipartFile financeFile, HttpServletResponse response) {
if(financeFile!=null){
String name=financeFile.getOriginalFilename();
try {
List<InvoiceRequestBean> list = invoiceRequestExcelImportService.parseExcel(1L, financeFile.getInputStream(), name);
invoiceRequestService.batchUpdate("",list);
}catch (Exception e) {
e.printStackTrace();
}
}
return "redirect:list";
}
/**
* 任务列表
*/
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String queryList(HttpServletRequest request, @ModelAttribute("dto") InvoiceRequestQuery query,
ModelMap model) {
int currentPage = 0;
int pageSize;
int total;
int pageCount;
if (null != request.getParameter("page")) {
currentPage = Integer.parseInt(request.getParameter("page"));
}
query.setPagerOffset(currentPage * query.getPagerPerPage());
String currentUserName = SpringSecurityUtil.getCurrentUserName();
boolean isFinance = false;
UserDetails userDetails = userDetailsService.loadUserByUsername(currentUserName);
Collection<? extends GrantedAuthority> c = userDetails.getAuthorities();
for (GrantedAuthority g : c) {
if("ROLE_insuranceFinance".equals(g.getAuthority())){
isFinance = true;
break;
}
}
if(!isFinance){
query.setRequestPerson(currentUserName);
}
PagedResponseBean<InvoiceRequestBean> response = invoiceRequestService.queryList(currentUserName, query);
List<InvoiceRequestBean> list = new ArrayList<InvoiceRequestBean>();
list.add(null);
pageSize = query.getPagerPerPage();
total = response.getCount();
StringBuilder excel = new StringBuilder("/invoiceRequest/excel?");
String contactName = (query.getContactName() == null) ? ("") : (query.getContactName());
String requestPerson = (query.getRequestPerson() == null) ? ("") : (query.getRequestPerson());
int status = (query.getStatus() == null) ? (0) : (query.getStatus());
if(query.getCreateTimeStart() == null){
query.setCreateTimeStart(DateUtil.addDateField(new Date(), Calendar.MONTH, -3));
}
if(query.getCreateTimeEnd() == null){
query.setCreateTimeEnd(DateUtil.addDateField(new Date(), Calendar.MONTH, 3));
}
excel.append("contactName=").append(contactName);
excel.append("&requestPerson=").append(requestPerson);
excel.append("&status=").append(status);
excel.append("&createTimeStart=").append(DateUtil.getDateStr(query.getCreateTimeStart()));
excel.append("&createTimeEnd=").append(DateUtil.getDateStr(query.getCreateTimeEnd()));
model.put("excelpath", excel.toString());
pageCount = (0 == total % pageSize) ? (total / pageSize) : (total / pageSize + 1);
model.put("list",response.getResult());
model.put("paginationData", new PaginationForm(currentPage, pageSize, pageCount, total));
return "basic/invoiceRequest/invoiceRequestList";
}
}
package com.ctrip.fun.admin.form.basic;
public class InvoiceOrderInfo {
private String orderNo;
private String courseName;
private String amount;
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
package com.ctrip.fun.admin.form.basic;
import java.util.Date;
import java.util.List;
import org.springframework.format.annotation.DateTimeFormat;
import com.ctrip.fun.common.vo.basic.InvoiceOrderInfoBean;
/**
*销售提交开票申请
*/
public class InvoiceRquestDto {
//开票申请id
private Integer id;
//快递费用归属部门
private String costOfDepart;
//开票总金额
private String invoiceAmount;
//发票抬头
private String invoiceTitle;
//纳税识别号
private String taxIdNum;
//寄送联系人
private String contactName;
//联系方式
private String contactTel;
//寄送地址
private String contactAddress;
//开票备注
private String invoiceRemark;
//快递单号
private String expressNo;
//发票邮递时间
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date sendTime;
//未开票原因
private String refusedReason;
//开票申请人
private String requestPerson;
//销售员备注
private String salesRemark;
private List<InvoiceOrderInfoBean> invoiceOrderInfoBeans;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCostOfDepart() {
return costOfDepart;
}
public void setCostOfDepart(String costOfDepart) {
this.costOfDepart = costOfDepart;
}
public String getInvoiceAmount() {
return invoiceAmount;
}
public void setInvoiceAmount(String invoiceAmount) {
this.invoiceAmount = invoiceAmount;
}
public String getInvoiceTitle() {
return invoiceTitle;
}
public void setInvoiceTitle(String invoiceTitle) {
this.invoiceTitle = invoiceTitle;
}
public String getTaxIdNum() {
return taxIdNum;
}
public void setTaxIdNum(String taxIdNum) {
this.taxIdNum = taxIdNum;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getContactTel() {
return contactTel;
}
public void setContactTel(String contactTel) {
this.contactTel = contactTel;
}
public String getContactAddress() {
return contactAddress;
}
public void setContactAddress(String contactAddress) {
this.contactAddress = contactAddress;
}
public String getInvoiceRemark() {
return invoiceRemark;
}
public void setInvoiceRemark(String invoiceRemark) {
this.invoiceRemark = invoiceRemark;
}
public String getExpressNo() {
return expressNo;
}
public void setExpressNo(String expressNo) {
this.expressNo = expressNo;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public String getRefusedReason() {
return refusedReason;
}
public void setRefusedReason(String refusedReason) {
this.refusedReason = refusedReason;
}
public List<InvoiceOrderInfoBean> getInvoiceOrderInfoBeans() {
return invoiceOrderInfoBeans;
}
public void setInvoiceOrderInfoBeans(
List<InvoiceOrderInfoBean> invoiceOrderInfoBeans) {
this.invoiceOrderInfoBeans = invoiceOrderInfoBeans;
}
public String getRequestPerson() {
return requestPerson;
}
public void setRequestPerson(String requestPerson) {
this.requestPerson = requestPerson;
}
public String getSalesRemark() {
return salesRemark;
}
public void setSalesRemark(String salesRemark) {
this.salesRemark = salesRemark;
}
}
package com.ctrip.fun.admin.service.basic;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import com.ctrip.fun.admin.utility.AbstractExcelExportService;
import com.ctrip.fun.admin.utility.ExportUtil;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.vo.Request;
import com.ctrip.fun.common.vo.Response;
import com.ctrip.fun.common.vo.ResponseStatusEnum;
import com.ctrip.fun.common.vo.basic.InvoiceOrderInfoBean;
import com.ctrip.fun.common.vo.basic.InvoiceRequestBean;
import com.ctrip.fun.common.vo.basic.InvoiceRequestQuery;
public class InvoiceRequestExcelExportService extends AbstractExcelExportService<InvoiceRequestQuery,InvoiceRequestBean>{
@Override
public Class<InvoiceRequestBean> getTClass() {
return InvoiceRequestBean.class;
}
@Override
public List<InvoiceRequestBean> list(String userId,InvoiceRequestQuery query) {
List<InvoiceRequestBean> responseBean =new ArrayList<InvoiceRequestBean>();
String uri = super.getServiceUri("uri.invoiceRequest.excelList");
Request<InvoiceRequestQuery> request = new Request<InvoiceRequestQuery>("", query);
HttpEntity<Request<InvoiceRequestQuery>> entity = new HttpEntity<Request<InvoiceRequestQuery>>(request);
Response<List<InvoiceRequestBean>> response = super.exchange(uri, HttpMethod.POST, entity,
new ParameterizedTypeReference<Response<List<InvoiceRequestBean>>>() {
}).getBody();
if (null != response && response.getStatus() == ResponseStatusEnum.SUCCESS.getValue()) {
responseBean = response.getBody();
}
return responseBean;
}
@Override
public void exportExcel(String filename,
Collection<InvoiceRequestBean> collection, OutputStream outputStream) {
createExcelTitle();
XSSFWorkbook workBook = new XSSFWorkbook();
XSSFSheet sheet = workBook.createSheet();
ExportUtil exportUtil = new ExportUtil(workBook, sheet);
XSSFCellStyle headStyle = exportUtil.getHeadStyle();
//XSSFCellStyle bodyStyle = exportUtil.getBodyStyle();
XSSFRow headRow = sheet.createRow(0);
XSSFCell cell = null;
List<String> titleList = new ArrayList<String>();
titleList.add("发票申请ID");titleList.add("快递费用归属部门");titleList.add("发票抬头");titleList.add("纳税识别号");
titleList.add("发票寄送地址");titleList.add("寄送联系人");titleList.add("联系方式");titleList.add("开票备注");
titleList.add("未开票原因");titleList.add("快递单号");titleList.add("寄出时间");
titleList.add("订单号");titleList.add("开票金额");titleList.add("球场");
for (int i = 0; i < titleList.size(); i++) {
cell = headRow.createCell(i);
cell.setCellStyle(headStyle);
cell.setCellValue(titleList.get(i));
}
int count = 1;
int rowbased = 1;
for (InvoiceRequestBean item : collection) {
List<InvoiceOrderInfoBean> infoBeans = item.getInvoiceOrderInfoBeans();
for(InvoiceOrderInfoBean invoiceOrderInfoBean:infoBeans){
XSSFRow row = sheet.createRow(count++);
XSSFCell cell_Id = row.createCell(0);
cell_Id.setCellValue(item.getId()==null?"":item.getId()+"");
XSSFCell cell_CostOfDepart = row.createCell(1);
cell_CostOfDepart.setCellValue(item.getCostOfDepart()==null?"":item.getCostOfDepart());
XSSFCell cell_InvoiceTitle = row.createCell(2);
cell_InvoiceTitle.setCellValue(item.getInvoiceTitle()==null?"":item.getInvoiceTitle());
XSSFCell cell_taxIdNum = row.createCell(3);
cell_taxIdNum.setCellValue(item.getTaxIdNum()==null?"":item.getTaxIdNum());
XSSFCell cell_ContactAddress = row.createCell(4);
cell_ContactAddress.setCellValue(item.getContactAddress()==null?"":item.getContactAddress());
XSSFCell cell_ContactName = row.createCell(5);
cell_ContactName.setCellValue(item.getContactName()==null?"":item.getContactName());
XSSFCell cell_ContactTel = row.createCell(6);
cell_ContactTel.setCellValue(item.getContactTel()==null?"":item.getContactTel());
XSSFCell cell_InvoiceRemark = row.createCell(7);
cell_InvoiceRemark.setCellValue(item.getInvoiceRemark()==null?"":item.getInvoiceRemark());
XSSFCell cell_RefusedReason = row.createCell(8);
cell_RefusedReason.setCellValue(item.getRefusedReason()==null?"":item.getRefusedReason());
XSSFCell cell_ExpressNo = row.createCell(9);
cell_ExpressNo.setCellValue(item.getExpressNo()==null?"":item.getExpressNo());
XSSFCell cell_SendTime = row.createCell(10);
cell_SendTime.setCellValue(item.getSendTime()==null?"":DateUtil.getDateStr(item.getSendTime()));
XSSFCell cell_orderNo = row.createCell(11);
cell_orderNo.setCellValue(invoiceOrderInfoBean.getOrderNo()==null?"":invoiceOrderInfoBean.getOrderNo());
XSSFCell cell_Amount = row.createCell(12);
cell_Amount.setCellValue(invoiceOrderInfoBean.getAmount()==null?"":invoiceOrderInfoBean.getAmount());
XSSFCell cell_CourseName = row.createCell(13);
cell_CourseName.setCellValue(invoiceOrderInfoBean.getCourseName()==null?"":invoiceOrderInfoBean.getCourseName());
}
for(int i=0;i<11;i++){
//如果订单数量大于1就要合并
if(infoBeans.size()>1){
sheet.addMergedRegion(new CellRangeAddress(rowbased, rowbased+infoBeans.size()-1, i, i));
}else{
sheet.addMergedRegion(new CellRangeAddress(rowbased, rowbased, i, i));
}
}
//计算开始行
rowbased=rowbased+infoBeans.size();
}
try {
workBook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.ctrip.fun.admin.service.basic;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.vo.basic.InvoiceRequestBean;
public class InvoiceRequestExcelImportService {
public List<InvoiceRequestBean> parseExcel(Long userId,InputStream inputStream,String fileName)
throws Exception{
String message = "Import success";
boolean isE2007 = false; //判断是否是excel2007格式
if(fileName.endsWith("xlsx")){
isE2007 = true;
}
int rowIndex = 0;
List<InvoiceRequestBean> beans = new ArrayList<InvoiceRequestBean>();
try {
InputStream input = inputStream; //建立输入流
Workbook wb = null;
if(isE2007){
wb = new XSSFWorkbook(input);
}else{
wb = new HSSFWorkbook(input);
}
Sheet sheet = wb.getSheetAt(0); //获得第一个表单
List<CellRangeAddress> cras = getCombineCell(sheet);
int count = sheet.getLastRowNum()+1;//总行数
for(int i = 1; i < count;i++){
rowIndex = i;
Row row = sheet.getRow(i);
InvoiceRequestBean bean = new InvoiceRequestBean();
bean.setId(Integer.valueOf(getCellValue(row.getCell(0))));
bean.setRefusedReason(getCellValue(row.getCell(8)));
bean.setExpressNo(getCellValue(row.getCell(9)));
bean.setSendTime(DateUtil.parseDate(getCellValue(row.getCell(10))));
if(isMergedRegion(sheet,i,0)){
int lastRow = getRowNum(cras,sheet.getRow(i).getCell(0),sheet);
i = i+lastRow-1;
}
beans.add(bean);
}
return beans;
} catch (Exception ex) {
message = "Import failed, please check the data in "+rowIndex+" rows ";
return null;
}finally{
if(inputStream!=null){
inputStream.close();
}
}
}
/**
* 合并单元格处理,获取合并行
* @param sheet
* @return List<CellRangeAddress>
*/
public List<CellRangeAddress> getCombineCell(Sheet sheet)
{
List<CellRangeAddress> list = new ArrayList<CellRangeAddress>();
//获得一个 sheet 中合并单元格的数量
int sheetmergerCount = sheet.getNumMergedRegions();
//遍历所有的合并单元格
for(int i = 0; i<sheetmergerCount;i++)
{
//获得合并单元格保存进list中
CellRangeAddress ca = sheet.getMergedRegion(i);
list.add(ca);
}
return list;
}
private int getRowNum(List<CellRangeAddress> listCombineCell,Cell cell,Sheet sheet){
int xr = 0;
int firstC = 0;
int lastC = 0;
int firstR = 0;
int lastR = 0;
for(CellRangeAddress ca:listCombineCell)
{
//获得合并单元格的起始行, 结束行, 起始列, 结束列
firstC = ca.getFirstColumn();
lastC = ca.getLastColumn();
firstR = ca.getFirstRow();
lastR = ca.getLastRow();
if(cell.getRowIndex() >= firstR && cell.getRowIndex() <= lastR)
{
if(cell.getColumnIndex() >= firstC && cell.getColumnIndex() <= lastC)
{
xr = lastR;
}
}
}
return xr;
}
/**
* 判断单元格是否为合并单元格,是的话则将单元格的值返回
* @param listCombineCell 存放合并单元格的list
* @param cell 需要判断的单元格
* @param sheet sheet
* @return
*/
public String isCombineCell(List<CellRangeAddress> listCombineCell,Cell cell,Sheet sheet)
throws Exception{
int firstC = 0;
int lastC = 0;
int firstR = 0;
int lastR = 0;
String cellValue = null;
for(CellRangeAddress ca:listCombineCell)
{
//获得合并单元格的起始行, 结束行, 起始列, 结束列
firstC = ca.getFirstColumn();
lastC = ca.getLastColumn();
firstR = ca.getFirstRow();
lastR = ca.getLastRow();
if(cell.getRowIndex() >= firstR && cell.getRowIndex() <= lastR)
{
if(cell.getColumnIndex() >= firstC && cell.getColumnIndex() <= lastC)
{
Row fRow = sheet.getRow(firstR);
Cell fCell = fRow.getCell(firstC);
cellValue = getCellValue(fCell);
break;
}
}
else
{
cellValue = "";
}
}
return cellValue;
}
/**
* 获取合并单元格的值
* @param sheet
* @param row
* @param column
* @return
*/
public String getMergedRegionValue(Sheet sheet ,int row , int column){
int sheetMergeCount = sheet.getNumMergedRegions();
for(int i = 0 ; i < sheetMergeCount ; i++){
CellRangeAddress ca = sheet.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if(row >= firstRow && row <= lastRow){
if(column >= firstColumn && column <= lastColumn){
Row fRow = sheet.getRow(firstRow);
Cell fCell = fRow.getCell(firstColumn);
return getCellValue(fCell) ;
}
}
}
return null ;
}
/**
* 判断指定的单元格是否是合并单元格
* @param sheet
* @param row 行下标
* @param column 列下标
* @return
*/
private boolean isMergedRegion(Sheet sheet,int row ,int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress range = sheet.getMergedRegion(i);
int firstColumn = range.getFirstColumn();
int lastColumn = range.getLastColumn();
int firstRow = range.getFirstRow();
int lastRow = range.getLastRow();
if(row >= firstRow && row <= lastRow){
if(column >= firstColumn && column <= lastColumn){
return true;
}
}
}
return false;
}
/**
* 获取单元格的值
* @param cell
* @return
*/
public String getCellValue(Cell cell){
if(cell == null) return "";
if(cell.getCellType() == Cell.CELL_TYPE_STRING){
return cell.getStringCellValue();
}else if(cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){
return String.valueOf(cell.getBooleanCellValue());
}else if(cell.getCellType() == Cell.CELL_TYPE_FORMULA){
return cell.getCellFormula() ;
}else if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
return String.valueOf(cell.getNumericCellValue());
}
return "";
}
}
package com.ctrip.fun.admin.service.basic;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestClientException;
import com.ctrip.fun.admin.service.BaseService;
import com.ctrip.fun.common.vo.PagedResponseBean;
import com.ctrip.fun.common.vo.Request;
import com.ctrip.fun.common.vo.Response;
import com.ctrip.fun.common.vo.ResponseStatusEnum;
import com.ctrip.fun.common.vo.basic.InvoiceRequestBean;
import com.ctrip.fun.common.vo.basic.InvoiceRequestQuery;
public class InvoiceRequestService extends BaseService {
private static final Logger logger = LoggerFactory.getLogger(InvoiceRequestService.class);
/**
*查询发票申请
*/
public PagedResponseBean<InvoiceRequestBean> queryList(String userId,InvoiceRequestQuery query) {
PagedResponseBean<InvoiceRequestBean> responseBean = new PagedResponseBean<InvoiceRequestBean>(0,
new ArrayList<InvoiceRequestBean>());
String uri = super.getServiceUri("uri.invoiceRequest.queryList");
Request<InvoiceRequestQuery> request = new Request<InvoiceRequestQuery>("", query);
HttpEntity<Request<InvoiceRequestQuery>> entity = new HttpEntity<Request<InvoiceRequestQuery>>(request);
Response<PagedResponseBean<InvoiceRequestBean>> response = null;
try {
response = super.exchange(uri, HttpMethod.POST, entity,
new ParameterizedTypeReference<Response<PagedResponseBean<InvoiceRequestBean>>>() {
}).getBody();
} catch (RestClientException e) {
logger.error(e.getMessage());
}
if (null != response && response.getStatus() == ResponseStatusEnum.SUCCESS.getValue()) {
responseBean = response.getBody();
} else {
logger.error("{} status: {}, msg: {}", "获取电销任务列表异常", response.getStatus(),
response.getMessage());
}
return responseBean;
}
/**
*保存发票申请
*/
public int add(String userId, InvoiceRequestBean bean) {
String uri = super.getServiceUri("uri.invoiceRequest.add");
int retKey = 0;
Request<InvoiceRequestBean> request = new Request<InvoiceRequestBean>(userId, bean);
HttpEntity<Request<InvoiceRequestBean>> entity = new HttpEntity<Request<InvoiceRequestBean>>(request);
Response<Integer> response = super.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<Response<Integer>>() {
}).getBody();
if (null != response) {
if (response.getStatus() == 0) {
retKey = response.getBody();
} else {
Map<String, String> tags = new HashMap<>();
tags.put("userId", userId);
tags.put("bean", bean.toString());
logger.error("add异常", String.format("status: %d, msg: %s", response.getStatus(), response.getMessage()), tags);
}
}
return retKey;
}
/**
*获取发票申请
*/
public InvoiceRequestBean get(String userId, Integer id) {
String uri = super.getServiceUri("uri.invoiceRequest.get");
InvoiceRequestBean invoiceRequestBean = null;
Request<Integer> request = new Request<Integer>(userId, id);
HttpEntity<Request<Integer>> entity = new HttpEntity<Request<Integer>>(request);
Response<InvoiceRequestBean> response = super.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<Response<InvoiceRequestBean>>() {
}).getBody();
if (null != response) {
if (response.getStatus() == 0) {
invoiceRequestBean = response.getBody();
} else {
Map<String, String> tags = new HashMap<>();
tags.put("userId", userId);
logger.error("add异常", String.format("status: %d, msg: %s", response.getStatus(), response.getMessage()), tags);
}
}
return invoiceRequestBean;
}
/**
*更新发票申请
*/
public int update(String userId, InvoiceRequestBean bean) {
String uri = super.getServiceUri("uri.invoiceRequest.update");
Request<InvoiceRequestBean> request = new Request<InvoiceRequestBean>(userId, bean);
HttpEntity<Request<InvoiceRequestBean>> entity = new HttpEntity<Request<InvoiceRequestBean>>(
request);
super.exchange(uri, HttpMethod.POST, entity,
new ParameterizedTypeReference<Response<Boolean>>() {
}).getBody();
return 1;
}
public int batchUpdate(String string, List<InvoiceRequestBean> list) {
String uri = super.getServiceUri("uri.invoiceRequest.batchUpdate");
Request<List<InvoiceRequestBean>> request = new Request<List<InvoiceRequestBean>>("", list);
HttpEntity<Request<List<InvoiceRequestBean>>> entity = new HttpEntity<Request<List<InvoiceRequestBean>>>(
request);
super.exchange(uri, HttpMethod.POST, entity,new ParameterizedTypeReference<Response<Boolean>>() {}).getBody();
return 1;
}
}
......@@ -300,6 +300,17 @@
<!-- 电话销售 -->
<bean name="telTaskService" class="com.ctrip.fun.admin.service.basic.TelTaskService"
parent="baseService" />
<!-- 开票请求 -->
<bean name="invoiceRequestService" class="com.ctrip.fun.admin.service.basic.InvoiceRequestService"
parent="baseService" />
<bean name="invoiceRequestExcelExportService" class="com.ctrip.fun.admin.service.basic.InvoiceRequestExcelExportService"
parent="baseService" />
<bean name="invoiceRequestExcelImportService" class="com.ctrip.fun.admin.service.basic.InvoiceRequestExcelImportService" />
<!-- excel导入 -->
<bean name="abstractExcelService"
class="com.ctrip.fun.admin.service.excel.AbstractExcelService" parent="baseService"
......
......@@ -588,3 +588,11 @@ uri.teetime.operateLog=/fun-golf-service/eventCustomerInfo/queryEventCustomerInf
uri.teetime.confirm=/fun-golf-service/eventCustomerInfo/confirmOfflineEventCustomerInfo
uri.teetime.cancel=/fun-golf-service/eventCustomerInfo/cancelOfflineEventCustomerInfo
uri.invoiceRequest.add=/fun-golf-service/invoiceRequest/add
uri.invoiceRequest.get=/fun-golf-service/invoiceRequest/get
uri.invoiceRequest.edit=/fun-golf-service/invoiceRequest/edit
uri.invoiceRequest.update=/fun-golf-service/invoiceRequest/update
uri.invoiceRequest.batchUpdate=/fun-golf-service/invoiceRequest/batchUpdate
uri.invoiceRequest.queryList=/fun-golf-service/invoiceRequest/list
uri.invoiceRequest.excelList=/fun-golf-service/invoiceRequest/excelList
<#assign pageJsContent>
<script id="ul_template_city" type="text/x-handlebars-template">
{{#each body}}
<option value="{{value}}">{{label}}</option>
{{/each}}
</script>
<script>
$("#submitCheck").click(function(){
$("#telTaskForm").submit();
});
var index = $("#rowsOfOrder").children().length;
$("#addOrder").click(function(){
$("#rowsOfOrder").append("<tr> <td style='width:10%'><input type='checkbox'></td> <td style='width:10%'><input name='invoiceOrderInfoBeans["+index+"].orderNo'></td><td style='width:5%'><input name='invoiceOrderInfoBeans["+index+"].courseName'></td><td style='width:16%'><input name='invoiceOrderInfoBeans["+index+"].amount'></td></tr>");
index++;
});
$("#deleteOrder").click(function(){
$('input[type=checkbox]:checked').each(function () {
   $(this).parent("td").parent('tr').remove();
index--;
})
});
</script>
</#assign>
<#assign pageCssContent>
<style>
.modal{
width: 1120px;
margin-left: -560px;
}
.ordersInput{
width:445px;
}
</style>
</#assign>
<@com.layout title="新建发票信息" module="tools" current="invoiceInfo_create" pageJs=pageJsContent pageCss=pageCssContent>
<form id="telTaskForm" class="form-inline form-horizontal" action="${action}" method="post">
<div id="course_container">
<div class="row-fluid show-grid">
<h3 class="open span12" data-collapse-summary="" aria-expanded="true">录入发票信息</h3>
<div class="feature_content">
<@form.hidden "dto.id"/>
<@form.textInput path="dto.costOfDepart" attributes="class=\"input-medium\"" label="快递费用归属部门" required = true />
<@form.textInput path="dto.invoiceTitle" attributes="class=\"input-medium\"" label="发票抬头" required = true />
<@form.textInput path="dto.taxIdNum" attributes="class=\"input-medium\"" label="纳税识别号" required = true />
<@form.textInput path="dto.contactAddress" attributes="class=\"input-medium\"" label="发票寄送地址" required = true />
<@form.textInput path="dto.contactName" attributes="class=\"input-medium\"" label="寄送联系人" required = true />
<@form.textInput path="dto.contactTel" attributes="class=\"input-medium\"" label="联系方式" required = true />
<@form.textInput path="dto.invoiceRemark" attributes="class=\"input-medium\"" label="发票备注" required = true />
<@form.textInput path="dto.salesRemark" attributes="class=\"input-medium\"" label="销售备注" required = true />
<table class="table table-bordered table-striped widthShow" style="width:70%" enctype="multipart/form-data">
<thead>
<tr>
<tr style="width:10%" >
<td colspan='4' align="center">
<button id="addOrder" type="button" style="margin-left:80px;margin-right:400px">添加订单</button>
<button id="deleteOrder" type="button" >删除订单</button>
</td>
</tr>
</tr>
<tr>
<td style="width:10%">请选择</td>
<td style="width:10%">订单号</td>
<td style="width:5%">开票金额</td>
<td style="width:16%">球场名称</td>
</tr>
</thead>
<tbody id="rowsOfOrder">
<#if dto.id ?? >
<#list dto.invoiceOrderInfoBeans as item>
<tr> <td style="width:10%"><input type='checkbox' /></td> <td style='width:10%'><input name='invoiceOrderInfoBeans[${item_index}].orderNo' value=${item.orderNo} ></td><td style='width:5%'><input name='invoiceOrderInfoBeans[${item_index}].courseName' value=${item.courseName}></td><td style='width:16%'><input name='invoiceOrderInfoBeans[${item_index}].amount' value=${item.amount}></td></tr>
</#list>
</#if>
</tbody>
</table>
<#if dto.id ?? >
<#else>
<div>
<button id="submitCheck" type="button" class="btn btn-primary pull-left bottom_margin" >确认信息</button>
</div>
</#if>
</div>
</form>
</@com.layout>
<#assign pageJsContent>
<script>
function changeMobilePhoneToEdit(orderId){
var changeMobilePhoneToEdit = $("#changeMobilePhoneToEdit");
console.dir($("#changeMobilePhoneToEdit"));
changeMobilePhoneToEdit.modal('show');
console.log(changeMobilePhoneToEdit);
$("#idForFinanceUpdate").val(orderId);
}
function submitParseForm(){
$("#parseForm").submit();
}
$("#sendTimeForFinanceUpdate").iCalendar({
placeholder: $("#sendTimeForFinanceUpdate").val() ? $("#sendTimeForFinanceUpdate").val() : "blank"
});
function financeUpdate(){
alert($('#expressNoForFinanceUpdate').val());
alert($('#idForFinanceUpdate').val());
alert($('#refusedReasonForFinanceUpdate').val());
alert($('#sendTimeForFinanceUpdate').val());
jQuery.ajax({
type:"POST",
contentType:"application/x-www-form-urlencoded",
url:"/j/invoiceRequest/financeUpdate",
data:{
id:$('#idForFinanceUpdate').val(),
expressNo:$('#expressNoForFinanceUpdate').val(),
refusedReason:$('#refusedReasonForFinanceUpdate').val(),
sendTime:$('#sendTimeForFinanceUpdate').val()
},
success:function(data){
data = eval(data);
if(data.status == 0){
alert("修改成功");
window.location.reload();
}else{
alert("修改失败!" + data.message);
}
},
error:function(){
alert("修改失败!");
}
});
$('#changeMobilePhoneToEdit').modal('hide');
};
</script>
</#assign>
<#assign pageCssContent>
<style>
.table th, .table td{ text-align:center;vertical-align:middle;}
.widthShow {
width: 1100px;
}
</style>
</#assign>
<@com.layout title="开票申请列表" module="tools" current="invoiceInfo_list" pageCss=pageCssContent pageJs=pageJsContent>
<form class="form-inline search-box" action="/invoiceRequest/list" method="get" autocomplete="off" style="float:left">
<@com.textInput "dto.contactName" "style=\"margin-left: 5px;\"" "寄送联系人"/>
<@com.textInput "dto.requestPerson" "style=\"margin-left: 5px;\"" "发票提交人"/>
<@com.singleSelectQuery "dto.status" enums["com.ctrip.fun.common.vo.basic.InvoiceRequestStatusEnum"] "" "处理状态"/>
<@com.textInputTwoDate "dto.createTimeStart" "dto.createTimeEnd" "style=\"margin-left: 5px;\"" "发票提交时间"/>
<button id="J_submit" class="btn btn-primary">查询</button>
<button type="button" class="btn btn-success" onclick="javascript:location.href='/invoiceRequest/list';" style="margin-left:20px;">重置</button>
</form>
<table class="table table-bordered table-striped widthShow">
<thead>
<tr>
<th style="width: 50px;">寄送联系人</th>
<th style="width: 50px;">联系方式</th>
<th style="width: 60px;">提交人</th>
<th style="width: 60px;">提交日期</th>
<th style="width: 50px;">处理状态</th>
<th style="width: 38px;">未开票原因</th>
<th style="width: 38px;">运单号</th>
<th style="width: 38px;">寄送时间</th>
<th style="width: 38px;">详情查看</th>
<th style="width: 38px;">财务处理</th>
</tr>
</thead>
<tbody>
<#list list as item>
<tr>
<td>${item.contactName!}</td>
<td>${item.contactTel!}</td>
<td>${item.requestPerson!}</td>
<td>${(item.createTime?string('yyyy-MM-dd hh:mm:ss'))!}</td>
<#if item.status==1>
<td>待处理</td>
<#elseif item.status==2>
<td>已处理</td>
</#if>
<td>${item.refusedReason!}</td>
<td>${item.expressNo!}</td>
<td>${(item.sendTime?string('yyyy-MM-dd'))!}</td>
<td> <a href="/invoiceRequest/edit?id=${item.id!}" >查看</a> </td>
<td> <a href='javascript:void(0);' onclick="changeMobilePhoneToEdit('${item.id!}')" >处理</a> </td>
</tr>
</#list>
</tbody>
</table>
<form method="post" id="parseForm" action='/invoiceRequest/excelImport' enctype="multipart/form-data"><br> 
<a href="${excelpath}">excel导出</a> 
<input type="file" name="financeFile" style="margin-left:50px"/>
<input type="button" value="解析数据" onclick='submitParseForm()' />
</form>
<div class="pagination pagination-right widthShow">
<ul>
<@paginator.first />
<@paginator.previous />
<@paginator.numbers separator=""/>
<@paginator.next />
<@paginator.last />
</ul>
<@paginator.statistics />
</div>
<div class="modal hide fade" id="changeMobilePhoneToEdit">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>发票处理</h3>
</div>
<div class="modal-body" id='courseSelector'>
<table class="table table-bordered table-striped">
<tbody id="tableList">
<tr>
<input type='hidden' id='idForFinanceUpdate' />
<td style="text-align: right">寄出时间:</td> <td style="text-align: left"> <input id='sendTimeForFinanceUpdate' value=''/> </td>
<td rowspan='3'> <input type='button' onclick='financeUpdate()' value='处理完成'/> </td>
</tr>
<tr>
<td style="text-align: right">快递单号:</td> <td style="text-align: left"> <input id='expressNoForFinanceUpdate' value=''/> </td>
</tr>
<tr>
<td style="text-align: right">未开票原因:</td> <td style="text-align: left"> <input id='refusedReasonForFinanceUpdate' value=''/> </td>
</tr>
</tbody>
</table>
<div class="pagination pagination-mini">
</div>
</div>
</div>
</@com.layout>
\ No newline at end of file
......@@ -358,6 +358,14 @@ ${pageCss}
<li <#if current == "rankList">class="active"</#if>>
<a href="/eventCustomerInfo/importExcelRankList">成绩导入</a>
</li>
<li class="nav-header">发票提交</li>
<li <#if current == "invoiceInfo_create">class="active"</#if>>
<a href="/invoiceRequest/create">录入发票</a>
</li>
<li <#if current == "invoiceInfo_list">class="active"</#if>>
<a href="/invoiceRequest/list">查询发票</a>
</li>
</ul>
<#elseif module=="tourOrder">
<ul class="nav nav-list">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment