精华内容
下载资源
问答
  • 下载微服务
    2022-08-13 23:12:45

    首先

    首先需要知道不能直接通过一个接口调用一个接口的下载文件,因为Response是不同的,
    比如A接口调用B接口下载文件,而想要得到返回结果就必须得到response响应,而A发起请求时自己有一个response,A调用B时,其实也是相当于执行B接口的方法,所以B自己有一个response,而页面返回的response是A而不是真正下载文件的B接口,

    解决:

    获取B接口文件下载接口的reponse的内容,然后将其内容注入到A接口的reponse中

    代码

    服务调用方

    feign接口:(用feign的Response类接收返回信息)

    @PostMapping("/Info")
    Response downInfo(@RequestBodyReq req);
    

    调用方下载文件的地址:

    @PostMapping("/Info")
        public void downInfo(@RequestBody Req req, HttpServletResponse res) throws IOException {
            Response response = clctInfoService.downClctInfo(req);
            InputStream inputStream = response.body().asInputStream();
            HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
            res.setContentType("application/vnd.ms-excel");
            res.setHeader("Content-Disposition",
                    "attachment;fileName=a.xlsx");
            workbook.write(res.getOutputStream());
            inputStream.close();
        }
    
    更多相关内容
  • 下载微服务架构与实践pdf文档下载微服务架构与实践pdf文档
  • 微服务架构模式.pdf

    2022-05-06 15:52:12
    微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构模式.pdf 微服务架构...
  • 微服务
  • SpringBoot微服务搭建代码下载,里面包含SpringBoot服务端及一个客户端,是一个简单的实例。
  • 本门课程围绕电商项目大觅网的业务场景,基于微服务原则设计电商项目,使用多种诸如Eureka、Feign、Hystrix、Ribbon、Zuul、Config等技术,另外基于虚拟化技术Docker+Jenkins实现程序自动发布、基于Mycat实现第三方...
  • 在这篇文章里,我计划涵盖微服务架构(MSA)的核心架构概念,以及你如何在实践中使用这些架构理论。如今,微服务“microservice”已经成为软件架构领域最流行的热词之一。市面上也有很多与微服务的基础知识以及优点...
  • Java微服务之文件上传下载导入导出Excel详情源码

    wfw-erp-api-web服务

    ErpMasterDataExcelController

    package cn.com.esgcc.wfw.web.controller.web;
    
    import cn.com.esgcc.wfw.common.service.ErpServiceResult;
    import cn.com.esgcc.wfw.common.service.ServiceResult;
    import cn.com.esgcc.wfw.erp.company.entity.po.ErpCompany;
    import cn.com.esgcc.wfw.erp.company.service.ErpCompanyServiceBiz;
    import cn.com.esgcc.wfw.erp.enums.MasterDataEnum;
    import cn.com.esgcc.wfw.erp.enums.MasterDataImportTaskStatus;
    import cn.com.esgcc.wfw.erp.masterdata.entity.po.MasterDataImportTask;
    import cn.com.esgcc.wfw.erp.masterdata.entity.vo.ImportTaskVo;
    import cn.com.esgcc.wfw.erp.masterdata.service.MasterDataImportTaskService;
    import cn.com.esgcc.wfw.erp.masterdata.service.MasterDataImportTaskServiceBiz;
    import cn.com.esgcc.wfw.fastdfs.service.FastdfsServiceBiz;
    import cn.com.esgcc.wfw.gwutil.log.LogUtil;
    import cn.com.esgcc.wfw.organisation.entity.po.Organisation;
    import cn.com.esgcc.wfw.organisation.service.OrganisationServiceBiz;
    import cn.com.esgcc.wfw.web.ApiConstants;
    import cn.com.esgcc.wfw.web.ApiResultCode;
    import cn.com.esgcc.wfw.web.base.APIResponse;
    import cn.com.esgcc.wfw.web.base.BaseController;
    import cn.com.esgcc.wfw.web.entity.mapper.ImportTaskMapper;
    import cn.com.esgcc.wfw.web.entity.req.ImportTaskReq;
    import cn.com.esgcc.wfw.web.session.SessionUser;
    import cn.com.esgcc.wfw.web.util.easyexcel.ExcelHeadListener;
    import com.alibaba.excel.EasyExcel;
    import com.alibaba.fastjson.JSON;
    import org.apache.commons.io.FilenameUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.net.URLEncoder;
    
    @RestController
    public class ErpMasterDataExcelController extends BaseController {
    
        private static final Logger logger = LoggerFactory.getLogger(ErpMasterDataExcelController.class);
    
        @Autowired
        private ErpCompanyServiceBiz erpCompanyServiceBiz;
    
        @Autowired
        private MasterDataImportTaskService masterDataImportTaskService;
    
        @Autowired
        private MasterDataImportTaskServiceBiz masterDataImportTaskServiceBiz;
    
        @Autowired
        private ImportTaskMapper importTaskMapper;
    
        @Autowired
        private FastdfsServiceBiz fastdfsServiceBiz;
    
        @Autowired
        private OrganisationServiceBiz organisationServiceBiz;
    
    
    
        @PostMapping(ApiConstants.SYS_IMPORT_EXCEL+"{type}")
        public APIResponse companyExcleImport(MultipartFile file, HttpServletRequest request,@PathVariable Integer type){
            String check = fileCheck(file);
            if(StringUtils.isNotBlank(check)){
                return APIResponse.fail(ApiResultCode.FAIL,check);
            }
            String orgCode = request.getParameter("orgCode");
            if(StringUtils.isBlank(orgCode)){
                return APIResponse.fail(ApiResultCode.FAIL, "公司集成编码不能为空");
            }
            
            //根据集成编码查询公司集成配置
            ErpServiceResult result = erpCompanyServiceBiz.selectByCompanyCode(orgCode);
            
            ErpCompany erpCompany= (ErpCompany) result.getResult();
            if(erpCompany == null){
                return APIResponse.fail(ApiResultCode.FAIL, "公司集成编码不存在,无法导入数据");
            }
            MasterDataEnum masterDataEnum = MasterDataEnum.type(type);
            if(masterDataEnum == null){
                return APIResponse.fail(ApiResultCode.FAIL, "数据类型不存在,无法导入数据");
            }
            String aggregateType = request.getParameter("aggregateType");
            if(StringUtils.isBlank(aggregateType)){
                return APIResponse.fail(ApiResultCode.FAIL, "集成方式不能为空");
            }
            /*
              *对文件进行处理将其上传文件到服务器 获取上传路径
              * 处理文件名称
             */
            String filename = file.getOriginalFilename();
            try {
                InputStream inputStream = file.getInputStream();
                ExcelHeadListener headlis = new ExcelHeadListener(masterDataEnum);
                EasyExcel.read(inputStream, headlis).sheet().headRowNumber(2).doRead();
                if(headlis.getFlag()){
                //调用到fastdfs微服务 得到上传路径  这里也可以是本地路径
                    String filePath = fastdfsServiceBiz.uploadFaceImg(file.getBytes(), filename);
                    MasterDataImportTask task = buildTask(filename, filePath, erpCompany.getId(), erpCompany.getCompanyName(),type,orgCode,aggregateType);
                    masterDataImportTaskService.save(task);
                    return APIResponse.success(ApiResultCode.SUCCESS);
                }else{
                    return APIResponse.fail(ApiResultCode.FAIL,"导入模板不正确,无法导入");
                }
            } catch (IOException e) {
                LogUtil.encError(logger, e.getMessage(), e);
                return APIResponse.fail(ApiResultCode.FAIL, "上传文件失败");
            }
        }
    
        /**
         * 基础数据导入任务查询
         *
         * @param req
         * @return
         */
        @PostMapping(ApiConstants.SYS_IMPORT_EXCEL_LIST)
        public APIResponse importTaskList(@RequestBody ImportTaskReq req) {
            try {
                //1.设置参数
                ImportTaskVo taskVo = importTaskMapper.importTaskReqToVo(req);
    
                //2.调用service服务
                ServiceResult result = masterDataImportTaskServiceBiz.findByVo(taskVo);
    
                //3.判断查询结果并根据查询结果响应请求
                if (!result.getStatus()) {
                    return new APIResponse(ApiResultCode.FAIL, result.getMsg());
                }
                return new APIResponse(result.getResult());
            } catch (Exception e) {
                LogUtil.encError(logger, "查询任务列表方法(findByVo)出现异常: ", e);
                return new APIResponse(ApiResultCode.SYSTEM_ERROR);
            }
        }
    
        /**
         * 错误文件下载
         * @param id
         * @param resp
         */
        @PostMapping(ApiConstants.SYS_IMPORT_EXCEL_DOWNLOAD)
        public void downloadExcel(@PathVariable("id") Integer id, HttpServletResponse resp) {
            MasterDataImportTask importTask = masterDataImportTaskService.getByPrimaryKey(id);
            if(importTask != null || importTask.getId() != null){
                OutputStream os = null;
    
                try {
                    resp.setContentType("application/octet-stream");
                    // 表示不能用浏览器直接打开
                    resp.setHeader("Connection", "close");
                    // 告诉客户端允许断点续传多线程连接下载
                    resp.setHeader("Accept-Ranges", "bytes");
                    resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(importTask.getFileName(), "UTF-8"));
                    resp.setCharacterEncoding("UTF-8");
    //                resp.setHeader("Transfer-Encoding", "chunked");
                    os = resp.getOutputStream();
    
                    byte[] download = fastdfsServiceBiz.download(importTask.getDownloadUrl());
    //                resp.addIntHeader("Content-length",download.length );
    
                    LogUtil.encInfo(logger, "文件服务器,下载excel:{}", null == download);
    
                    os.write(download);
                } catch (IOException e) {
                    LogUtil.encError(logger, "下载excel异常:{}", e);
                } finally {
                    try {
                        if (os != null) {
                            os.close();
                        }
                    } catch (IOException e) {
                        LogUtil.encError(logger, "下载excel关闭流异常", e);
                    }
                }
            }
    
        }
    	
    	/**
    	*判断文件是否符合上传类型格式
    	*/
        private String fileCheck(MultipartFile file){
            String fileExt = FilenameUtils.getExtension(file.getOriginalFilename());
            if (!"xlsx".equalsIgnoreCase(fileExt) && !"xls".equalsIgnoreCase(fileExt)) {
                return "不支持的文件格式";
            }
            if (file.isEmpty() || file.getSize() > 1024L * 1024L ) {
                return "文件大小不符合要求";
            }
            return "";
        }
    
        private MasterDataImportTask buildTask(String fileName,String filePath,Integer orgId,String orgName,Integer type,String orgCode,String aggregateType){
            MasterDataImportTask task = new MasterDataImportTask();
            SessionUser sessionUser = getSessionUser();
            task.setCreater(sessionUser.getUserName());
            task.setFileName(fileName);
            task.setFilePath(filePath);
            task.setOrgId(orgId);
            task.setOrgName(orgName);
            task.setStatus(MasterDataImportTaskStatus.W.name());
            task.setStatusStr("上传成功");
            task.setTaskResult("等待系统导入");
            task.setType(type);
            task.setOrgCode(orgCode);
            task.setAggregateType(aggregateType);
            return task;
        }
    
    }
    
    

    API常量

    package cn.com.esgcc.gwtrip.web;
    
    /**
     * api常量
     *
     * @author zhihui
     */
    public final class ApiConstants {
    
        public static final String SESSION_USER_KEY = "esgcc_session_user";
        public static final String BASE_URI = "/api/erp";
        public static final String SYS_BASE_URI = "/web/erp";
    
        /**
         * session中用于记录用户上次访问的时间的key
         */
        public static final String SESSION_SECOND_LAST_ACCESS_TIME = "second_last_access_time";
    
        /**
         * api接口
         */
        public static final String API_MASTERDATA_FINDBYTYPE = BASE_URI + "/masterdata/findByType";
    
        /**
         * WEB 移动审批
         */
        public static final String SYS_MOBILE_APPROVAL_SEND_ERP= BASE_URI + "/approval/sendApprovalStatusToErp";
    
        /**
         * 主数据 excel导入
         */
        public static final String SYS_IMPORT_EXCEL = SYS_BASE_URI + "/importData/";
        public static final String SYS_IMPORT_EXCEL_LIST = SYS_BASE_URI + "/importData/list";;
    
        /**
         * 业务单据任务接口
         */
        public static final String SYS_BUSINESS_BILL_PAGE_LIST = SYS_BASE_URI+"/businessBill/pageList" ;
    
    }
    
    

    API实体响应

    package cn.com.esgcc.wfw.web.base;
    import cn.com.esgcc.wfw.web.ApiResultCode;
    
    /**
     * API响应实体
     * 
     * @author zhihui
     *
     */
    public class APIResponse {
        /**
         * 返回码
         */
        private int statusCode;
        /**
         * 返回信息
         */
        private String msg;
        /**
         * 返回数据
         */
        private Object data;
    
        public APIResponse() {
            this(ApiResultCode.SUCCESS, null, null);
        }
    
        public APIResponse(Object result) {
            this(200, null, result);
        }
    
        public APIResponse(int statusCode) {
            this(statusCode, null, null);
        }
    
        public APIResponse(int statusCode, String msg) {
            this(statusCode, msg, null);
        }
    
        public APIResponse(String msg, Object data) {
            this.statusCode = 200;
            this.msg = msg;
            this.data = data;
        }
    
        public APIResponse(int statusCode, String msg, Object data) {
            this.statusCode = statusCode;
            this.msg = msg;
            this.data = data;
        }
    
        public static final APIResponse success(Object result) {
            APIResponse apiResponse = new APIResponse(result);
            return apiResponse;
        }
    
        public static final APIResponse fail(int statusCode) {
            return fail(statusCode, null);
        }
    
        public static final APIResponse fail(int statusCode, String msg) {
            APIResponse apiResponse = new APIResponse(statusCode, msg);
            return apiResponse;
        }
    
        public int getStatusCode() {
            return statusCode;
        }
    
        public void setStatusCode(int statusCode) {
            this.statusCode = statusCode;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        @Override
        public String toString() {
            return "APIResponse [statusCode=" + statusCode + ", msg=" + msg + ", data=" + data + "]";
        }
    
    }
    
    

    ApI实体相应码

    package cn.com.esgcc.wfw.web;
    
    /**
     * api响应码
     * 
     * @author zhihui
     *
     */
    public final class ApiResultCode {
    
        public static final String RESP_CODE_KEY = "respcode.%s";
        /**
         * 操作成功
         */
        public static final int SUCCESS = 200;
    
        /**
         * 操作失败
         */
        public static final int ERROR = 500;
    
        /**
         * 操作失败
         */
        public static final int FAIL = -1;
    
        /**
         * xss校验失败
         */
        public static final int XSS_ERROR = 400;
        /**
         * 系统异常
         */
        public static final int SYSTEM_ERROR = 503;
        /**
         * 用户未登录
         */
        public static final int NO_AUTH = -200;
    
        /**
         * 请求地址找不到服务
         */
        public static final int NOT_FOUND = 404;
    
        /**
         * 登录超时
         */
        public static final int LOGIN_EXPIRE = 90001;
        /**
         * 重复提交
         */
        public static final int RESUBMIT_REQUEST = 90002;
    
        /**
         * 离线超时
         */
        public static final int OFFLINE_TIMEOUT = 90003;
    }
    
    

    ExcelHeadListener extends AnalysisEventListener

    package cn.com.esgcc.gwtrip.web.util.easyexcel;
    
    import cn.com.esgcc.gwtrip.erp.enums.MasterDataEnum;
    import com.alibaba.excel.context.AnalysisContext;
    import com.alibaba.excel.event.AnalysisEventListener;
    import com.alibaba.fastjson.JSON;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import static java.lang.Boolean.TRUE;
    
    public class ExcelHeadListener<S> extends AnalysisEventListener<S> {
    
        private static Logger logger = LoggerFactory.getLogger(ExcelHeadListener.class);
        //表头是否正确的标志
        private Boolean flag = false;
    
        //各数据类型表头集合
        private static final Map<Integer,String> companyMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> profitMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> costMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> innerOrderMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> wbsMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> supplierMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> costTypeMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> ydbxSupplierMap = new HashMap<Integer, String>();
        private static final Map<Integer,String> assetMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> contractMap = new HashMap<Integer,String>();
        private static final Map<Integer,String> costDetailMap = new HashMap<Integer,String>();
    
        private Map<Integer,String> ruleHeadMap;
    
        public ExcelHeadListener() {
        }
    
        public ExcelHeadListener(MasterDataEnum type) {
            if(MasterDataEnum.COMPANY_CODE.equals(type)){
                ruleHeadMap = companyMap;
            }
            if(MasterDataEnum.PROFIT_CENTER.equals(type)){
                ruleHeadMap = profitMap;
            }
            if(MasterDataEnum.COST_CENTER.equals(type)){
                ruleHeadMap = costMap;
            }
            if(MasterDataEnum.INNER_ORDER.equals(type)){
                ruleHeadMap = innerOrderMap;
            }
            if(MasterDataEnum.WBS.equals(type)){
                ruleHeadMap = wbsMap;
            }
            if(MasterDataEnum.SUPPLIER.equals(type)){
                ruleHeadMap = supplierMap;
            }
            if(MasterDataEnum.COST_TYPE.equals(type)){
                ruleHeadMap = costTypeMap;
            }
            if(MasterDataEnum.YDBX_PUB_SUPPLIER.equals(type)){
                ruleHeadMap = ydbxSupplierMap;
            }
            if(MasterDataEnum.ASSETS.equals(type)){
                ruleHeadMap = assetMap;
            }
            if(MasterDataEnum.CONTRACT.equals(type)){
                ruleHeadMap = contractMap;
            }
            if(MasterDataEnum.COST_DETAIL.equals(type)){
                ruleHeadMap = costDetailMap;
            }
        }
        static {
            companyMap.put(0, "公司代码");
            companyMap.put(1, "公司名称");
            companyMap.put(2, "备用字段1");
            companyMap.put(3, "备用字段2");
            companyMap.put(4, "备用字段3");
            companyMap.put(5, "备用字段4");
            companyMap.put(6, "备用字段5");
            companyMap.put(7, "删除标识");
    
            profitMap.put(0, "公司代码");
            profitMap.put(1, "利润中心编码");
            profitMap.put(2, "利润中心名称");
            profitMap.put(3, "责任人ID");
            profitMap.put(4, "责任人");
            profitMap.put(5, "备用字段1");
            profitMap.put(6, "备用字段2");
            profitMap.put(7, "备用字段3");
            profitMap.put(8, "备用字段4");
            profitMap.put(9, "备用字段5");
            profitMap.put(10, "删除标识");
    
            costMap.put(0, "公司代码");
            costMap.put(1, "利润中心编码");
            costMap.put(2, "成本中心编码");
            costMap.put(3, "成本中心名称");
            costMap.put(4, "责任人ID");
            costMap.put(5, "责任人");
            costMap.put(6, "备用字段1");
            costMap.put(7, "备用字段2");
            costMap.put(8, "备用字段3");
            costMap.put(9, "备用字段4");
            costMap.put(10,"备用字段5");
            costMap.put(11,"删除标识");
    
            innerOrderMap.put(0,"公司代码");
            innerOrderMap.put(1, "利润中心编码");
            innerOrderMap.put(2, "成本中心编码");
            innerOrderMap.put(3, "负责的成本中心");
            innerOrderMap.put(4, "内部订单编码");
            innerOrderMap.put(5, "内部订单名称");
            innerOrderMap.put(6, "短文本");
            innerOrderMap.put(7, "订单类型");
            innerOrderMap.put(8, "有关统计订单标志");
            innerOrderMap.put(9, "责任人ID");
            innerOrderMap.put(10, "责任人");
            innerOrderMap.put(11, "备用字段1");
            innerOrderMap.put(12, "备用字段2");
            innerOrderMap.put(13, "备用字段3");
            innerOrderMap.put(14, "备用字段4");
            innerOrderMap.put(15, "备用字段5");
            innerOrderMap.put(16, "删除标识");
    
            wbsMap.put(0, "公司代码");
            wbsMap.put(1, "利润中心编码");
            wbsMap.put(2, "责任成本中心");
            wbsMap.put(3, "WBS编码");
            wbsMap.put(4, "WBS描述");
            wbsMap.put(5, "所属单体WBS编码");
            wbsMap.put(6, "所属单体WBS描述");
            wbsMap.put(7, "所属项目编码");
            wbsMap.put(8, "所属项目描述");
            wbsMap.put(9, "项目类型");
            wbsMap.put(10, "项目类型名称");
            wbsMap.put(11, "责任人ID");
            wbsMap.put(12, "责任人");
            wbsMap.put(13, "备用字段1");
            wbsMap.put(14, "备用字段2");
            wbsMap.put(15, "备用字段3");
            wbsMap.put(16, "备用字段4");
            wbsMap.put(17, "备用字段5");
            wbsMap.put(18, "删除标识");
    
    
            supplierMap.put(0, "公司代码");
            supplierMap.put(1, "供应商编码");
            supplierMap.put(2, "供应商名称");
            supplierMap.put(3, "人员编号");
            supplierMap.put(4, "银行账户姓名");
            supplierMap.put(5, "银行账号");
            supplierMap.put(6, "银行名称");
            supplierMap.put(7, "银行联行号");
            supplierMap.put(8, "备用字段1");
            supplierMap.put(9, "备用字段2");
            supplierMap.put(10, "备用字段3");
            supplierMap.put(11, "备用字段4");
            supplierMap.put(12, "备用字段5");
            supplierMap.put(13, "删除标识");
    
            costTypeMap.put(0, "公司代码");
            costTypeMap.put(1, "利润中心编码");
            costTypeMap.put(2, "费用类型编码");
            costTypeMap.put(3, "费用明细");
            costTypeMap.put(4, "费用类型名称");
            costTypeMap.put(5, "对应财务科目");
            costTypeMap.put(6, "财务科目描述");
            costTypeMap.put(7, "成本中心必填标识");
            costTypeMap.put(8, "WBS必填标识");
            costTypeMap.put(9, "IO必填标识");
            costTypeMap.put(10, "是否为增值税");
            costTypeMap.put(11, "总账科目编号");
            costTypeMap.put(12, "税率编码");
            costTypeMap.put(13, "税项编码");
            costTypeMap.put(14, "免税标识");
            costTypeMap.put(15, "备用字段1");
            costTypeMap.put(16, "备用字段2");
            costTypeMap.put(17, "备用字段3");
            costTypeMap.put(18, "备用字段4");
            costTypeMap.put(19, "备用字段5");
            costTypeMap.put(20, "删除标识");
    
            ydbxSupplierMap.put(0, "公司代码");
            ydbxSupplierMap.put(1, "供应商或债权人的帐号");
            ydbxSupplierMap.put(2,"名称");
            ydbxSupplierMap.put(3, "银行代码");
            ydbxSupplierMap.put(4, "银行账户");
            ydbxSupplierMap.put(5, "账户持有人姓名");
            ydbxSupplierMap.put(6,"银行名称");
            ydbxSupplierMap.put(7,"删除标记");
            ydbxSupplierMap.put(8,"备用字段1");
            ydbxSupplierMap.put(9,"备用字段2");
            ydbxSupplierMap.put(10,"备用字段3");
            ydbxSupplierMap.put(11, "备用字段4");
            ydbxSupplierMap.put(12,"备用字段5");
    
            assetMap.put(0,"公司代码");
            assetMap.put(1, "利润中心");
            assetMap.put(2,"成本中心");
            assetMap.put(3,"资产编号");
            assetMap.put(4,"资产次级编号");
            assetMap.put(5,"资产描述");
            assetMap.put(6,"资产主文本名称");
            assetMap.put(7,"资产分类");
            assetMap.put(8,"资产分类标识");
            assetMap.put(9,"资本化日期");
            assetMap.put(10,"不活动日期");
            assetMap.put(11,"车牌号");
            assetMap.put(12,"资产状态");
            assetMap.put(13,"资产变动方式");
            assetMap.put(14,"电压等级");
            assetMap.put(15,"数量");
            assetMap.put(16,"计量单位");
            assetMap.put(17,"生产和管理用标识");
            assetMap.put(18,"建筑面积");
            assetMap.put(19,"资产原值");
            assetMap.put(20,"冻结标识");
            assetMap.put(21,"删除标识");
            assetMap.put(22,"备用字段1");
            assetMap.put(23,"备用字段2");
            assetMap.put(24,"备用字段3");
            assetMap.put(25,"备用字段4");
            assetMap.put(26,"备用字段5");
    
    
            contractMap.put(0,"公司代码");
            contractMap.put(1,"经费合同编号");
            contractMap.put(2,"采购凭证编号");
            contractMap.put(3,"日期");
            contractMap.put(4,"时间");
            contractMap.put(5,"合同名称");
            contractMap.put(6,"生效标识");
            contractMap.put(7,"生效日期");
            contractMap.put(8,"合同对方");
            contractMap.put(9,"开户行");
            contractMap.put(10,"银行账户");
            contractMap.put(11,"货币码");
            contractMap.put(12,"款项性质");
            contractMap.put(13,"支付比例");
            contractMap.put(14,"支付金额");
            contractMap.put(15,"补充协议号");
            contractMap.put(16,"备用字段1");
            contractMap.put(17,"备用字段2");
            contractMap.put(18,"备用字段3");
            contractMap.put(19,"备用字段4");
            contractMap.put(20,"备用字段5");
    
            costDetailMap.put(0,"财务组织");
            costDetailMap.put(1,"费用大类");
            costDetailMap.put(2,"费用明细");
            costDetailMap.put(3, "费用明细描述");
            costDetailMap.put(4, "上级费用编码");
            costDetailMap.put(5,"是否末级");
            costDetailMap.put(6,"状态标识");
            costDetailMap.put(7,"备用字段1");
            costDetailMap.put(8,"备用字段2");
            costDetailMap.put(9,"备用字段3");
            costDetailMap.put(10,"备用字段4");
            costDetailMap.put(11,"备用字段5");
        }
    
        public Boolean getFlag() {
            return flag;
        }
    
        @Override
        public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
            logger.info("headMap:"+JSON.toJSONString(headMap));
            logger.info("ruleHeadMap:"+JSON.toJSONString(ruleHeadMap));
            if(headMap.equals(ruleHeadMap)) {
                flag = TRUE;
            };
        }
        @Override
        public void invoke(S erpMasterData, AnalysisContext analysisContext) {
    
        }
    
        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    
        }
    }
    
    

    wfw-erp-service服务

    ErpCompanyServiceBiz

    package cn.com.esgcc.wfw.erp.company.service;
    
    import cn.com.esgcc.wfw.common.service.ErpServiceResult;
    import cn.com.esgcc.wfw.common.service.ServiceResult;
    import cn.com.esgcc.wfw.erp.company.entity.po.ErpCompany;
    import cn.com.esgcc.wfw.erp.company.entity.vo.ErpCompanyVo;
    
    /**
     * ErpCompanyServiceBiz
     * @author zhihui
     */
    public interface ErpCompanyServiceBiz {
        /**
         * 根据集成编码查询公司集成配置
         * @param companyCode
         * @return
         */
        ErpServiceResult selectByCompanyCode(String companyCode);
        /**
         * 查询列表,支持分页
         * @param vo
         * @return
         */
        ServiceResult list(ErpCompanyVo vo);
        /**
         * 查询一个
         * @param vo
         * @return
         */
        ServiceResult get(ErpCompanyVo vo);
        /**
         * 新增
         * @param entity
         * @return
         */
        ServiceResult add(ErpCompany entity);
    }
    

    ErpCompanyService

    package cn.com.esgcc.wfw.erp.company.service;
    
    import cn.com.esgcc.wfw.erp.company.entity.po.ErpCompany;
    import cn.com.esgcc.wfw.erp.company.entity.vo.ErpCompanyVo;
    import cn.com.esgcc.wfw.erp.company.entity.vo.ListDebCompanyVo;
    
    import java.util.List;
    
    /**
     * ErpCompanyService
     * @author zhihui
     */
    public interface ErpCompanyService {
      /**
         * 根据companyCode查询数据
         * @param companyCode
         * @return
         */
        ErpCompany selectByCompanyCode(String companyCode);
     
        /**
         * 查询列表,支持分页
         * @param vo
         * @return
         */
        List<ErpCompany> list(ErpCompanyVo vo);
    
        /**
         * 查询一个
         * @param vo
         * @return
         */
        ErpCompany get(ErpCompanyVo vo);
    
        /**
         * 新增
         * @param entity
         * @return
         */
        int add(ErpCompany entity);
    
    }
    

    MasterDataImportTaskService

    package cn.com.esgcc.wfw.erp.masterdata.service;
    public interface MasterDataImportTaskService {
    
        /**
         * save
         * @param entity
         * @return
         */
        Integer save(MasterDataImportTask entity);
    }
    

    MasterDataImportTask PO

    package cn.com.esgcc.wfw.erp.masterdata.entity.po;
    
    import lombok.EqualsAndHashCode;
    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    import java.io.Serializable;
    import java.util.Date;
    @Getter
    @Setter
    @ToString(callSuper = true)
    @EqualsAndHashCode
    public class MasterDataImportTask implements Serializable{
    
        private static final long serialVersionUID = 3277427681956393144L;
        /**
         *id
         */
        private Integer id;
        /**
         *导入公司ID
         */
        private Integer orgId;
        /**
         *导入公司名称
         */
        private String orgName;
        /**
         *原始文件名称
         */
        private String fileName;
        /**
         *原始文件存放路径
         */
        private String filePath;
        /**
         *下载链接
         */
        private String downloadUrl;
        /**
         *任务处理状态:W-等待导入,S-导入成功,F-导入失败,U-正在导入
         */
        private String status;
        /**
         *任务处理报告
         */
        private String taskResult;
        /**
         *任务处理状态描述
         */
        private String statusStr;
        /**
         *上传人
         */
        private String creater;
        /**
         *导入时间
         */
        private Date createTime;
        /**
         *更新日期
         */
        private Date updateTime;
    
        /**
         * 数据类型
         */
        private Integer type;
        /**
         * 公司集成编码
         */
        private String orgCode;
        /**
         * 集成方式
         */
        private String aggregateType;
    }
    

    MasterDataEnum

    package cn.com.esgcc.wfw.erp.enums;
    
    import cn.com.esgcc.wfw.erp.masterdata.entity.excel.read.*;
    import cn.com.esgcc.wfw.erp.masterdata.entity.excel.write.*;
    import cn.com.esgcc.wfw.erp.ydbx.entity.po.ErpMasterdataAsset;
    import cn.com.esgcc.wfw.erp.ydbx.entity.po.ErpMasterdataContractByLaw;
    import cn.com.esgcc.wfw.erp.ydbx.entity.po.ErpMasterdataCostDetail;
    import lombok.Getter;
    import lombok.ToString;
    
    @Getter
    @ToString
    public enum MasterDataEnum {
    
        /*
         * 主数据相关注意事项:
         *  1.查询成本中心,内部订单,WBS,费用类型时,先根据利润中心查询
         *    如果利润中心为空,则查询利润中心为空的公共数据
         */
    
        /**
         * 主数据类型:
         * 1.公司代码;2.利润中心;3.成本中心;4.内部订单号;5.wbs;6.供应商;7.费用类型;8.资产;9.经法合同;10.费用明细;11.移动报销对公供应商
         */
        COMPANY_CODE(1,"masterDataImportHandler","公司模板", ExcelCompany.class, ExcelWriteCompany.class),
        PROFIT_CENTER(2,"masterDataImportHandler","利润中心模板", ExcelProfit.class, ExcelWriteProfit.class),
        COST_CENTER(3,"masterDataImportHandler","成本中心模板", ExcelCost.class, ExcelWriteCost.class),
        INNER_ORDER(4,"masterDataImportHandler","内部订单模板", ExcelInnerOrder.class, ExcelWriteInnerOrder.class),
        WBS(5,"masterDataImportHandler","wbs(项目)模板", ExcelWBS.class, ExcelWriteWBS.class),
        SUPPLIER(6,"masterDataImportHandler","供应商模板",ExcelSupplier.class,ExcelWriteSupplier.class),
        COST_TYPE(7,"masterDataImportHandler","费用类型模板",ExcelCostType.class,ExcelWriteCostType.class),
        ASSETS(8,"assetDataImportHandler","资产模板", ErpMasterdataAsset.class,ExcelWriteAsset.class),
        CONTRACT(9,"contractImportHandler","经法合同模板", ErpMasterdataContractByLaw.class,ExcelWriteContract.class),
        COST_DETAIL(10,"costDetailImportHandler","费用明细模板", ErpMasterdataCostDetail.class,ExcelWriteCostDetail.class),
        YDBX_PUB_SUPPLIER(11,"masterDataImportHandler","外部供应商模板",ExcelYDBXSupplier.class,ExcelWriteYDBXSupplier.class),
        YDBX_PUB_PURCHASE(12,"purchaseMasterDataImportHandler","采购主数据",ExcelYDBXSupplier.class,
                ExcelWriteYDBXSupplier.class),
        YDBX_PUB_PURCHASE_ITEM(13,"purchaseMasterDataImportHandler","采购行项目主数据",ExcelYDBXSupplier.class,
                ExcelWriteYDBXSupplier.class);
    
    
        /**
         * 返回主数据类型
         * @param type
         * @return
         */
        public static MasterDataEnum type(Integer type) {
            if (COMPANY_CODE.getType().equals(type)) {
                //1.公司代码
                return COMPANY_CODE;
            } else if (PROFIT_CENTER.getType().equals(type)) {
                //2.利润中心
                return PROFIT_CENTER;
            } else if (COST_CENTER.getType().equals(type)) {
                //3.成本中心
                return COST_CENTER;
            } else if (INNER_ORDER.getType().equals(type)) {
                //4.内部订单
                return INNER_ORDER;
            } else if (WBS.getType().equals(type)) {
                //5.WBS
                return WBS;
            } else if (SUPPLIER.getType().equals(type)) {
                //6.供应商
                return SUPPLIER;
            } else if (COST_TYPE.getType().equals(type)) {
                //7.费用类型
                return COST_TYPE;
            } else if (ASSETS.getType().equals(type)) {
                //8.资产
                return ASSETS;
            } else if (CONTRACT.getType().equals(type)) {
                //9.经法合同
                return CONTRACT;
            } else if (COST_DETAIL.getType().equals(type)) {
                //10.费用明细
                return COST_DETAIL;
            } else if (YDBX_PUB_SUPPLIER.getType().equals(type)) {
                //11.移动报销对公供应商
                return YDBX_PUB_SUPPLIER;
            } else {
                return null;
            }
        }
        
        /**
         * 判断是不是主数据类型
         * @param type
         * @return
         */
        public static MasterDataEnum isMasterData(Integer type) {
            if (COMPANY_CODE.getType().equals(type)) {
                //1.公司代码
                return COMPANY_CODE;
            } else if (PROFIT_CENTER.getType().equals(type)) {
                //2.利润中心
                return PROFIT_CENTER;
            } else if (COST_CENTER.getType().equals(type)) {
                //3.成本中心
                return COST_CENTER;
            } else if (INNER_ORDER.getType().equals(type)) {
                //4.内部订单
                return INNER_ORDER;
            } else if (WBS.getType().equals(type)) {
                //5.WBS
                return WBS;
            } else if (SUPPLIER.getType().equals(type)) {
                //6.供应商
                return SUPPLIER;
            } else if (COST_TYPE.getType().equals(type)) {
                //7.费用类型
                return COST_TYPE;
            } else if (YDBX_PUB_SUPPLIER.getType().equals(type)) {
                //11.移动报销对公供应商
                return YDBX_PUB_SUPPLIER;
            } else {
                return null;
            }
        }
    
        /**
         * 判断是不是移动报销主数据
         * @param type
         * @return
         */
        public static boolean isYdbxMasterData(Integer type) {
            if (ASSETS.getType().equals(type)) {
                //8.资产
                return true;
            } else if (CONTRACT.getType().equals(type)) {
                //9.经法合同
                return true;
            } else if (COST_DETAIL.getType().equals(type)) {
                //10.费用明细
                return true;
            } else {
                return false;
            }
        }
    
        /**
         * 是否需要删除同步的类型
         * @param type
         * @return
         */
        public static boolean isDelType(Integer type) {
            boolean result = false;
            if (SUPPLIER.getType().equals(type)) {
                result = true;
            }
            return result;
        }
    
        /**
         * 判断是不是多条增量同步类型
         * 因为管控主数据中存在其他数据并不符合ERP主数据规范,所以增量同步时所有主数据都能增量多条
         * @param type
         * @return
         */
        public static boolean isMoreDataForM(Integer type) {
            boolean result = false;
            if (SUPPLIER.getType().equals(type)) {
                result = true;
            }
            return result;
        }
    
    
    
        MasterDataEnum(Integer type) {
            this.type = type;
        }
        MasterDataEnum(String code, String templeteName) {
            this.handlerName = code;
            this.templeteName = templeteName;
        }
        MasterDataEnum(Integer type, String templeteName) {
            this.type = type;
            this.templeteName = templeteName;
        }
    
        MasterDataEnum(Integer type, String handlerName, String templeteName) {
            this.type = type;
            this.handlerName = handlerName;
            this.templeteName = templeteName;
        }
    
        MasterDataEnum(Integer type, String handlerName, String templeteName, Class t,Class writeClass) {
            this.type = type;
            this.handlerName = handlerName;
            this.templeteName = templeteName;
            this.entityClass = t;
            this.writeClass = writeClass;
        }
    
        private Integer type;
        private String handlerName;
        private String templeteName;
        private Class entityClass;
        private Class writeClass;
    
    }
    

    wfw-erp-service-impl服务

    ErpCompanyServiceBizImpl

    package cn.com.esgcc.wfw.erp.company.service.biz;
    /**
     * ErpCompanyServiceBizImpl 
     * @author zhihui
     */
    @Service("erpCompanyServiceBiz")
    public class ErpCompanyServiceBizImpl extends BaseService implements ErpCompanyServiceBiz {
        private static Logger logger = LoggerFactory.getLogger(ErpCompanyServiceBizImpl.class);
    
        @Autowired
        private ErpCompanyService erpCompanyService;
     @Override
        public ErpServiceResult selectByCompanyCode(String companyCode) {
            try {
                if(StringUtils.isBlank(companyCode)){
                    LogUtil.encError(logger, "参数错误,集成编码为空");
                    return new ErpServiceResult(false, "参数错误,集成编码为空");
                }
    
                ErpCompany erpCompany = erpCompanyService.selectByCompanyCode(companyCode);
                if(null == erpCompany){
                    return new ErpServiceResult(false, "参数错误,集成编码不在白名单中");
                }
                return new ErpServiceResult(erpCompany);
            } catch (Exception e) {
                LogUtil.encError(logger, "系统异常: ", e);
                return new ErpServiceResult(false, "系统异常,请稍后重试");
            }
        }
    }
    

    ErpCompanyServiceImpl

    package cn.com.esgcc.wfw.erp.company.service.impl;
    
    /**
     * 
     * @author zhihui
     */
    @Service
    public class ErpCompanyServiceImpl implements ErpCompanyService {
        
        private static final Logger logger = LoggerFactory.getLogger(ErpCompanyServiceImpl.class);
        /**
         * 公司类的缓存KEY
         */
        public static final String COMPANY_CACHEKEY = "COMPANY:";
    
        @Autowired
        private ErpRedisService<ErpCompany> erpRedisService;
    
        @Autowired
        private ErpCompanyDao dao;
    

    MasterDataImportTaskServiceImpl

    package cn.com.esgcc.wfw.erp.masterdata.service.excel;
    @Service("masterDataImportTaskService")
    public class MasterDataImportTaskServiceImpl implements MasterDataImportTaskService {
      @Resource
        private MasterDataImportTaskDao masterdataImportTaskDao;
    
        @Override
        public Integer save(MasterDataImportTask entity) {
            return masterdataImportTaskDao.save(entity);
        }
    }
    
    

    Dao层

    ErpCompanyDao

    package cn.com.esgcc.wfw.erp.company.dao;
    
    import cn.com.esgcc.wfw.erp.basic.OldBaseDao;
    import cn.com.esgcc.wfw.erp.company.entity.po.ErpCompany;
    import cn.com.esgcc.wfw.erp.company.entity.vo.ErpCompanyVo;
    /**
     * ErpCompanyDao 
     * @author zhihui
     * 
     */
    public interface ErpCompanyDao extends OldBaseDao<ErpCompany, ErpCompanyVo> {
    
    
        /**
         * 根据companyName查询数据
         * @param companyName
         * @return
         */
        ErpCompany selectByCompanyName(String companyName);
    

    MasterDataImportTaskDao

    package cn.com.esgcc.wfw.erp.masterdata.dao;
    
    @Repository
    public interface MasterDataImportTaskDao {
        /**
         * save
         * @param entity
         * @return
         */
        Integer save(MasterDataImportTask entity);
    
    }
    
    展开全文
  • 一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商...
  • Abp Vnext 微服务

    2022-01-13 16:14:23
    官方文档地址:... 示例源码地址: abp-samples/MicroserviceDemo at master · abpframework/abp-samples · GitHub 代码下载后文件目录,MicroserviceDemo目录下为微服务 微服务文件结构 ...

    官方文档地址:https://docs.abp.io/zh-Hans/abp/latest/Samples/Microservice-Demo

    示例源码地址:

    abp-samples/MicroserviceDemo at master · abpframework/abp-samples · GitHub

    代码下载后文件目录,MicroserviceDemo目录下为微服务

     

    微服务文件结构

     

     

    展开全文
  • 关注“Java后端技术全栈”回复“面试”获取全套面试资料什么是微服务架构?微服务架构是一种架构模式,它提倡将单一的应用程序划分为一组小的服务,服务之间互相调用、互相配合,为用户提供最终价值...

    关注“Java后端技术全栈”

    回复“面试”获取全套面试资料

    什么是微服务架构?

    微服务架构是一种架构模式,它提倡将单一的应用程序划分为一组小的服务,服务之间互相调用、互相配合,为用户提供最终价值。

    每个服务运营在其独立的进程中,服务与服务之间采用轻量级的通信机制互相沟通,每个服务都围绕具体的业务进行构建,并且能被独立部署到生产环境、类生产环境等。

    另外应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

    微服务的“微”并不是一个真正可衡量、看得见、摸得着的“微”,这个“微”所表示的是一种设计思想和指导方针。

    使用Spring Boot、Spring Cloud、Docker和Netflix的一些开源工具来构建一个微服务架构。最近很多小伙伴问我要一些 微服务 相关的资料,于是我翻箱倒柜,找到了这本非常经典的电子书——《Spring Cloud与Docker微服务架构实战》。

    资料介绍

    《Spring Cloud与Docker微服务架构实战》是一本Spring Cloud与Docker实战项目。全书由浅入深地对Spring Cloud的主要常用组件进行了例剖析和精彩讲解,让读者能快速上手,而且书中的切入点也非常好,它并不纠结于冗长的源码解读或原理解释,而是更多地注重实战。本书的实战经验在软件工程层面上会给予阅读者很大提升,它可以让你更快地搭建分布式微服务架构,提高你的生产力。

    如何获取?

    1. 进入公众号「Java后端技术全栈」;

    2. 在公众号后台回复关键字「972」

    展开全文
  • 本次课程将带领同学们进行微服务产品的开发到实战部署,真正意义上的企业级微服务架构技术课程。课程内容包括了微服务技术从工程准备到Jenkins持续交付准备技术,课程内容可以在很大程度上帮助同学们拓宽视野,在...
  • 微服务

    2021-03-02 02:40:36
    微服务
  • 本章内容从问题开始,循序渐进,带领读者逐步深入微服务架构的各个角落。2005年,PeterRodgers博士在云端运算博览会上提出的微Web服务(Micro-Web-Service),将程序设计成细粒度的服务(GranularServices),以作为...
  • 提供配套的源码下载! Spring Cloud 进阶 Alibaba 微服务体系自媒体实战课程,以前后端分离模式,严守企业级架构和规范,开发门户平台+媒体中心+运营中心三大业务平台。掌握主流后端技术栈:Spring Cloud+MongoDB...
  • 微服务实践

    2019-02-01 22:22:27
    近些年来,微服务一直是非常热门的话题,关于微服务架构的讨论也是层出不穷。本书以贯穿整书的示例为出发点,由浅入深地阐述使用微服务的最佳实践,以及如何避免采用微服务架构可能带来的复杂性陷阱。本书从微服务...
  • 微服务demo

    2018-12-18 10:25:11
    基于springboot实现订单的单个微服务实例,可单独启动(注:来自于传智视频学习)
  • 大型网站必备核心技术,微服务架构详解,是升职加薪、弯道超车必备技能,大型网站核心技术微服务架构实战是你学习技能必备课程。 视频大小:7.9G
  • 微服务:从设计到部署.pdf
  • ├── 89 Minio下载方式 ├── 90 Minio存储方式详解 ├── 91 FastDfs存储方式详解 ├── 92 多数据源介绍 ├── 93 多数据源使用详解 ├── 94 多数据源手动切换 ├── 95 分布式事务介绍 ├── 96 分布式...
  • 微服务项目

    2021-02-09 19:54:56
    微服务项目
  • 微服务server

    2018-07-12 21:09:51
    微服务分布式架构实践,rpc-server 服务器端,下载即运行[1.3.2]
  • 微服务架构如何落地实践 PDF 下载
  • JAVA微服务Spring Cloud教程合集_极品.zip 7天学会spring cloud系列 Netflix Zuul与Nginx的性能对比 SpringCloud踩坑实战笔记 教程1 教程2 史上最简单的SpringCloud教程 Spring Cloud教程合集 spring cloud服务安全...
  • 微服务教程

    2019-01-21 08:08:49
    微服务搭建教程,欢迎大家下载。跟着文档一步一步搭建就可以。
  • demo_微服务demo

    2018-12-28 15:40:53
    演示demo 微服务练习demo
  • 微服务间通过fegin调用文件服务下载文件
  • 微服务初学者资源
  • 微服务架构

    2018-02-10 13:51:17
    微服务架构介绍和入门实践 2018:一、微服务架构介绍 二、出现和发展 三、传统开发模式和微服务的区别 四、微服务的具体特征 五、SOA和微服务的区别 六、如何具体实践微服务 七、常⻅见的微服务设计模式和应⽤用 八...
  • 微服务通过URL下载远程文件的本地副本。 入门 将服务添加到堆栈 在docker-compose.yml添加以下代码段: version: '3.4' services: download-url-service: image: lblod/download-url-service links: - database...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,993
精华内容 26,397
关键字:

下载微服务