精华内容
下载资源
问答
  • 在开发之前做好设计,流程图,伪代码等前期工作是必要。可以清晰指导我该怎么做,而不是边做边想。看似浪费了前期时间,实际上节省了构建代码反复思考,反复修改时间。制定好技术方案可以交由同事进行评审,...

    在开发之前做好设计,流程图,伪代码等前期工作是必要的。可以清晰的指导我该怎么做,而不是边做边想。看似浪费了前期的时间,实际上节省了构建代码反复思考,反复修改的时间。制定好技术方案可以交由同事进行评审,评审通过再进行开发。在与前端对接时,为了避免沟通结果与执行结果不一致的情况,应该在阐述了自己观点以后让前端再讲一遍,在达成共识的基础上进行开发,避免返工。为了表达清晰,对与功能比较复杂的逻辑,应该给出详细的流程图予以解释。以下是我开发工作前做的准备工作,伪代码不可以直接运行,毕竟是“伪代码”。

     

    新建Amazon帖子,复制,扩展字段定制功能接口文档


    API详情: 

    1.1API说明 

    新建单属性Amazon帖子(导航入口) 

    1.2URL 

    https://localhost:9002/beforeshipoms/manage/product/shelvePage/amazon/single?status=new

    1.3支持格式 

    JSON 

    1.4HTTP请求方式 

    GET 

    1.5请求参数

    参数

    类型

    说明

    status

    string

    区分新建和编辑Amazon帖子的状态值。“new”为“新建”,否则为“编辑”。

    1.6返回结果

    返回值字段

    字段类型

    字段说明

    status

    string

    传入的状态值

    saleStoreList

    array

    店铺集合

    页面路径

    string

    "/pages/frontend/shelves/amazonShelves/createSingleAmazonShelves"

    1.7UI效果图

     

    ==================================================================

    2.1API说明 

    查询BaseCode接口(此接口直接复用了新产品管理页面接口,返回数据“按需索取”即可,请求参数只传入“ 

    productCode ”。另外,旧的Amazon上架功能的“实际库存”是新建接口带过去的,因为此处已经有了库存所以 不需要了。) 。

    2.2URL 

    https://localhost:9002/beforeshipoms/beforeship/zh/manage/product/searchBaseProduct 

    2.3支持格式 

    JSON 

    2.4HTTP请求方式 

    POST(此处不用get请求是为了复用产品管理页面的接口) 

    2.5请求参数

    参数

    类型

    说明

    productCode

    string

    查询的产品code,支持模糊查询。

    2.6返回结果

    返回值字段

    字段类型

    字段说明

    baseCode

    String

    产品code

    name

    String

    标题(名字)

    description

    Stirng

    标题(描述)

    suggestSalePrice

    String

    价格

    quantity

    String

    可用库存

    countries

    String

    可销售国家(新加字段)

    creationTime

    Stirng

    创建信息(创建时间)

    author

    String

    创建信息(创建人)

    editORnot

    Boolean

    刊登情况

    2.7返回格式 

    {

        "status": "SUCCESS",

        "data": {

            "productlist": [{

                    "baseCode": "1141500400_4",

                    "editORnot": true,

                    "creationTime": "2018-03-22 02:41:28",

                    "author": "云动力oms超级管理员",

                    "name": "椅子",

                    "description": "xxxxxxxxxx",

                    "suggestSalePrice": 4.0,

                    "quantity": 299,

                    "countries": "US,AU"

                },

                ......

            ],

            "pagecount": 15,

            "currentpage": 0,

            "pagesize": 30,

            "totalcount": 444

        }

    }

    2.8UI效果图

    ==================================================================

    3.1API说明 

    新建多属性Amazon帖子(除了加入“ 

    个性化属性 

    定制”功能再没有变化,只是改变了入口。) 

    3.2URL 

    https://localhost:9002/beforeshipoms/manage/product/shelvePage/amazon/multi?productCode=66&status=new  

    3.3UI效果图

    4.1API说明 

    保存个性化属性接口。 

    4.2URL 

    https://localhost:9002/beforeshipoms/manage/product/shelvePage/amazon/savePersonalizedAttributes 

    4.3支持格式 

    JSON 

    4.4HTTP请求方式 

    POST 

    4.5请求参数

    参数

    类型

    说明

    categoryId

    string

    在request对象"data"中包含的所选分类

    amazonAttributeList

    Map <String,String>

    在request对象"data"中传入当前用户在当前店铺所选的个性化字段,里面包括推荐值。

    4.6返回结果

    返回值字段

    字段类型

    字段说明

    status

    string

    "SUCCESS",表示定制成功的状态值;“ERROR”表示定制失败状态。

    data

    string

    显示“个性化属性保存成功!”

    message

    string

    失败信息

    4.7UI效果图 

    ==================================================================

    5.1API说明 

    展示个性化属性接口。 

    5.2URL 

    https://localhost:9002/beforeshipoms/manage/product/shelvePage/amazon/showPersonalizedAttributes?categoryId=GB_a0003

    5.3支持格式 

    JSON 

    5.4HTTP请求方式 

    GET 

    5.5请求参数

    参数

    类型

    说明

    categoryId

    string

    所选分类

    5.6返回结果

    参数

    类型

    说明

    savedRecommendData

    Map <String,List <Object>>

    当前用户在当前店铺下保存的个性化属性

    5.7UI效果图

    6.1API说明 

    点击复制展示同站点下的店铺列表。 

    6.2URL 

    https://localhost:9002/beforeshipoms/manage/product/shelvePage/amazon/saleStoreOfCopyShelfProduct?productCode=8796388019752 

    6.3支持格式 

    JSON 

    6.4HTTP请求方式 

    GET 

    6.5请求参数

    参数

    类型

    说明

    productCode

    string

    复制帖子productCode的pk值

    6.6返回结果

    返回值字段

    字段类型

    字段说明

    saleStoreList

    array

    和源商品同站点下的店铺集。

     

    6.7UI效果图 

    7.1API说明 

    选择分类-帖子复制接口。 

    7.2URL 

    https://localhost:9002/beforeshipoms/manage/product/shelvePage/amazon/copySingleShelfProduct?productCode=8796519058984&categoryId=GBa0003

    7.3支持格式 

    JSON 

    7.4HTTP请求方式 

    GET 

    7.5请求参数

     

    参数

    类型

    说明

    productCode

    string

    复制的帖子的pk值

    categoryId

    string

    所选分类

    saleStoreId

    string

    店铺

     

    7.6返回结果

    返回值字段

    字段类型

    字段说明

    requireAndOption

    object

    可选必选值得对象。

    recommendData

    Map

    推荐值。

    urlList

    array

    图片集。

    product_type

    string

    产品类型。

    shelfProduct2IntersectionInfo

    Map<String, Object>>

    返回交集信息,供前端input框展示。

     

     

    7.7UI效果图 

    一,业务目标: 

    1,通过复制功能提高用户创建同店铺帖子的效率。 

    2,通过扩展“定制个性化属性”功能,避免同一用户在同一分类下需要频繁配置“相同字段”的个性化属性。

    二:功能说明: 

    定制个性化属性功能 ,可以支持用户根据用户名和分类配置专属的“个性化”属性模板。在下次登录进来之后,选择分类,将自动去检索该用户的“个性化”属性模板并将其返回。若用户没有自己的模板将提醒用户创建自己的专属模板,以供下次使用。

    三:上架功能代码执行流程: 

        

    1,定制个性化字段功能流程图:

            1)保存个性化字段 

                        

        2)展示个性化字段

                        

    2,复制功能执行流程图:

                

    四:说明: 

            1. 选择了“扩展字段”之后,点击“确定”触发“保存个性化属性”接口。

                 2. 新建商品选择分类会触发“获取该分类模板信息”接口,同时触发“展示个性化属性”的接口。

                 3. 帖子复制功能,点击复制会触发“展示同站点下的店铺集”接口。

                 4. 帖子分支功能,选择完分类会触发原接口“获取该分类模板信息”接口,里面组装了源商品和目标商品信息的交集。

     

    五:伪代码:

    1. 保存个性化字段:

    //Controller layer:

     

    @Controller

    @Scope("tenant")

    @RequestMapping(value = "/manage")

    public class ProductShelveToAmazonController extends BeforeshipAbstractPageController {

        ......

     

        //保存个性化属性的  handler:

        @RequireHardLogIn

        @RequestMapping(value = "/product/shelvePage/amazon/savePersonalizedAttributes", method =     {RequestMethod.POST})

        @ResponseBody

        public Object  savePersonalizedAttributes(HttpServletRequest request)

        {

            String data = request.getParameter("data");

            Object result ="";

            try {

                     searchRestrictionService.disableSearchRestrictions();

                     data = URLDecoder.decode(data, "UTF-8");

                     result = amazonProductDataHandleService.savePersonalizedAttributes(data);

            } catch (Exception e) {

                    e.printStackTrace();

            }finally {

                    searchRestrictionService.enableSearchRestrictions();

            }

           return result;

        }

     

        ......

    }

    =====================================================================

     

    //service layer:

     

    /**

    */

    public interface BeforeshipAmazonProductDataHandleService {

     

           ......

            /**

            * 保存个性化属性模板

            * @param data

            * @return

            */

            public Object savePersonalizedAttributes(final String data);

     

            ......

    }

    =====================================================================

     

    //service  的具体实现:

    public class BeforeshipAmazonProductDataHandleServiceImpl implementsBeforeshipAmazonProductDataHandleService {

       

       ......

     

        

            @Override

            public Object  savePersonalizedAttributes(final String data) {

                    

                    SONObject response = new JSONObject();

                    String  saleStoreCode   =  null;

                    String uid  =  null;

                    Map<String,List<Object>> personalizedAttributes  =  new  HashMap();

                    PersonalizedAttributeModel   personalizedAttributeModel   =  null;

     

                    try{

                            if(data!=null){

                                  JSONObject jsonData = JSONObject.fromObject(data);

     

                                  //获取分类  categoryId

                                 categoryId=  jsonData.getString(" categoryId");

                        

                                  //获取当前用户登录账号  uid

                                 UserModel user = userService.getCurrentUser();     

                                 uid = user.getUid();          

     

                                  //获取个性化属性  personalizedAttributes  

                                 personalizedAttributes  =  jsonData.getString(" personalizedAttributes ");

     

                                  //创建个性化属性  model  对象

                                 personalizedAttributeModel   =                               modelService.create(personalizedAttributeModel .class);

                                 personalizedAttributeModel .setCategoryId(categoryId);

                                 personalizedAttributeModel .setUid(uid);

                                 personalizedAttributeModel .setPersonalizedAttributes  (personalizedAttributes  );

     

                                  //保存并刷新个性化属性模板

                                 modelService.save(personalizedAttributeModel);

                                 modelService.refresh(personalizedAttributeModel);

                            } else {

                                LOG.error("========== data is  null: " +data);

                            }

                    }catch (Exception e) {

                       LOG.error("============ savePersonalizedAttributes  Exception : " + e.getMessage(),e);            

                       response.put("status", "ERROR");

                       response.put("message", e.getMessage());

                       return  response;

                   }

              response.put("status", "SUCCESS");

              response.put("data", "个性化属性保存成功!");

              return  response;

            }

     

       ......

    }

     

     

    2. 展示个性化字段:

    //Controller layer:

     

    @Controller

    @Scope("tenant")

    @RequestMapping(value = "/manage")

    public class ProductShelveToAmazonController extends BeforeshipAbstractPageController {

        ......

     

        //展示个性化属性的  handler:

        @RequireHardLogIn

        @RequestMapping(value = "/product/shelvePage/amazon/personalizedAttributes", method =                         {RequestMethod.GET})

        @ResponseBody

        public Object  showPersonalizedAttributes(@RequestParam(categoryId" )  final String  categoryId)

        {    

            //获取当前用户登录账号  uid

            UserModel user = userService.getCurrentUser();

           String  uid = user.getUid(); 

     

            Object result ="";

            boolean  uidIsEmpty  =  StringUtils.isEmpty (uid);

            boolean  categoryIdIsEmpty  =  StringUtils.isEmpty (categoryId);

     

             if(!uidIsEmpty  &&  ! categoryIdIsEmpty  ){  

                  result = amazonProductDataHandleService.showPersonalizedAttributes(uid, categoryId);

            }   

           return result;

        }

     

        ......

    }

    =====================================================================

     

    //service layer:

    public interface BeforeshipAmazonProductDataHandleService {

     

           ......

            /**

            * 展示个性化属性模板

            * @param uid,categoryId

            * @return

            */

            public Object showPersonalizedAttributes(final String uid,  final  Sting  categoryId);

     

            ......

    }

    =====================================================================

     

    //service  的具体实现

    public class BeforeshipAmazonProductDataHandleServiceImpl implements                BeforeshipAmazonProductDataHandleService {

       

       ......

     

        

            @Override

            public Object  showPersonalizedAttributes(final String uid,  final  Sting  categoryId) {

                    

                    JSONObject response = new JSONObject();

                    SearchResult<PersonalizedAttributeModel > searchResult   =  null;

                    PersonalizedAttributeModel  personalizedAttributeModel  =  null;

                    Map<String,  List<Object>>  personalizedAttributes=  null;

     

                           try{

                                    searchResult   =  beforeshipShelveProductDao.personalizedAttributes                            (uid,  categoryId);

                                    if (searchResult != null){

                                           List<PersonalizedAttributeModel >  personalizedAttributeList                            searchResult.getResult();

                                           if (CollectionUtils.isNotEmpty(personalizedAttributeList)){

                                                    personalizedAttributeModel =  personalizedAttributeList.get(0);                                                                            personalizedAttributes=  personalizedAttributeModel .getPersonalizedAttributes();

                                                            if(CollectionUtils.isNotEmpty(personalizedAttributes)){

                                                                     response.put("status", "SUCCESS");

                                                                     response.put("data"personalizedAttributes);

                                                                     return  response;

                                                            }

                                            }

                                    }

                           }catch (Exception e){

                                   LOG.error("============ showPersonalizedAttributes   Exception : " +                         e.getMessage()); 

                                   response.put("status", "ERROR");

                                   response.put("message", "查询个性化属性模板失败!");

                                   return  response;

                           }

     

                    

                  response.put("status", "ERROR");

                  response.put("message", "没有个性化属性模板,请创建!");

                  return  response;

     

            }

     

       ......

    }

     

    =====================================================================

     

    //dao  layer:

    public interface BeforeshipShelveProductDao {

            ......

     

            /**

            * 展示个性化属性模板

            * @param uid,categoryId

            * @return

            */

           SearchResult<PersonalizedAttributeModel > showPersonalizedAttributes(final String uid,  final  Sting  categoryId);

     

            ......

    }

     

    //dao  的具体实现:

    public class BeforeshipShelveProductDaoImpl implements BeforeshipShelveProductDao {

     

             ......

                

            @Override

            public  SearchResult<PersonalizedAttributeModel > showPersonalizedAttributes(final String uid, final  Sting  categoryId)

            {

                    searchRestrictionService.disableSearchRestrictions();

                    CatalogVersionModel catalogVersion =            catalogVersionService.getCatalogVersion("beforeshipProductCatalog","Staged");

     

                    Map<String,Object> queryParamsMap = new HashMap<>();

     

                    StringBuilder table = new StringBuilder(ShelveProductSqlQuery.recommendDataStr);

                    table.append(ShelveProductSqlQuery.conditionStr);

     

                    table.append(ShelveProductSqlQuery.conditionCatalogVersion + " =?catalogVersion ");

                    queryParamsMap.put("catalogVersion",catalogVersion);

     

                    table.append(ShelveProductSqlQuery.conditionUid + " =?uid");

                    queryParamsMap.put("uid",uid);

     

                    table.append(ShelveProductSqlQuery.conditionCategoryId + " =? categoryId");

                    queryParamsMap.put(categoryId",categoryId);

     

                    FlexibleSearchQuery searchQuery = new FlexibleSearchQuery(table.toString());

                    searchQuery.addQueryParameters(queryParamsMap);

     

                    LOG.info("showSelectRecommendData  SQL : " + searchQuery.toString());

     

                    SearchResult<ShelveProductModel> searchResult = flexibleSearchService.search(searchQuery);

     

                    searchRestrictionService.enableSearchRestrictions();

     

                    return searchResult;

            }

     

            ......

     

    }

    3. 点击复制返回的店铺集接口

    //Controller layer:

     

    @Controller

    @Scope("tenant")

    @RequestMapping(value = "/manage")

    public class ProductShelveToAmazonController extends BeforeshipAbstractPageController {

        ......

     

        //点击复制返回的店铺集的  handler:

        @RequireHardLogIn

        @RequestMapping(value = "/product/shelvePage/amazon/showSaleStores", method =     {RequestMethod.GET})

        @ResponseBody

        public Object  saveSelectRecommendData(

                    @RequestParam(productCode)  final String  productCode){

            Object result ="";

            ShelveProductModel shelveProductModel = null ;

    try {

    shelveProductModel = beforeshipPmService.obtainShelveProductByPK(productCode);

    } catch (Exception e) {

    e.printStackTrace();

    }

     

    SaleStoreModel saleStoreModel = shelveProductModel.getSaleStore();

    String isocode = saleStoreModel.getCountry().getIsocode();

    if(!StringUtils.isEmpty(isocode )){

    result = amazonProductDataHandleService.getSaleStoresBySite(isocode );

    }

    return result;

        }

     

        ......

    }

    =====================================================================

     

    //service layer:

     

    /**

    */

    public interface BeforeshipAmazonProductDataHandleService {

     

           ......

            /**

            * 查询指定站点下的店铺

            * @param iscode

            * @return

            */

            public Object getSaleStoresBySite(final String isocode );

     

            ......

    }

    =====================================================================

     

    //service  的具体实现:

    public class BeforeshipAmazonProductDataHandleServiceImpl implementsBeforeshipAmazonProductDataHandleService {

       

       ......

     

        

            @Override

            public Object  getSaleStoresBySite(final String isocode ) {

                    JSONObject response = new JSONObject();

                    SearchResult<SaleStoreModel > searchResult   =  null;

                    SaleStoreModel saleStoreModel =  null;

                   String saleStoreCode  =  null;

                    List  <String> saleStoreList =  null;

                           try{

                                    searchResult   =  beforeshipShelveProductDao.getSaleStoresBySite(isocode );

                                    if (searchResult != null){

                                           List<SaleStoreModel >  saleStoreListsearchResult.getResult();

                                           if (CollectionUtils.isNotEmpty(saleStoreList)){

                                                   for(int i = 0; i<saleStoreList.length(); i++){

                                   saleStoreModel =  saleStoreList.get(0);                                                          saleStoreCode  =  saleStoreModel .getCode();

                                   saleStoreList .add(saleStoreCode  );                                                     

                                                    }

                                            response.put("status", "SUCCESS");

                                           response.put("data"saleStoreList );

                                            return  response;    

                                          }

                                     }

                           }catch (Exception e){

                                   LOG.error("============ showSelectRecommendData   Exception : " +                    e.getMessage()); 

                                   response.put("status", "ERROR");

                                   response.put("message", "查询店铺失败!");

                                   return  response;

                           }

     

                    

                  response.put("status", "ERROR");

                  response.put("message", "该站点下没有店铺!");

                  return  response;

     

       ......

    }

     

    =====================================================================

     

    //dao  layer:

    public interface BeforeshipShelveProductDao {

            ......

     

            /**

            * 查询指定站点下的店铺

            * @param iscode

            * @return

            */

           SearchResult<PersonalizedAttributeModel > getSaleStoresBySite(final String isocode );

     

            ......

    }

     

    //dao  的具体实现:

    public class BeforeshipShelveProductDaoImpl implements BeforeshipShelveProductDao {

     

             ......

                

            @Override

            public  SearchResult<SaleStoreModel > getSaleStoresBySite(final String  isocode )

            {

                    searchRestrictionService.disableSearchRestrictions();

                    CatalogVersionModel catalogVersion =                   catalogVersionService.getCatalogVersion("beforeshipProductCatalog","Staged");

     

                    Map<String,Object> queryParamsMap = new HashMap<>();

     

                    StringBuilder table = new StringBuilder(ShelveProductSqlQuery.shearchSaleStoresStr);

                    table.append(ShelveProductSqlQuery.conditionStr);

     

                    table.append(ShelveProductSqlQuery.conditionCatalogVersion + " =?catalogVersion ");

                    queryParamsMap.put("catalogVersion",catalogVersion);

     

                    table.append(ShelveProductSqlQuery.conditionIsocode + " =? isocode ");

                    queryParamsMap.put("isocode ",isocode );

     

                    FlexibleSearchQuery searchQuery = new FlexibleSearchQuery(table.toString());

                    searchQuery.addQueryParameters(queryParamsMap);

     

                    LOG.info("showSelectRecommendData  SQL : " + searchQuery.toString());

     

                    SearchResult<ShelveProductModel> searchResult = flexibleSearchService.search(searchQuery);

     

                    searchRestrictionService.enableSearchRestrictions();

     

                    return searchResult;

            }

     

            ......

     

    }

     

     

    4. 复制商品  

     

    //Controller layer:

    //复制帖子

    @RequireHardLogIn

    @RequestMapping(value = "/product/copySingleShelfProduct", method = { RequestMethod.GET })

    @ResponseBody

    public Object copySingleShelfProduct(final String categoryId, final String saleStoreId,@RequestParam("productCode")final String productCode) {

    JSONObject response = new JSONObject();

        if(StringUtils.isBlank(categoryId) || StringUtils.isBlank(saleStoreId))

        {

            return null;

        }

        searchRestrictionService.disableSearchRestrictions();

        final CatalogVersionModel catalogVersionModel = catalogVersionService.getCatalogVersion("beforeshipProductCatalog",

        "Staged");

        CategoryModel categoryModel = categoryService.getCategoryForCode(catalogVersionModel,categoryId);

        searchRestrictionService.enableSearchRestrictions();

        SaleStoreModel saleStoreModel = beforeshipSaleStoreService.getSalestoreByCode(saleStoreId);

        if(null == saleStoreModel)

        {

            LOG.info(">>>>>>>>>>>.no salestore found by code : " +saleStoreId);

            response.put("responseCode", 0);

            response.put("response", "no salestore found by code : " +saleStoreId +" , please contact the administrator !");

            String result = "";

            try {

                result = URLEncoder.encode(response.toString(), "UTF-8");

            } catch (UnsupportedEncodingException e) {

                e.printStackTrace();

            }

          return result;

        }

        Map<String, Object> amzTemplateData = productDataHandleService.getAmazonTemplateData(categoryModel.getCode(),

        saleStoreModel);

        if(null == amzTemplateData)

        {

            response.put("responseCode", 0);

            response.put("response", "category : " + categoryId + " without templatedata");

            String result = "";

            try {

                result = URLEncoder.encode(response.toString(), "UTF-8");

            } catch (UnsupportedEncodingException e) {

            }

        return result;

        }

        JSONObject templateJson = new JSONObject();

        templateJson.put("requireAndOption", amzTemplateData.get("requireAndOption"));

        templateJson.put("recommendData", amzTemplateData.get("recommendData"));

        templateJson.get("recommendData");

        templateJson.put("urlList", amzTemplateData.get("urlList"));

        if(amzTemplateData.containsKey("product_type"))

        {

            templateJson.put("product_type", amzTemplateData.get("product_type"));

        }

        //===========================================

        //获取源商品和复制的目标商品信息的交集

        Map<String,Object> requireAndOption = (Map<String, Object>) amzTemplateData.get("requireAndOption");

        getShelfProduct2IntersectionInfo(productCode,templateJson,requireAndOption);

     

        //===========================================

        response.put("responseCode", 1);

        response.put("response", templateJson);

        String result = "";

        try {

            result = URLEncoder.encode(response.toString(), "UTF-8");

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

    return result;

    }

     

    //获取两个商品信息的交集

    private Object getShelfProduct2IntersectionInfo(final String productCode,JSONObject templateJson,Map<String,Object> requireAndOption) {

     

            ShelveProductModel shelveProductModel = null;

            Map<String, Object> shelfProduct2IntersectionInfo = new HashMap<>();

            Map<String, Object> tempAttributes = new HashMap<>();

            try {

                shelveProductModel = beforeshipPmService.obtainShelveProductByPK(productCode);

            } catch (Exception e) {

                e.printStackTrace();

            }

     

            //获取商品信息

            Map<String, String> amazonCustomAttributes = shelveProductModel.getCustomAttributes();

            getShelfProductInfo(tempAttributes,amazonCustomAttributes);

     

            //取两个商品字段的交集

            for(Map.Entry<String, Object> entry : tempAttributes.entrySet()){

                if (requireAndOption.containsKey(entry.getKey())) {

                        shelfProduct2IntersectionInfo.put(entry.getKey(),entry.getValue());

                }

     

            }

     

            templateJson.put("shelfProduct2IntersectionInfo",shelfProduct2IntersectionInfo);

        

            return templateJson;

      }

    //获取被复制商品信息

    private void getShelfProductInfo(Map<String, Object> tempAttributes,Map<String, String> customAttributes)

    {

     

            //首先,将customAttributes中正常的Key值放入tempAttributes中

            Iterator<Map.Entry<String,String>> iterator = customAttributes.entrySet().iterator();

            while(iterator.hasNext()){

                    Map.Entry<String, String> entry = iterator.next();

                    if ("quantity".equals(entry.getKey())) {

                        continue;

                    }

     

                    String valueStr = entry.getValue();

                    String valueAfterHandle = valueStr.replace("\"","&quot;");

                    if (valueStr != null && valueStr.length()>0){

                            tempAttributes.put(entry.getKey(),valueAfterHandle);

                    }

              }

    }

    =====================================================================

     

    总结:如何提高开发效率是每个开发人员所关心的问题,拿到需求应该抑制马上进行开发的冲动。虽然在你已经胸有成竹,但我认为你仍然有必要给出说明文档,让你的思路足够清晰,而不是打了一把王者荣耀不知道自己接下来该怎么做了。而且你可以节省你和前端的沟通成本,而给出技术方案可以交由同事评审,避免因为设计,或技术问题而返工,浪费大量时间。

     

     

     

    展开全文
  • 分账系统作为支付结算关键系统工具,有着非常重要的作用。因此,在寻求分账系统对接时,必须提前做好规划。不然后续的工作就会遇到非常多问题,而事实上现如今很多平台型企业客户即使对接了分账系统,但是却...

    现如今提高交易结算效率及二清问题是电商平台的工作重点。效率的提高不仅仅是节省平台的运营成本,更是在竞争激烈的市场中脱颖而出的关键。分账系统作为支付结算的关键性系统工具,有着非常重要的作用。因此,在寻求分账系统对接时,必须提前做好规划。不然后续的工作就会遇到非常多的问题,而事实上现如今很多的平台型企业客户即使对接了分账系统,但是却不知道要如何进行操作,所以在分账系统对接之前没有提前做好规划,才会导致这些问题的产生,毕竟很多的客户会认为如果我们的系统存在问题,那么在后期的经营过程当中也就可以慢慢地去解决,根本就不需要太过担心,事实上,这样的想法令人堪忧。

    90848a11c0a486907689b376de6fb8ee.png

    小猫凭借多年分账系统的对接经验,和大家聊一聊哪些规划需要提前做。

    1、确保拥有过硬的技术团队

    分账系统是saas服务,涉及到API接口对接,因此平台分需要拥有过硬的技术团队。有些人要问了,“我们的商城系统是外包开发的,是否可以由外包团队来协调对接呢?”答案是可以的,Mallbook 也可以将技术接口文档发至客户外包方,但是外包毕竟沟通起来会相对困难一些。如果自己有过硬的技术团队,能够实时跟进项目的对接进度,这样也能够保证再特定的时间内顺利上线。

    2、提前准备好相关尽调资料

    由于分账系统是部署在银行/三方支付机构,根据监管要求,金融持牌机构为提高资金风险及基础的审查。需对平台方及平台二级商务进行尽调。

    平台分需提供的资料:包括营业执照、法人身份证(正反面)、开户许可证+员工办公照片。

    平台二级商户需提供的资料又需要进行区分。

    企业:营业执照、开户许可证、法人身份证(正反面)、公司门头照+员工办公照片+经营物品照片。

    个体工商户:营业执照、法人身份证(正反面)、注册法人的银行卡、经营场所照片+经营物品照片。

    个人:身份证(正反面)、本人银行卡、个人手持身份证拍照、经营场所+经营物品照片。

    以上材料在商户进件环节需要用到,部分平台上线有初步的时间,所以为了避免不影响上线进度,提高进件效率,做好相关尽调资料的准备是首要因素。

    3、虚拟交易业务需要暂缓

    银行及三方支付机构对虚拟交易的风控审查相对较为严格,小猫曾遇到有些平台不仅有实物交易,也存在虚拟交易。建议虚拟交易暂时不放在主要经营业务,以免审核不通过。

    综上,为了保证平台能过在计划的时间内完成分账系统对接,尽量需要满足以上3个条件。技术方面由于接口并不复杂,所以基本上几天就能够搞定,比较耗时的在于商户进件结算。所以,大家在对接前,做好提前规划是必不可少的。

    MallBook 是目前国内最早从事分账系统服务的公司,截至目前已经服务超过1000家企业,其中70余家为500强,如 丸美股份、曲美家居、爱彼迎、海王星辰、tata木门等,整个对接周期时间也是业内最快的,备受市场好评。如果您现在正面临着支付结算及二清的困扰,请尽快与MallBook 取得联系,我们将针对您实际的业务场景提供详细的方案,为您的业务赋予新的能力。

    展开全文
  • 技术服务团队在对接客户支持时,需要电脑对资料进行查找,然后通过微信方式远程语音或视频对接工作效率低下。 出现以上问题都是因为团队或企业,在日常的工作中缺乏了对知识(资料、文档、经验)进行统一有效...

    作为企业管理者你是否遇到以下问题

    1. 公司官网的产品资料由IT部门进行维护,更新滞后,客户查找资料较为困难。
    2. 技术团队总结的资料经验分布零散,无分享渠道,未进行集中汇总。
    3. 技术服务团队在对接客户支持时,需要电脑对资料进行查找,然后通过微信的方式远程语音或视频对接。工作效率低下。

    出现以上的问题都是因为团队或企业,在日常的工作中缺乏了对知识(资料、文档、经验)进行统一有效的存储和利用。

    做好知识管理提升企业竞争软实力

    进入知识经济时代之后,信息技术不断提升,社会信息化程度越来越高。在这种大环境下,对To B产品而言,若想顺应时势高效、健康且可持续地服务市场,赢得竞争的胜利和客户的满意度,就必须构筑属于自己的、有竞争力的知识体系。 

    对于企业来说何为知识管理

    过去,我们讲到企业的资产管理,通常都会从“人、财、物、机器”等方面入手,但很少会考虑到知识体系的布局。即使有企业把知识作为资产来管理,也通常停留在专利和发明上。那么,究竟什么是知识管理呢?

    知识管理就是运用集体的智慧提高应变能力和创新能力,是为企业实现显性知识和隐性知识共享提供的新途径。

    这里面包含三重含义:

    1. 个人知识集体化,把个人脑中的知识变成集体的公共知识;
    2. 隐性知识显性化,把个人或集体长期积累的优秀经验总结、规范、标准化成一个模式,该模式是流动的、可复制的;
    3. 建立共享知识系统,个人或集体通过系统的知识共享平台,让每个人的能力都通过共享得到放大。

    知识管理在对外服务客户和对内形成企业文化上都如此重要,那么作为初涉To B服务市场的我们,该如何打造产品有竞争力的知识管理体系呢,下面小编从三个点分享对知识管理的理解。

    一、明确知识的交付物品和对象

    在负责对外交付工作中,我和商务、渠道、架构师、合作伙伴和客户都在频繁地接触,常有的情况是这样的:“我要给客户介绍产品,有没有产品宣讲材料?”“合作伙伴培训,有教材没?”“要给客户制定方案,有部署架构文档么?”对于To B业务而言,知识即文档

    我们要服务和交付的对象至少包括:

    • 客户&客户的服务商
    • 公司合作伙伴(渠道商、服务合作伙伴、ISV)
    • 架构师团队
    • 公司内销售上下游
    • 公司内其他业务团队

    二、知识的转化

    知识管理是为企业实现显性知识隐性知识共享提供的新途径。注意,隐性知识,是高度个性化且难于格式化的知识;显性知识则是用文字和数字表达出来,容易以硬数据的形式交流和共享的知识。文档则是隐性知识转化为显性知识的最常见的形式之一。

    小编为大家梳理了这些隐性知识该从哪些角度落实为文档。

    1. 从管理层角度,他需要产品技术白皮书,产品宣讲材料,产品解决方案;
    2. 从中层员工的角度,他需要整体运营运维手册,用户操作指引,开发集成方案等偏实操性的内容;
    3. 从基层员工的角度,他关心如何使用,有什么功能,我能做些什么。

    三、利用知识管理工具实现知识转化与利用

    人的习惯养成依赖于最小阻力路径,顺手的工具,可以减少我们进行日常知识管理的成本,利于养成知识管理的习惯。因此,我们需要的知识管理工具不用多高大上、也不用功能多丰富,使用成本低、响应及时是最关键的要求。

    选对好的知识库制作工具尤为重要,给大家推荐一款我亲测企业知识库制作工具-Baklib(先放张我制作的成品知识库站点)

    产品介绍

    Baklib这是一款不俗的知识库制作工具,流畅编辑,多端适配在哪都可以轻松创作,内容管理能力方面拥有多级分类、标签管理、团队协同等功能;满足了不同人群知识的创作与存储。

    不得不吹的是它的知识分享能力,使用Baklib制作的内容可以转化一个个精致的站点(20+主题随意选),在方便内容分享的同时还加入了站点访问权限的功能,保障知识的安全性。

    产品体验及优势

    易操作易上手

    Baklib自带富文本和Markdown两种编辑模式,使用习惯上和石墨很像,沿用word文档上的编辑习惯,支持各类附件在线展示-告别下载,这样降低了企业内部的迁移成本。自带的团队协同支持多人在线编辑,减少企业内部内容填充压力。

    结构化文档

    东西多了之后就容易乱(深有体会),对于企业知识库来说,结构化的存储方式十分重要,Baklib的话采用树状目录的结构,通过文档大纲,可以自动生成文档要点,让多篇文档结构化,每个层级可以是文档、文件夹或文件,像书一样清晰,同时支持标签功能的添加内容归类很清晰。

    产品试错成本低

    Baklib产品是使用免费插件付费的,如需体验更多功能,根据企业情况按需付费即可。

    分享轻松、全局搜索多端适配

    搜索的话较其他知识库工具,除了关键词高亮展示外,提供了全局搜索的功能(类似于百度的搜索机制)比按照标题搜索要好很多;

    分享真的十分方便比如做个客服知识库内嵌到自己的网站上,发送到微信、钉钉等都十分方便。Baklib制作的页面是支持移动端适配的,方便知识库内容的传播与分享。

    多人协同权限控制

    Baklib支持协同角色读写权限的分配,保障了企业内部资料的安全。同时Baklib支持访问权限的设置,可以让企业知识库针对不同的对象开放。

    数据安全可控

    使用别人的产品最担心的就是数据安全的问题,对于企业来说就更为重要了,能将数据掌握在自己的手里很重要。除了每日的系统自动备份外,Baklib还支持数据的手动备份,数据可以下载到本地哦!

    产品地址:https://www.baklib.com/?utm_content=6&utm_source=csdn

    展开全文
  • 为加强客服人员的个人素质,着手对客服人员进行培训,培训内容主要针对‘仪容仪表’‘服务的重要性’‘如何服务’‘播音技巧’等几个环节。争取在最短的时间内让客服人员有较大的转变和提升。?..

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

做好工作对接的重要性