Authored by mlge

Merge branch 'test6.9.6' of http://git.yoho.cn/platform/platform-cms into test6.9.6

@@ -521,9 +521,112 @@ public class GrassArticleServiceImpl implements IGrassArticleService { @@ -521,9 +521,112 @@ public class GrassArticleServiceImpl implements IGrassArticleService {
521 //推荐和置顶操作,清前台缓存 521 //推荐和置顶操作,清前台缓存
522 clearArticleListCache(req.getArticleId()); 522 clearArticleListCache(req.getArticleId());
523 } 523 }
524 - //编辑文章 没地方用到 524 + //编辑文章
525 if (type == 1) { 525 if (type == 1) {
  526 + publishCheck(req);
  527 +
  528 + //修改文章内容
  529 + Integer articleId = req.getArticleId();
  530 + if (articleId == null) {
  531 + throw new PlatformException("articleId is null", 402);
  532 + }
526 533
  534 + List<Integer> labels = Lists.newArrayList();
  535 + String[] urls = req.getArticleImages().split(",");
  536 + String[] skns = null;
  537 + if (StringUtils.isNotEmpty(req.getArticleSkns())) {
  538 + skns = req.getArticleSkns().split(",");
  539 + if (skns.length > 10) {
  540 + logger.info("updateArticleDraft , article products more than most publish number");
  541 + throw new PlatformException("publish products most number is 10 ", 405);
  542 + }
  543 + }
  544 + if (urls.length > 9) {
  545 + logger.info("updateArticleDraft , article images more than most publish number");
  546 + throw new PlatformException("publish images most number is 9 ", 405);
  547 + }
  548 + if (StringUtils.isNotEmpty(req.getLabelIds())) {
  549 + labels = Arrays.stream(req.getLabelIds().split(",")).map(Integer::valueOf).collect(Collectors.toList());
  550 + if (labels.size() > 5) {
  551 + logger.info("updateArticleDraft , article labels more than most publish number");
  552 + throw new PlatformException("publish labels most number is 5 ", 405);
  553 + }
  554 + }
  555 +
  556 + //修改文章主体内容
  557 + long time = 0L;
  558 + Integer sort = Optional.ofNullable(req.getSort()).orElse(1);
  559 + GrassArticle grassArticle = new GrassArticle();
  560 + grassArticle.setId(articleId);
  561 + grassArticle.setAuthorUid(req.getAuthorUid());
  562 + grassArticle.setUpdateTime(System.currentTimeMillis());
  563 + grassArticle.setArticleTitle(req.getTitle());
  564 + grassArticle.setArticleSubtitle(req.getSubtitle());
  565 + grassArticle.setSort(sort);
  566 + grassArticle.setCopyright(req.getCopyright());
  567 + grassArticleDao.updateByPrimaryKeySelective(grassArticle);
  568 +
  569 + //文章内容
  570 + grassArticleBlockDao.deleteByArticleId(articleId);
  571 +
  572 + //新增
  573 + List<GrassArticleBlock> addList = buildArticleBlock(urls, articleId, req);
  574 + if (CollectionUtils.isNotEmpty(addList)) {
  575 + grassArticleBlockDao.insertArticleContents(addList);
  576 + updateArticleImageSize(articleId);
  577 + }
  578 +
  579 + //商品
  580 + grassArticleProductDao.deleteByArticleId(articleId);
  581 + //新增
  582 + List<GrassArticleProduct> addSknList = Lists.newArrayList();
  583 + int orderBy = 0;
  584 + if (CollectionUtils.isNotEmpty(req.getProducts())) {
  585 + for (GrassArticleProductBo skn : req.getProducts()) {
  586 + GrassArticleProduct grassArticleSkn = new GrassArticleProduct();
  587 + grassArticleSkn.setArticleId(articleId);
  588 + grassArticleSkn.setProductSkn(skn.getProductSkn());
  589 + grassArticleSkn.setCreateTime(System.currentTimeMillis());
  590 + grassArticleSkn.setOrderBy(orderBy);
  591 + grassArticleSkn.setProductSource(skn.getProductType());
  592 + orderBy++;
  593 + addSknList.add(grassArticleSkn);
  594 + }
  595 + }
  596 + if (CollectionUtils.isNotEmpty(addSknList)) {
  597 + grassArticleProductDao.insertArticleSkns(addSknList);
  598 + }
  599 +
  600 + //构建lables 数据
  601 + grassArticleLabelDao.deleteByArticleId(articleId);
  602 + List<GrassArticleLabel> grassArticleLabels = buildArticleLabels(articleId, labels, req.getAuthStatus());
  603 + try {
  604 + if (CollectionUtils.isNotEmpty(grassArticleLabels) && 3 != req.getSort()) {
  605 + grassArticleLabelDao.insertArticleLabels(grassArticleLabels);
  606 + }
  607 + } catch (Exception e) {
  608 + logger.warn("updateArticle grassArticleLableDao insertArticleLables error, uid is {}, e is {}", req.getAuthorUid(), e);
  609 + }
  610 +
  611 + grassArticleTopicDao.deleteByArticleId(articleId);
  612 + try {
  613 + Integer topicId = req.getTopicId();
  614 + if (null != topicId && 3 != sort) {
  615 + GrassArticleTopic grassArticleTopic = new GrassArticleTopic();
  616 + grassArticleTopic.setTopicId(topicId);
  617 + grassArticleTopic.setArticleId(articleId);
  618 + grassArticleTopic.setCreateTime(time);
  619 + grassArticleTopicDao.insertArticleTopic(grassArticleTopic);
  620 + //后期增加(清理话题缓存)
  621 + GrassCacheReq cacheReq = new GrassCacheReq();
  622 + cacheReq.setClearCode(1005);
  623 + cacheReq.setTopicId(topicId);
  624 + logger.info("updateArticle clear topicCache topicId={}", topicId);
  625 + grassRefreshCacheService.refreshGrassCache(cacheReq);
  626 + }
  627 + } catch (Exception e) {
  628 + logger.warn("publishArticle ,grassArticleTopicDao insertArticleTopic error, uid is {}, e is {}", req.getAuthorUid(), e);
  629 + }
527 } 630 }
528 631
529 //审核 通过--不通过 632 //审核 通过--不通过
@@ -796,7 +899,7 @@ public class GrassArticleServiceImpl implements IGrassArticleService { @@ -796,7 +899,7 @@ public class GrassArticleServiceImpl implements IGrassArticleService {
796 @Database(ForceMaster = true) 899 @Database(ForceMaster = true)
797 public void updateArticleDraft(GrassArticleReq req) throws PlatformException { 900 public void updateArticleDraft(GrassArticleReq req) throws PlatformException {
798 publishCheck(req); 901 publishCheck(req);
799 - // 操作类型,1 编辑后保存草稿箱 2 编辑后直接发布 3 编辑后定时发布 902 + // 操作类型,1 编辑后保存草稿箱 2 编辑后直接发布 3 编辑后定时发布 4 文章已发布二次编辑再次发布
800 Integer type = req.getDraftType(); 903 Integer type = req.getDraftType();
801 904
802 //修改文章内容 905 //修改文章内容
@@ -357,6 +357,8 @@ @@ -357,6 +357,8 @@
357 str += optStr; 357 str += optStr;
358 } 358 }
359 359
  360 + str += "<a role='preview' class='btn-info' dataId='" + rowData.previewUrl + "' index='"+ rowIndex + "' style='margin-left:10px'>预览</a>";
  361 +
360 362
361 return str; 363 return str;
362 } 364 }
@@ -408,6 +410,15 @@ @@ -408,6 +410,15 @@
408 } 410 }
409 }); 411 });
410 412
  413 + //预览
  414 + $(this).datagrid("getPanel").find("a[role='preview']").linkbutton({
  415 + iconCls : "icon-save",
  416 + onClick: function () {
  417 + var previewUrl = $(this).attr("dataId");
  418 + articlePreview(previewUrl);
  419 + }
  420 + });
  421 +
411 // 查看详情 422 // 查看详情
412 $(this).datagrid("getPanel").find("a[role='showDetail']").linkbutton({ 423 $(this).datagrid("getPanel").find("a[role='showDetail']").linkbutton({
413 iconCls : "icon-edit", 424 iconCls : "icon-edit",
@@ -464,6 +475,29 @@ @@ -464,6 +475,29 @@
464 }, "json"); 475 }, "json");
465 } 476 }
466 477
  478 + // 预览
  479 + function articlePreview(previewUrl){
  480 + var articleEditer = $("<div id='articleEditer' style = 'width:25%;height:80%;overflow:scroll;'>").appendTo($(document.body));
  481 + var content = '<iframe src="' + previewUrl + '" width="95%" height="95%" frameborder="0"></iframe>';
  482 + $(articleEditer).myDialog({
  483 + content: content,
  484 + noheader: true,
  485 + border: true,
  486 + resizable: false,//定义对话框是否可调整尺寸。
  487 + maximized: false,//默认最大化,可调整为false,改成弹出框模式。
  488 + modal: false,
  489 + buttons:[
  490 + {
  491 + text: "关闭",
  492 + iconCls: "icon-cancel",
  493 + handler: function () {
  494 + $(articleEditer).dialog("close");
  495 + }
  496 + }
  497 + ],
  498 + });
  499 + }
  500 +
467 function switchTimer(id, status,publishTime) { 501 function switchTimer(id, status,publishTime) {
468 debugger 502 debugger
469 var operateType = status == 1 ? 3 : 4; 503 var operateType = status == 1 ? 3 : 4;
@@ -41,6 +41,7 @@ @@ -41,6 +41,7 @@
41 <div region="center" id="labelGroupList" style="margin-left: 20px"> 41 <div region="center" id="labelGroupList" style="margin-left: 20px">
42 <div id="tt" class="easyui-layout" fit="true" style="overflow-y: scroll"> 42 <div id="tt" class="easyui-layout" fit="true" style="overflow-y: scroll">
43 <form name="publishArticleForm" id="publishArticleForm" method="post" > 43 <form name="publishArticleForm" id="publishArticleForm" method="post" >
  44 + <input id="operateType" name="operateType" hidden="hidden"/>
44 <input id="draftType" name="draftType" hidden="hidden"/> 45 <input id="draftType" name="draftType" hidden="hidden"/>
45 <input id="draftArticleId" name="articleId" hidden="hidden"/> 46 <input id="draftArticleId" name="articleId" hidden="hidden"/>
46 <div style="margin-top: 20px;margin-left: 30px"> 47 <div style="margin-top: 20px;margin-left: 30px">
@@ -158,9 +159,12 @@ @@ -158,9 +159,12 @@
158 159
159 var data = paramObject.mkData; 160 var data = paramObject.mkData;
160 var editFlag = data.editFlag ; 161 var editFlag = data.editFlag ;
  162 + var subottonUrl = serverContextPath+"/grassArticle/updateArticleDraft";
161 if(editFlag == 1){ 163 if(editFlag == 1){
162 $("#draftBotton").hide(); 164 $("#draftBotton").hide();
163 $("#timerBotton").hide(); 165 $("#timerBotton").hide();
  166 + $("#operateType").val(1);
  167 + subottonUrl = serverContextPath+"/grassArticle/updateArticle";
164 } 168 }
165 169
166 $("#content").emojioneArea({ 170 $("#content").emojioneArea({
@@ -431,7 +435,7 @@ @@ -431,7 +435,7 @@
431 width:200, 435 width:200,
432 onClick: function () { 436 onClick: function () {
433 $("#publishArticleForm").form("submit",{ 437 $("#publishArticleForm").form("submit",{
434 - url : serverContextPath+"/grassArticle/updateArticleDraft", 438 + url : subottonUrl,
435 onSubmit : function(param) { 439 onSubmit : function(param) {
436 debugger; 440 debugger;
437 if (!$("#publishArticleForm").form("validate")) { 441 if (!$("#publishArticleForm").form("validate")) {
@@ -508,7 +508,7 @@ @@ -508,7 +508,7 @@
508 str += "<a role='showDetail' class='btn-info' dataId='"+rowData.articleId+ "' index='"+ rowIndex + "' status='1' style='margin-left:10px'>评论</a>"; 508 str += "<a role='showDetail' class='btn-info' dataId='"+rowData.articleId+ "' index='"+ rowIndex + "' status='1' style='margin-left:10px'>评论</a>";
509 } 509 }
510 510
511 - str += "<a role='preview' class='btn-info' dataId='" + rowData.previewUrl + "' index='"+ rowIndex + "' style='margin-left:10px'>预览</a>"; 511 + //str += "<a role='preview' class='btn-info' dataId='" + rowData.previewUrl + "' index='"+ rowIndex + "' style='margin-left:10px'>预览</a>";
512 512
513 return str; 513 return str;
514 } 514 }
@@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
39 <div region="center" id="labelGroupList" style="margin-left: 20px;width: 100%"> 39 <div region="center" id="labelGroupList" style="margin-left: 20px;width: 100%">
40 <div id="tt" class="easyui-layout" style="overflow-y: scroll;overflow-x: auto;"> 40 <div id="tt" class="easyui-layout" style="overflow-y: scroll;overflow-x: auto;">
41 <form name="publishArticleForm" id="publishArticleForm" method="post" > 41 <form name="publishArticleForm" id="publishArticleForm" method="post" >
  42 + <input id="operateType" name="operateType" hidden="hidden"/>
42 <input id="sort" name="sort" value="2" hidden> 43 <input id="sort" name="sort" value="2" hidden>
43 <input id="draftArticleId" name="articleId" hidden="hidden"/> 44 <input id="draftArticleId" name="articleId" hidden="hidden"/>
44 <input id="draftType" name="draftType" hidden="hidden"/> 45 <input id="draftType" name="draftType" hidden="hidden"/>
@@ -189,6 +190,7 @@ @@ -189,6 +190,7 @@
189 //对于内容发布页面进来的编辑,只保留立即发布功能 190 //对于内容发布页面进来的编辑,只保留立即发布功能
190 var data = paramObject.mkData; 191 var data = paramObject.mkData;
191 var editFlag = data.editFlag ; 192 var editFlag = data.editFlag ;
  193 + var subottonUrl = serverContextPath+"/grassArticle/updateArticleDraft";
192 if(editFlag == 1){ 194 if(editFlag == 1){
193 var sort = data.sort; 195 var sort = data.sort;
194 $("#draftBotton").hide(); 196 $("#draftBotton").hide();
@@ -198,6 +200,9 @@ @@ -198,6 +200,9 @@
198 }else if(sort == 3){ //H5跳转链接 隐藏正文 200 }else if(sort == 3){ //H5跳转链接 隐藏正文
199 $("#contentTR").hide(); 201 $("#contentTR").hide();
200 } 202 }
  203 +
  204 + $("#operateType").val(1);
  205 + subottonUrl = serverContextPath+"/grassArticle/updateArticle";
201 } 206 }
202 207
203 UE.delEditor("content"); 208 UE.delEditor("content");
@@ -496,7 +501,7 @@ @@ -496,7 +501,7 @@
496 width:200, 501 width:200,
497 onClick: function () { 502 onClick: function () {
498 $("#publishArticleForm").form("submit",{ 503 $("#publishArticleForm").form("submit",{
499 - url : serverContextPath+"/grassArticle/updateArticleDraft", 504 + url : subottonUrl,
500 onSubmit : function(param) { 505 onSubmit : function(param) {
501 debugger; 506 debugger;
502 if (!$("#publishArticleForm").form("validate")) { 507 if (!$("#publishArticleForm").form("validate")) {